@ashlr/hub 3.5.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/README.md +3 -0
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/activation.d.ts +41 -0
  5. package/dist/cli/activation.js +485 -0
  6. package/dist/cli/activation.js.map +1 -0
  7. package/dist/core/daemon/cutoff-checkpoint-scheduler.js +7 -0
  8. package/dist/core/daemon/cutoff-checkpoint-scheduler.js.map +1 -1
  9. package/dist/core/daemon/loop.d.ts +19 -0
  10. package/dist/core/daemon/loop.js +235 -5
  11. package/dist/core/daemon/loop.js.map +1 -1
  12. package/dist/core/daemon/overnight-status.d.ts +152 -0
  13. package/dist/core/daemon/overnight-status.js +275 -0
  14. package/dist/core/daemon/overnight-status.js.map +1 -0
  15. package/dist/core/daemon/post-merge-halt.d.ts +212 -0
  16. package/dist/core/daemon/post-merge-halt.js +503 -0
  17. package/dist/core/daemon/post-merge-halt.js.map +1 -0
  18. package/dist/core/daemon/run-window.d.ts +218 -0
  19. package/dist/core/daemon/run-window.js +420 -0
  20. package/dist/core/daemon/run-window.js.map +1 -0
  21. package/dist/core/fleet/external-skill-audit.js +1 -1
  22. package/dist/core/fleet/external-skill-audit.js.map +1 -1
  23. package/dist/core/fleet/generated-repair-resolution.d.ts +36 -0
  24. package/dist/core/fleet/generated-repair-resolution.js +245 -0
  25. package/dist/core/fleet/generated-repair-resolution.js.map +1 -0
  26. package/dist/core/local-runtime/llama/config.d.ts +28 -6
  27. package/dist/core/local-runtime/llama/config.js +28 -6
  28. package/dist/core/local-runtime/llama/config.js.map +1 -1
  29. package/dist/core/local-runtime/llama/port.d.ts +17 -0
  30. package/dist/core/local-runtime/llama/port.js +47 -0
  31. package/dist/core/local-runtime/llama/port.js.map +1 -0
  32. package/dist/core/local-runtime/llama/proxy-host.d.ts +54 -0
  33. package/dist/core/local-runtime/llama/proxy-host.js +159 -0
  34. package/dist/core/local-runtime/llama/proxy-host.js.map +1 -0
  35. package/dist/core/local-runtime/llama/proxy-process.d.ts +148 -0
  36. package/dist/core/local-runtime/llama/proxy-process.js +250 -0
  37. package/dist/core/local-runtime/llama/proxy-process.js.map +1 -0
  38. package/dist/core/local-runtime/llama/proxy-record.d.ts +40 -0
  39. package/dist/core/local-runtime/llama/proxy-record.js +133 -0
  40. package/dist/core/local-runtime/llama/proxy-record.js.map +1 -0
  41. package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +118 -0
  42. package/dist/core/local-runtime/llama/proxy-supervisor.js +511 -0
  43. package/dist/core/local-runtime/llama/proxy-supervisor.js.map +1 -0
  44. package/dist/core/web/public/next/assets/App-Cgi6j1Gk.css +1 -0
  45. package/dist/core/web/public/next/assets/App-vtaHB9mp.js +7 -0
  46. package/dist/core/web/public/next/assets/App-vtaHB9mp.js.map +1 -0
  47. package/dist/core/web/public/next/assets/ApprovalsSection-B-bFJ0I9.js +2 -0
  48. package/dist/core/web/public/next/assets/ApprovalsSection-B-bFJ0I9.js.map +1 -0
  49. package/dist/core/web/public/next/assets/ApprovalsSection-Su-NUTis.css +1 -0
  50. package/dist/core/web/public/next/assets/AutonomySection-CHjxJt2z.css +1 -0
  51. package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js +2 -0
  52. package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js.map +1 -0
  53. package/dist/core/web/public/next/assets/ChatSection-BfnLe5dT.css +1 -0
  54. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js +80 -0
  55. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js.map +1 -0
  56. package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js +2 -0
  57. package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js.map +1 -0
  58. package/dist/core/web/public/next/assets/{ConfirmDialog-cYuivhCX.css → ConfirmDialog-Dx15x0Ho.css} +1 -1
  59. package/dist/core/web/public/next/assets/Dialog-CPM9JxBc.js +2 -0
  60. package/dist/core/web/public/next/assets/Dialog-CPM9JxBc.js.map +1 -0
  61. package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
  62. package/dist/core/web/public/next/assets/DiffViewer-B84qVef9.js +7 -0
  63. package/dist/core/web/public/next/assets/DiffViewer-B84qVef9.js.map +1 -0
  64. package/dist/core/web/public/next/assets/DiffViewer-C8HHTnVE.css +1 -0
  65. package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js +2 -0
  66. package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js.map +1 -0
  67. package/dist/core/web/public/next/assets/McpSection-D88QlDpG.css +1 -0
  68. package/dist/core/web/public/next/assets/Meter--h3MmZS-.js +2 -0
  69. package/dist/core/web/public/next/assets/Meter--h3MmZS-.js.map +1 -0
  70. package/dist/core/web/public/next/assets/Meter-CLcr-4wS.css +1 -0
  71. package/dist/core/web/public/next/assets/{MutationTokenDialog-jWLLCxWn.css → MutationTokenDialog-CrfJ0PdD.css} +1 -1
  72. package/dist/core/web/public/next/assets/MutationTokenDialog-DA8t97XT.js +2 -0
  73. package/dist/core/web/public/next/assets/MutationTokenDialog-DA8t97XT.js.map +1 -0
  74. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Bq7Vyud0.js +7 -0
  75. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Bq7Vyud0.js.map +1 -0
  76. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CM_8pJs6.css +1 -0
  77. package/dist/core/web/public/next/assets/RouteErrorBoundary-Badio_uO.js +2 -0
  78. package/dist/core/web/public/next/assets/RouteErrorBoundary-Badio_uO.js.map +1 -0
  79. package/dist/core/web/public/next/assets/RouteErrorBoundary-ekyMXAK8.css +1 -0
  80. package/dist/core/web/public/next/assets/SettingsSection-BII7TTSD.css +1 -0
  81. package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js +2 -0
  82. package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js.map +1 -0
  83. package/dist/core/web/public/next/assets/UniverseConsoleApp-Dh7A-hLD.css +1 -0
  84. package/dist/core/web/public/next/assets/UniverseConsoleApp-_FSohAdN.js +2 -0
  85. package/dist/core/web/public/next/assets/UniverseConsoleApp-_FSohAdN.js.map +1 -0
  86. package/dist/core/web/public/next/assets/UniverseView-Bqa8DH57.css +1 -0
  87. package/dist/core/web/public/next/assets/UniverseView-DqcXbed4.js +9 -0
  88. package/dist/core/web/public/next/assets/UniverseView-DqcXbed4.js.map +1 -0
  89. package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js +2 -0
  90. package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js.map +1 -0
  91. package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +1 -0
  92. package/dist/core/web/public/next/assets/VerseConsoleApp-CMkCizvL.css +1 -0
  93. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js +3 -0
  94. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js.map +1 -0
  95. package/dist/core/web/public/next/assets/charts-CTZJ-JrH.js +2 -0
  96. package/dist/core/web/public/next/assets/charts-CTZJ-JrH.js.map +1 -0
  97. package/dist/core/web/public/next/assets/charts-CsrtT4rk.css +1 -0
  98. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +2 -0
  99. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +1 -0
  100. package/dist/core/web/public/next/assets/format-BNYWGJat.js +2 -0
  101. package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +1 -0
  102. package/dist/core/web/public/next/assets/global-D6bTxIRn.js +2 -0
  103. package/dist/core/web/public/next/assets/global-D6bTxIRn.js.map +1 -0
  104. package/dist/core/web/public/next/assets/global-z-JfD3ow.css +1 -0
  105. package/dist/core/web/public/next/assets/icons-D9vlf85u.js +2 -0
  106. package/dist/core/web/public/next/assets/icons-D9vlf85u.js.map +1 -0
  107. package/dist/core/web/public/next/assets/index-CZamKRUg.js +11 -0
  108. package/dist/core/web/public/next/assets/index-CZamKRUg.js.map +1 -0
  109. package/dist/core/web/public/next/assets/queries-B8eBnFox.js +2 -0
  110. package/dist/core/web/public/next/assets/queries-B8eBnFox.js.map +1 -0
  111. package/dist/core/web/public/next/assets/use-guarded-action-bzrVVAYq.js +2 -0
  112. package/dist/core/web/public/next/assets/use-guarded-action-bzrVVAYq.js.map +1 -0
  113. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js +2 -0
  114. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js.map +1 -0
  115. package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js +2 -0
  116. package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js.map +1 -0
  117. package/dist/core/web/public/next/index.html +1 -1
  118. package/dist/release-dependency-inventory.json +1 -1
  119. package/node_modules/marked/README.md +8 -0
  120. package/node_modules/marked/bin/main.js +12 -11
  121. package/node_modules/marked/lib/marked.d.ts +88 -25
  122. package/node_modules/marked/lib/marked.esm.js +50 -44
  123. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  124. package/node_modules/marked/lib/marked.umd.js +50 -44
  125. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  126. package/node_modules/marked/man/marked.1 +1 -1
  127. package/node_modules/marked/package.json +21 -21
  128. package/package.json +13 -8
  129. package/dist/core/web/public/next/assets/App-BCKqSppK.css +0 -1
  130. package/dist/core/web/public/next/assets/App-CsbPYQqy.js +0 -16
  131. package/dist/core/web/public/next/assets/App-CsbPYQqy.js.map +0 -1
  132. package/dist/core/web/public/next/assets/ApprovalsSection-CBZquyLK.js +0 -2
  133. package/dist/core/web/public/next/assets/ApprovalsSection-CBZquyLK.js.map +0 -1
  134. package/dist/core/web/public/next/assets/ApprovalsSection-CRP59wSb.css +0 -1
  135. package/dist/core/web/public/next/assets/AutonomySection-CQVpEdCE.js +0 -2
  136. package/dist/core/web/public/next/assets/AutonomySection-CQVpEdCE.js.map +0 -1
  137. package/dist/core/web/public/next/assets/AutonomySection-DTN6m6QE.css +0 -1
  138. package/dist/core/web/public/next/assets/ChatSection-DiRvNX3Q.css +0 -1
  139. package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js +0 -77
  140. package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js.map +0 -1
  141. package/dist/core/web/public/next/assets/ConfirmDialog-deO0C0iY.js +0 -2
  142. package/dist/core/web/public/next/assets/ConfirmDialog-deO0C0iY.js.map +0 -1
  143. package/dist/core/web/public/next/assets/Dialog-CNd7q89m.js +0 -2
  144. package/dist/core/web/public/next/assets/Dialog-CNd7q89m.js.map +0 -1
  145. package/dist/core/web/public/next/assets/Dialog-DxN7RgB5.css +0 -1
  146. package/dist/core/web/public/next/assets/DiffViewer-DTO0KRuG.js +0 -7
  147. package/dist/core/web/public/next/assets/DiffViewer-DTO0KRuG.js.map +0 -1
  148. package/dist/core/web/public/next/assets/DiffViewer-hN7X6wGT.css +0 -1
  149. package/dist/core/web/public/next/assets/Epistemic-53PikaUI.js +0 -2
  150. package/dist/core/web/public/next/assets/Epistemic-53PikaUI.js.map +0 -1
  151. package/dist/core/web/public/next/assets/Epistemic-DiyMyeaN.css +0 -1
  152. package/dist/core/web/public/next/assets/Meter-CGBsbXUX.css +0 -1
  153. package/dist/core/web/public/next/assets/Meter-DRWZQgr1.js +0 -2
  154. package/dist/core/web/public/next/assets/Meter-DRWZQgr1.js.map +0 -1
  155. package/dist/core/web/public/next/assets/MutationTokenDialog-DYF8n_RD.js +0 -2
  156. package/dist/core/web/public/next/assets/MutationTokenDialog-DYF8n_RD.js.map +0 -1
  157. package/dist/core/web/public/next/assets/RefreshIndicator-DXJQXKyA.js +0 -2
  158. package/dist/core/web/public/next/assets/RefreshIndicator-DXJQXKyA.js.map +0 -1
  159. package/dist/core/web/public/next/assets/RefreshIndicator-O7jUBOmX.css +0 -1
  160. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-DLl4DbGG.css +0 -1
  161. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-hDSEFdLU.js +0 -7
  162. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-hDSEFdLU.js.map +0 -1
  163. package/dist/core/web/public/next/assets/RouteErrorBoundary-BIpdnxp-.css +0 -1
  164. package/dist/core/web/public/next/assets/RouteErrorBoundary-CZd7ln8v.js +0 -2
  165. package/dist/core/web/public/next/assets/RouteErrorBoundary-CZd7ln8v.js.map +0 -1
  166. package/dist/core/web/public/next/assets/SettingsSection-C9Qs9JWW.js +0 -2
  167. package/dist/core/web/public/next/assets/SettingsSection-C9Qs9JWW.js.map +0 -1
  168. package/dist/core/web/public/next/assets/SettingsSection-DGJMdUh2.css +0 -1
  169. package/dist/core/web/public/next/assets/Skeleton-D2JaTXyv.css +0 -1
  170. package/dist/core/web/public/next/assets/Skeleton-YkcOpgFb.js +0 -2
  171. package/dist/core/web/public/next/assets/Skeleton-YkcOpgFb.js.map +0 -1
  172. package/dist/core/web/public/next/assets/StatusBadge-DJw0LSPg.js +0 -2
  173. package/dist/core/web/public/next/assets/StatusBadge-DJw0LSPg.js.map +0 -1
  174. package/dist/core/web/public/next/assets/StatusBadge-TpDqZf6K.css +0 -1
  175. package/dist/core/web/public/next/assets/TableView-Bj-w1O6o.js +0 -2
  176. package/dist/core/web/public/next/assets/TableView-Bj-w1O6o.js.map +0 -1
  177. package/dist/core/web/public/next/assets/TableView-R6Yeztp1.css +0 -1
  178. package/dist/core/web/public/next/assets/UniverseConsoleApp-Bs2fxaen.js +0 -2
  179. package/dist/core/web/public/next/assets/UniverseConsoleApp-Bs2fxaen.js.map +0 -1
  180. package/dist/core/web/public/next/assets/UniverseConsoleApp-CiZZxRPV.css +0 -1
  181. package/dist/core/web/public/next/assets/UniverseView-B6b2hw-8.js +0 -9
  182. package/dist/core/web/public/next/assets/UniverseView-B6b2hw-8.js.map +0 -1
  183. package/dist/core/web/public/next/assets/UniverseView-gBxl6yum.css +0 -1
  184. package/dist/core/web/public/next/assets/UsageSection-C__ziNkV.js +0 -2
  185. package/dist/core/web/public/next/assets/UsageSection-C__ziNkV.js.map +0 -1
  186. package/dist/core/web/public/next/assets/UsageSection-UUYDidOg.css +0 -1
  187. package/dist/core/web/public/next/assets/VerseConsoleApp-Cu5aG6J6.js +0 -3
  188. package/dist/core/web/public/next/assets/VerseConsoleApp-Cu5aG6J6.js.map +0 -1
  189. package/dist/core/web/public/next/assets/VerseConsoleApp-mOAXvWa6.css +0 -1
  190. package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js +0 -2
  191. package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js.map +0 -1
  192. package/dist/core/web/public/next/assets/format-fggwu_Rs.js +0 -2
  193. package/dist/core/web/public/next/assets/format-fggwu_Rs.js.map +0 -1
  194. package/dist/core/web/public/next/assets/global-BHjd6fVZ.js +0 -2
  195. package/dist/core/web/public/next/assets/global-BHjd6fVZ.js.map +0 -1
  196. package/dist/core/web/public/next/assets/global-BeRYd1Bu.css +0 -1
  197. package/dist/core/web/public/next/assets/index-CJ-e8YA9.js +0 -2
  198. package/dist/core/web/public/next/assets/index-CJ-e8YA9.js.map +0 -1
  199. package/dist/core/web/public/next/assets/index-CpgkRaTi.js +0 -51
  200. package/dist/core/web/public/next/assets/index-CpgkRaTi.js.map +0 -1
  201. package/dist/core/web/public/next/assets/queries-856qUN3Y.js +0 -2
  202. package/dist/core/web/public/next/assets/queries-856qUN3Y.js.map +0 -1
  203. package/dist/core/web/public/next/assets/use-guarded-action-Bqa2v0a-.css +0 -1
  204. package/dist/core/web/public/next/assets/use-guarded-action-DwaESKVy.js +0 -2
  205. package/dist/core/web/public/next/assets/use-guarded-action-DwaESKVy.js.map +0 -1
  206. package/dist/core/web/public/next/assets/verse-model-Dllo8rRt.js +0 -2
  207. package/dist/core/web/public/next/assets/verse-model-Dllo8rRt.js.map +0 -1
  208. package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js +0 -2
  209. package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js.map +0 -1
  210. /package/node_modules/marked/{LICENSE.md → LICENSE} +0 -0
@@ -0,0 +1 @@
1
+ ._view_1an5o_3{gap:var(--space-5);grid-template-columns:minmax(0,1fr);min-width:0;display:grid}._view_1an5o_3>*{min-width:0}._statusBar_1an5o_5{justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-5);padding-bottom:var(--space-3);border-bottom:1px solid var(--border-default);flex-wrap:wrap;min-width:0;display:flex}._sectionNav_1an5o_6{align-items:center;gap:var(--space-1);flex-wrap:wrap;display:flex}._sectionNav_1an5o_6 a{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);align-items:center;text-decoration:none;display:inline-flex}._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{gap:var(--space-4);min-width:0;scroll-margin-top:var(--space-5);display:grid}._detailHeading_1an5o_11{justify-content:space-between;align-items:baseline;gap:var(--space-2) var(--space-5);padding-top:var(--space-5);border-top:1px solid var(--border-default);flex-wrap:wrap;display:flex}._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{border-collapse:collapse;width:100%;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{font-size:var(--text-xs-size);color:var(--text-secondary);margin-top:var(--space-1);font-weight:var(--font-weight-normal);overflow-wrap:anywhere;display:block}._performanceWorker_1an5o_26{color:var(--text-link);text-align:left;overflow-wrap:anywhere;min-height:30px}._performanceWorker_1an5o_26:hover{text-decoration:underline}._pageHeading_1an5o_28{justify-content:space-between;align-items:flex-start;gap:var(--space-4);display:flex}._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{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}._primaryButton_1an5o_32,._secondaryButton_1an5o_32{border-radius:var(--radius-sm);min-height:38px;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{gap:var(--space-2) var(--space-4);color:var(--text-secondary);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex-wrap:wrap;min-width:0;display:flex}._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{gap:var(--space-4);padding:var(--space-6);display:grid}._supervisor_1an5o_45{gap:var(--space-3);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);flex-wrap:wrap;justify-content:space-between;align-items:center;min-width:0;display:flex}._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{border-top:1px solid var(--border-default);min-width:0;padding-top:var(--space-3);gap:var(--space-2);flex-basis:100%;display:grid}._ownedHeading_1an5o_49{align-items:baseline;gap:var(--space-1) var(--space-3);flex-wrap:wrap;display:flex}._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{gap:var(--space-2);grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));display:grid}._ownedTask_1an5o_52{gap:var(--space-1) var(--space-2);text-align:left;width:100%;min-height:48px;padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}._ownedTask_1an5o_52 strong{font-size:var(--text-sm-size);overflow-wrap:anywhere}._ownedTask_1an5o_52>span:nth-child(2){font-size:var(--text-xs-size);color:var(--text-secondary);overflow-wrap:anywhere;grid-column:1}._ownedTask_1an5o_52>span:last-child{grid-area:1/2/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{color:var(--text-link);font-size:var(--text-sm-size);justify-self:start;min-height:32px}._workspaceGrid_1an5o_14{gap:var(--space-5);min-width:0;scroll-margin-top:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(310px,360px);align-items:start;display:grid}._mainColumn_1an5o_61{gap:var(--space-5);min-width:0;display:grid}._sideColumn_1an5o_62{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);scrollbar-gutter:stable;min-width:0;position:sticky;overflow:auto}._tabs_1an5o_63{border-bottom:1px solid var(--border-default);grid-template-columns:1fr 1fr;display:grid}._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);min-width:0;overflow:hidden}._sectionHeading_1an5o_30{justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:var(--space-5);display:flex}._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{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-block:1px solid var(--border-default);background:var(--bg-selected);flex-wrap:wrap;display:flex}._preview_1an5o_70 small{color:var(--text-secondary);font-size:var(--text-xs-size);margin-left:auto}._routeDot_1an5o_72{border-radius:var(--radius-full);background:var(--accent-500);flex-shrink:0;width:8px;height:8px}._capacityLane_1an5o_73{padding:var(--space-5);border-bottom:1px solid var(--border-subtle);gap:var(--space-6);grid-template-columns:minmax(145px,.7fr) minmax(0,1.6fr);align-items:center;display:grid}._capacitySource_1an5o_74{min-width:0;position:relative}._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{border:1px solid var(--border-strong);border-radius:var(--radius-sm);width:30px;height:30px;color:var(--text-link);margin-bottom:var(--space-2);font-size:var(--text-xl-size);justify-content:center;align-items:center;display:inline-flex}._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{gap:var(--space-3);min-width:0;display:grid;position:relative}._workerLanes_1an5o_79:before{content:"";left:calc(-1 * var(--space-3));width:var(--space-3);border-top:2px solid var(--border-strong);position:absolute;top:50%}._workerLane_1an5o_79{min-width:0;position:relative}._workerLane_1an5o_79:before{content:"";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;position:absolute}._workerLane_1an5o_79:first-child:before{height:calc(50% + var(--space-3));top:50%}._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:"";left:calc(-1 * var(--space-3));width:var(--space-3);border-top:2px solid var(--border-strong);pointer-events:none;position:absolute;top:50%}._workerButton_1an5o_87{text-align:left;gap:var(--space-1);width:100%;padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas);min-width:0;display:grid}._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{justify-content:space-between;align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}._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{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin-top:var(--space-1);display:block}._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);gap:var(--space-4);display:grid}._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{gap:var(--space-3);font-size:var(--text-sm-size);margin:0;display:grid}._facts_1an5o_104>div{gap:var(--space-3);grid-template-columns:minmax(110px,.9fr) minmax(0,1.1fr);display:grid}._facts_1an5o_104 dt{color:var(--text-secondary)}._facts_1an5o_104 dd{overflow-wrap:anywhere;margin:0}._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{padding-left:var(--space-4);color:var(--status-warning-fg);font-size:var(--text-sm-size);list-style:outside}._reasonList_1an5o_109 li+li{margin-top:var(--space-1)}._quotaEvidence_1an5o_111,._windows_1an5o_112{gap:var(--space-4);display:grid}._windowTitle_1an5o_113{align-items:baseline;gap:var(--space-1) var(--space-2);font-size:var(--text-xs-size);flex-wrap:wrap;justify-content:space-between;display:flex}._windowTitle_1an5o_113 strong{font-weight:var(--font-weight-semibold);overflow-wrap:anywhere}._meter_1an5o_115{width:100%;height:10px;margin-top:var(--space-2);accent-color:var(--accent-500);display:block}._meter_1an5o_115::-webkit-meter-bar{background:var(--bg-active);border-radius:var(--radius-xs);border:0}._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{color:var(--text-primary);overflow-wrap:anywhere;margin-top:var(--space-1);display:block}._composer_1an5o_122{gap:var(--space-4);display:grid}._composer_1an5o_122 label{gap:var(--space-2);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);display:grid}._composer_1an5o_122 input,._composer_1an5o_122 textarea,._composer_1an5o_122 select,._filter_1an5o_124 select{border:1px solid var(--border-strong);border-radius:var(--radius-sm);width:100%;min-width:0;min-height:38px;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);min-width:0;margin: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{gap:var(--space-2);margin-top:var(--space-3);display:grid}._workerChoices_1an5o_128 label{align-items:center;gap:var(--space-2);overflow-wrap:anywhere;display:flex}._workerChoices_1an5o_128 input{width:16px;height:16px;min-height:16px;accent-color:var(--accent-600);flex-shrink:0}._fieldPair_1an5o_131{gap:var(--space-3);grid-template-columns:1fr 1fr;display:grid}._filter_1an5o_124{gap:var(--space-1);font-size:var(--text-xs-size);min-width:130px;display:grid}._taskRows_1an5o_133{display:grid}._taskRow_1an5o_88{text-align:left;align-items:center;gap:var(--space-3);border:1px solid #0000;border-top-color:var(--border-subtle);padding:var(--space-3) var(--space-5);grid-template-columns:minmax(0,1fr) minmax(100px,.6fr) auto;width:100%;display:grid}._taskRow_1an5o_88 strong,._taskWorker_1an5o_135{overflow-wrap:anywhere;font-size:var(--text-sm-size)}._taskRow_1an5o_88 small{color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1);display:block}._taskWorker_1an5o_135{color:var(--text-secondary)}._empty_1an5o_138{padding:var(--space-6);gap:var(--space-2);display:grid}._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{gap:var(--space-2);padding:var(--space-4) var(--space-1);overflow-wrap:anywhere;min-width:0;display:grid}._accounting_1an5o_141 h2{font-family:var(--font-display,var(--font-ui));font-size:var(--text-lg-size)}._outputSection_1an5o_143{gap:var(--space-3);display:grid}._output_1an5o_143{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bg-code);border:1px solid var(--border-default);border-radius:var(--radius-sm);max-height:440px;padding:var(--space-3);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin:0;overflow:auto}@media (max-width:1100px){._workspaceGrid_1an5o_14{gap:var(--space-4);grid-template-columns:minmax(0,1fr)}._sideColumn_1an5o_62{scrollbar-gutter:auto;max-height:none;position:static}._capacityLane_1an5o_73{padding:var(--space-4);gap:var(--space-4);grid-template-columns:130px minmax(0,1fr)}._preview_1an5o_70 small{flex-basis:100%;margin-left:0}}@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{gap:var(--space-4);grid-template-columns:1fr}._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{padding:var(--space-3);grid-template-columns:minmax(0,1fr) auto}._taskWorker_1an5o_135{grid-area:2/1}._taskRow_1an5o_88>span:last-child{grid-area:1/2/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)}._headerActions_1an5o_31{width:100%}._headerActions_1an5o_31 button{flex:auto}._sectionNav_1an5o_6{justify-content:space-between;width:100%}._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{margin:var(--space-3) var(--space-4) 0;padding:var(--space-2);color:var(--accent-600);border-radius:var(--radius-xs);font:inherit;font-size:var(--text-sm-size);cursor:pointer;background:0 0;border:0;align-self:flex-start}._returnToMap_1an5o_149:hover{text-decoration:underline}._returnToMap_1an5o_149:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}._collectorNotice_1an5o_152{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);overflow-wrap:anywhere;min-width:0;display:grid}._collectorNotice_1an5o_152 p{max-width:78ch;font-size:var(--text-sm-size);color:var(--text-secondary);margin:0}._recoveryDetail_1an5o_154{gap:var(--space-2);min-width:0;max-width:78ch;display:grid}._recoveryDetail_1an5o_154 h3{color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-base-size);line-height:var(--text-base-line);margin:0}._recoveryDetail_1an5o_154 summary{width:-moz-fit-content;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{justify-content:space-between;align-items:start;gap:var(--space-4);padding:var(--space-4) var(--space-5);display:flex}._heading_13cxn_2 h2{font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold);margin:0}._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{margin:0;padding:0;list-style:none}._account_13cxn_7{gap:var(--space-5);padding:var(--space-5);border-top:1px solid var(--border-subtle);grid-template-columns:minmax(200px,1fr) minmax(260px,1.7fr) minmax(160px,.75fr);display:grid}._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{margin-top:var(--space-3);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);display:block}._caption_13cxn_13{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin-bottom:var(--space-2);display:block}._badges_13cxn_14{gap:var(--space-2);flex-wrap:wrap;display:flex}._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{justify-content:space-between;align-items:baseline;gap:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere;flex-wrap:wrap;display:flex}._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{margin-top:var(--space-2);position:relative}._meter_13cxn_21{width:100%;height:16px;accent-color:var(--accent-500);margin:0;display:block}._meter_13cxn_21::-webkit-meter-bar{background:var(--bg-active);border-radius:var(--radius-xs);border:0}._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{pointer-events:none;background:repeating-linear-gradient(135deg, transparent, transparent 3px, var(--border-strong) 3px, var(--border-strong) 4px);opacity:.65;position:absolute;top:3px;bottom:3px}._referenceTick_13cxn_32{border-left:2px solid var(--text-primary);pointer-events:none;position:absolute;top:0;bottom:0;transform:translate(-1px)}._referenceLegend_13cxn_33{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);flex-wrap:wrap;display:flex}._referenceLegend_13cxn_33 strong{font-weight:var(--font-weight-medium);color:var(--text-primary)}._legendTick_13cxn_35{border-left:2px solid var(--text-primary);height:14px}._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);padding:var(--space-3) var(--space-5);background:var(--bg-canvas);margin:0}._empty_13cxn_4{padding:0 var(--space-5) var(--space-3)}@media (max-width:1050px){._account_13cxn_7{gap:var(--space-4);grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}._freshness_13cxn_41{grid-column:1/-1}._freshness_13cxn_41 dl{gap:var(--space-5);display:flex}._freshness_13cxn_41 dl>div+div{margin-top:0}}@media (max-width:540px){._heading_13cxn_2{gap:var(--space-2);flex-direction:column}._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{justify-content:space-between;gap:var(--space-4);display:flex}._heading_tq0rj_2 h2{font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold);margin:0}._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{align-content:start;gap:var(--space-1);text-align:right;display:grid}._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{align-items:center;gap:var(--space-5);margin-top:var(--space-5);display:flex}._sliderArea_tq0rj_10{flex:1;min-width:180px}._sliderHeading_tq0rj_11{justify-content:space-between;gap:var(--space-3);font-size:var(--text-sm-size);display:flex}._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{width:100%;margin:var(--space-2) 0;min-height:28px;accent-color:var(--accent-500);display:block}._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{font-size:var(--text-xs-size);color:var(--text-secondary);justify-content:space-between;display:flex}._remainder_tq0rj_17{gap:var(--space-1);border-left:1px solid var(--border-default);padding-left:var(--space-5);display:grid}._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{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:36px;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{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);display:flex}._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;flex:1;padding:0}}@media (max-width:540px){._conflict_tq0rj_4{flex-direction:column;align-items:start}._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{justify-content:space-between;gap:var(--space-3) var(--space-5);flex-wrap:wrap;display:flex}._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{color:var(--text-secondary);margin-top:var(--space-1);font-size:var(--text-xs-size);display:block}._workers_thwgk_8{margin-top:var(--space-4);border-block:1px solid var(--border-default)}._worker_thwgk_8{align-items:center;gap:var(--space-3);min-height:68px;padding:var(--space-3) 0;grid-template-columns:auto minmax(0,1fr) minmax(120px,auto);display:grid}._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{overflow-wrap:anywhere;min-width:0}._identity_thwgk_13 strong{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._identity_thwgk_13 small{color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1);display:block}._state_thwgk_16{font-size:var(--text-xs-size);color:var(--text-secondary);text-align:right;overflow-wrap:anywhere}._effective_thwgk_17{max-width:40ch;font-weight:var(--font-weight-medium);color:var(--status-warning-fg);margin-top:var(--space-1);display:block}._actions_thwgk_18{justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-3);flex-wrap:wrap;display:flex}._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{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:38px;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{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);flex-wrap:wrap;display:flex}@media (max-width:600px){._saved_thwgk_6{text-align:left}._worker_thwgk_8{gap:var(--space-2) var(--space-3);grid-template-columns:auto minmax(0,1fr)}._state_thwgk_16{text-align:left;grid-column:2}._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{justify-content:space-between;gap:var(--space-3) var(--space-5);flex-wrap:wrap;display:flex}._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{color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1);display:block}._rows_sy6n3_8{margin-top:var(--space-4);border-block:1px solid var(--border-default)}._row_sy6n3_8{align-items:center;gap:var(--space-3);padding:var(--space-3) 0;grid-template-columns:auto minmax(0,1fr) minmax(120px,1fr);min-height:68px;display:grid}._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{overflow-wrap:anywhere;min-width:0}._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{font-weight:var(--font-weight-medium);color:var(--status-warning-fg);margin-top:var(--space-1);display:block}._actions_sy6n3_16{justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-3);flex-wrap:wrap;display:flex}._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{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:38px;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{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);flex-wrap:wrap;display:flex}@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{text-align:left;grid-column:2}}._fleetMap_pb3nh_1{--trunk-width:192px;--branch-gap:36px;border:1px solid var(--border-strong);border-radius:var(--radius-lg);background:var(--bg-surface);min-width:0;color:var(--text-primary);overflow:hidden;container-type:inline-size}._header_pb3nh_2{justify-content:space-between;align-items:flex-start;gap:var(--space-6);padding:var(--space-6) var(--space-6) var(--space-4);display:flex}._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{color:var(--text-secondary);max-width:75ch;margin:0;line-height:1.5}._sample_pb3nh_5{justify-items:end;gap:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary);flex-shrink:0;display:grid}._summary_pb3nh_6{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;flex-wrap:wrap;display:flex}._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{padding:var(--space-3) var(--space-6);background:var(--status-unknown-bg);color:var(--status-unknown-fg);font-size:var(--text-sm-size);margin:0;line-height:1.5}._toolbar_pb3nh_9{justify-content:space-between;align-items:end;gap:var(--space-4);padding:var(--space-4) var(--space-6);background:var(--bg-canvas);border-block:1px solid var(--border-default);flex-wrap:wrap;display:flex}._search_pb3nh_10{gap:var(--space-2);flex:260px;min-width:0;max-width:440px;display:grid}._search_pb3nh_10 label{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._search_pb3nh_10 input{box-sizing:border-box;width:100%;min-width:0;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{gap:var(--space-2);font-size:var(--text-xs-size);color:var(--text-secondary);justify-items:end;display:grid}._pager_pb3nh_15{align-items:center;gap:var(--space-2);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}._pager_pb3nh_15 button{border:1px solid var(--border-strong);border-radius:var(--radius-xs);min-height:32px;color:var(--text-primary);background:var(--bg-surface);font:inherit;cursor:pointer;padding:6px 10px}._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{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);display:grid}._topology_pb3nh_20{padding:0 var(--space-6)}._capacityTrunk_pb3nh_21{grid-template-columns:var(--trunk-width) minmax(0, 1fr);column-gap:var(--branch-gap);padding-block:var(--space-5);display:grid;position:relative}._capacityTrunk_pb3nh_21+._capacityTrunk_pb3nh_21{border-top:1px solid var(--border-subtle)}._capacityNode_pb3nh_23{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);align-self:center;position:relative}._capacityNode_pb3nh_23:after{content:"";width:calc(var(--branch-gap) / 2);background:var(--border-strong);height:2px;position:absolute;top:50%;left:100%}._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{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;display:grid}._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{width:100%;height:8px;margin-bottom:var(--space-3);appearance:none;background:var(--border-default);border-radius:var(--radius-full);border:0;display:block}._meter_pb3nh_30::-webkit-meter-bar{background:var(--border-default);border-radius:var(--radius-full);border:0}._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{min-width:0;margin:0;padding:0;list-style:none}._workerBranches_pb3nh_35{align-content:center;gap:var(--space-4);display:grid;position:relative}._workerBranches_pb3nh_35:before{content:"";left:calc(var(--branch-gap) / -2);background:var(--border-strong);width:2px;position:absolute;top:0;bottom:0}._workerBranch_pb3nh_35{gap:var(--branch-gap);grid-template-columns:minmax(0,1fr) minmax(0,1.12fr);align-items:center;min-width:0;display:grid;position:relative}._workerBranch_pb3nh_35:before{content:"";width:calc(var(--branch-gap) / 2);background:var(--border-strong);height:2px;position:absolute;top:50%;right:100%}._workerNode_pb3nh_40,._taskNode_pb3nh_40{align-content:start;gap:var(--space-2);box-sizing:border-box;width:100%;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;display:grid;position:relative}._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:"";width:calc(var(--branch-gap) / 2);border-top:1px solid var(--border-strong);position:absolute;top:50%;left:100%}._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{justify-content:space-between;align-items:flex-start;gap:var(--space-2);flex-wrap:wrap;display:flex}._nodeHeading_pb3nh_47 strong{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;flex:110px}._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{font-size:var(--text-xs-size);overflow-wrap:anywhere;line-height:1.45;display:block}._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{gap:var(--space-2);display:grid;position:relative}._taskList_pb3nh_35:before{content:"";top:0;bottom:0;left:calc(var(--branch-gap) / -2);border-left:1px solid var(--border-strong);position:absolute}._taskList_pb3nh_35>li{min-width:0;position:relative}._connectedTask_pb3nh_60:before{content:"";width:calc(var(--branch-gap) / 2);border-top:1px solid var(--border-strong);position:absolute;top:50%;right:100%}._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{padding:var(--space-4);border-left:1px dashed var(--border-strong);color:var(--text-secondary);font-size:var(--text-sm-size);margin:0;line-height:1.5}._noAssignment_pb3nh_67 span{margin-top:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary);display:block}._assignmentFooter_pb3nh_69{justify-items:start;gap:var(--space-2);margin-top:var(--space-2);color:var(--text-secondary);font-size:var(--text-xs-size);display:grid}._empty_pb3nh_70{padding:var(--space-8) 0;color:var(--text-secondary);font-size:var(--text-sm-size);margin:0;line-height:1.5}._selectionPath_pb3nh_71{padding:var(--space-3) var(--space-6);background:var(--bg-selected);color:var(--text-link);font-size:var(--text-xs-size);overflow-wrap:anywhere;margin:0;line-height:1.5}._queueState_pb3nh_72{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);flex-wrap:wrap;display:flex}._queueState_pb3nh_72 p{color:var(--text-secondary);margin:0}._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{justify-content:space-between;align-items:start;gap:var(--space-4);display:flex}._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{margin-left:var(--space-2);border-radius:var(--radius-xs);background:var(--bg-hover);color:var(--text-secondary);font-size:var(--text-sm-size);font-variant-numeric:tabular-nums;padding:0 7px;display:inline-block}._railHeader_pb3nh_4 p{font-size:var(--text-xs-size)}._railTasks_pb3nh_35{gap:var(--space-3);margin-top:var(--space-3);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}._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{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;display:grid}@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{gap:var(--space-3);grid-template-columns:minmax(0,1fr);align-items:start}._workerBranch_pb3nh_35:before{top:44px}._assignments_pb3nh_56{padding-left:var(--space-4)}._assignedWorker_pb3nh_43:after{height:var(--space-3);border-left:1px solid var(--border-strong);border-top:0;width:0;top:100%;left: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{overflow-wrap:anywhere;flex-shrink:1;max-width:100%}._capacityTrunk_pb3nh_21{gap:var(--space-4);grid-template-columns:minmax(0,1fr)}._capacityNode_pb3nh_23{margin-right:var(--space-5)}._capacityNode_pb3nh_23:after{left:var(--space-4);height:var(--space-4);width:2px;top:100%}._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{scroll-behavior:auto;transition:none;animation:none}}._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 (width<=780px){._header_pb3nh_2{gap:var(--space-3);flex-wrap:wrap}._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{gap:var(--space-3);grid-template-columns:minmax(0,1fr);align-items:start}._workerBranch_pb3nh_35:before{top:44px}._assignments_pb3nh_56{padding-left:var(--space-4)}._assignedWorker_pb3nh_43:after{height:var(--space-3);border-left:1px solid var(--border-strong);border-top:0;width:0;top:100%;left: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 (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{gap:var(--space-4);grid-template-columns:minmax(0,1fr)}._capacityNode_pb3nh_23{margin-right:var(--space-5);padding:var(--space-4)}._capacityNode_pb3nh_23:after{left:var(--space-4);height:var(--space-4);width:2px;top:100%}._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{grid-template-columns:192px minmax(0, 1fr) 8px var(--workspace-dock-width,320px);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);min-width:0;height:clamp(600px,100dvh - 180px,1100px);min-height:600px;color:var(--text-primary);font-family:var(--font-ui);display:grid;overflow:hidden}._workspace_trmiy_1>*{min-width:0}._fileBrowse_trmiy_3{gap:var(--space-2);margin-block:var(--space-4);flex-wrap:wrap;display:flex}._fileBrowse_trmiy_3 label{font-size:var(--text-xs-size);flex:180px}._fileBrowse_trmiy_3 input{box-sizing:border-box;width:100%;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);display:block}._fileHeading_trmiy_6{align-items:center;gap:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere;flex-wrap:wrap;display:flex}._fileList_trmiy_7{max-height:280px;padding:0;list-style:none;overflow-y:auto}._fileList_trmiy_7 button{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:0 0;display:flex}._fileList_trmiy_7 button:hover{background:var(--bg-hover)}._fileList_trmiy_7 button>span:nth-child(2){overflow-wrap:anywhere;flex:1;min-width:0}._fileList_trmiy_7 small{color:var(--text-tertiary);font-size:var(--text-xs-size);flex-shrink:0}._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);tab-size:2;white-space:pre-wrap;overflow-wrap:anywhere;max-height:420px;padding:var(--space-3);border:1px solid var(--border-default);background:var(--bg-surface);border-radius:var(--radius-sm);unicode-bidi:plaintext;line-height:1.65;overflow:auto}._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{gap:var(--space-2);flex-wrap:wrap;display:flex}._followUp_trmiy_17{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;flex-wrap:wrap;display:flex}._followUp_trmiy_17>div{flex: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{align-items:flex-start;gap:var(--space-2);margin-top:var(--space-3);font-size:var(--text-sm-size);color:var(--text-secondary);display:flex}._retention_trmiy_24 input{flex:none;margin-top:3px}._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{min-width:0;min-height:0;padding:var(--space-5) var(--space-3);background:var(--bg-canvas);border-right:1px solid var(--border-subtle);scrollbar-gutter:stable;flex-direction:column;display:flex;overflow-y:auto}._project_trmiy_31{gap:var(--space-2);align-items:center;display:flex}._projectList_trmiy_32{gap:var(--space-1);scrollbar-gutter:stable;max-height:220px;margin-bottom:var(--space-5);padding-bottom:var(--space-4);border-bottom:1px solid var(--border-subtle);flex-direction:column;flex-shrink:0;display:flex;overflow-y:auto}._projectList_trmiy_32 h3{font-size:var(--text-xs-size);color:var(--text-tertiary);margin:0 0 var(--space-2)}._projectList_trmiy_32 button{gap:var(--space-1);text-align:left;min-height:40px;padding:var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary);overflow-wrap:anywhere;background:0 0;border:0;flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}._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{width:30px;height:30px;color:var(--accent-600);font-size:var(--text-2xl-size);flex-shrink:0;place-items:center;display:grid}._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);margin:var(--space-3) 0 var(--space-5);line-height:1.5}._newTask_trmiy_43{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);flex-shrink:0}._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{margin:0;padding:0;list-style:none}._taskList_trmiy_46 button{width:100%;min-width:0;min-height:58px;padding:var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary);text-align:left;gap:var(--space-1);background:0 0;border:0;flex-direction:column;align-items:flex-start;display:flex}._taskList_trmiy_46 button>span:first-child{text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:var(--text-sm-size);overflow:hidden}._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{padding-top:var(--space-8);color:var(--text-tertiary);font-size:var(--text-xs-size);margin-top:auto;line-height:1.6}._center_trmiy_52{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}._heading_trmiy_53{padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;flex-shrink:0;display:flex}._heading_trmiy_53>div{flex:180px;min-width:0}._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);overflow-wrap:anywhere;margin:0}._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{min-height:100px;padding:var(--space-6);scrollbar-gutter:stable;flex:1;overflow-y:auto}._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);margin:var(--space-3) 0;overflow-wrap:anywhere;line-height:1.6}._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);margin-block:0 var(--space-4);overflow-wrap:anywhere;line-height:1.6}._error_trmiy_70{color:var(--status-danger-fg);font-size:var(--text-sm-size);margin:var(--space-3) 0 0;overflow-wrap:anywhere;line-height:1.6}._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{padding:var(--space-4) var(--space-5);border-top:1px solid var(--border-default);background:var(--bg-surface);scrollbar-gutter:stable;flex-shrink:0;max-height:56%;overflow-y:auto}._composer_trmiy_72>label{font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2);display:block}._composer_trmiy_72 textarea{resize:vertical;border:1px solid var(--border-default);border-radius:var(--radius-sm);width:100%;min-height:88px;max-height:220px;padding:var(--space-3);color:var(--text-primary);background:var(--bg-canvas);font-size:var(--text-base-size);line-height:1.6;display:block}._composer_trmiy_72 textarea::placeholder{color:var(--text-tertiary)}._composeControls_trmiy_76{gap:var(--space-2);margin-top:var(--space-3);flex-wrap:wrap;align-items:flex-end;display:flex}._workerChoice_trmiy_77{min-width:0;font-size:var(--text-xs-size);color:var(--text-tertiary);flex:160px}._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{background:var(--accent-600);min-height:40px;color:var(--accent-contrast);border-radius:var(--radius-md);padding:var(--space-2) var(--space-4);font-weight:var(--font-weight-medium);border:0}._send_trmiy_80:not(:disabled):hover{background:var(--accent-700)}._fileButton_trmiy_82{min-height:40px;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;align-items:center;display:flex;position:relative;overflow:hidden}._fileButton_trmiy_82:hover{background:var(--bg-hover)}._fileButton_trmiy_82 input{opacity:0;cursor:pointer;width:100%;position:absolute;inset:0}._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{gap:var(--space-3) var(--space-2);margin-top:var(--space-2);grid-template-columns:repeat(auto-fit,minmax(min(140px,100%),1fr));display:grid}._options_trmiy_86 label{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}._attachments_trmiy_90{margin:var(--space-2) 0;gap:var(--space-2);flex-wrap:wrap;padding:0;list-style:none;display:flex}._attachments_trmiy_90 li{gap:var(--space-1);background:var(--bg-selected);border-radius:var(--radius-sm);min-width:0;max-width:100%;padding:var(--space-1) var(--space-2);font-size:var(--text-xs-size);align-items:center;display:flex}._attachments_trmiy_90 li span{overflow-wrap:anywhere}._attachments_trmiy_90 button{color:var(--text-secondary);border-radius:var(--radius-xs);background:0 0;border:0;flex-shrink:0;min-width:32px;min-height:32px}._attachments_trmiy_90 button:not(:disabled):hover{background:var(--bg-active)}._resize_trmiy_29{cursor:col-resize;background:var(--bg-canvas);border-inline:1px solid var(--border-subtle);touch-action:none;position:relative}._resize_trmiy_29:after{content:"";border-radius:var(--radius-full);background:var(--border-strong);width:2px;height:32px;position:absolute;top:calc(50% - 16px);left:2px}._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{background:var(--bg-canvas);flex-direction:column;min-width:0;min-height:0;display:flex}._dockTabs_trmiy_101{gap:var(--space-1);padding:var(--space-3);border-bottom:1px solid var(--border-default);flex-wrap:wrap;flex-shrink:0;display:flex}._dockTabs_trmiy_101 button{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);background:0 0;border:0}._dockTabs_trmiy_101 button[aria-selected=true]{color:var(--text-primary);background:var(--bg-surface);box-shadow:var(--shadow-sm)}._dockContent_trmiy_65{padding:var(--space-5);scrollbar-gutter:stable;flex:1;min-height:0;overflow-y:auto}._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);margin:var(--space-1) 0 0;overflow-wrap:anywhere;line-height:1.6}._capabilities_trmiy_109{border-top:1px solid var(--border-default);padding:var(--space-4);color:var(--text-tertiary);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex-shrink:0;margin:0;line-height:1.6}._mobileNav_trmiy_110{display:none}._engineeringPane_trmiy_111{flex:1;grid-column:2/-1;min-width:0;min-height:0;overflow:auto}._engineeringLink_trmiy_112{justify-content:space-between;align-items:center;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;display:flex}._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{flex-direction:column;height:max(620px,100dvh - 180px);min-height:620px;display:flex}._mobileNav_trmiy_110{padding:var(--space-2);gap:var(--space-2);border-bottom:1px solid var(--border-default);flex-shrink:0;display:flex}._mobileNav_trmiy_110 button{background:var(--bg-canvas);color:var(--text-secondary);border-radius:var(--radius-sm);border:0;flex:1;min-height:44px}._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;transition:none;animation: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{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}._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);overflow-wrap:anywhere;line-height:1.6}._facts_40a9p_5{gap:var(--space-5);margin-block:var(--space-4);flex-wrap:wrap;display:flex}._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{font-family:var(--font-display);font-size:var(--text-base-size);overflow-wrap:anywhere;margin:0}._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{justify-content:space-between;align-items:center;gap:var(--space-4);border-top:1px solid var(--border-default);padding-block:var(--space-4);flex-wrap:wrap;display:flex}._admission_40a9p_20>div{flex:260px;min-width:0}._admission_40a9p_20 h4{font-size:var(--text-sm-size);overflow-wrap:anywhere;margin:0}._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{justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap;display:flex}._heading_ky5r8_2 h3{font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.02em;margin:0}._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);color:var(--text-secondary);overflow-wrap:anywhere;line-height:1.6}._heading_ky5r8_2 p{margin:var(--space-2) 0 0}._facts_ky5r8_6{gap:var(--space-4) var(--space-6);margin-block:var(--space-5);flex-wrap:wrap;display:flex}._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{margin:0;padding:0;list-style:none}._lineage_ky5r8_9>li{border-top:1px solid var(--border-default);padding-block:var(--space-5)}._relationship_ky5r8_11{gap:var(--space-4);grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) minmax(0,1fr);align-items:start;display:grid}._enrollment_ky5r8_12,._phase_ky5r8_12{align-items:flex-start;gap:var(--space-2);flex-direction:column;min-width:0;display:flex}._enrollment_ky5r8_12 code,._phase_ky5r8_12 code{overflow-wrap:anywhere;max-width:100%;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{padding-top:var(--space-5);position:relative}._connector_ky5r8_16{top:var(--space-2);border-top:1px solid var(--border-strong);position:absolute;inset-inline:0}._connector_ky5r8_16:after{content:"";border-right:1px solid var(--border-strong);border-top:1px solid var(--border-strong);width:6px;height:6px;position:absolute;top:-4px;right:0;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{gap:var(--space-3);border-left:1px solid var(--border-strong);padding-left:var(--space-4);grid-template-columns:minmax(0,1fr)}._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{scroll-behavior:auto;transition:none;animation:none}}._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);max-width:78ch;margin:0;line-height:1.6}._columns_jwxxg_5{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);display:grid}._form_jwxxg_6{gap:var(--space-4);padding:var(--space-5);min-width:0;display:grid}._field_jwxxg_7{gap:var(--space-2);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);min-width:0;display:grid}._field_jwxxg_7 :is(input,textarea,select){border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-input);width:100%;min-width:0;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{resize:vertical;min-height:132px;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{gap:var(--space-3);margin:var(--space-4) 0;grid-template-columns:1fr 1fr;display:grid}._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);font-size:var(--text-sm-size);overflow-wrap:anywhere;line-height:1.6;list-style:outside}._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);margin:var(--space-2) 0;overflow-wrap:anywhere;line-height:1.6}._review_jwxxg_16 code{overflow-wrap:anywhere;font-size:var(--text-xs-size)}._actions_jwxxg_20{gap:var(--space-3);padding:var(--space-4) var(--space-5);border-top:1px solid var(--border-default);flex-wrap:wrap;display:flex}._button_jwxxg_21,._primary_jwxxg_21{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:40px;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{scroll-behavior:auto;transition:none;animation:none}}._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{justify-content:space-between;align-items:flex-start;gap:var(--space-4);flex-wrap:wrap;display:flex}._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);overflow-wrap:anywhere;margin:var(--space-2) 0;line-height:1.6}._outcomes_1kjhl_1 button{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);min-height:40px;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{gap:var(--space-5);padding-block:var(--space-4);grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);display:grid}._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%;margin-block:var(--space-3);overflow-x:auto}._tableScroll_1kjhl_14 table{border-collapse:collapse;text-align:left;width:100%;min-width:580px;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{gap:var(--space-1);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex-direction:column;line-height:1.55;display:flex}._measurements_1kjhl_21{gap:var(--space-4);flex-direction:column;display:flex}._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{gap:var(--space-3);font-size:var(--text-xs-size);grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}._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);overflow-wrap:anywhere;line-height:1.6}._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{padding-top:var(--space-1);font-weight:400;display:block}@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{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-6);border-bottom:1px solid var(--border-default);flex-wrap:wrap;display:flex}._eyebrow_8bc3y_3{margin:0 0 var(--space-2);font-size:var(--text-xs-size);letter-spacing:.08em;color:var(--text-secondary);font-weight:600}._header_8bc3y_2 h2{font-family:var(--font-display);letter-spacing:-.035em;margin:0 0 var(--space-2);font-size:clamp(24px,2.6vw,34px);line-height:1.15}._header_8bc3y_2 p:last-child,._objective_8bc3y_5 p,._controls_8bc3y_5 p{color:var(--text-secondary);line-height:1.6;font-size:var(--text-sm-size);margin:0}._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);background:var(--bg-surface);font-weight:500}._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);justify-content:space-between;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;display:flex}._selection_8bc3y_12 label{gap:var(--space-2);font-size:var(--text-xs-size);color:var(--text-secondary);flex-direction:column;flex:1;min-width:0;max-width:400px;display:flex}._selection_8bc3y_12 select{border:1px solid var(--border-strong);background:var(--bg-input);border-radius:var(--radius-sm);width:100%;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{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}._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);overflow-wrap:anywhere;max-width:78ch;line-height:1.6}._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:outside}._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);gap:var(--space-6);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}._objective_8bc3y_5 h3{font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.02em;margin:var(--space-2) 0;overflow-wrap:anywhere;line-height:1.4}._metrics_8bc3y_25{gap:var(--space-5);margin:0;display:flex}._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;margin:var(--space-2) 0 0;letter-spacing:-.04em;font-size:28px}._content_8bc3y_28{border-block:1px solid var(--border-default);grid-template-columns:minmax(0,1.6fr) minmax(220px,1fr);display:grid}._flow_8bc3y_29{min-width:0;padding:var(--space-5) var(--space-6)}._sectionTitle_8bc3y_30{align-items:baseline;gap:var(--space-2);margin-bottom:var(--space-5);flex-wrap:wrap;justify-content:space-between;display:flex}._sectionTitle_8bc3y_30 h3,._inspector_8bc3y_31 h3{font-family:var(--font-display);font-size:var(--text-md-size);margin:0}._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{column-gap:var(--space-3);padding-bottom:var(--space-5);grid-template-columns:34px minmax(0,1fr);display:grid;position:relative}._campaigns_8bc3y_33>li:not(:last-child):before{content:"";border-left:1px solid var(--border-strong);position:absolute;top:34px;bottom:0;left:16px}._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);border-radius:50%;place-items:center;width:34px;height:34px;display:grid}._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);margin:0 0 var(--space-3);overflow-wrap:anywhere;line-height:1.6}._campaign_8bc3y_33 ._dependencies_8bc3y_40{color:var(--text-secondary);font-size:var(--text-xs-size)}._target_8bc3y_41{align-items:baseline;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas);flex-wrap:wrap;display:flex}._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{gap:var(--space-3);margin-block:var(--space-2) var(--space-4);grid-template-columns:1fr 1fr;display:grid}._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{gap:var(--space-4);margin-block:var(--space-5);grid-template-columns:1fr 1fr;display:grid}._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{margin-bottom:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere;display:block}._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);font-size:var(--text-xs-size);color:var(--text-secondary);list-style:outside}._scope_8bc3y_57{border-top:1px solid var(--border-default);margin-top:var(--space-4);padding-top:var(--space-3)}._controls_8bc3y_5{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-5) var(--space-6);display:flex}._controls_8bc3y_5>div:first-child{max-width:54ch}._controls_8bc3y_5 strong{font-size:var(--text-sm-size);margin-bottom:var(--space-2);display:block}._actions_8bc3y_61{gap:var(--space-2);flex-wrap:wrap;flex-shrink:0;display:flex}._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);overflow-wrap:anywhere;line-height:1.6}._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{color:var(--accent-600);font-size:48px;line-height:1;display:inline-block}@media (max-width:1500px){._mission_8bc3y_23{gap:var(--space-4);grid-template-columns:1fr}._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{scroll-behavior:auto;transition:none;animation:none}}._bar_l0wsp_1{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);display:flex}._identity_l0wsp_2{align-items:center;gap:var(--space-2) var(--space-4);flex-wrap:wrap;min-width:0;display:flex}._brand_l0wsp_3{align-items:center;gap:var(--space-3);flex-wrap:wrap;min-width:0;display:flex}._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{width:var(--space-8);height:var(--space-8);fill:none;stroke:var(--accent-600);stroke-width:1.8px;stroke-linejoin:round;stroke-linecap:round;flex-shrink:0}._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{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;display:block}._actions_l0wsp_12{gap:var(--space-2);flex-shrink:0;display:flex}._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;padding:var(--space-6);margin:auto}._notice_l0wsp_13{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);display:grid}._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{padding:var(--space-4);align-items:stretch;gap:var(--space-3);flex-direction:column}._main_l0wsp_15{padding:var(--space-5) var(--space-4)}._actions_l0wsp_12{justify-content:flex-end}}
@@ -0,0 +1,2 @@
1
+ import{a as e,n as t,o as n}from"./index-CZamKRUg.js";var r={unknown:`_unknown_4gf0c_1`,dot:`_dot_4gf0c_11`,badge:`_badge_4gf0c_19`},i=t();function a(e){return!e||e.sourceState===`healthy`&&e.complete!==!1}function o({quality:e,children:t,renderControl:n,label:o}){if(a(e))return(0,i.jsxs)(i.Fragment,{children:[t,n?.()]});let s=e?.reason;return(0,i.jsxs)(`span`,{className:r.unknown,title:s?`Unavailable: ${s}`:`Source data unavailable`,children:[(0,i.jsx)(`span`,{className:r.dot,"aria-hidden":`true`}),`unknown`,o?(0,i.jsxs)(`span`,{className:`visually-hidden`,children:[` (`,o,`)`]}):null]})}function s({quality:e,label:t}){return a(e)?null:(0,i.jsxs)(`span`,{className:r.badge,title:e?.reason??`Source data unavailable`,children:[t?`${t}: `:``,`unknown`]})}var c=n(e(),1),l={region:`_region_1818x_1`,toast:`_toast_1818x_12`,"slide-in":`_slide-in_1818x_1`,success:`_success_1818x_27`,danger:`_danger_1818x_30`,dismiss:`_dismiss_1818x_34`},u=(0,c.createContext)(null);function d(){let e=(0,c.useContext)(u);if(!e)throw Error(`useToast() called outside <ToastProvider>`);return e}var f=5e3;function p({children:e}){let[t,n]=(0,c.useState)([]),r=(0,c.useRef)(0),a=(0,c.useCallback)(e=>{n(t=>t.filter(t=>t.id!==e))},[]),o=(0,c.useCallback)((e,t=`neutral`)=>{let i=r.current++;n(n=>[...n,{id:i,message:e,tone:t}]),setTimeout(()=>a(i),f)},[a]),s=(0,c.useMemo)(()=>({show:o}),[o]);return(0,i.jsxs)(u.Provider,{value:s,children:[e,(0,i.jsx)(`div`,{className:l.region,role:`status`,"aria-live":`polite`,children:t.map(e=>(0,i.jsxs)(`div`,{className:`${l.toast} ${l[e.tone]}`,children:[(0,i.jsx)(`span`,{children:e.message}),(0,i.jsx)(`button`,{type:`button`,className:l.dismiss,onClick:()=>a(e.id),"aria-label":`Dismiss`,children:`×`})]},e.id))})]})}var m={wrap:`_wrap_1759l_1`,title:`_title_1759l_14`,detail:`_detail_1759l_21`,retry:`_retry_1759l_27`},h=class extends c.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error(`[ashlr] view crashed while rendering`,e,t.componentStack)}componentDidUpdate(e){this.state.error&&e.resetKey!==this.props.resetKey&&this.setState({error:null})}render(){return this.state.error?(0,i.jsxs)(`div`,{className:m.wrap,role:`alert`,children:[(0,i.jsx)(`p`,{className:m.title,children:`This view hit an error and couldn't render.`}),(0,i.jsxs)(`p`,{className:m.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.`]}),(0,i.jsx)(`button`,{type:`button`,className:m.retry,onClick:()=>this.setState({error:null}),children:`Retry this view`})]}):this.props.children}};export{s as a,o as i,p as n,a as o,d as r,h as t};
2
+ //# sourceMappingURL=RouteErrorBoundary-Badio_uO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteErrorBoundary-Badio_uO.js","names":[],"sources":["../../../../../../src/web-ui/components/primitives/Epistemic.module.css","../../../../../../src/web-ui/components/primitives/Epistemic.tsx","../../../../../../src/web-ui/components/primitives/Toast.module.css","../../../../../../src/web-ui/components/primitives/Toast.tsx","../../../../../../src/web-ui/components/primitives/RouteErrorBoundary.module.css","../../../../../../src/web-ui/components/primitives/RouteErrorBoundary.tsx"],"sourcesContent":[".unknown {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--status-unknown-fg);\n font-size: var(--text-sm-size);\n font-style: italic;\n cursor: help;\n}\n\n.dot {\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--status-unknown-solid);\n flex-shrink: 0;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n padding: 1px var(--space-2);\n border-radius: var(--radius-xs);\n background: var(--status-unknown-bg);\n color: var(--status-unknown-fg);\n font-size: var(--text-xs-size);\n font-style: italic;\n cursor: help;\n}\n","/**\n * components/primitives/Epistemic.tsx — the one thing the old UI got right,\n * promoted to a first-class primitive (foundation brief, item 7).\n *\n * When a piece of data's `sourceQuality.sourceState` is 'degraded' or\n * 'unknown'/'missing', this component displays \"unknown\" (never a stale or\n * guessed value dressed up as current) AND withholds any control built on\n * top of it (`renderControl` simply never runs). Every future view should\n * wrap sourceQuality-bearing fields in this rather than reinventing the\n * check — that is the whole point of making it a primitive instead of a\n * convention someone has to remember.\n *\n * Reference (old, correct behavior this replaces): app.js:311-314, :336-347.\n */\nimport type { ReactNode } from 'react';\nimport type { SourceQuality } from '../../data/api-types.js';\nimport styles from './Epistemic.module.css';\n\nexport function isKnown(quality: SourceQuality | undefined): boolean {\n if (!quality) return true; // absent quality metadata => field predates the pattern; trust it.\n return quality.sourceState === 'healthy' && quality.complete !== false;\n}\n\nexport interface EpistemicProps {\n quality: SourceQuality | undefined;\n /** Rendered when the value is known-good. */\n children: ReactNode;\n /**\n * A control (button, toggle, link) whose action depends on this data\n * being trustworthy — e.g. \"restart daemon\" next to daemon.running.\n * Omitted entirely (not disabled — omitted) when the source is degraded,\n * so an operator never sees an actionable-looking control wired to a\n * guess.\n */\n renderControl?: () => ReactNode;\n /** Optional label used in the \"unknown\" state, e.g. \"daemon status\". */\n label?: string;\n}\n\nexport function Epistemic({ quality, children, renderControl, label }: EpistemicProps): ReactNode {\n if (isKnown(quality)) {\n return (\n <>\n {children}\n {renderControl?.()}\n </>\n );\n }\n\n const reason = quality?.reason;\n return (\n <span className={styles.unknown} title={reason ? `Unavailable: ${reason}` : 'Source data unavailable'}>\n <span className={styles.dot} aria-hidden=\"true\" />\n unknown\n {label ? <span className=\"visually-hidden\"> ({label})</span> : null}\n </span>\n );\n}\n\n/** Small inline badge form, for table cells / dense rows. */\nexport function EpistemicBadge({ quality, label }: { quality: SourceQuality | undefined; label?: string }): ReactNode {\n if (isKnown(quality)) return null;\n return (\n <span className={styles.badge} title={quality?.reason ?? 'Source data unavailable'}>\n {label ? `${label}: ` : ''}unknown\n </span>\n );\n}\n",".region {\n position: fixed;\n bottom: var(--space-6);\n right: var(--space-6);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n z-index: var(--z-toast);\n max-width: 360px;\n}\n\n.toast {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-toast);\n font-size: var(--text-sm-size);\n animation: slide-in var(--duration-base) var(--ease-decelerate);\n border: 1px solid var(--border-default);\n background: var(--bg-surface-raised);\n color: var(--text-primary);\n}\n\n.success {\n border-color: var(--status-success-solid);\n}\n.danger {\n border-color: var(--status-danger-solid);\n}\n\n.dismiss {\n color: var(--text-tertiary);\n border-radius: var(--radius-xs);\n font-size: var(--text-lg-size);\n line-height: 1;\n padding: var(--space-1);\n}\n.dismiss {\n transition: color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);\n}\n.dismiss:hover {\n color: var(--text-primary);\n background: var(--bg-hover);\n}\n.dismiss:active {\n background: var(--bg-active);\n}\n\n@keyframes slide-in {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion=\"full\"]) .toast {\n animation: none;\n }\n}\n\n:root[data-motion=\"reduce\"] .toast {\n animation: none;\n}\n","/**\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",".wrap {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--space-3);\n max-width: 640px;\n margin: var(--space-8) auto;\n padding: var(--space-6);\n border: 1px solid var(--status-danger-solid);\n border-radius: var(--radius-lg);\n background: var(--status-danger-bg);\n}\n\n.title {\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--status-danger-fg);\n}\n\n.detail {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n.retry {\n padding: var(--space-2) var(--space-4);\n border: 1px solid var(--status-danger-solid);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--status-danger-fg);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-medium);\n cursor: pointer;\n}\n\n.retry:hover {\n background: var(--bg-hover);\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"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ ._unknown_4gf0c_1{align-items:center;gap:var(--space-1);color:var(--status-unknown-fg);font-size:var(--text-sm-size);cursor:help;font-style:italic;display:inline-flex}._dot_4gf0c_11{border-radius:var(--radius-full);background:var(--status-unknown-solid);flex-shrink:0;width:6px;height:6px}._badge_4gf0c_19{padding:1px var(--space-2);border-radius:var(--radius-xs);background:var(--status-unknown-bg);color:var(--status-unknown-fg);font-size:var(--text-xs-size);cursor:help;align-items:center;font-style:italic;display:inline-flex}._region_1818x_1{bottom:var(--space-6);right:var(--space-6);gap:var(--space-2);z-index:var(--z-toast);flex-direction:column;max-width:360px;display:flex;position:fixed}._toast_1818x_12{justify-content:space-between;align-items:center;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);display:flex}._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);padding:var(--space-1);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);line-height:1}._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{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);flex-direction:column;display:flex}._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)}
@@ -0,0 +1 @@
1
+ ._section_3qpbp_5{background:var(--bg-canvas);flex-direction:column;height:100%;min-height:0;display:flex}._strip_3qpbp_13{justify-content:space-between;align-items:center;gap:var(--space-3);height:var(--strip-height);padding:0 var(--space-5);border-bottom:1px solid var(--border-subtle);background:var(--bg-surface);flex:none;display:flex}._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);padding:var(--space-6) var(--space-5) var(--space-16);gap:var(--space-8);flex-direction:column;margin:0 auto;display:flex}._panel_3qpbp_51{flex-direction:column;display:flex}._panelHead_3qpbp_56{justify-content:space-between;align-items:baseline;gap:var(--space-3);padding-bottom:var(--space-2);display:flex}._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{align-items:center;gap:var(--space-4);padding:var(--density-pad) 0;border-bottom:1px solid var(--border-subtle);grid-template-columns:minmax(0,1fr) auto;display:grid}._rowStacked_3qpbp_90{grid-template-columns:minmax(0,1fr);align-items:stretch}._rowText_3qpbp_95{min-width:0}._rowLabel_3qpbp_99{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-primary);font-weight:var(--font-weight-medium);display:block}._rowDescription_3qpbp_107{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);margin-top:2px}._rowControl_3qpbp_114{justify-content:flex-end;align-items:center;gap:var(--space-2);min-width:0;display:flex}._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{gap:var(--space-2);flex-wrap:wrap;display:flex}._swatch_3qpbp_140{border:1px solid var(--border-default);border-radius:var(--radius-xs);cursor:pointer;width:22px;height:22px;transition:transform var(--duration-fast) var(--ease-standard);padding:0}._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{color:#fff;mix-blend-mode:difference;justify-content:center;align-items:center;display:flex}._sliderStack_3qpbp_173{gap:var(--space-1);flex-direction:column;width:min(320px,100%);display:flex}._contrastWarning_3qpbp_180{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);display:flex}._preview_3qpbp_197{gap:var(--space-3);padding:var(--space-4);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-surface);flex-direction:column;display:flex}._previewRow_3qpbp_207{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}._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{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);display:flex}._noteIcon_3qpbp_258{color:var(--text-tertiary);flex:none;margin-top:1px}._code_3qpbp_249{font-family:var(--font-mono);font-size:var(--text-2xs-size);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);color:var(--text-primary);white-space:nowrap;padding:1px 4px}._shortcuts_3qpbp_278{gap:0 var(--space-6);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));display:grid}._shortcut_3qpbp_278{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--border-subtle);font-size:var(--text-sm-size);display:flex}._keys_3qpbp_294{flex:none;align-items:center;gap:2px;display:inline-flex}._key_3qpbp_294{min-width:20px;padding:2px var(--space-1);border:1px solid var(--border-default);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;border-bottom-width:2px}._about_3qpbp_315{gap:var(--space-2);flex-direction:column;display:flex}._aboutLine_3qpbp_321{align-items:center;gap:var(--space-2);font-size:var(--text-sm-size);color:var(--text-secondary);display:flex}._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{align-items:center;gap:var(--space-1);color:var(--text-link);text-decoration:none;display:inline-flex}._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)))}
@@ -0,0 +1,2 @@
1
+ import{a as e,n as t,o as n}from"./index-CZamKRUg.js";import{C as r,O as i,S as a,T as o,_ as s,g as c,h as l,k as u,p as d,w as f}from"./global-D6bTxIRn.js";import{t as p}from"./Dialog-CPM9JxBc.js";import{r as m}from"./RouteErrorBoundary-Badio_uO.js";import{t as h}from"./Meter--h3MmZS-.js";import{f as g,h as _,l as v,m as y,p as ee,r as b,s as te,t as ne,y as x}from"./icons-D9vlf85u.js";import{B as S,H as C,I as w,L as T,R as E,S as D,V as O,x as k}from"./VerseConsoleApp-CsIQv9id.js";var A={section:`_section_3qpbp_5`,strip:`_strip_3qpbp_13`,stripTitle:`_stripTitle_3qpbp_25`,scroll:`_scroll_3qpbp_32`,column:`_column_3qpbp_38`,panel:`_panel_3qpbp_51`,panelHead:`_panelHead_3qpbp_56`,panelTitle:`_panelTitle_3qpbp_64`,panelBody:`_panelBody_3qpbp_74`,row:`_row_3qpbp_81`,rowStacked:`_rowStacked_3qpbp_90`,rowText:`_rowText_3qpbp_95`,rowLabel:`_rowLabel_3qpbp_99`,rowDescription:`_rowDescription_3qpbp_107`,rowControl:`_rowControl_3qpbp_114`,swatches:`_swatches_3qpbp_140`,swatch:`_swatch_3qpbp_140`,swatchCheck:`_swatchCheck_3qpbp_165`,sliderStack:`_sliderStack_3qpbp_173`,contrastWarning:`_contrastWarning_3qpbp_180`,preview:`_preview_3qpbp_197`,previewRow:`_previewRow_3qpbp_207`,previewHeading:`_previewHeading_3qpbp_214`,previewBody:`_previewBody_3qpbp_222`,previewNumerals:`_previewNumerals_3qpbp_228`,origin:`_origin_3qpbp_238`,note:`_note_3qpbp_242`,noteIcon:`_noteIcon_3qpbp_258`,code:`_code_3qpbp_249`,shortcuts:`_shortcuts_3qpbp_278`,shortcut:`_shortcut_3qpbp_278`,keys:`_keys_3qpbp_294`,key:`_key_3qpbp_294`,about:`_about_3qpbp_315`,aboutLine:`_aboutLine_3qpbp_321`,aboutName:`_aboutName_3qpbp_329`,link:`_link_3qpbp_338`},j=t();function M({title:e,action:t,children:n}){return(0,j.jsxs)(`section`,{className:A.panel,children:[(0,j.jsxs)(`div`,{className:A.panelHead,children:[(0,j.jsx)(`h3`,{className:A.panelTitle,children:e}),t]}),(0,j.jsx)(`div`,{className:A.panelBody,children:n})]})}function N({label:e,description:t,htmlFor:n,labelId:r,stacked:i=!1,children:a}){let o=(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:A.rowLabel,id:r,children:e}),t?(0,j.jsx)(`span`,{className:A.rowDescription,children:t}):null]});return(0,j.jsxs)(`div`,{className:`${A.row} ${i?A.rowStacked:``}`,children:[(0,j.jsx)(`div`,{className:A.rowText,children:n?(0,j.jsx)(`label`,{htmlFor:n,className:A.rowText,children:o}):o}),(0,j.jsx)(`div`,{className:A.rowControl,children:a})]})}function P(e,t){return e?`Last completed ${new Date(e).toLocaleDateString()}.`:t?`Skipped. Nothing was missed — it is all reachable from the sections themselves.`:`Not seen yet.`}function F(){let{completedAt:e,dismissedAt:t,open:n}=k();return(0,j.jsx)(M,{title:`Onboarding`,children:(0,j.jsx)(N,{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. ${P(e,t)}`,children:(0,j.jsx)(C,{variant:`subtle`,size:`sm`,onClick:D,disabled:n,children:n?`Showing`:`Replay`})})})}var I=`3.7.0`,L=`Ashlr Verse`;function R(){return(0,j.jsx)(M,{title:`About`,children:(0,j.jsx)(`div`,{className:`${A.row} ${A.rowStacked}`,children:(0,j.jsxs)(`div`,{className:A.about,children:[(0,j.jsx)(`p`,{className:A.aboutName,children:L}),(0,j.jsxs)(`p`,{className:A.aboutLine,children:[(0,j.jsxs)(w,{mono:!0,children:[`v`,I]}),(0,j.jsx)(`span`,{children:`ashlr-hub — local-first command center for agentic engineers.`})]}),(0,j.jsx)(`p`,{className:A.aboutLine,children:`Every session, token and artifact stays on this machine. The console talks to one local server and no third-party service.`}),(0,j.jsx)(`p`,{className:A.aboutLine,children:(0,j.jsxs)(`a`,{className:A.link,href:`https://github.com/ashlrai/ashlr-hub`,target:`_blank`,rel:`noreferrer noopener`,children:[`Source and changelog`,(0,j.jsx)(v,{size:12})]})})]})})})}var z=n(e(),1),B=/^#([0-9a-f]{3,8})$/i,V=/^(rgba?|hsla?)\(([^)]*)\)$/i;function H(e,t,n){return Math.min(n,Math.max(t,e))}function U(e,t){let n=e.trim();return n.endsWith(`%`)?Number.parseFloat(n)/100*t:Number.parseFloat(n)}function W(e,t,n){let r=(e%360+360)%360,i=(1-Math.abs(2*n-1))*t,a=i*(1-Math.abs(r/60%2-1)),o=n-i/2,s;return s=r<60?[i,a,0]:r<120?[a,i,0]:r<180?[0,i,a]:r<240?[0,a,i]:r<300?[a,0,i]:[i,0,a],{r:Math.round((s[0]+o)*255),g:Math.round((s[1]+o)*255),b:Math.round((s[2]+o)*255)}}function G(e){let t=[],n=0,r=``;for(let i of e){if(i===`(`?n+=1:i===`)`&&--n,i===`,`&&n===0){t.push(r),r=``;continue}r+=i}return t.push(r),t.map(e=>e.trim()).filter(e=>e.length>0)}function K(e){let t=e.trim(),n=/\s(\d*\.?\d+)%$/.exec(t);if(n)return{color:t.slice(0,n.index).trim(),pct:Number.parseFloat(n[1])};let r=/^(\d*\.?\d+)%\s/.exec(t);return r?{color:t.slice(r[0].length).trim(),pct:Number.parseFloat(r[1])}:{color:t,pct:null}}function q(e){let t=/^color-mix\((.*)\)$/is.exec(e.trim());if(!t)return null;let n=G(t[1]);if(n.length!==3||n[0].replace(/\s+/g,` `).trim()!==`in srgb`)return null;let r=K(n[1]),i=K(n[2]);if(!r||!i)return null;let a=J(r.color),o=J(i.color);if(!a||!o)return null;let s=r.pct,c=i.pct;s===null&&c===null?(s=50,c=50):s===null?s=100-c:c===null&&(c=100-s);let l=s+c;if(l<=0)return null;let u=s/l,d=c/l,f=a.a*u+o.a*d;if(f<=0)return{r:0,g:0,b:0,a:0};let p=e=>H(Math.round((a[e]*a.a*u+o[e]*o.a*d)/f),0,255);return{r:p(`r`),g:p(`g`),b:p(`b`),a:H(f,0,1)}}function J(e){let t=e.trim().toLowerCase();if(t===`transparent`)return{r:0,g:0,b:0,a:0};if(t.startsWith(`color-mix(`))return q(t);let n=B.exec(t);if(n){let e=n[1],t=e=>Number.parseInt(e.length===1?e+e:e,16);return e.length===3||e.length===4?{r:t(e[0]),g:t(e[1]),b:t(e[2]),a:e.length===4?t(e[3])/255:1}:e.length===6||e.length===8?{r:t(e.slice(0,2)),g:t(e.slice(2,4)),b:t(e.slice(4,6)),a:e.length===8?t(e.slice(6,8))/255:1}:null}let r=V.exec(t);if(!r)return null;let i=r[1],a=r[2].replace(/\//g,` `).split(/[\s,]+/).filter(Boolean);if(a.length<3)return null;let o=a.length>=4?H(U(a[3],1),0,1):1;if(i.startsWith(`rgb`))return{r:H(Math.round(U(a[0],255)),0,255),g:H(Math.round(U(a[1],255)),0,255),b:H(Math.round(U(a[2],255)),0,255),a:o};let s=Number.parseFloat(a[0]),c=H(U(a[1],1),0,1),l=H(U(a[2],1),0,1);return Number.isFinite(s)?{...W(s,c,l),a:o}:null}function Y(e,t){if(e.a>=1)return e;let n=e.a;return{r:Math.round(e.r*n+t.r*(1-n)),g:Math.round(e.g*n+t.g*(1-n)),b:Math.round(e.b*n+t.b*(1-n)),a:1}}function X(e){let t=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*t(e.r)+.7152*t(e.g)+.0722*t(e.b)}function Z(e,t,n=`#ffffff`){let r=J(t),i=J(e),a=J(n);if(!r||!i||!a)return null;let o=Y(r,a),s=X(Y(i,o)),c=X(o),[l,u]=s>=c?[s,c]:[c,s];return(l+.05)/(u+.05)}function Q(e,t,n,r=0){let i=W(e,H(t,0,100)/100,H(n+r,0,100)/100),a=e=>e.toString(16).padStart(2,`0`);return`#${a(i.r)}${a(i.g)}${a(i.b)}`}var re=`#ffffff`,ie=`#121214`,ae=[{value:`system`,label:`System`,icon:(0,j.jsx)(y,{})},{value:`light`,label:`Light`,icon:(0,j.jsx)(x,{})},{value:`dark`,label:`Dark`,icon:(0,j.jsx)(_,{})}],oe=[{value:`default`,label:`Default`},{value:`large`,label:`Large`},{value:`xlarge`,label:`Extra large`}],se=[{value:`comfortable`,label:`Comfortable`},{value:`compact`,label:`Compact`}],ce=[{value:`grotesk`,label:`Space Grotesk`},{value:`ui`,label:`UI sans`},{value:`mono`,label:`Mono`}],le=[{value:`sharp`,label:`Sharp`},{value:`default`,label:`Default`},{value:`soft`,label:`Soft`}];function ue(e,t){return`linear-gradient(to right, ${[0,60,120,180,240,300,360].map(n=>`${Q(n,e,t)} ${n/360*100}%`).join(`, `)})`}function de(e,t,n){let r=Q(e,t,n,-8),i=Q(e,t,n,14),a=Z(r,re),o=Z(i,ie),s=[];return a!==null&&a<4.5&&s.push(`light`),o!==null&&o<4.5&&s.push(`dark`),{lightRatio:a,darkRatio:o,failing:s}}function fe({appearance:e,onChange:t,onReset:n}){let i=(0,z.useId)(),s=(0,z.useId)(),c=(0,z.useId)(),l=(0,z.useId)(),u=(0,z.useId)(),p=o(e),m=de(e.accentH,e.accentS,e.accentL);return(0,j.jsxs)(M,{title:`Appearance`,action:(0,j.jsx)(C,{variant:`ghost`,size:`sm`,onClick:n,disabled:f(e),title:`Restore the shipped theme, accent, display size, density, font, radius and motion`,children:`Reset to defaults`}),children:[(0,j.jsx)(N,{label:`Theme`,description:`System follows your OS appearance setting.`,children:(0,j.jsx)(S,{"aria-label":`Theme`,options:ae,value:e.theme,onChange:e=>t({theme:e})})}),(0,j.jsx)(N,{label:`Accent`,labelId:i,description:p?`${p.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:(0,j.jsx)(`div`,{className:A.swatches,role:`radiogroup`,"aria-labelledby":i,children:r.map(e=>{let n=p?.id===e.id;return(0,j.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e.label,tabIndex:n||!p&&e.id===r[0].id?0:-1,className:A.swatch,style:{background:Q(e.h,e.s,e.l)},onClick:()=>t({accentH:e.h,accentS:e.s,accentL:e.l}),children:n?(0,j.jsx)(`span`,{className:A.swatchCheck,children:(0,j.jsx)(b,{size:12})}):null},e.id)})})}),(0,j.jsx)(N,{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:(0,j.jsxs)(`div`,{className:A.sliderStack,children:[(0,j.jsx)(E,{id:s,label:`Hue`,min:0,max:359,value:e.accentH,valueLabel:`${e.accentH}°`,valueText:`${e.accentH} degrees`,trackImage:ue(e.accentS,e.accentL),onChange:e=>t({accentH:Number(e.currentTarget.value)})}),(0,j.jsx)(E,{id:c,label:`Saturation`,min:0,max:100,value:e.accentS,valueLabel:`${e.accentS}%`,valueText:`${e.accentS} percent`,onChange:e=>t({accentS:Number(e.currentTarget.value)})}),(0,j.jsx)(E,{id:l,label:`Lightness`,min:a.min,max:a.max,value:e.accentL,valueLabel:`${e.accentL}%`,valueText:`${e.accentL} percent`,onChange:e=>t({accentL:Number(e.currentTarget.value)})}),m.failing.length>0?(0,j.jsxs)(`p`,{className:A.contrastWarning,role:`status`,children:[(0,j.jsx)(ne,{size:14}),(0,j.jsxs)(`span`,{children:[`This accent falls below 4.5:1 as link text in`,` `,m.failing.length===2?`both themes`:`${m.failing[0]} mode`,`. Raise or lower the lightness to keep it readable.`]})]}):null]})}),(0,j.jsx)(N,{label:`Display size`,description:`Scales text AND spacing together across the whole app, for a large display or a long session. Applies as you pick it.`,children:(0,j.jsx)(S,{"aria-label":`Display size`,options:oe,value:e.uiScale,onChange:e=>t({uiScale:e})})}),(0,j.jsx)(N,{label:`Density`,description:`Row height and control padding across every view. Independent of display size — a large, tightly packed interface is a valid choice.`,children:(0,j.jsx)(S,{"aria-label":`Density`,options:se,value:e.density,onChange:e=>t({density:e})})}),(0,j.jsx)(N,{label:`Display font`,description:`Titles, seat names, metrics and numerals. Body copy stays in the UI sans.`,children:(0,j.jsx)(S,{"aria-label":`Display font`,options:ce,value:e.displayFont,onChange:e=>t({displayFont:e})})}),(0,j.jsx)(N,{label:`Corner radius`,description:`Sharp reads like a terminal; soft reads like a consumer app.`,children:(0,j.jsx)(S,{"aria-label":`Corner radius`,options:le,value:e.radius,onChange:e=>t({radius:e})})}),(0,j.jsx)(N,{label:`Reduce motion`,htmlFor:u,description:`Collapses every transition to 1ms. Defaults to your system preference; turning it off here overrides that.`,children:(0,j.jsx)(T,{id:u,checked:e.reduceMotion,onChange:e=>t({reduceMotion:e}),"aria-label":`Reduce motion`})}),(0,j.jsx)(N,{label:`Preview`,description:`Live — these are the real primitives, not a picture of them.`,stacked:!0,children:(0,j.jsxs)(`div`,{className:A.preview,children:[(0,j.jsx)(`p`,{className:A.previewHeading,children:`Ashlr Verse`}),(0,j.jsxs)(`p`,{className:A.previewBody,children:[`Body copy stays in the UI sans at the reading measure; numerals like`,` `,(0,j.jsx)(`span`,{className:A.previewNumerals,children:`18,420 / 66,000`}),` use the display face.`]}),(0,j.jsxs)(`div`,{className:A.previewRow,children:[(0,j.jsx)(C,{variant:`primary`,size:`sm`,children:`Primary`}),(0,j.jsx)(C,{variant:`subtle`,size:`sm`,children:`Subtle`}),(0,j.jsx)(C,{variant:`ghost`,size:`sm`,children:`Ghost`}),(0,j.jsx)(C,{variant:`danger`,size:`sm`,children:`Destructive`})]}),(0,j.jsxs)(`div`,{className:A.previewRow,children:[(0,j.jsx)(d,{status:`running`}),(0,j.jsx)(w,{engine:`claude`,children:`Claude Max`}),(0,j.jsx)(w,{engine:`local`,mono:!0,children:`qwen3-coder`})]}),(0,j.jsx)(h,{value:18420,max:66e3,label:`Context`}),(0,j.jsx)(O,{"aria-label":`Preview field`,placeholder:`A field at the current density`,size:`sm`})]})})]})}function pe(e){if(e===null)return`locked`;let t=Math.max(0,Math.round((e-Date.now())/6e4));return t<=0?`expiring now`:`unlocked for ${t} more minute${t===1?``:`s`}`}function $(){let e=c(),t=s(),n=m(),[r,a]=(0,z.useState)(!1),o=(0,z.useRef)(null),l=typeof window>`u`?``:window.location.origin;async function f(){try{await navigator.clipboard.writeText(l),n.show(`Server address copied.`)}catch{n.show(`Could not reach the clipboard — select the field and copy manually.`,`danger`)}}async function h(){a(!1),await u(),n.show(`Disconnected. Paste the read token to reconnect.`)}return(0,j.jsxs)(M,{title:`Connection`,children:[(0,j.jsxs)(N,{label:`Server`,description:`This window talks to one local hub. Nothing leaves your machine.`,children:[(0,j.jsx)(`div`,{className:A.origin,children:(0,j.jsx)(O,{value:l,readOnly:!0,mono:!0,size:`sm`,"aria-label":`Server address`})}),(0,j.jsx)(C,{variant:`ghost`,size:`sm`,icon:(0,j.jsx)(te,{}),onClick:()=>void f(),children:`Copy`})]}),(0,j.jsx)(N,{label:`Read session`,description:`A 15-minute signed cookie, renewed silently while this tab stays open.`,children:(0,j.jsx)(d,{status:e===`authenticated`?`connected`:e===`checking`?`checking`:`disconnected`,tone:e===`authenticated`?`success`:e===`checking`?`running`:`danger`})}),(0,j.jsxs)(N,{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:[(0,j.jsx)(d,{status:t.hasHold?pe(t.heldUntil):`locked`,tone:t.hasHold?`success`:`neutral`}),(0,j.jsx)(C,{variant:`subtle`,size:`sm`,icon:(0,j.jsx)(ee,{}),onClick:()=>{i(),n.show(`Mutation hold cleared.`)},disabled:!t.hasHold,children:`Lock now`})]}),(0,j.jsx)(N,{label:`Disconnect`,description:`Ends the read session in this browser and clears the mutation hold. Chats on the server are untouched.`,children:(0,j.jsx)(C,{variant:`danger`,size:`sm`,onClick:()=>a(!0),children:`Disconnect`})}),(0,j.jsx)(`div`,{className:A.row,children:(0,j.jsxs)(`p`,{className:A.note,children:[(0,j.jsx)(`span`,{className:A.noteIcon,children:(0,j.jsx)(g,{size:14})}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`strong`,{children:`Where the tokens come from.`}),` Start the console with`,` `,(0,j.jsx)(`code`,{className:A.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.`]})]})}),(0,j.jsx)(p,{open:r,onClose:()=>a(!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:(0,j.jsxs)(`div`,{className:A.previewRow,style:{justifyContent:`flex-end`},children:[(0,j.jsx)(C,{ref:o,variant:`subtle`,onClick:()=>a(!1),children:`Cancel`}),(0,j.jsx)(C,{variant:`danger`,onClick:()=>void h(),children:`Disconnect`})]})})]})}function me(){if(typeof navigator>`u`)return!0;let e=`${navigator.platform??``} ${navigator.userAgent??``}`;return/mac|iphone|ipad|ipod/i.test(e)}function he(e){return[{title:`Navigation`,items:[{keys:[e,`1`],action:`Chat`},{keys:[e,`2`],action:`Autonomy`},{keys:[e,`3`],action:`Approvals`},{keys:[e,`4`],action:`Usage`},{keys:[e,`5`],action:`Settings`},{keys:[e,`K`],action:`Quick switcher`},{keys:[e,`,`],action:`Settings`}]},{title:`Chat`,items:[{keys:[e,`N`],action:`New chat`},{keys:[`Enter`],action:`Send message`},{keys:[`Shift`,`Enter`],action:`New line`},{keys:[`Esc`],action:`Stop dictation / close overlay`}]}]}function ge(){let e=me()?`⌘`:`Ctrl`;return(0,j.jsx)(M,{title:`Keyboard`,children:(0,j.jsx)(`div`,{className:A.shortcuts,children:he(e).flatMap(e=>e.items.map(t=>(0,j.jsxs)(`div`,{className:A.shortcut,children:[(0,j.jsx)(`span`,{children:t.action}),(0,j.jsx)(`span`,{className:A.keys,children:t.keys.map(e=>(0,j.jsx)(`kbd`,{className:A.key,children:e},e))})]},`${e.title}-${t.action}-${t.keys.join(`+`)}`)))})})}function _e(){let{appearance:e,set:t,reset:n}=l();return(0,j.jsxs)(`div`,{className:A.section,children:[(0,j.jsx)(`header`,{className:A.strip,"data-app-region":`drag`,children:(0,j.jsx)(`h2`,{className:A.stripTitle,children:`Settings`})}),(0,j.jsx)(`div`,{className:A.scroll,children:(0,j.jsxs)(`div`,{className:A.column,children:[(0,j.jsx)(fe,{appearance:e,onChange:t,onReset:n}),(0,j.jsx)($,{}),(0,j.jsx)(ge,{}),(0,j.jsx)(F,{}),(0,j.jsx)(R,{})]})})]})}export{_e as SettingsSection};
2
+ //# sourceMappingURL=SettingsSection-BwrpQlpP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsSection-BwrpQlpP.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/sections/SettingsSection.module.css","../../../../../../src/web-ui/routes/verse/sections/SettingRow.tsx","../../../../../../src/web-ui/routes/verse/onboarding/OnboardingPanel.tsx","../../../../../../package.json","../../../../../../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":["/* Settings — one reading column of quiet two-column rows. Shared by every\n panel in this folder so the label/control rhythm can never drift between\n Appearance and Connection. */\n\n.section {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--bg-canvas);\n}\n\n.strip {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n flex: none;\n height: var(--strip-height);\n padding: 0 var(--space-5);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n\n.stripTitle {\n font-family: var(--font-display);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-display);\n}\n\n.scroll {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n\n.column {\n width: 100%;\n max-width: var(--measure-read);\n margin: 0 auto;\n padding: var(--space-6) var(--space-5) var(--space-16);\n display: flex;\n flex-direction: column;\n gap: var(--space-8);\n}\n\n/* ---------------------------------------------------------------------------\n * Panel = a titled group of rows, separated by hairlines rather than cards.\n * ------------------------------------------------------------------------- */\n.panel {\n display: flex;\n flex-direction: column;\n}\n\n.panelHead {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--space-3);\n padding-bottom: var(--space-2);\n}\n\n.panelTitle {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n font-weight: var(--font-weight-medium);\n color: var(--text-tertiary);\n}\n\n.panelBody {\n border-top: 1px solid var(--border-subtle);\n}\n\n/* ---------------------------------------------------------------------------\n * Row: label + description on the left, control on the right.\n * ------------------------------------------------------------------------- */\n.row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--space-4);\n padding: var(--density-pad) 0;\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.rowStacked {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n}\n\n.rowText {\n min-width: 0;\n}\n\n.rowLabel {\n display: block;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n.rowDescription {\n margin-top: 2px;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n.rowControl {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.rowStacked .rowControl {\n justify-content: flex-start;\n}\n\n/* Below the shell's 900px breakpoint the two columns stack rather than\n squeezing a slider into 80px. */\n@media (max-width: 720px) {\n .row {\n grid-template-columns: minmax(0, 1fr);\n }\n .rowControl {\n justify-content: flex-start;\n }\n}\n\n/* ---------------------------------------------------------------------------\n * Accent controls\n * ------------------------------------------------------------------------- */\n.swatches {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.swatch {\n width: 22px;\n height: 22px;\n padding: 0;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-xs);\n cursor: pointer;\n transition: transform var(--duration-fast) var(--ease-standard);\n}\n\n.swatch:hover {\n transform: translateY(-1px);\n}\n\n/* Selection is carried by a ring AND the check glyph, never by color. */\n.swatch[aria-checked='true'] {\n box-shadow: 0 0 0 2px var(--bg-surface), 0 0 0 3px var(--text-primary);\n}\n\n.swatchCheck {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n mix-blend-mode: difference;\n}\n\n.sliderStack {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n width: min(320px, 100%);\n}\n\n.contrastWarning {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n margin-top: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border: 1px solid var(--status-warning-solid);\n border-radius: var(--radius-xs);\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n/* ---------------------------------------------------------------------------\n * Live preview\n * ------------------------------------------------------------------------- */\n.preview {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n padding: var(--space-4);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-surface);\n}\n\n.previewRow {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.previewHeading {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n letter-spacing: var(--tracking-display);\n font-weight: var(--font-weight-semibold);\n}\n\n.previewBody {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n.previewNumerals {\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n letter-spacing: var(--tracking-display);\n color: var(--text-primary);\n}\n\n/* ---------------------------------------------------------------------------\n * Connection / About\n * ------------------------------------------------------------------------- */\n.origin {\n width: min(320px, 100%);\n}\n\n.note {\n display: flex;\n gap: var(--space-2);\n padding: var(--space-3);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n /* --bg-canvas, not --bg-hover: in light both --bg-hover and --bg-code\n resolve to --gray-100, so the .code chip nested inside this note had no\n ground of its own and was distinguished only by its hairline — a rounded\n bordered box inside a rounded bordered box, which §1.2 forbids. */\n background: var(--bg-canvas);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.noteIcon {\n flex: none;\n margin-top: 1px;\n color: var(--text-tertiary);\n}\n\n.code {\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n padding: 1px 4px;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n background: var(--bg-code);\n color: var(--text-primary);\n white-space: nowrap;\n}\n\n/* ---------------------------------------------------------------------------\n * Keyboard reference\n * ------------------------------------------------------------------------- */\n.shortcuts {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n gap: 0 var(--space-6);\n}\n\n.shortcut {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n font-size: var(--text-sm-size);\n}\n\n.keys {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n flex: none;\n}\n\n.key {\n min-width: 20px;\n padding: 2px var(--space-1);\n border: 1px solid var(--border-default);\n border-bottom-width: 2px;\n border-radius: var(--radius-xs);\n background: var(--bg-surface);\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n text-align: center;\n}\n\n.about {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.aboutLine {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-sm-size);\n color: var(--text-secondary);\n}\n\n.aboutName {\n font-family: var(--font-display);\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n letter-spacing: var(--tracking-display);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--text-link);\n text-decoration: none;\n}\n\n.link:hover {\n text-decoration: underline;\n}\n\n/* ---- desktop shell (see desktop/README.md \"Desktop shell contract\") -----\n * In the Tauri window the OS title bar overlays the top 48px and the macOS\n * traffic lights float over the top-LEFT 92px of the WINDOW. This strip does\n * not start at the window's left edge — the 56px rail does — so the inset it\n * owes is the overlap, never the full 92px. Both vars are absent in a\n * browser, where the expression floors to 0px and the layout is unchanged. */\n.strip {\n padding-left: max(\n var(--space-5),\n calc(var(--app-traffic-light-inset, 0px) - var(--rail-width, 56px))\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 \"name\": \"@ashlr/hub\",\n \"version\": \"3.7.0\",\n \"description\": \"Local-first command center for agentic engineers.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": \"Mason Wyatt <mason@evero-consulting.com>\",\n \"homepage\": \"https://github.com/ashlrai/ashlr-hub#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ashlrai/ashlr-hub.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ashlrai/ashlr-hub/issues\"\n },\n \"keywords\": [\n \"cli\",\n \"agentic\",\n \"mcp\",\n \"local-first\",\n \"raycast\",\n \"developer-tools\",\n \"ai\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"ashlr\": \"bin/ashlr\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"scripts/run-verify-command.mjs\",\n \"scripts/scorecard-history-worker.mjs\",\n \"scripts/evaluators/preparation-verification-activity.mjs\",\n \"scripts/evaluators/preparation-verification-activity.d.mts\",\n \"scripts/evaluators/preparation-verification-protocol.mjs\",\n \"scripts/evaluators/preparation-verification-native.mjs\",\n \"scripts/evaluators/preparation-verification-native.d.mts\",\n \"schema\",\n \"CHANGELOG.md\",\n \"docs/README.md\",\n \"docs/QUICKSTART.md\",\n \"docs/DEMO.md\",\n \"docs/ARCHITECTURE.md\",\n \"docs/MISSION-OS.md\",\n \"docs/ASHLR-UNIVERSE.md\",\n \"docs/AUTONOMY-GAP.md\",\n \"docs/FIRM-DEMO.md\",\n \"docs/UNIVERSE-RESEARCH.md\",\n \"docs/UNIVERSE-AUTONOMY-RESEARCH.md\",\n \"docs/RESOURCE-POOLS.md\",\n \"docs/NORTH-STAR.md\",\n \"docs/ELITE-AGENT-EFFICIENCY.md\",\n \"docs/RUNTIME_ACTIVATION_AUTHORITY.md\",\n \"docs/contracts/CONTRACT-M515.md\",\n \"docs/contracts/CONTRACT-M521.md\",\n \"docs/contracts/CONTRACT-M568.md\",\n \"docs/contracts/CONTRACT-MISSION-RECEIPT-V1.md\"\n ],\n \"bundledDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"marked\",\n \"tar\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/api/index.d.ts\",\n \"import\": \"./dist/api/index.js\"\n },\n \"./core\": {\n \"types\": \"./dist/api/core.d.ts\",\n \"import\": \"./dist/api/core.js\"\n },\n \"./types\": {\n \"types\": \"./dist/api/types.d.ts\",\n \"import\": \"./dist/api/types.js\"\n },\n \"./plugin\": {\n \"types\": \"./dist/api/plugin.d.ts\",\n \"import\": \"./dist/api/plugin.js\"\n },\n \"./universe\": {\n \"types\": \"./dist/core/universe/index.d.ts\",\n \"import\": \"./dist/core/universe/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=22.15.0\"\n },\n \"scripts\": {\n \"prepublishOnly\": \"npm run typecheck && npm run lint && npm run test:ci && npm run test:web\",\n \"prepack\": \"npm run build\",\n \"build\": \"tsc -p tsconfig.json && node scripts/copy-assets.mjs && node scripts/build-preparation-builtin.mjs && vite build --config vite.config.web.ts && node scripts/build-release-dependency-inventory.mjs && node scripts/build-identity.mjs\",\n \"build:preparation-builtin\": \"node scripts/build-preparation-builtin.mjs\",\n \"build:binary\": \"node scripts/build-sea.mjs\",\n \"release:canary\": \"node scripts/run-signed-release-canary.mjs\",\n \"verify:local-production\": \"node scripts/run-local-production-gate.mjs\",\n \"build:web\": \"vite build --config vite.config.web.ts\",\n \"dev\": \"tsx src/cli/index.ts\",\n \"dev:web\": \"vite --config vite.config.web.ts\",\n \"test\": \"vitest run\",\n \"test:serial\": \"vitest run --no-file-parallelism\",\n \"test:web\": \"vitest run --config vitest.config.web.ts\",\n \"test:ci\": \"node scripts/test-ci.mjs\",\n \"test:invariants\": \"vitest run test/h*.test.ts --no-file-parallelism\",\n \"test:engineering-responsiveness\": \"vitest run --config vitest.config.engineering-performance.ts\",\n \"conformance:ecosystem\": \"tsx scripts/run-ecosystem-conformance.ts\",\n \"check:docs\": \"node scripts/check-documentation.mjs\",\n \"lint\": \"eslint . && npm run lint:realio-lane\",\n \"lint:realio-lane\": \"node scripts/check-realio-lane-membership.mjs\",\n \"typecheck\": \"tsc --noEmit && npm run typecheck:web\",\n \"typecheck:web\": \"tsc --noEmit -p src/web-ui/tsconfig.json\"\n },\n \"devDependencies\": {\n \"@testing-library/jest-dom\": \"^7.0.1\",\n \"@testing-library/react\": \"^16.1.0\",\n \"@testing-library/user-event\": \"^14.5.2\",\n \"@types/node\": \"^26.2.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@vitejs/plugin-react\": \"^6.1.0\",\n \"dompurify\": \"^3.4.15\",\n \"eslint\": \"^9.0.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0\",\n \"jsdom\": \"^25.0.1\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-router-dom\": \"^7.1.1\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.5.0\",\n \"typescript-eslint\": \"^8.61.0\",\n \"vite\": \"8.2.2\",\n \"vitest\": \"4.1.11\",\n \"yaml\": \"^2.8.1\"\n },\n \"overrides\": {\n \"fast-uri\": \"3.1.6\",\n \"hono\": \"4.13.5\",\n \"ip-address\": \"10.4.0\",\n \"vite\": \"8.2.2\",\n \"js-yaml\": \"4.3.2\",\n \"nanoid\": \"3.3.18\",\n \"qs\": \"6.16.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.30.0\",\n \"marked\": \"18.0.10\",\n \"tar\": \"7.5.22\"\n },\n \"bundleDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"marked\",\n \"tar\"\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, display size, density, display face, radius,\n * 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 type UiScale,\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\n/**\n * Display size. The labels say what the operator gets, not what the\n * multiplier is — \"1.25x\" is an implementation detail and a worse name than\n * \"Large\" for a control you pick by looking at the result.\n *\n * Only three, and none of them smaller than Default: the type ramp bottoms\n * out at a 12px body floor, and Density directly below is already the\n * \"tighter\" control. See the [data-ui-scale] block in design/tokens.css.\n */\nconst UI_SCALE_OPTIONS = [\n { value: 'default' as UiScale, label: 'Default' },\n { value: 'large' as UiScale, label: 'Large' },\n { value: 'xlarge' as UiScale, label: 'Extra large' },\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, display size, 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\n label=\"Display size\"\n description=\"Scales text AND spacing together across the whole app, for a large display or a long session. Applies as you pick it.\"\n >\n <Segmented\n aria-label=\"Display size\"\n options={UI_SCALE_OPTIONS}\n value={appearance.uiScale}\n onChange={(uiScale) => onChange({ uiScale })}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Density\"\n description=\"Row height and control padding across every view. Independent of display size — a large, tightly packed interface is a valid choice.\"\n >\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"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ ._topology_1rqbo_1{margin:var(--space-6) 0;min-width:0;color:var(--text-primary);font-family:var(--font-ui)}._header_1rqbo_2{justify-content:space-between;align-items:flex-start;gap:var(--space-4);display:flex}._header_1rqbo_2 h3{font-family:var(--font-display);font-size:var(--text-2xl-size);letter-spacing:-.035em;margin:0}._header_1rqbo_2 p{max-width:68ch;margin:var(--space-2) 0;color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.6}._snapshot_1rqbo_5{border:1px solid var(--border-strong);font-size:var(--text-xs-size);white-space:nowrap;border-radius:var(--radius-xs);padding:5px 8px}._counts_1rqbo_6{margin:var(--space-4) 0 0;border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);padding:var(--space-3) 0;gap:var(--space-3) var(--space-6);flex-wrap:wrap;display:flex}._counts_1rqbo_6>div{align-items:baseline;gap:var(--space-2);display:flex}._counts_1rqbo_6 dt{font-size:var(--text-xs-size);color:var(--text-secondary)}._counts_1rqbo_6 dd{font-family:var(--font-display);font-size:var(--text-xl-size);font-variant-numeric:tabular-nums;margin:0}._finder_1rqbo_10{padding:var(--space-4);border:1px solid var(--border-strong);background:var(--bg-surface);border-top:0}._finderControls_1rqbo_11{align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;display:flex}._finderControls_1rqbo_11 label{color:var(--text-secondary);font-size:var(--text-xs-size);flex-direction:column;gap:6px;min-width:0;display:flex}._searchLabel_1rqbo_13{flex:220px}._finderControls_1rqbo_11 :is(input,select){box-sizing:border-box;border:1px solid var(--border-strong);border-radius:var(--radius-xs);background:var(--bg-canvas);min-width:0;max-width:100%;min-height:38px;color:var(--text-primary);font:inherit;font-size:var(--text-sm-size);padding:7px 10px}._finderControls_1rqbo_11 input::placeholder{color:var(--text-secondary);opacity:1}._utilityButton_1rqbo_16{border:1px solid var(--border-strong);border-radius:var(--radius-xs);background:var(--bg-surface);min-height:38px;color:var(--text-primary);font:inherit;font-size:var(--text-xs-size);cursor:pointer;padding:7px 10px}._utilityButton_1rqbo_16:hover:not(:disabled){background:var(--bg-hover);border-color:var(--accent-500)}._utilityButton_1rqbo_16:disabled{opacity:.5;cursor:default}._finderMeta_1rqbo_19{justify-content:space-between;align-items:baseline;gap:6px var(--space-4);margin-top:var(--space-3);color:var(--text-secondary);font-size:var(--text-xs-size);flex-wrap:wrap;line-height:1.5;display:flex}._finderMeta_1rqbo_19 p{flex:300px;max-width:70ch;margin:0}._finderMeta_1rqbo_19>span{font-variant-numeric:tabular-nums}._results_1rqbo_22{margin:var(--space-3) 0 0;gap:6px var(--space-3);grid-template-columns:repeat(2,minmax(0,1fr));padding:0;list-style:none;display:grid}._results_1rqbo_22 li{min-width:0}._result_1rqbo_22{text-align:left;gap:5px var(--space-2);width:100%;color:var(--text-primary);background:var(--bg-canvas);border:1px solid #0000;border-left:2px solid var(--border-strong);border-radius:0 var(--radius-xs) var(--radius-xs) 0;font:inherit;cursor:pointer;grid-template-columns:minmax(0,1fr) auto;padding:10px 12px;display:grid}._result_1rqbo_22:hover{background:var(--bg-hover)}._result_1rqbo_22[aria-pressed=true]{border-color:var(--accent-500);background:var(--bg-selected)}._resultName_1rqbo_27{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);overflow-wrap:anywhere}._resultState_1rqbo_28{font-size:var(--text-xs-size);color:var(--text-secondary);align-self:start}._resultState_1rqbo_28[data-state=held]{color:var(--status-warning-fg)}._resultState_1rqbo_28[data-state=completed]{color:var(--status-success-fg)}._resultState_1rqbo_28[data-state=in-flight]{color:var(--status-unknown-fg)}._resultReason_1rqbo_32{overflow-wrap:anywhere;color:var(--text-secondary);font-size:var(--text-xs-size);grid-column:1/-1}._pagination_1rqbo_33{justify-content:flex-end;align-items:center;gap:var(--space-2);margin-top:var(--space-3);font-size:var(--text-xs-size);flex-wrap:wrap;display:flex}._pagination_1rqbo_33>span{color:var(--text-secondary);font-variant-numeric:tabular-nums;margin-right:auto}._noResults_1rqbo_35{margin:var(--space-3) 0 0;padding:var(--space-3) 0;color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.6}._selectionNote_1rqbo_36{border-left:2px solid var(--accent-500);padding-left:var(--space-3);color:var(--text-secondary)}._workspace_1rqbo_37{border:1px solid var(--border-strong);border-radius:0 0 var(--radius-sm) var(--radius-sm);border-top:0;grid-template-columns:minmax(0,1fr) minmax(250px,310px);display:grid;overflow:hidden}._board_1rqbo_38{background:var(--bg-canvas);scrollbar-gutter:stable;min-width:0;max-height:620px;overflow:auto}._canvas_1rqbo_39{isolation:isolate;position:relative}._edges_1rqbo_40{pointer-events:none;position:absolute;inset:0}._edge_1rqbo_40,._selectedEdge_1rqbo_41{fill:none;stroke:var(--border-strong);stroke-width:1.5px}._selectedEdge_1rqbo_41{stroke:var(--accent-500);stroke-width:2px}._column_1rqbo_43{width:192px;color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);position:absolute;top:20px}._node_1rqbo_44{text-align:left;width:192px;min-height:80px;color:var(--text-primary);background:var(--bg-surface);border:1px solid var(--border-strong);border-left:3px solid var(--status-neutral-solid);cursor:pointer;border-radius:3px 10px 10px 3px;flex-direction:column;gap:8px;padding:13px 14px;display:flex;position:absolute}._node_1rqbo_44:hover{background:var(--bg-hover)}._node_1rqbo_44[aria-pressed=true]{border-color:var(--accent-500);background:var(--bg-selected);box-shadow:0 0 0 1px var(--accent-500)}._nodeName_1rqbo_47{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-family:var(--font-display);font-weight:var(--font-weight-semibold);font-size:var(--text-md-size);overflow:hidden}._nodeState_1rqbo_48{font-size:var(--text-xs-size);color:var(--text-secondary)}._node_1rqbo_44[data-state=completed]{border-left-color:var(--status-success-solid)}._node_1rqbo_44[data-state=held]{border-left-color:var(--status-warning-solid)}._node_1rqbo_44[data-state=in-flight]{border-left-color:var(--status-unknown-solid)}._detail_1rqbo_52{padding:var(--space-5);border-left:1px solid var(--border-strong);background:var(--bg-surface);min-width:0}._detail_1rqbo_52 h4{margin:var(--space-3) 0;font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.025em;overflow-wrap:anywhere}._detail_1rqbo_52 p{font-size:var(--text-sm-size);line-height:1.6}._detailState_1rqbo_55{border-radius:var(--radius-xs);background:var(--status-neutral-bg);color:var(--status-neutral-fg);font-size:var(--text-xs-size);padding:4px 8px;display:inline-block}._detailState_1rqbo_55[data-state=completed]{background:var(--status-success-bg);color:var(--status-success-fg)}._detailState_1rqbo_55[data-state=held]{background:var(--status-warning-bg);color:var(--status-warning-fg)}._detailState_1rqbo_55[data-state=in-flight]{background:var(--status-unknown-bg);color:var(--status-unknown-fg)}._facts_1rqbo_59{margin:var(--space-4) 0;gap:var(--space-3);display:grid}._facts_1rqbo_59 dt{font-size:var(--text-xs-size);color:var(--text-secondary);margin-bottom:3px}._facts_1rqbo_59 dd{font-size:var(--text-sm-size);overflow-wrap:anywhere;margin:0}._detail_1rqbo_52 h5{font-size:var(--text-sm-size);font-weight:var(--font-weight-semibold);margin:var(--space-5) 0 var(--space-2)}._relationships_1rqbo_63{margin:0;padding:0;list-style:none}._relationships_1rqbo_63 li{border-bottom:1px solid var(--border-subtle);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 8px;padding:7px 0;display:flex}._relationships_1rqbo_63 li>span:last-child{color:var(--text-secondary)}._relationships_1rqbo_63 button{min-height:28px;color:var(--text-link);text-align:left;text-underline-offset:3px;overflow-wrap:anywhere;cursor:pointer;font:inherit;background:0 0;border:0;padding:3px 0;text-decoration:underline}._note_1rqbo_67,._legend_1rqbo_67,._empty_1rqbo_67{color:var(--text-secondary);font-size:var(--text-xs-size);max-width:78ch;line-height:1.6}._legend_1rqbo_67{margin:var(--space-3) 0 0}._notice_1rqbo_69{padding:var(--space-3);border-left:3px solid var(--status-unknown-solid);background:var(--status-unknown-bg);color:var(--status-unknown-fg);font-size:var(--text-sm-size);margin:var(--space-3) 0;line-height:1.6}._empty_1rqbo_67{padding:var(--space-5) 0;font-size:var(--text-sm-size)}._topology_1rqbo_1 :is(button,input,select,[tabindex]):focus-visible{outline:3px solid var(--border-focus);outline-offset:3px}._board_1rqbo_38:focus-visible{outline-offset:-3px}._srOnly_1rqbo_73{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (max-width:900px){._workspace_1rqbo_37{grid-template-columns:minmax(0,1fr)}._detail_1rqbo_52{border-left:0;border-top:1px solid var(--border-strong)}._board_1rqbo_38{max-height:430px}}@media (max-width:500px){._header_1rqbo_2{gap:var(--space-2);flex-direction:column}._counts_1rqbo_6{gap:var(--space-2) var(--space-4)}._detail_1rqbo_52{padding:var(--space-4)}}@media (max-width:620px){._results_1rqbo_22{grid-template-columns:minmax(0,1fr)}._finderControls_1rqbo_11 label:not(._searchLabel_1rqbo_13){flex:100%}._finder_1rqbo_10{padding:var(--space-3)}}._changes_qcw1f_1{margin:var(--space-5) 0;padding:var(--space-4) 0;border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);color:var(--text-primary);font-family:var(--font-ui);min-width:0}._header_qcw1f_2{justify-content:space-between;align-items:baseline;gap:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}._header_qcw1f_2 h3{font-family:var(--font-display);font-size:var(--text-lg-size);letter-spacing:-.025em;margin:0}._labels_qcw1f_4{gap:var(--space-2);flex-wrap:wrap;display:flex}._labels_qcw1f_4>span{border:1px solid var(--border-strong);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size);padding:4px 7px}._labels_qcw1f_4 ._historical_qcw1f_6{border-color:var(--status-warning-solid);color:var(--status-warning-fg)}._description_qcw1f_7,._note_qcw1f_7,._footnote_qcw1f_7{max-width:78ch;color:var(--text-secondary);font-size:var(--text-xs-size);line-height:1.6}._description_qcw1f_7{margin:var(--space-2) 0 var(--space-3)}._times_qcw1f_9{gap:var(--space-3) var(--space-5);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}._times_qcw1f_9 dt{font-size:var(--text-xs-size);color:var(--text-secondary);margin-bottom:4px}._times_qcw1f_9 dd{overflow-wrap:anywhere;font-size:var(--text-sm-size);font-variant-numeric:tabular-nums;margin:0}._warning_qcw1f_12{padding-left:var(--space-3);border-left:2px solid var(--status-warning-solid);color:var(--text-secondary);font-size:var(--text-xs-size);max-width:78ch;margin:var(--space-3) 0;line-height:1.6}._baseline_qcw1f_13{font-size:var(--text-sm-size);max-width:78ch;margin:var(--space-4) 0 0;line-height:1.6}._counts_qcw1f_14{gap:var(--space-2) var(--space-5);margin:var(--space-4) 0 var(--space-3);flex-wrap:wrap;display:flex}._counts_qcw1f_14>div{align-items:baseline;gap:var(--space-2);display:flex}._counts_qcw1f_14 dt{font-size:var(--text-xs-size);color:var(--text-secondary)}._counts_qcw1f_14 dd{font-family:var(--font-display);font-size:var(--text-lg-size);font-variant-numeric:tabular-nums;margin:0}._disclosure_qcw1f_18{margin-top:var(--space-3)}._disclosure_qcw1f_18 summary{background:var(--bg-canvas);border-left:2px solid var(--accent-500);border-radius:0 var(--radius-xs) var(--radius-xs) 0;font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);cursor:pointer;padding:10px 12px}._disclosure_qcw1f_18 summary:hover{background:var(--bg-hover)}._disclosure_qcw1f_18 summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._rows_qcw1f_22{margin:0;padding:0;list-style:none}._row_qcw1f_22{gap:var(--space-3) var(--space-4);padding:var(--space-3) 12px;border-bottom:1px solid var(--border-default);grid-template-columns:minmax(130px,1fr) minmax(0,3fr);display:grid}._field_qcw1f_24{min-width:0}._field_qcw1f_24 h4{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);overflow-wrap:anywhere;margin:0}._field_qcw1f_24>span{color:var(--text-secondary);font-size:var(--text-xs-size);overflow-wrap:anywhere;margin-top:4px;display:block}._values_qcw1f_27{gap:var(--space-3);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}._values_qcw1f_27 dt{font-size:var(--text-xs-size);color:var(--text-secondary);margin-bottom:4px}._values_qcw1f_27 dd{font-size:var(--text-sm-size);overflow-wrap:anywhere;white-space:pre-wrap;margin:0;line-height:1.5}._footnote_qcw1f_7{margin:var(--space-3) 0 0}@media (max-width:650px){._row_qcw1f_22{grid-template-columns:minmax(0,1fr)}}@media (max-width:420px){._times_qcw1f_9,._values_qcw1f_27{grid-template-columns:minmax(0,1fr)}}._inspector_123iu_1{margin-bottom:var(--space-8);padding:var(--space-5);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-surface);color:var(--text-primary)}._header_123iu_2{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-5);display:flex}._header_123iu_2 h2{font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.025em}._header_123iu_2 p,._note_123iu_4,._empty_123iu_4,._field_123iu_4 p,._control_123iu_4 p{max-width:78ch;color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.6}._readOnly_123iu_5{padding:var(--space-1) var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);white-space:nowrap;font-size:var(--text-xs-size)}._form_123iu_6{align-items:flex-start;gap:var(--space-3);flex-wrap:wrap;display:flex}._field_123iu_4{flex:300px;max-width:560px}._field_123iu_4 label{margin-bottom:var(--space-2);font-size:var(--text-sm-size);font-weight:var(--font-weight-semibold);display:block}._field_123iu_4 input{width:100%;min-height:42px;padding:var(--space-2) var(--space-3);background:var(--bg-canvas);color:var(--text-primary);border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:var(--font-ui)}._field_123iu_4 p{margin-top:var(--space-2)}._form_123iu_6 button{min-height:42px;padding:var(--space-2) var(--space-4);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-weight:var(--font-weight-medium);margin-top:28px}._form_123iu_6 button[type=submit]{background:var(--accent-600);border-color:var(--accent-600);color:var(--accent-contrast)}._form_123iu_6 button:disabled{opacity:.6;cursor:wait}._inspector_123iu_1 :is(button,input,summary,[tabindex]):focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._identity_123iu_15{margin-top:var(--space-5);font-size:var(--text-lg-size);overflow-wrap:anywhere}._identity_123iu_15 code{font-family:var(--font-ui);font-weight:var(--font-weight-semibold)}._note_123iu_4,._empty_123iu_4{margin-top:var(--space-3)}._warning_123iu_18{margin-top:var(--space-3);padding:var(--space-3);border-left:3px solid var(--status-warning-solid);background:var(--status-warning-bg);color:var(--status-warning-fg);font-size:var(--text-sm-size)}._facts_123iu_19{gap:var(--space-4);margin:var(--space-5) 0;grid-template-columns:repeat(auto-fit,minmax(min(100%,205px),1fr));display:grid}._facts_123iu_19 dt{color:var(--text-secondary);font-size:var(--text-xs-size);margin-bottom:var(--space-1)}._facts_123iu_19 dd{font-size:var(--text-sm-size);overflow-wrap:anywhere;font-variant-numeric:tabular-nums;margin:0}._control_123iu_4{padding:var(--space-4);border-left:3px solid var(--accent-500);background:var(--bg-canvas);margin-bottom:var(--space-5)}._control_123iu_4 h4{font-family:var(--font-display);font-size:var(--text-lg-size)}._sequence_123iu_24{gap:var(--space-5);margin:var(--space-4) 0;grid-template-columns:1fr 1fr;padding:0;list-style:none;display:grid}._sequence_123iu_24 li{gap:var(--space-1);border-top:2px solid var(--border-strong);padding-top:var(--space-3);font-size:var(--text-sm-size);overflow-wrap:anywhere;flex-direction:column;display:flex}._sequence_123iu_24 span,._sequence_123iu_24 time{color:var(--text-secondary)}._tableWrap_123iu_27{max-width:100%;overflow-x:auto}._tableWrap_123iu_27 table{border-collapse:collapse;width:100%;font-size:var(--text-sm-size);text-align:left}._tableWrap_123iu_27 caption{text-align:left;font-weight:var(--font-weight-semibold);padding:var(--space-3) 0}._tableWrap_123iu_27 th,._tableWrap_123iu_27 td{border-bottom:1px solid var(--border-default);padding:var(--space-3);vertical-align:top;overflow-wrap:anywhere;min-width:115px}._tableWrap_123iu_27 thead{color:var(--text-secondary);background:var(--bg-canvas)}._reasons_123iu_32{margin-top:var(--space-4);font-size:var(--text-sm-size);overflow-wrap:anywhere}._reasons_123iu_32 summary{cursor:pointer;padding:var(--space-2) 0}._reasons_123iu_32 ul{padding-left:var(--space-5)}@media (max-width:650px){._inspector_123iu_1{padding:var(--space-4)}._form_123iu_6 button{margin-top:0}._field_123iu_4{flex-basis:100%;max-width:none}._sequence_123iu_24{grid-template-columns:1fr}}._shell_8ebyv_1{min-height:100%}._scopeBar_8ebyv_2{justify-content:space-between;align-items:center;gap:var(--space-5);padding:var(--space-4) max(var(--space-6), calc((100vw - 1320px) / 2));border-bottom:1px solid var(--border-default);background:var(--bg-surface);display:flex}._scope_8ebyv_2{align-items:center;gap:var(--space-2) var(--space-3);flex-wrap:wrap;min-width:0;display:flex}._brand_8ebyv_4{align-items:center;gap:var(--space-3);flex-wrap:wrap;min-width:0;display:flex}._brand_8ebyv_4 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_8ebyv_6{width:var(--space-8);height:var(--space-8);fill:none;stroke:var(--accent-600);stroke-width:1.8px;stroke-linejoin:round;stroke-linecap:round;flex-shrink:0}._workspace_8ebyv_7{padding-left:var(--space-3);border-left:1px solid var(--border-strong);color:var(--text-secondary);font-size:var(--text-sm-size)}._badge_8ebyv_8{padding:var(--space-1) var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);color:var(--text-secondary);background:var(--bg-canvas);font-size:var(--text-xs-size);white-space:nowrap}._store_8ebyv_9{min-width:0;font-size:var(--text-xs-size);color:var(--text-secondary)}._store_8ebyv_9[open]{flex-basis:100%}._store_8ebyv_9 summary{cursor:pointer;padding:var(--space-2) 0;min-height:32px}._root_8ebyv_12{max-width:72ch;padding:var(--space-3);background:var(--bg-surface-raised);border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow-wrap:anywhere;font-size:var(--text-xs-size);color:var(--text-primary);display:block}._actions_8ebyv_13{gap:var(--space-2);flex-shrink:0;display:flex}._actions_8ebyv_13 button,._notice_8ebyv_14 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_8ebyv_13 button:hover,._notice_8ebyv_14 button:hover{background:var(--bg-hover)}._main_8ebyv_16{max-width:1368px;padding:var(--space-6);margin:auto}._explanation_8ebyv_17{color:var(--text-secondary);font-size:var(--text-sm-size);margin-bottom:var(--space-6);max-width:85ch}._notice_8ebyv_14{align-items:flex-start;gap:var(--space-3);padding:var(--space-5);border:1px solid var(--status-warning-solid);border-radius:var(--radius-md);background:var(--status-warning-bg);flex-direction:column;display:flex}._notice_8ebyv_14 h1{font-size:var(--text-xl-size)}._checking_8ebyv_20{padding:var(--space-8)}@media (max-width:1000px){._brand_8ebyv_4{flex-basis:100%}}@media (max-width:700px){._scopeBar_8ebyv_2{align-items:stretch;gap:var(--space-3);padding:var(--space-4);flex-direction:column}._actions_8ebyv_13{justify-content:flex-end}._main_8ebyv_16{padding:var(--space-5) var(--space-4)}}