@ashlr/hub 3.10.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/dist/authority-surface.json +43 -23
  3. package/dist/build-identity.json +2 -2
  4. package/dist/core/daemon/capacity-publisher.d.ts +19 -0
  5. package/dist/core/daemon/capacity-publisher.js +49 -2
  6. package/dist/core/daemon/capacity-publisher.js.map +1 -1
  7. package/dist/core/daemon/overnight-status.d.ts +13 -0
  8. package/dist/core/daemon/overnight-status.js +93 -8
  9. package/dist/core/daemon/overnight-status.js.map +1 -1
  10. package/dist/core/fleet/dispatch-router.js +26 -9
  11. package/dist/core/fleet/dispatch-router.js.map +1 -1
  12. package/dist/core/fleet/fleet-runtime-journal.js +12 -5
  13. package/dist/core/fleet/fleet-runtime-journal.js.map +1 -1
  14. package/dist/core/fleet/fleet-types.d.ts +13 -0
  15. package/dist/core/routing/budget-store.js +11 -5
  16. package/dist/core/routing/budget-store.js.map +1 -1
  17. package/dist/core/routing/capacity-history-api.d.ts +30 -0
  18. package/dist/core/routing/capacity-history-api.js +147 -0
  19. package/dist/core/routing/capacity-history-api.js.map +1 -0
  20. package/dist/core/routing/capacity-history-types.d.ts +63 -0
  21. package/dist/core/routing/capacity-history-types.js +18 -0
  22. package/dist/core/routing/capacity-history-types.js.map +1 -0
  23. package/dist/core/routing/capacity-history.d.ts +130 -0
  24. package/dist/core/routing/capacity-history.js +654 -0
  25. package/dist/core/routing/capacity-history.js.map +1 -0
  26. package/dist/core/routing/headroom.d.ts +5 -1
  27. package/dist/core/routing/headroom.js +82 -41
  28. package/dist/core/routing/headroom.js.map +1 -1
  29. package/dist/core/routing/router.d.ts +8 -1
  30. package/dist/core/routing/router.js +49 -16
  31. package/dist/core/routing/router.js.map +1 -1
  32. package/dist/core/routing/seat-reasons.d.ts +35 -0
  33. package/dist/core/routing/seat-reasons.js +48 -0
  34. package/dist/core/routing/seat-reasons.js.map +1 -0
  35. package/dist/core/routing/types.d.ts +37 -0
  36. package/dist/core/routing/types.js.map +1 -1
  37. package/dist/core/verse/fleet-history-types.d.ts +12 -4
  38. package/dist/core/verse/fleet-history-types.js +4 -2
  39. package/dist/core/verse/fleet-history-types.js.map +1 -1
  40. package/dist/core/verse/fleet-live-api.d.ts +14 -1
  41. package/dist/core/verse/fleet-live-api.js +31 -11
  42. package/dist/core/verse/fleet-live-api.js.map +1 -1
  43. package/dist/core/verse/preferences.d.ts +3 -1
  44. package/dist/core/verse/preferences.js +5 -2
  45. package/dist/core/verse/preferences.js.map +1 -1
  46. package/dist/core/verse/types.d.ts +5 -1
  47. package/dist/core/verse/types.js.map +1 -1
  48. package/dist/core/verse/verse-api.js +2 -1
  49. package/dist/core/verse/verse-api.js.map +1 -1
  50. package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js → ActionMenu-BBB7VYjz.js} +2 -2
  51. package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js.map → ActionMenu-BBB7VYjz.js.map} +1 -1
  52. package/dist/core/web/public/next/assets/Advanced-Bywv_iYR.css +1 -0
  53. package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js +2 -0
  54. package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js.map +1 -0
  55. package/dist/core/web/public/next/assets/{App-DyBg1v_q.js → App-CbDCLAxn.js} +5 -5
  56. package/dist/core/web/public/next/assets/{App-DyBg1v_q.js.map → App-CbDCLAxn.js.map} +1 -1
  57. package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js +2 -0
  58. package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js.map +1 -0
  59. package/dist/core/web/public/next/assets/AreaTrend-BgnK0wAy.js +2 -0
  60. package/dist/core/web/public/next/assets/AreaTrend-BgnK0wAy.js.map +1 -0
  61. package/dist/core/web/public/next/assets/AutonomySection-BF5UCsMv.js +2 -0
  62. package/dist/core/web/public/next/assets/{AutonomySection-CoMngwNB.js.map → AutonomySection-BF5UCsMv.js.map} +1 -1
  63. package/dist/core/web/public/next/assets/BranchBar-BZNQ50YE.css +1 -0
  64. package/dist/core/web/public/next/assets/BranchBar-nfSb59Kv.js +2 -0
  65. package/dist/core/web/public/next/assets/BranchBar-nfSb59Kv.js.map +1 -0
  66. package/dist/core/web/public/next/assets/BudgetControl-BESM12dO.js +2 -0
  67. package/dist/core/web/public/next/assets/BudgetControl-BESM12dO.js.map +1 -0
  68. package/dist/core/web/public/next/assets/BurnDown-D1AfskPT.js +2 -0
  69. package/dist/core/web/public/next/assets/BurnDown-D1AfskPT.js.map +1 -0
  70. package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js → Button-Cr_qkQEc.js} +2 -2
  71. package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js.map → Button-Cr_qkQEc.js.map} +1 -1
  72. package/dist/core/web/public/next/assets/CapacityStrip-Cc28CyWk.css +1 -0
  73. package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js +2 -0
  74. package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js.map +1 -0
  75. package/dist/core/web/public/next/assets/ChatSection-DoqjyVoj.js +3 -0
  76. package/dist/core/web/public/next/assets/{ChatSection-B9cdRKUh.js.map → ChatSection-DoqjyVoj.js.map} +1 -1
  77. package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js → CommandPalette-lLV-OR63.js} +2 -2
  78. package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js.map → CommandPalette-lLV-OR63.js.map} +1 -1
  79. package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js +2 -0
  80. package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js.map +1 -0
  81. package/dist/core/web/public/next/assets/Composer-ByzxOJK6.css +1 -0
  82. package/dist/core/web/public/next/assets/Composer.module-C8U73KdQ.js +2 -0
  83. package/dist/core/web/public/next/assets/{Composer.module-DJMdrqNt.js.map → Composer.module-C8U73KdQ.js.map} +1 -1
  84. package/dist/core/web/public/next/assets/DiffPane-BAvvbBsf.css +1 -0
  85. package/dist/core/web/public/next/assets/DiffPane-BVxhK-cy.js +2 -0
  86. package/dist/core/web/public/next/assets/DiffPane-BVxhK-cy.js.map +1 -0
  87. package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js → DiffViewer-yCdw9J-Y.js} +2 -2
  88. package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js.map → DiffViewer-yCdw9J-Y.js.map} +1 -1
  89. package/dist/core/web/public/next/assets/DockHost-B4RaYOET.css +1 -0
  90. package/dist/core/web/public/next/assets/DockHost-BZReKwos.js +2 -0
  91. package/dist/core/web/public/next/assets/DockHost-BZReKwos.js.map +1 -0
  92. package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js → EmptyState-D1GDxVZy.js} +2 -2
  93. package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js.map → EmptyState-D1GDxVZy.js.map} +1 -1
  94. package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js → Epistemic-DRp4dBfB.js} +2 -2
  95. package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js.map → Epistemic-DRp4dBfB.js.map} +1 -1
  96. package/dist/core/web/public/next/assets/FleetSection-CFiWeOEs.css +1 -0
  97. package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js +3 -0
  98. package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js.map +1 -0
  99. package/dist/core/web/public/next/assets/Funnel-zvDj3He4.js +2 -0
  100. package/dist/core/web/public/next/assets/Funnel-zvDj3He4.js.map +1 -0
  101. package/dist/core/web/public/next/assets/GearTray-CkviqjYr.js +2 -0
  102. package/dist/core/web/public/next/assets/GearTray-CkviqjYr.js.map +1 -0
  103. package/dist/core/web/public/next/assets/GrowthSection-Bg5sW0jI.js +2 -0
  104. package/dist/core/web/public/next/assets/GrowthSection-Bg5sW0jI.js.map +1 -0
  105. package/dist/core/web/public/next/assets/HandoffDialog-DcPj1ri9.js +2 -0
  106. package/dist/core/web/public/next/assets/HandoffDialog-DcPj1ri9.js.map +1 -0
  107. package/dist/core/web/public/next/assets/{Input-CTu0CycC.js → Input-Ci7TD96x.js} +2 -2
  108. package/dist/core/web/public/next/assets/{Input-CTu0CycC.js.map → Input-Ci7TD96x.js.map} +1 -1
  109. package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js → LeaderCard-BSFTlMRF.js} +2 -2
  110. package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js.map → LeaderCard-BSFTlMRF.js.map} +1 -1
  111. package/dist/core/web/public/next/assets/{MatrixHeatmap-9dKgJ_pT.css → MatrixHeatmap-Bmnvo1l1.css} +1 -1
  112. package/dist/core/web/public/next/assets/MatrixHeatmap-DojKZe9L.js +2 -0
  113. package/dist/core/web/public/next/assets/MatrixHeatmap-DojKZe9L.js.map +1 -0
  114. package/dist/core/web/public/next/assets/McpSection-CvcYu1X_.js +2 -0
  115. package/dist/core/web/public/next/assets/{McpSection-1UncWBpW.js.map → McpSection-CvcYu1X_.js.map} +1 -1
  116. package/dist/core/web/public/next/assets/MessageMarkdown-BrLCrb73.js +3 -0
  117. package/dist/core/web/public/next/assets/{MessageMarkdown-C4pl9LI5.js.map → MessageMarkdown-BrLCrb73.js.map} +1 -1
  118. package/dist/core/web/public/next/assets/MessageMarkdown-Cgh5f1-Q.css +1 -0
  119. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js → MessageMarkdownRenderer-CjmdBw2p.js} +2 -2
  120. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js.map → MessageMarkdownRenderer-CjmdBw2p.js.map} +1 -1
  121. package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js → Meter-DTHbmhQg.js} +2 -2
  122. package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js.map → Meter-DTHbmhQg.js.map} +1 -1
  123. package/dist/core/web/public/next/assets/MindSection-DcO9fmYe.js +2 -0
  124. package/dist/core/web/public/next/assets/MindSection-DcO9fmYe.js.map +1 -0
  125. package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js +2 -0
  126. package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js.map +1 -0
  127. package/dist/core/web/public/next/assets/NeedsYouDrawer-BpvidnM2.css +1 -0
  128. package/dist/core/web/public/next/assets/NeedsYouDrawer-hiTINupk.js +2 -0
  129. package/dist/core/web/public/next/assets/NeedsYouDrawer-hiTINupk.js.map +1 -0
  130. package/dist/core/web/public/next/assets/NeedsYouList-B4Z37Phx.js +2 -0
  131. package/dist/core/web/public/next/assets/NeedsYouList-B4Z37Phx.js.map +1 -0
  132. package/dist/core/web/public/next/assets/NeedsYouList-CruOt4JT.css +1 -0
  133. package/dist/core/web/public/next/assets/NewChatDialog-utSckh7C.js +3 -0
  134. package/dist/core/web/public/next/assets/{NewChatDialog-B_BsS9pr.js.map → NewChatDialog-utSckh7C.js.map} +1 -1
  135. package/dist/core/web/public/next/assets/OnboardingFlow-7N3YSUHN.js +2 -0
  136. package/dist/core/web/public/next/assets/{OnboardingFlow-CtCPpgoX.js.map → OnboardingFlow-7N3YSUHN.js.map} +1 -1
  137. package/dist/core/web/public/next/assets/PreviewPane-CqzkaAjG.js +2 -0
  138. package/dist/core/web/public/next/assets/PreviewPane-CqzkaAjG.js.map +1 -0
  139. package/dist/core/web/public/next/assets/PreviewPane-DoMsJSG3.css +1 -0
  140. package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js +2 -0
  141. package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js.map +1 -0
  142. package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js → RefreshIndicator-C1uQIegT.js} +2 -2
  143. package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js.map → RefreshIndicator-C1uQIegT.js.map} +1 -1
  144. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js → ResourcePoolConsoleApp-DXjjV6Sh.js} +4 -4
  145. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js.map → ResourcePoolConsoleApp-DXjjV6Sh.js.map} +1 -1
  146. package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js → RouteErrorBoundary-D1LZxQjN.js} +2 -2
  147. package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js.map → RouteErrorBoundary-D1LZxQjN.js.map} +1 -1
  148. package/dist/core/web/public/next/assets/SeatSelector-CT92PqM_.js +3 -0
  149. package/dist/core/web/public/next/assets/{SeatSelector-DaUO-zoK.js.map → SeatSelector-CT92PqM_.js.map} +1 -1
  150. package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js → Segmented-BMvq-FfD.js} +2 -2
  151. package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js.map → Segmented-BMvq-FfD.js.map} +1 -1
  152. package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js → Select-DkdeoSQn.js} +2 -2
  153. package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js.map → Select-DkdeoSQn.js.map} +1 -1
  154. package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js → SessionInsightChip-CwlakUYU.js} +2 -2
  155. package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js.map → SessionInsightChip-CwlakUYU.js.map} +1 -1
  156. package/dist/core/web/public/next/assets/SessionSearch-DFByh2NZ.js +2 -0
  157. package/dist/core/web/public/next/assets/{SessionSearch-B5aQ0BCM.js.map → SessionSearch-DFByh2NZ.js.map} +1 -1
  158. package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js +2 -0
  159. package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js.map +1 -0
  160. package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js → Sheet-C7APkGPt.js} +2 -2
  161. package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js.map → Sheet-C7APkGPt.js.map} +1 -1
  162. package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js → ShortcutsOverlay-ZPyXUS_I.js} +2 -2
  163. package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js.map → ShortcutsOverlay-ZPyXUS_I.js.map} +1 -1
  164. package/dist/core/web/public/next/assets/Sidebar-BRc1vGDF.css +1 -0
  165. package/dist/core/web/public/next/assets/Sidebar-Chsgazmk.js +3 -0
  166. package/dist/core/web/public/next/assets/Sidebar-Chsgazmk.js.map +1 -0
  167. package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js → Slider-B0kjW7cd.js} +2 -2
  168. package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js.map → Slider-B0kjW7cd.js.map} +1 -1
  169. package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js → StatusBadge-wv4e6f8b.js} +2 -2
  170. package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js.map → StatusBadge-wv4e6f8b.js.map} +1 -1
  171. package/dist/core/web/public/next/assets/StepBand-Db8WPw8J.js +2 -0
  172. package/dist/core/web/public/next/assets/StepBand-Db8WPw8J.js.map +1 -0
  173. package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js → Surface-BkDrQ4t3.js} +2 -2
  174. package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js.map → Surface-BkDrQ4t3.js.map} +1 -1
  175. package/dist/core/web/public/next/assets/Swimlane-Dcve56cP.js +2 -0
  176. package/dist/core/web/public/next/assets/Swimlane-Dcve56cP.js.map +1 -0
  177. package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js → Switch-DamlpSMY.js} +2 -2
  178. package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js.map → Switch-DamlpSMY.js.map} +1 -1
  179. package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js → Tag-Cs4tudBN.js} +2 -2
  180. package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js.map → Tag-Cs4tudBN.js.map} +1 -1
  181. package/dist/core/web/public/next/assets/TerminalPane-BDkKFych.js +7 -0
  182. package/dist/core/web/public/next/assets/TerminalPane-BDkKFych.js.map +1 -0
  183. package/dist/core/web/public/next/assets/TerminalPane-BwfMbnJz.css +1 -0
  184. package/dist/core/web/public/next/assets/UniverseConsoleApp-BE72VyBL.js +2 -0
  185. package/dist/core/web/public/next/assets/{UniverseConsoleApp-DKqAf-eD.js.map → UniverseConsoleApp-BE72VyBL.js.map} +1 -1
  186. package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js → UniverseView-BbmYY2P4.js} +2 -2
  187. package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js.map → UniverseView-BbmYY2P4.js.map} +1 -1
  188. package/dist/core/web/public/next/assets/UsageSection-DsB-Jqyl.css +1 -0
  189. package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js +2 -0
  190. package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js.map +1 -0
  191. package/dist/core/web/public/next/assets/VerseConsoleApp-CXJWDiEM.css +1 -0
  192. package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js +3 -0
  193. package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js.map +1 -0
  194. package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +1 -0
  195. package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js +10 -0
  196. package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js.map +1 -0
  197. package/dist/core/web/public/next/assets/actions-BnjZy8a-.js +2 -0
  198. package/dist/core/web/public/next/assets/actions-BnjZy8a-.js.map +1 -0
  199. package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +1 -0
  200. package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js → budget-queries-Cp6vO7FH.js} +2 -2
  201. package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js.map → budget-queries-Cp6vO7FH.js.map} +1 -1
  202. package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js +2 -0
  203. package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js.map +1 -0
  204. package/dist/core/web/public/next/assets/capacity-strip-model-9-Yb211u.js +2 -0
  205. package/dist/core/web/public/next/assets/capacity-strip-model-9-Yb211u.js.map +1 -0
  206. package/dist/core/web/public/next/assets/charts-BmbKhjqw.js +2 -0
  207. package/dist/core/web/public/next/assets/charts-BmbKhjqw.js.map +1 -0
  208. package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js +2 -0
  209. package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js.map +1 -0
  210. package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js → command-bus-DHJJLWh8.js} +2 -2
  211. package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js.map → command-bus-DHJJLWh8.js.map} +1 -1
  212. package/dist/core/web/public/next/assets/context-model-BGznyHNQ.js +2 -0
  213. package/dist/core/web/public/next/assets/context-model-BGznyHNQ.js.map +1 -0
  214. package/dist/core/web/public/next/assets/context-model-DeJ28uSZ.js +2 -0
  215. package/dist/core/web/public/next/assets/context-model-DeJ28uSZ.js.map +1 -0
  216. package/dist/core/web/public/next/assets/context-queries-_mEgy4eg.js +2 -0
  217. package/dist/core/web/public/next/assets/context-queries-_mEgy4eg.js.map +1 -0
  218. package/dist/core/web/public/next/assets/context.module-BijAfoJw.js +2 -0
  219. package/dist/core/web/public/next/assets/context.module-BijAfoJw.js.map +1 -0
  220. package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js → control-queries-C4TG8blN.js} +2 -2
  221. package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js.map → control-queries-C4TG8blN.js.map} +1 -1
  222. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +2 -0
  223. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +1 -0
  224. package/dist/core/web/public/next/assets/dock-icons-BB7Fi6hT.js +2 -0
  225. package/dist/core/web/public/next/assets/dock-icons-BB7Fi6hT.js.map +1 -0
  226. package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js +2 -0
  227. package/dist/core/web/public/next/assets/{dock-panes-BNTLvX7G.js.map → dock-panes-mnIwSpRp.js.map} +1 -1
  228. package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js → dock-store-CdHQRP8s.js} +2 -2
  229. package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js.map → dock-store-CdHQRP8s.js.map} +1 -1
  230. package/dist/core/web/public/next/assets/fleet-model-B4FKC7fH.js +2 -0
  231. package/dist/core/web/public/next/assets/fleet-model-B4FKC7fH.js.map +1 -0
  232. package/dist/core/web/public/next/assets/format-DKrNjdwD.js +2 -0
  233. package/dist/core/web/public/next/assets/format-DKrNjdwD.js.map +1 -0
  234. package/dist/core/web/public/next/assets/format-lW58rL2y.js +2 -0
  235. package/dist/core/web/public/next/assets/format-lW58rL2y.js.map +1 -0
  236. package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js → git-model-DaGw1SzS.js} +2 -2
  237. package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js.map → git-model-DaGw1SzS.js.map} +1 -1
  238. package/dist/core/web/public/next/assets/global-DG1fmn4y.js +2 -0
  239. package/dist/core/web/public/next/assets/global-DG1fmn4y.js.map +1 -0
  240. package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js → guarded-action--lguLXfz.js} +2 -2
  241. package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js.map → guarded-action--lguLXfz.js.map} +1 -1
  242. package/dist/core/web/public/next/assets/{icons-DWb24OA6.js → icons-YPgbel-I.js} +2 -2
  243. package/dist/core/web/public/next/assets/{icons-DWb24OA6.js.map → icons-YPgbel-I.js.map} +1 -1
  244. package/dist/core/web/public/next/assets/{index-afDA8cwW.js → index-Dk8R-3a7.js} +3 -3
  245. package/dist/core/web/public/next/assets/{index-afDA8cwW.js.map → index-Dk8R-3a7.js.map} +1 -1
  246. package/dist/core/web/public/next/assets/live-model-44wEU6I8.js +2 -0
  247. package/dist/core/web/public/next/assets/live-model-44wEU6I8.js.map +1 -0
  248. package/dist/core/web/public/next/assets/mind-B9PzLcl0.css +1 -0
  249. package/dist/core/web/public/next/assets/mind.module-BOABBdi_.js +2 -0
  250. package/dist/core/web/public/next/assets/mind.module-BOABBdi_.js.map +1 -0
  251. package/dist/core/web/public/next/assets/mutations-DjXM3IDg.js +2 -0
  252. package/dist/core/web/public/next/assets/{mutations-C6E10SPX.js.map → mutations-DjXM3IDg.js.map} +1 -1
  253. package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js → overnight-queries-Be_eossf.js} +2 -2
  254. package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js.map → overnight-queries-Be_eossf.js.map} +1 -1
  255. package/dist/core/web/public/next/assets/pane-chrome-8JmEhHVD.css +1 -0
  256. package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js +2 -0
  257. package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js.map +1 -0
  258. package/dist/core/web/public/next/assets/primitives-Dl3SEQvh.js +1 -0
  259. package/dist/core/web/public/next/assets/{queries-BuYIEHst.js → queries-CYEVCq5r.js} +2 -2
  260. package/dist/core/web/public/next/assets/{queries-BuYIEHst.js.map → queries-CYEVCq5r.js.map} +1 -1
  261. package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js → reasoning-pref-a_ZP6GzU.js} +2 -2
  262. package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js.map → reasoning-pref-a_ZP6GzU.js.map} +1 -1
  263. package/dist/core/web/public/next/assets/seat-subscription-CRigL-GE.js +2 -0
  264. package/dist/core/web/public/next/assets/seat-subscription-CRigL-GE.js.map +1 -0
  265. package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js → section-visibility-u7q-Q9AA.js} +2 -2
  266. package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js.map → section-visibility-u7q-Q9AA.js.map} +1 -1
  267. package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js → sidebar-model-i4WRuQ6j.js} +2 -2
  268. package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js.map → sidebar-model-i4WRuQ6j.js.map} +1 -1
  269. package/dist/core/web/public/next/assets/slots-CV9ZuLQU.js +3 -0
  270. package/dist/core/web/public/next/assets/{slots-W8gkmdfE.js.map → slots-CV9ZuLQU.js.map} +1 -1
  271. package/dist/core/web/public/next/assets/surface-data-DLvmUX9z.js +2 -0
  272. package/dist/core/web/public/next/assets/surface-data-DLvmUX9z.js.map +1 -0
  273. package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js +2 -0
  274. package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js.map +1 -0
  275. package/dist/core/web/public/next/assets/tasks-model-DWs5u9RO.js +2 -0
  276. package/dist/core/web/public/next/assets/{tasks-model-CnYQzgxk.js.map → tasks-model-DWs5u9RO.js.map} +1 -1
  277. package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js → terminal-icons-Ct9cZsEK.js} +2 -2
  278. package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js.map → terminal-icons-Ct9cZsEK.js.map} +1 -1
  279. package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js → tool-semantics-GX8ScuSH.js} +2 -2
  280. package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js.map → tool-semantics-GX8ScuSH.js.map} +1 -1
  281. package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js → turn-files-BPHQzYuH.js} +2 -2
  282. package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js.map → turn-files-BPHQzYuH.js.map} +1 -1
  283. package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js → usage-queries-CI_y9oWZ.js} +2 -2
  284. package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js.map → usage-queries-CI_y9oWZ.js.map} +1 -1
  285. package/dist/core/web/public/next/assets/use-guarded-action-DVCtLzSo.js +2 -0
  286. package/dist/core/web/public/next/assets/use-guarded-action-DVCtLzSo.js.map +1 -0
  287. package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js → use-ticker-C3LQ2IYs.js} +2 -2
  288. package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js.map → use-ticker-C3LQ2IYs.js.map} +1 -1
  289. package/dist/core/web/public/next/assets/use-token-gate-B5gOFkeH.js +2 -0
  290. package/dist/core/web/public/next/assets/use-token-gate-B5gOFkeH.js.map +1 -0
  291. package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js → useActivity-C3R1Sudh.js} +2 -2
  292. package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js.map → useActivity-C3R1Sudh.js.map} +1 -1
  293. package/dist/core/web/public/next/assets/useChartWidth-0APW0BR3.js +2 -0
  294. package/dist/core/web/public/next/assets/useChartWidth-0APW0BR3.js.map +1 -0
  295. package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +1 -0
  296. package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js → useSeatsRefresh-BN8bso-n.js} +2 -2
  297. package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js.map → useSeatsRefresh-BN8bso-n.js.map} +1 -1
  298. package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js +2 -0
  299. package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js.map +1 -0
  300. package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js → verse-queries-2PxoBISm.js} +2 -2
  301. package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js.map → verse-queries-2PxoBISm.js.map} +1 -1
  302. package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js +3 -0
  303. package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js.map +1 -0
  304. package/dist/core/web/public/next/assets/verse-ui-store-Dy4HuDBV.js +3 -0
  305. package/dist/core/web/public/next/assets/{verse-ui-store-KTTKfv-T.js.map → verse-ui-store-Dy4HuDBV.js.map} +1 -1
  306. package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js → viewport-DDoJ_xVq.js} +2 -2
  307. package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js.map → viewport-DDoJ_xVq.js.map} +1 -1
  308. package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js +3 -0
  309. package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js.map +1 -0
  310. package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js → workspace-model-Dd3LmIym.js} +2 -2
  311. package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js.map → workspace-model-Dd3LmIym.js.map} +1 -1
  312. package/dist/core/web/public/next/index.html +1 -1
  313. package/dist/release-dependency-inventory.json +1 -1
  314. package/package.json +1 -1
  315. package/dist/core/web/public/next/assets/Advanced-CHjxJt2z.css +0 -1
  316. package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js +0 -2
  317. package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js.map +0 -1
  318. package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js +0 -2
  319. package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js.map +0 -1
  320. package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js +0 -2
  321. package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js.map +0 -1
  322. package/dist/core/web/public/next/assets/AutonomySection-CoMngwNB.js +0 -2
  323. package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js +0 -2
  324. package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js.map +0 -1
  325. package/dist/core/web/public/next/assets/BranchBar-C9BpPVLr.css +0 -1
  326. package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js +0 -2
  327. package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js.map +0 -1
  328. package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js +0 -2
  329. package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js.map +0 -1
  330. package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js +0 -2
  331. package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js.map +0 -1
  332. package/dist/core/web/public/next/assets/CapacityStrip-wgFP9MUA.css +0 -1
  333. package/dist/core/web/public/next/assets/ChatSection-B9cdRKUh.js +0 -3
  334. package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js +0 -2
  335. package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js.map +0 -1
  336. package/dist/core/web/public/next/assets/Composer-CkcwbQhG.css +0 -1
  337. package/dist/core/web/public/next/assets/Composer.module-DJMdrqNt.js +0 -2
  338. package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js +0 -2
  339. package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js.map +0 -1
  340. package/dist/core/web/public/next/assets/DiffPane-Csboxnn0.css +0 -1
  341. package/dist/core/web/public/next/assets/DockHost-BGnTgdIb.css +0 -1
  342. package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js +0 -2
  343. package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js.map +0 -1
  344. package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js +0 -3
  345. package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js.map +0 -1
  346. package/dist/core/web/public/next/assets/FleetSection-w9AjqfTR.css +0 -1
  347. package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js +0 -2
  348. package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js.map +0 -1
  349. package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js +0 -2
  350. package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js.map +0 -1
  351. package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js +0 -2
  352. package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js.map +0 -1
  353. package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js +0 -2
  354. package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js.map +0 -1
  355. package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js +0 -2
  356. package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js.map +0 -1
  357. package/dist/core/web/public/next/assets/McpSection-1UncWBpW.js +0 -2
  358. package/dist/core/web/public/next/assets/MessageMarkdown-C4pl9LI5.js +0 -3
  359. package/dist/core/web/public/next/assets/MessageMarkdown-Czcl3L_Q.css +0 -1
  360. package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js +0 -2
  361. package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js.map +0 -1
  362. package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js +0 -2
  363. package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js.map +0 -1
  364. package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js +0 -2
  365. package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js.map +0 -1
  366. package/dist/core/web/public/next/assets/NeedsYouDrawer-SkhvvdLb.css +0 -1
  367. package/dist/core/web/public/next/assets/NewChatDialog-B_BsS9pr.js +0 -3
  368. package/dist/core/web/public/next/assets/OnboardingFlow-CtCPpgoX.js +0 -2
  369. package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js +0 -2
  370. package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js.map +0 -1
  371. package/dist/core/web/public/next/assets/PreviewPane-WQJFjSXe.css +0 -1
  372. package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js +0 -2
  373. package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js.map +0 -1
  374. package/dist/core/web/public/next/assets/SeatSelector-DaUO-zoK.js +0 -3
  375. package/dist/core/web/public/next/assets/SessionSearch-B5aQ0BCM.js +0 -2
  376. package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js +0 -2
  377. package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js.map +0 -1
  378. package/dist/core/web/public/next/assets/Sidebar-DfD8MNZt.css +0 -1
  379. package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js +0 -3
  380. package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js.map +0 -1
  381. package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js +0 -2
  382. package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js.map +0 -1
  383. package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js +0 -2
  384. package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js.map +0 -1
  385. package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js +0 -7
  386. package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js.map +0 -1
  387. package/dist/core/web/public/next/assets/TerminalPane-CmE2QL-Q.css +0 -1
  388. package/dist/core/web/public/next/assets/UniverseConsoleApp-DKqAf-eD.js +0 -2
  389. package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js +0 -2
  390. package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js.map +0 -1
  391. package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +0 -1
  392. package/dist/core/web/public/next/assets/VerseConsoleApp-C0V221WL.css +0 -1
  393. package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js +0 -3
  394. package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js.map +0 -1
  395. package/dist/core/web/public/next/assets/Workspace-DQXMVDf7.css +0 -1
  396. package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js +0 -10
  397. package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js.map +0 -1
  398. package/dist/core/web/public/next/assets/actions-Bszsdpms.js +0 -2
  399. package/dist/core/web/public/next/assets/actions-Bszsdpms.js.map +0 -1
  400. package/dist/core/web/public/next/assets/actions-Dug8YIf0.css +0 -1
  401. package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js +0 -2
  402. package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js.map +0 -1
  403. package/dist/core/web/public/next/assets/charts-D4NaLaXA.js +0 -2
  404. package/dist/core/web/public/next/assets/charts-D4NaLaXA.js.map +0 -1
  405. package/dist/core/web/public/next/assets/colors-B-vHsX1S.js +0 -2
  406. package/dist/core/web/public/next/assets/colors-B-vHsX1S.js.map +0 -1
  407. package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js +0 -2
  408. package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js.map +0 -1
  409. package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js +0 -2
  410. package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js.map +0 -1
  411. package/dist/core/web/public/next/assets/context.module-B_k02HNU.js +0 -2
  412. package/dist/core/web/public/next/assets/context.module-B_k02HNU.js.map +0 -1
  413. package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js +0 -2
  414. package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js.map +0 -1
  415. package/dist/core/web/public/next/assets/dock-panes-BNTLvX7G.js +0 -2
  416. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +0 -2
  417. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +0 -1
  418. package/dist/core/web/public/next/assets/format-BNYWGJat.js +0 -2
  419. package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +0 -1
  420. package/dist/core/web/public/next/assets/global-DVgMguLr.js +0 -2
  421. package/dist/core/web/public/next/assets/global-DVgMguLr.js.map +0 -1
  422. package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js +0 -2
  423. package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js.map +0 -1
  424. package/dist/core/web/public/next/assets/mind-B-lYfSUJ.css +0 -1
  425. package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js +0 -2
  426. package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js.map +0 -1
  427. package/dist/core/web/public/next/assets/mutations-C6E10SPX.js +0 -2
  428. package/dist/core/web/public/next/assets/primitives-DQvYikjm.js +0 -1
  429. package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js +0 -2
  430. package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js.map +0 -1
  431. package/dist/core/web/public/next/assets/slots-W8gkmdfE.js +0 -3
  432. package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js +0 -2
  433. package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js.map +0 -1
  434. package/dist/core/web/public/next/assets/tasks-model-CnYQzgxk.js +0 -2
  435. package/dist/core/web/public/next/assets/types-Dypu22dp.js +0 -3
  436. package/dist/core/web/public/next/assets/types-Dypu22dp.js.map +0 -1
  437. package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js +0 -2
  438. package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js.map +0 -1
  439. package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js +0 -2
  440. package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js.map +0 -1
  441. package/dist/core/web/public/next/assets/useChartWidth-B8E5mJgM.css +0 -1
  442. package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js +0 -2
  443. package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js.map +0 -1
  444. package/dist/core/web/public/next/assets/verse-model-E98kXngO.js +0 -2
  445. package/dist/core/web/public/next/assets/verse-model-E98kXngO.js.map +0 -1
  446. package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js +0 -2
  447. package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js.map +0 -1
  448. package/dist/core/web/public/next/assets/verse-ui-store-KTTKfv-T.js +0 -3
@@ -0,0 +1 @@
1
+ ._wrapper_6cgsw_4{display:contents}._bubble_6cgsw_12{z-index:calc(var(--z-toast) + 1);align-items:center;gap:var(--space-2);max-width:260px;padding:var(--space-1) var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);background:var(--bg-surface-raised);color:var(--text-primary);box-shadow:var(--shadow-menu);font-family:var(--font-ui);font-size:var(--text-xs-size);line-height:var(--text-xs-line);font-weight:var(--font-weight-regular);white-space:normal;text-wrap:pretty;pointer-events:none;animation:_tooltip-in_6cgsw_1 var(--duration-fast) var(--ease-standard);display:flex;position:fixed}._label_6cgsw_44{min-width:0}._shortcut_6cgsw_49{border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);white-space:nowrap;flex:none;padding:0 4px;line-height:1.5}@keyframes _tooltip-in_6cgsw_1{0%{opacity:0}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._bubble_6cgsw_12{animation:none}}:root[data-motion=reduce] ._bubble_6cgsw_12{animation:none}._wrapper_6cgsw_4[data-disabled-trigger=true]{display:inline-flex}._frame_hm6ck_1{background:var(--bg-canvas);flex-direction:column;height:100%;min-height:0;display:flex}._strip_hm6ck_9{height:var(--strip-height);padding:0 var(--space-5);border-bottom:1px solid var(--border-subtle);background:var(--bg-surface);align-items:center;display:flex}._chat_hm6ck_18{flex:1;grid-template-columns:264px minmax(0,1fr);min-height:0;display:grid}._chatList_hm6ck_19{gap:var(--space-3);padding:var(--space-4);border-right:1px solid var(--border-subtle);flex-direction:column;display:flex}._chatBody_hm6ck_20{gap:var(--space-3);width:min(720px,100%);margin:var(--space-8) auto 0;padding:0 var(--space-5);flex-direction:column;display:flex}._grid_hm6ck_22{grid-template-columns:repeat(var(--surface-columns,12), minmax(0, 1fr));gap:var(--surface-gap,16px);padding:var(--space-5);align-items:start;display:grid}._wide_hm6ck_29{grid-column:1/-1}._kpi_hm6ck_30{grid-column:span 2}._half_hm6ck_31{grid-column:span 6}._column_hm6ck_33{gap:var(--space-2);width:min(880px,100%);margin:var(--space-6) auto 0;padding:0 var(--space-5);flex-direction:column;display:flex}._missing_hm6ck_35{max-width:56ch;padding:0 var(--space-6);gap:var(--space-3);margin:clamp(32px,12vh,120px) auto 0;display:grid}._missingTitle_hm6ck_42{font-family:var(--font-display);font-size:var(--text-xl-size);line-height:var(--text-xl-line);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display)}._missingBody_hm6ck_49{color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}@media (max-width:479.98px){._chat_hm6ck_18{grid-template-columns:minmax(0,1fr)}._chatList_hm6ck_19{display:none}._grid_hm6ck_22{padding:var(--space-4);grid-template-columns:repeat(2,minmax(0,1fr))}._kpi_hm6ck_30{grid-column:span 1}._half_hm6ck_31{grid-column:1/-1}}._shell_acpvz_6{grid-template-columns:var(--rail-width) minmax(0, 1fr);background:var(--bg-canvas);height:100%;min-height:0;color:var(--text-primary);font-family:var(--font-ui);display:grid}._shell_acpvz_6>*{min-width:0;min-height:0}._shell_acpvz_6[data-rail=expanded]{--rail-width:216px}._rail_acpvz_45{align-items:center;gap:var(--space-2);padding:var(--space-3) 0;border-right:1px solid var(--border-subtle);background:var(--bg-canvas);padding-top:calc(var(--space-3) + var(--app-titlebar-height,0px));flex-direction:column;display:flex;position:relative}._rail_acpvz_45[data-rail=expanded]{padding-left:var(--space-2);padding-right:var(--space-2);align-items:stretch}._railDragStrip_acpvz_79{width:auto;height:var(--app-titlebar-height,0px);position:absolute;top:0;left:0;right:0}._mark_acpvz_88{width:32px;height:32px;margin-bottom:var(--space-2);color:var(--accent-500);justify-content:center;align-items:center;display:flex}._railList_acpvz_98{flex-direction:column;align-items:center;gap:2px;margin:0;padding:0;list-style:none;display:flex}._railFoot_acpvz_107{flex-direction:column;align-items:center;gap:2px;margin-top:auto;display:flex}._rail_acpvz_45[data-rail=expanded] ._railList_acpvz_98,._rail_acpvz_45[data-rail=expanded] ._railFoot_acpvz_107{align-self:stretch;align-items:stretch}._rail_acpvz_45[data-rail=expanded] ._railList_acpvz_98>li{display:flex}._railButton_acpvz_122{width:calc(var(--control-h) + var(--space-1));height:calc(var(--control-h) + var(--space-1));border-radius:var(--radius-sm);color:var(--text-tertiary);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);justify-content:center;align-items:center;display:flex;position:relative}._railButton_acpvz_122:hover{color:var(--text-secondary);background:var(--bg-hover)}._rail_acpvz_45[data-rail=expanded] ._railButton_acpvz_122{justify-content:flex-start;gap:var(--space-2);width:100%;padding:0 var(--space-2)}._railIcon_acpvz_148{flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:flex;position:relative}._railLabel_acpvz_158{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-size:var(--text-sm-size);font-weight:var(--font-weight-regular);line-height:var(--text-sm-line);flex:auto;overflow:hidden}._railKey_acpvz_172{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);flex:none}._railButton_acpvz_122:hover ._railKey_acpvz_172{color:var(--text-secondary)}._railButton_acpvz_122:active{background:var(--bg-active)}._railButton_acpvz_122[aria-current],._railButton_acpvz_122[data-active]{color:var(--text-primary);background:var(--bg-selected)}._railButton_acpvz_122[aria-current] ._railLabel_acpvz_158,._railButton_acpvz_122[data-active] ._railLabel_acpvz_158{font-weight:var(--font-weight-medium)}._railButton_acpvz_122[aria-current] ._railKey_acpvz_172{color:var(--text-secondary)}._railButton_acpvz_122[aria-current]:before{content:"";background:var(--accent-500);border-radius:1px;width:2px;height:56%;position:absolute;top:50%;left:-10px;transform:translateY(-50%)}._rail_acpvz_45[data-rail=expanded] ._railButton_acpvz_122[aria-current]:before{left:calc(var(--space-2) * -1)}._rail_acpvz_45[data-rail=expanded] ._railLabel_acpvz_158{padding-left:var(--space-2)}._section_acpvz_223{background:var(--bg-surface);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}._surface_acpvz_236{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}._surface_acpvz_236[hidden]{display:none}._surface_acpvz_236>*{min-height:0}._shell_acpvz_6[data-compact]{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr)}._shell_acpvz_6[data-compact]>._rail_acpvz_45{padding:0 var(--space-1) env(safe-area-inset-bottom,0px);border-right:0;border-top:1px solid var(--border-subtle);background:var(--bg-surface);flex-direction:row;grid-row:2;align-items:stretch;gap:0}._shell_acpvz_6[data-compact]>._section_acpvz_223{grid-row:1}._shell_acpvz_6[data-compact] ._railDragStrip_acpvz_79,._shell_acpvz_6[data-compact] ._mark_acpvz_88{display:none}._shell_acpvz_6[data-compact] ._railList_acpvz_98,._shell_acpvz_6[data-compact] ._railFoot_acpvz_107{flex-direction:row;align-items:stretch;gap:0;margin:0}._shell_acpvz_6[data-compact] ._railList_acpvz_98{flex:5}._shell_acpvz_6[data-compact] ._railFoot_acpvz_107{flex:2}._shell_acpvz_6[data-compact] ._railList_acpvz_98>li{flex:1;display:flex}._shell_acpvz_6[data-compact] ._railFoot_acpvz_107>*{flex:1}._shell_acpvz_6[data-compact] ._railButton_acpvz_122{width:auto;height:56px;padding:var(--space-1) 0;flex-direction:column;flex:1;gap:2px}._shell_acpvz_6[data-compact] ._railLabel_acpvz_158{font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);text-align:center;flex:none}._shell_acpvz_6[data-compact] ._railButton_acpvz_122[aria-current]:before{width:24px;height:2px;top:-1px;left:50%;transform:translate(-50%)}._shell_k4nf7_1{background:var(--bg-canvas);height:100dvh;min-height:100%;color:var(--text-primary);flex-direction:column;display:flex;overflow:hidden}._checking_k4nf7_2{padding:var(--space-8);color:var(--text-secondary)}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CommandPalette-lLV-OR63.js","assets/index-Dk8R-3a7.js","assets/global-DG1fmn4y.js","assets/global-_tOCFt9y.css","assets/MutationTokenDialog-Cqn2uPV6.js","assets/MutationTokenDialog-Cum_DqQZ.css","assets/command-catalog-s3W6Z96D.js","assets/workbench-types-DzN-5trg.js","assets/verse-ui-store-Dy4HuDBV.js","assets/dock-store-CdHQRP8s.js","assets/viewport-DDoJ_xVq.js","assets/verse-queries-2PxoBISm.js","assets/useActivity-C3R1Sudh.js","assets/section-visibility-u7q-Q9AA.js","assets/CommandPalette-B5Q4hGMK.css","assets/NeedsYouDrawer-hiTINupk.js","assets/Epistemic-DRp4dBfB.js","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-wv4e6f8b.js","assets/StatusBadge-BVi0IBb9.css","assets/queries-CYEVCq5r.js","assets/mutations-DjXM3IDg.js","assets/RouteErrorBoundary-D1LZxQjN.js","assets/RouteErrorBoundary-6RMd_aZg.css","assets/RefreshIndicator-C1uQIegT.js","assets/RefreshIndicator-CVv22U_j.css","assets/DiffViewer-yCdw9J-Y.js","assets/highlight-CMCZK9jW.js","assets/DiffViewer-C8HHTnVE.css","assets/guarded-action--lguLXfz.js","assets/icons-YPgbel-I.js","assets/format-lW58rL2y.js","assets/format-DKrNjdwD.js","assets/verse-model-yHPwjf-7.js","assets/Button-Cr_qkQEc.js","assets/Button-DrnKsvnQ.css","assets/NeedsYouList-B4Z37Phx.js","assets/NeedsYouList-CruOt4JT.css","assets/NeedsYouDrawer-BpvidnM2.css","assets/ShortcutsOverlay-ZPyXUS_I.js","assets/ShortcutsOverlay-QSjxmW0a.css","assets/GearTray-CkviqjYr.js","assets/GearTray-DQbH_yZZ.css","assets/OnboardingFlow-7N3YSUHN.js","assets/CapacityStrip-DqqYnLek.js","assets/Tag-Cs4tudBN.js","assets/Tag-D0rAEciH.css","assets/budget-queries-Cp6vO7FH.js","assets/useSeatsRefresh-BN8bso-n.js","assets/capacity-strip-model-9-Yb211u.js","assets/seat-subscription-CRigL-GE.js","assets/context-model-DeJ28uSZ.js","assets/verse-store-DHTuZpYa.js","assets/CapacityStrip-Cc28CyWk.css","assets/primitives-Dl3SEQvh.js","assets/Segmented-BMvq-FfD.js","assets/Segmented-BnjHbKzH.css","assets/EmptyState-D1GDxVZy.js","assets/EmptyState-B3YUPGaa.css","assets/Meter-DTHbmhQg.js","assets/Meter-CYt9KpM0.css","assets/Slider-B0kjW7cd.js","assets/Slider-AgAdMFpo.css","assets/Switch-DamlpSMY.js","assets/Switch-CU044EaE.css","assets/Select-DkdeoSQn.js","assets/Select-DSu5ghId.css","assets/Input-Ci7TD96x.js","assets/Input-BQ3PR065.css","assets/Sheet-C7APkGPt.js","assets/Sheet-ChxlNivX.css","assets/usage-queries-CI_y9oWZ.js","assets/OnboardingFlow-DSpPj8UE.css","assets/RailStatus-sZhApA8k.js","assets/RailStatus-C3sN_ghP.css","assets/warmup-BsL2LdR-.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,i as t,n,s as r,t as i}from"./index-Dk8R-3a7.js";import{A as a,C as o,D as s,P as c,S as l,_ as u,a as d,f,it as p,lt as m,n as h,o as g,r as _,s as v,st as y,t as b,u as x}from"./global-DG1fmn4y.js";import{n as S,r as C,t as w}from"./RouteErrorBoundary-D1LZxQjN.js";import{a as ee,c as te,d as T,l as ne,r as re,s as ie}from"./command-catalog-s3W6Z96D.js";import{o as ae}from"./workbench-types-DzN-5trg.js";import{i as oe,t as se}from"./guarded-action--lguLXfz.js";import{n as ce}from"./viewport-DDoJ_xVq.js";import{A as le,C as E,D as ue,E as de,O as fe,T as pe,_ as me,a as he,b as D,c as ge,f as _e,g as ve,i as ye,k as be,m as xe,n as Se,r as Ce,s as O,u as k,y as A}from"./verse-ui-store-Dy4HuDBV.js";import{d as we,i as Te,x as j}from"./verse-queries-2PxoBISm.js";import{t as Ee}from"./composer-keys-CYz4U4Bg.js";import{i as De,n as M,r as N,t as Oe}from"./command-bus-DHJJLWh8.js";import{n as ke}from"./section-visibility-u7q-Q9AA.js";import{i as Ae,n as je,r as Me,t as Ne}from"./useActivity-C3R1Sudh.js";import{S as Pe,a as Fe,b as Ie,d as Le,n as Re,o as ze,u as Be,v as Ve}from"./icons-YPgbel-I.js";var P=r(e(),1),He=`ashlr:desktop-command`;function Ue(){try{return document.documentElement.getAttribute(`data-app-shell`)===`desktop`}catch{return!1}}function We(e){if(e===`light`||e===`dark`)return e;try{return window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}catch{return`light`}}function F(){return window.__ASHLR_DESKTOP__}function Ge(e){try{F()?.reportTheme?.(We(e))}catch{}}function Ke(e){function t(t){let n=T(t.detail?.command);n&&e(n)}return window.addEventListener(He,t),()=>window.removeEventListener(He,t)}var qe=`ashlr:desktop-state`;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Je(e){if(!I(e)||!I(e.hotkey)||!I(e.notifications))return!1;let t=e.hotkey,n=e.notifications;return typeof t.enabled==`boolean`&&typeof t.registered==`boolean`&&typeof t.accelerator==`string`&&t.accelerator.length>0&&t.accelerator.length<=32&&(t.error===null||typeof t.error==`string`&&t.error.length<=300)&&typeof n.enabled==`boolean`&&(n.delivery===`native`||n.delivery===`script`)}var L,Ye=!1,R=new Set;function Xe(){try{let e=F()?.getState?.();return Je(e)?e:null}catch{return null}}function Ze(e){let t=e.detail;if(Je(t)){L=t;for(let e of[...R])e(t)}}function Qe(){Ye||(Ye=!0,window.addEventListener(qe,Ze))}function $e(){return Qe(),L??=Xe(),L}function et(e){return Qe(),R.add(e),()=>{R.delete(e)}}function tt(e,t){if(e!==`globalHotkey`&&e!==`notifications`||typeof t!=`boolean`)return!1;try{return F()?.setPreference?.(e,t)===!0}catch{return!1}}function nt(e){return et(()=>e())}function rt(){return(0,P.useSyncExternalStore)(nt,$e,()=>null)}var it=r(t(),1),z={wrapper:`_wrapper_6cgsw_4`,bubble:`_bubble_6cgsw_12`,"tooltip-in":`_tooltip-in_6cgsw_1`,label:`_label_6cgsw_44`,shortcut:`_shortcut_6cgsw_49`},B=n(),at=160,V=8,H=8;function ot(e){let t={top:`bottom`,bottom:`top`,left:`right`,right:`left`},n=[`top`,`bottom`,`right`,`left`].filter(n=>n!==e&&n!==t[e]);return[e,t[e],...n]}function st(e,t,n,r){switch(e){case`top`:return{left:t.left+t.width/2-n/2,top:t.top-r-V};case`bottom`:return{left:t.left+t.width/2-n/2,top:t.bottom+V};case`left`:return{left:t.left-n-V,top:t.top+t.height/2-r/2};case`right`:return{left:t.right+V,top:t.top+t.height/2-r/2}}}function ct(e,t,n,r){let i=window.innerWidth||0,a=window.innerHeight||0,o=null;for(let s of ot(r)){let{left:r,top:c}=st(s,e,t,n);if(o||={left:r,top:c,placement:s},r>=H&&c>=H&&r+t<=i-H&&c+n<=a-H)return{left:r,top:c,placement:s}}let s=o;return{placement:s.placement,left:Math.max(H,Math.min(s.left,i-t-H)),top:Math.max(H,Math.min(s.top,a-n-H))}}function U(e){let{label:t,content:n,shortcut:r,placement:i=`top`,disabled:a=!1,className:o,children:s}=e,[c,l]=(0,P.useState)(!1),[u,d]=(0,P.useState)(null),f=(0,P.useId)(),p=(0,P.useRef)(null),m=(0,P.useRef)(null),h=(0,P.useRef)(null),g=(0,P.useCallback)(()=>{h.current!==null&&(clearTimeout(h.current),h.current=null)},[]),_=(0,P.useCallback)(()=>{g(),l(!1),d(null)},[g]);(0,P.useEffect)(()=>g,[g]);let v=(0,P.useCallback)(()=>{let e=p.current,t=m.current;if(!e||!t)return;let n=e.getBoundingClientRect();d(ct(n,t.offsetWidth,t.offsetHeight,i))},[i]);(0,P.useLayoutEffect)(()=>{c&&v()},[c,v]),(0,P.useEffect)(()=>{if(!c)return;function e(e){e.key===`Escape`&&_()}return document.addEventListener(`keydown`,e),window.addEventListener(`resize`,v),window.addEventListener(`scroll`,v,!0),()=>{document.removeEventListener(`keydown`,e),window.removeEventListener(`resize`,v),window.removeEventListener(`scroll`,v,!0)}},[c,_,v]);let y=t??n;if(a||y==null||y===``)return s;function b(e){p.current=e,g(),h.current=setTimeout(()=>{h.current=null,l(!0)},at)}function x(e){p.current=e,g(),l(!0)}let S=s.props.disabled===!0,C=c?f:void 0,w=(0,P.cloneElement)(s,{"aria-describedby":C,onMouseEnter:e=>{s.props.onMouseEnter?.(e),b(e.currentTarget)},onMouseLeave:e=>{s.props.onMouseLeave?.(e),_()},onFocus:e=>{s.props.onFocus?.(e),x(e.currentTarget)},onBlur:e=>{s.props.onBlur?.(e),_()}});return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`${z.wrapper} ${o??``}`,"aria-describedby":C,"data-disabled-trigger":S?`true`:void 0,onMouseOver:S?e=>x(e.currentTarget):void 0,onMouseOut:S?_:void 0,children:w}),c?(0,it.createPortal)((0,B.jsxs)(`div`,{ref:m,role:`tooltip`,id:f,className:z.bubble,"data-placement":u?.placement??i,style:{position:`fixed`,left:u?`${u.left}px`:`0px`,top:u?`${u.top}px`:`0px`,visibility:u?`visible`:`hidden`},children:[(0,B.jsx)(`span`,{className:z.label,children:y}),r?(0,B.jsx)(`kbd`,{className:z.shortcut,children:r}):null]}),document.body):null]})}var lt=`ashlr.verse.onboarding.v1`,ut={completedAt:null,dismissedAt:null};function dt(){try{let e=localStorage.getItem(lt);if(!e)return ut;let t=JSON.parse(e);return{completedAt:typeof t.completedAt==`string`?t.completedAt:null,dismissedAt:typeof t.dismissedAt==`string`?t.dismissedAt:null}}catch{return{completedAt:null,dismissedAt:new Date(0).toISOString()}}}function ft(e){try{localStorage.setItem(lt,JSON.stringify(e))}catch{}}function pt(e){return e.completedAt===null&&e.dismissedAt===null}var mt=dt(),W={...mt,open:pt(mt),step:0},G=new Set;function K(e){let t={...W,...e};if(!Object.keys(e).every(e=>Object.is(W[e],t[e]))){W=t;for(let e of G)e()}}function ht(e){return G.add(e),()=>G.delete(e)}function gt(){return W}function _t(e){K({step:Math.max(0,Math.trunc(e))})}function vt(){let e={completedAt:W.completedAt,dismissedAt:new Date().toISOString()};ft(e),K({...e,open:!1})}function yt(){let e={completedAt:new Date().toISOString(),dismissedAt:W.dismissedAt};ft(e),K({...e,open:!1})}function bt(){K({open:!0,step:0})}function xt(){return(0,P.useSyncExternalStore)(ht,gt,gt)}function St(e=null){xe(e?{focusId:e}:{})}function q(e){return`c7-anchor-${e.replace(/[^A-Za-z0-9_-]/g,`-`)}`}function Ct(e){let t=document.getElementById(q(e));t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`center`,behavior:`smooth`})}function wt(e,t=null){E(e),t&&requestAnimationFrame(()=>{document.getElementById(q(t))?Ct(t):requestAnimationFrame(()=>Ct(t))})}function Tt(e){ve(e)}var Et=3e3;function J(e){return typeof CSS<`u`&&typeof CSS.escape==`function`?CSS.escape(e):e.replace(/["\\]/g,`\\$&`)}function Dt(e,t,n=document){let r=n.querySelector(`[data-surface="${J(e)}"]`);return r?r.querySelector(`#${J(q(t))}`)??r.querySelector(`[data-verse-anchor="${J(t)}"]`):null}function Ot(e){typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`center`,behavior:`smooth`}),(e.tabIndex>=0||e.matches(`a[href],button,input,select,textarea,[tabindex]`))&&e.focus({preventScroll:!0})}function kt({section:e,anchor:t},n=Et){if(typeof document>`u`)return Promise.resolve(!1);let r=Dt(e,t);return r&&!r.closest(`[hidden]`)?(Ot(r),Promise.resolve(!0)):new Promise(r=>{let i=!1,a=e=>{i||(i=!0,s.disconnect(),window.clearTimeout(c),e&&Ot(e),r(e!==null))},o=()=>{let n=Dt(e,t);n&&!n.closest(`[hidden]`)&&a(n)},s=new MutationObserver(o);s.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`hidden`,`id`,`data-verse-anchor`]});let c=window.setTimeout(()=>a(null),n);o()})}function At(e){if(typeof window>`u`)return()=>{};function t(e){let t=e.detail;if(typeof t!=`object`||!t)return;let{section:n,anchor:r}=t;typeof n!=`string`||typeof r!=`string`||r.length===0||r.length>200||kt({section:n,anchor:r})}return window.addEventListener(e,t),()=>window.removeEventListener(e,t)}var Y=()=>{};function jt(e){Y=e??(()=>{})}function Mt(e){let t=s();if(!t)throw new v(`Mutation token was rejected.`,401,e);return t}async function Nt(){await Me();let e=Ne().data?.running??[];if(e.length===0){Y(`Nothing is running.`,`neutral`);return}Mt(`/api/verse/sessions`);let t=await Promise.allSettled(e.map(e=>Te(e.sessionId)));c();let n=t.filter(e=>e.status===`rejected`).length;if(Me(),n>0)throw Error(`Stopped ${e.length-n} of ${e.length} chats; ${n} did not answer.`);Y(e.length===1?`Stopped 1 chat.`:`Stopped ${e.length} chats.`,`success`)}async function Pt(){let e=Mt(`/api/verse/authority`),t=null;try{t=await x(`/api/verse/authority`,{action:`stop`},e)}catch(t){if(!(t instanceof v&&t.status===404&&t.code===null))throw t;await x(`/api/verse/daemon`,{action:`stop`},e)}c(),Me(),Y(Ft(t),`success`)}function Ft(e){let t=`Fleet stopped. It stays stopped until you resume it.`,n=e?.result?.stop;if(typeof n!=`object`||!n)return t;let{quiesced:r,liveExecutionLeases:i,mergeRevokeFailures:a}=n,o=[t];if(r===!1){let e=typeof i==`number`&&Number.isFinite(i)&&i>0?i:null;o.push(e===null?`Agents already running are finishing.`:`${e} agent${e===1?` is`:`s are`} still finishing work started before Stop.`)}if(Array.isArray(a)&&a.length>0){let e=a.length;o.push(`${e} armed merge${e===1?``:`s`} could not be revoked; Stop still blocks ${e===1?`it`:`them`}.`)}return o.join(` `)}function It(){return document.querySelector(`[data-surface="chat"] textarea[aria-label="Message"]`)!==null}function Lt(e){window.dispatchEvent(new CustomEvent(re,{detail:{id:e}}))}function Rt(e,t=Oe){if(typeof document>`u`)return;if(k().section!==`chat`&&E(`chat`),It()){Lt(e);return}let n=!1,r=t=>{n||(n=!0,i.disconnect(),window.clearTimeout(a),t&&window.setTimeout(()=>Lt(e),50))},i=new MutationObserver(()=>{It()&&r(!0)});i.observe(document.body,{childList:!0,subtree:!0});let a=window.setTimeout(()=>r(!1),t)}var zt=new Set(Ee),Bt={"chats.stop-all":Nt,"fleet.stop":Pt};function X(e,t={}){let n=ie(e);if(!n)return!1;if(n.group!==null&&t.via===`palette`&&me(n.id),n.guard){let r=Bt[n.id];if(!r)return N(e,t);let{confirm:i,token:a}=n.guard;return oe({title:i.title,body:i.body,confirmLabel:i.confirmLabel,destructive:i.destructive,token:a,tokenReason:`${n.title.replace(/…$/,``)} requires the dispatch token.`,run:r}),!0}return zt.has(n.id)?(N(e,t)||Rt(e),!0):n.scope===`chat`||n.scope===`composer`?N(e,t)?!0:(k().section!==`chat`&&E(`chat`),De(e,t),!0):N(e,t)?!0:(Y(`${n.title} isn't available here yet.`,`neutral`),!1)}function Vt(){let e=[...[[`surface.command`,`command`],[`surface.fleet`,`fleet`],[`surface.growth`,`growth`],[`surface.mind`,`mind`],[`surface.chat`,`chat`],[`section.settings`,`settings`],[`section.apps`,`apps`],[`section.usage`,`usage`]].map(([e,t])=>M(e,()=>E(t))),M(`palette.open`,()=>ue(`palette`)),M(`needs-you.open`,e=>{e.via!==`menu`&&k().overlay===`needs-you`?O():xe()}),M(`shortcuts.open`,()=>ue(`shortcuts`)),M(`history.back`,()=>{pe(-1)}),M(`history.forward`,()=>{pe(1)}),M(`chat.recent-next`,()=>{ge(1)}),M(`chat.recent-prev`,()=>{ge(-1)}),M(`rail.toggle-labels`,()=>fe()),M(`chat.new`,()=>A(`new-chat`)),M(`chat.new-on`,e=>{let t=e.argument?.kind===`seat`?e.argument.id:void 0;A(`new-chat`,t?{seatId:t}:{})}),M(`appearance.toggle-theme`,()=>l()),M(`app.summon`,()=>A(`focus-composer`))];return()=>e.forEach(e=>e())}function Ht(){let e=C();(0,P.useEffect)(()=>(jt(e.show),()=>jt(null)),[e.show]),(0,P.useEffect)(()=>Vt(),[])}var Z={frame:`_frame_hm6ck_1`,strip:`_strip_hm6ck_9`,chat:`_chat_hm6ck_18`,chatList:`_chatList_hm6ck_19`,chatBody:`_chatBody_hm6ck_20`,grid:`_grid_hm6ck_22`,wide:`_wide_hm6ck_29`,kpi:`_kpi_hm6ck_30`,half:`_half_hm6ck_31`,column:`_column_hm6ck_33`,missing:`_missing_hm6ck_35`,missingTitle:`_missingTitle_hm6ck_42`,missingBody:`_missingBody_hm6ck_49`},Ut=new Set([`command`,`fleet`,`growth`,`mind`]);function Wt({section:e,label:t}){return(0,B.jsxs)(`div`,{className:Z.frame,role:`status`,"aria-label":`Loading ${t}`,"data-skeleton":e,children:[(0,B.jsx)(`div`,{className:Z.strip,children:(0,B.jsx)(d,{width:`140px`})}),e===`chat`?(0,B.jsxs)(`div`,{className:Z.chat,children:[(0,B.jsx)(`div`,{className:Z.chatList,children:Array.from({length:8},(e,t)=>(0,B.jsx)(d,{width:`${70+t*13%25}%`},t))}),(0,B.jsxs)(`div`,{className:Z.chatBody,children:[(0,B.jsx)(d,{width:`42%`}),(0,B.jsx)(d,{width:`88%`}),(0,B.jsx)(d,{width:`76%`}),(0,B.jsx)(d,{width:`64%`})]})]}):Ut.has(e)?(0,B.jsxs)(`div`,{className:Z.grid,children:[(0,B.jsx)(`div`,{className:Z.wide,children:(0,B.jsx)(d,{width:`60%`})}),Array.from({length:5},(e,t)=>(0,B.jsx)(`div`,{className:Z.kpi,children:(0,B.jsx)(_,{})},t)),(0,B.jsx)(`div`,{className:Z.half,children:(0,B.jsx)(_,{})}),(0,B.jsx)(`div`,{className:Z.half,children:(0,B.jsx)(_,{})})]}):(0,B.jsx)(`div`,{className:Z.column,children:Array.from({length:6},(e,t)=>(0,B.jsx)(g,{},t))})]})}function Gt({label:e,blurb:t}){return(0,B.jsxs)(`div`,{className:Z.missing,role:`status`,children:[(0,B.jsxs)(`h1`,{className:Z.missingTitle,children:[e,` isn't in this build yet`]}),(0,B.jsx)(`p`,{className:Z.missingBody,children:t}),(0,B.jsx)(`p`,{className:Z.missingBody,children:`It appears here as soon as it ships. Everything else in Verse works normally.`})]})}function Kt(){return(0,P.useSyncExternalStore)(de,k,k)}var qt=Re,Jt=Be,Yt=Pe,Xt=Ie,Zt=Ve,Qt=Fe,$t=ze;function Q({size:e=16,children:t,...n}){return(0,B.jsx)(`svg`,{viewBox:`0 0 16 16`,width:e,height:e,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,...n,children:t})}function en(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`rect`,{x:`2.5`,y:`3`,width:`11`,height:`10`,rx:`1.5`}),(0,B.jsx)(`path`,{d:`M10 3v10`})]})}function tn(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`rect`,{x:`2.5`,y:`3`,width:`11`,height:`10`,rx:`1.5`}),(0,B.jsx)(`path`,{d:`M6 3v10`})]})}function nn(e){return(0,B.jsxs)(Q,{width:`1em`,height:`1em`,style:{display:`inline-block`,verticalAlign:`-0.125em`},...e,children:[(0,B.jsx)(`path`,{d:`M13 3.5v5a2 2 0 0 1-2 2H3.5`}),(0,B.jsx)(`path`,{d:`M6 8 3.5 10.5 6 13`})]})}function rn(e){let{size:t=20,...n}=e;return(0,B.jsx)(`svg`,{viewBox:`0 0 32 32`,width:t,height:t,fill:`none`,stroke:`currentColor`,strokeWidth:1.8,strokeLinejoin:`round`,strokeLinecap:`round`,"aria-hidden":`true`,focusable:`false`,...n,children:(0,B.jsx)(`path`,{d:`m5 11 11-6 11 6-11 6Z M5 16l11 6 11-6 M5 21l11 6 11-6`})})}function an(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`rect`,{x:`2.5`,y:`2.5`,width:`5`,height:`6`,rx:`1`}),(0,B.jsx)(`rect`,{x:`8.5`,y:`2.5`,width:`5`,height:`3.5`,rx:`1`}),(0,B.jsx)(`rect`,{x:`8.5`,y:`7.5`,width:`5`,height:`6`,rx:`1`}),(0,B.jsx)(`rect`,{x:`2.5`,y:`10`,width:`5`,height:`3.5`,rx:`1`})]})}function on(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`path`,{d:`M2.5 4.5h5M2.5 8h9M2.5 11.5h3.5`}),(0,B.jsx)(`circle`,{cx:`10`,cy:`4.5`,r:`1.3`}),(0,B.jsx)(`circle`,{cx:`13.2`,cy:`8`,r:`1.3`}),(0,B.jsx)(`circle`,{cx:`8.5`,cy:`11.5`,r:`1.3`})]})}function sn(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`path`,{d:`M2.5 12.5 6.5 8.5l2.5 2.5 4.5-5`}),(0,B.jsx)(`path`,{d:`M10.5 6h3v3`})]})}function cn(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`path`,{d:`M8 2.5a4 4 0 0 0-2.4 7.2c.3.25.4.6.4 1v.8h4v-.8c0-.4.1-.75.4-1A4 4 0 0 0 8 2.5Z`}),(0,B.jsx)(`path`,{d:`M6.5 13.5h3`})]})}function ln(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`rect`,{x:`2.5`,y:`2.5`,width:`4.5`,height:`4.5`,rx:`1`}),(0,B.jsx)(`rect`,{x:`9`,y:`2.5`,width:`4.5`,height:`4.5`,rx:`1`}),(0,B.jsx)(`rect`,{x:`2.5`,y:`9`,width:`4.5`,height:`4.5`,rx:`1`}),(0,B.jsx)(`rect`,{x:`9`,y:`9`,width:`4.5`,height:`4.5`,rx:`1`})]})}function un(e){return(0,B.jsxs)(Q,{...e,children:[(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`2.1`}),(0,B.jsx)(`path`,{d:`M8 1.8v1.7M8 12.5v1.7M14.2 8h-1.7M3.5 8H1.8M12.4 3.6l-1.2 1.2M4.8 11.2l-1.2 1.2M12.4 12.4l-1.2-1.2M4.8 4.8 3.6 3.6`}),(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`4.4`})]})}var dn=Le,fn={command:an,fleet:on,growth:sn,mind:cn,chat:qt,settings:Yt,apps:ln,usage:Jt},$={shell:`_shell_acpvz_6`,rail:`_rail_acpvz_45`,railDragStrip:`_railDragStrip_acpvz_79`,mark:`_mark_acpvz_88`,railList:`_railList_acpvz_98`,railFoot:`_railFoot_acpvz_107`,railButton:`_railButton_acpvz_122`,railIcon:`_railIcon_acpvz_148`,railLabel:`_railLabel_acpvz_158`,railKey:`_railKey_acpvz_172`,section:`_section_acpvz_223`,surface:`_surface_acpvz_236`};function pn(e){if(typeof e!=`number`||!Number.isFinite(e))return`—`;let t=Math.max(0,Math.min(100,e));return t>0&&t<1?`<1%`:t>99&&t<100?`99%`:`${Math.round(t)}%`}function mn({label:e,blurb:t}){return(0,B.jsx)(Gt,{label:e,blurb:t??``})}function hn(e){let t=D(e);return async()=>{let n=_e(e),r=n?le(n):void 0;if(!n||!r)return{default:()=>(0,B.jsx)(mn,{label:t.label,blurb:t.blurb})};try{let e=await r(),t=e[n]??e.default;if(typeof t==`function`)return{default:t};console.error(`[verse] ${n} exports no ${n} component`)}catch(e){console.error(`[verse] ${t.label} failed to load`,e)}return{default:()=>(0,B.jsx)(mn,{label:t.label,blurb:t.blurb})}}}var gn=new Map,_n=new Map;function vn(e){let t=gn.get(e);return t||(t=hn(e)().then(t=>(_n.set(e,t.default),t)),gn.set(e,t)),t}var yn=new Map(ye.map(e=>[e.id,(0,P.lazy)(()=>vn(e.id))])),bn=()=>i(()=>import(`./CommandPalette-lLV-OR63.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])),xn=()=>i(()=>import(`./NeedsYouDrawer-hiTINupk.js`),__vite__mapDeps([15,1,2,3,4,5,16,17,18,19,20,21,22,23,24,25,26,27,28,6,7,29,10,8,9,11,12,13,30,31,32,33,34,35,36,37,38])),Sn=()=>i(()=>import(`./ShortcutsOverlay-ZPyXUS_I.js`).then(e=>e.t),__vite__mapDeps([39,1,4,2,3,5,6,8,7,9,10,40])),Cn=()=>i(()=>import(`./GearTray-CkviqjYr.js`),__vite__mapDeps([41,1,2,3,6,8,7,9,10,30,42])),wn=()=>i(()=>import(`./OnboardingFlow-7N3YSUHN.js`),__vite__mapDeps([43,1,2,3,8,7,9,10,30,31,32,33,44,11,13,45,46,47,48,49,50,51,52,53,34,35,54,4,5,16,17,18,19,22,23,24,25,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72])),Tn=()=>i(()=>import(`./RailStatus-sZhApA8k.js`),__vite__mapDeps([73,1,44,2,3,11,7,13,31,32,33,45,46,47,48,49,50,51,52,53,74])),En=()=>i(()=>import(`./warmup-BsL2LdR-.js`),__vite__mapDeps([75,1,8,7,9,10])),Dn=(0,P.lazy)(()=>bn().then(e=>({default:e.CommandPalette}))),On=(0,P.lazy)(()=>xn().then(e=>({default:e.NeedsYouDrawer}))),kn=(0,P.lazy)(()=>Sn().then(e=>({default:e.ShortcutsOverlay}))),An=(0,P.lazy)(()=>Cn().then(e=>({default:e.GearTray}))),jn=(0,P.lazy)(()=>wn().then(e=>({default:e.OnboardingFlow})));function Mn(e){let t=()=>{let e=y();return e.active+e.queued>0},n=!0,r=null;return En().then(i=>{n&&(r=i.warmUpAfterFirstPaint({loadSection:vn,overlays:[bn,xn,Sn],readsInFlight:t},e))},()=>void 0),()=>{n=!1,r?.()}}var Nn=null;function Pn(){let[e,t]=(0,P.useState)(Nn);return(0,P.useEffect)(()=>{if(e)return;let n=!0;return Tn().then(e=>{Nn=e,n&&t(e)},e=>console.error(`[verse] rail status failed to load`,e)),()=>{n=!1}},[e]),e}function Fn(){return[...document.querySelectorAll(`[aria-modal="true"]`)].some(e=>!e.hasAttribute(`data-verse-overlay`)&&!e.querySelector(`[data-verse-overlay]`))}var In=3;function Ln(){let e=Kt(),t=u(),n=C(),r=Ae(),{compact:i}=ce(),a=(0,P.useMemo)(()=>ee(),[]),o=(0,P.useRef)(null),[c,l]=(0,P.useState)(!1),d=r.data,f=Pn(),p=xt();(0,P.useEffect)(()=>Mn(),[]);let[m,h]=(0,P.useState)(!1);(0,P.useEffect)(()=>{let e=!0;return Cn().then(()=>{e&&h(!0)},e=>console.error(`[verse] settings tray failed to load`,e)),()=>{e=!1}},[]),Ht(),(0,P.useEffect)(()=>{function e(e){if(e.defaultPrevented||k().overlay===`palette`||Fn())return;let t=ne(e,[`global`]);t&&(e.preventDefault(),X(t.id,{via:`key`}))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[]),(0,P.useEffect)(()=>Ke(e=>{if(e.kind===`open-session`){O(),ve(e.sessionId);return}(e.name===`new-chat`||e.name===`focus-composer`)&&O(),X(e.commandId,{via:`menu`})}),[]),(0,P.useEffect)(()=>At(Ce),[]),(0,P.useEffect)(()=>{Ge(t.theme)},[t.theme]),(0,P.useEffect)(()=>{if(!e.announceChatMoved)return;let t=ie(`surface.chat`)?.keys[0];n.show(`Chat moved to ${t?te(t,a):`⌘5`} — Command, Fleet, Growth and Mind come first now.`),he()},[e.announceChatMoved,n,a]),(0,P.useEffect)(()=>je(e=>{if(typeof document<`u`&&document.visibilityState===`hidden`)return;let t=k(),r=e.filter(e=>t.section!==`chat`||t.activeSessionId!==e.sessionId),i=r.filter(e=>e.outcome===`failed`);for(let e of i.slice(0,In))n.show(`Failed: ${e.title}`,`danger`);let a=r.filter(e=>e.outcome===`ok`);if(a.length>In)n.show(`${a.length} chats finished.`,`success`);else for(let e of a)n.show(`Finished: ${e.title}`,`success`)}),[n]);let[g,_]=(0,P.useState)(null),v=d?.mind?.latestMemoAt??null;(0,P.useEffect)(()=>{if(e.section!==`mind`||!d?.mind?.unseen||!v)return;_(v);let t=s();t&&x(ae,{surface:`mind`},t).catch(()=>void 0)},[e.section,d?.mind?.unseen,v]);let y=e.railExpanded&&!i,b=d?d.counts.needsYou:null,S=D(e.section),w=S.placement===`tray`?S:null,T=f?.RailBadgeMark??null,re=e=>{let t=ie(e)?.keys[0];return t?te(t,a):void 0};return(0,B.jsxs)(`div`,{className:$.shell,"data-rail":y?`expanded`:`collapsed`,"data-compact":i||void 0,children:[(0,B.jsxs)(`nav`,{className:$.rail,"data-rail":y?`expanded`:`collapsed`,"aria-label":`Verse sections`,children:[(0,B.jsx)(`span`,{className:$.railDragStrip,"data-app-region":`drag`,"aria-hidden":`true`}),(0,B.jsx)(U,{label:`Ashlr Verse`,placement:`right`,disabled:y,children:(0,B.jsxs)(`span`,{className:$.mark,children:[(0,B.jsx)(rn,{}),(0,B.jsx)(`span`,{className:`visually-hidden`,children:`Ashlr Verse`})]})}),(0,B.jsx)(`ul`,{className:$.railList,children:Se.map(t=>{let n=fn[t.id],r=t.id===`mind`&&v!==null&&g===v||!f?null:f.railBadgeFor(t.id,d),a=e.section===t.id,o=re(`surface.${t.id}`);return(0,B.jsx)(`li`,{children:(0,B.jsx)(U,{label:t.label,shortcut:o,placement:`right`,disabled:y||i,children:(0,B.jsxs)(`button`,{type:`button`,className:$.railButton,"aria-current":a?`page`:void 0,"data-section":t.id,"aria-label":`${t.label}${r?.spoken??``}`,onClick:()=>E(t.id),children:[(0,B.jsxs)(`span`,{className:$.railIcon,children:[(0,B.jsx)(n,{}),r&&T?(0,B.jsx)(T,{badge:r}):null]}),y||i?(0,B.jsx)(`span`,{className:$.railLabel,children:t.label}):null,y&&o?(0,B.jsx)(`span`,{className:$.railKey,"aria-hidden":`true`,children:o}):null]})})},t.id)})}),(0,B.jsxs)(`div`,{className:$.railFoot,children:[(0,B.jsx)(U,{label:`Needs you`,shortcut:re(`needs-you.open`),placement:`right`,disabled:y||i,children:(0,B.jsxs)(`button`,{type:`button`,className:$.railButton,"aria-label":b===null?`Needs you`:`Needs you, ${b}`,"aria-expanded":e.overlay===`needs-you`,"data-needs-you":b??void 0,onClick:()=>X(`needs-you.open`,{via:`button`}),children:[(0,B.jsxs)(`span`,{className:$.railIcon,children:[(0,B.jsx)(dn,{}),b&&T?(0,B.jsx)(T,{badge:{kind:`count`,count:b,spoken:``,tone:`warning`}}):null]}),y||i?(0,B.jsx)(`span`,{className:$.railLabel,children:i?`Inbox`:`Needs you`}):null]})}),f&&!i?(0,B.jsx)(Rn,{rail:f,expanded:y}):null,(0,B.jsx)(U,{label:`Settings and more`,placement:`right`,disabled:y||i||c,children:(0,B.jsxs)(`button`,{ref:o,type:`button`,className:$.railButton,"aria-label":w?`Settings and more (${w.label} open)`:`Settings and more`,"aria-haspopup":`menu`,"aria-expanded":c,"aria-current":w?`page`:void 0,"data-gear":!0,"data-active":w?!0:void 0,onClick:()=>l(e=>!e),children:[(0,B.jsx)(`span`,{className:$.railIcon,children:(0,B.jsx)(un,{})}),y||i?(0,B.jsx)(`span`,{className:$.railLabel,children:i?`More`:`Settings`}):null]})})]})]}),(0,B.jsx)(`main`,{className:$.section,"data-section":e.section,id:`main-content`,tabIndex:-1,children:e.mounted.map(t=>(0,B.jsx)(zn,{id:t,active:t===e.section},t))}),(0,B.jsx)(P.Suspense,{fallback:null,children:m||c?(0,B.jsx)(An,{open:c,anchorRef:o,onClose:()=>l(!1),compact:i}):null}),(0,B.jsxs)(P.Suspense,{fallback:null,children:[e.overlay===`palette`?(0,B.jsx)(Dn,{}):null,e.overlay===`needs-you`?(0,B.jsx)(On,{}):null,e.overlay===`shortcuts`?(0,B.jsx)(kn,{}):null]}),(0,B.jsx)(se,{}),(0,B.jsx)(P.Suspense,{fallback:null,children:p.open?(0,B.jsx)(jn,{}):null})]})}function Rn({rail:e,expanded:t}){let n=e.useRailCapacity();if(!n)return null;let{CapacityRing:r,describeRailCapacity:i}=e;return(0,B.jsx)(U,{label:i(n),placement:`right`,disabled:t,children:(0,B.jsxs)(`button`,{type:`button`,className:$.railButton,"aria-label":`Capacity — ${i(n)}`,"data-capacity":Math.round(n.usedPercent),onClick:()=>E(`apps`,`seat:${n.seatId}`),children:[(0,B.jsx)(`span`,{className:$.railIcon,children:(0,B.jsx)(r,{badge:n})}),t?(0,B.jsxs)(`span`,{className:$.railLabel,children:[n.label,` `,n.limitReached?`limit`:pn(n.usedPercent)]}):null]})})}function zn({id:e,active:t}){let[n]=(0,P.useState)(()=>_n.get(e)??yn.get(e)),r=D(e);return(0,B.jsx)(`div`,{className:$.surface,"data-surface":e,hidden:!t,inert:!t,children:(0,B.jsx)(ke,{visible:t,children:(0,B.jsx)(w,{resetKey:e,children:(0,B.jsx)(P.Suspense,{fallback:(0,B.jsx)(Wt,{section:e,label:r.label}),children:(0,B.jsx)(n,{})})})})})}var Bn=`/next/assets/AshlrSans-latin-DVBgX9ac.woff2`,Vn=`/next/assets/SpaceGrotesk-latin-C6WxOMZt.woff2`,Hn={shell:`_shell_k4nf7_1`,checking:`_checking_k4nf7_2`};function Un(e=typeof document>`u`?null:document){let t=ye.find(e=>e.id===k().section),n=t?be[`./sections/${t.module}.tsx`]:void 0;if(n&&n().catch(()=>void 0),e?.head)for(let t of[Bn,Vn]){if([...e.head.querySelectorAll(`link[rel="preload"]`)].some(e=>e.getAttribute(`href`)===t))continue;let n=e.createElement(`link`);n.rel=`preload`,n.as=`font`,n.type=`font/woff2`,n.crossOrigin=`anonymous`,n.href=t,e.head.append(n)}}Un();var Wn=`ashlr:sidecar-restarted`;function Gn(e=window){let t=!1,n=!1,r=!1,i=()=>{if(!r){if(t){n=!0;return}t=!0,o().then(e=>{e&&we()}).catch(()=>void 0).finally(()=>{t=!1,n&&(n=!1,i())})}};return e.addEventListener(Wn,i),()=>{r=!0,e.removeEventListener(Wn,i)}}function Kn(){let e=f();return(0,P.useEffect)(()=>Gn(),[]),(0,P.useEffect)(()=>{if(e!==`checking`)return;let t=!1;return o().then(e=>{if(!(t||e))return m(j.key,j.fetch).then(()=>{t||a(p(j.key).status===`success`)})}),()=>{t=!0}},[e]),e===`checking`?(0,B.jsx)(`p`,{className:Hn.checking,role:`status`,children:`Checking for an existing Verse session…`}):e===`unauthenticated`?(0,B.jsx)(b,{heading:`Connect to Ashlr Verse`,command:`ashlr verse`,subject:`Ashlr Verse`,mutationField:!0}):(0,B.jsxs)(S,{children:[(0,B.jsx)(h,{}),(0,B.jsx)(`div`,{className:Hn.shell,children:(0,B.jsx)(Ln,{})})]})}export{bt as C,tt as D,Ue as E,rt as O,vt as S,U as T,Kn as VerseConsoleApp,wt as _,en as a,xt as b,fn as c,tn as d,Jt as f,q as g,X as h,$t as i,Xt as l,Kt as m,ln as n,Zt as o,rn as p,Qt as r,nn as s,pn as t,Yt as u,Tt as v,_t as w,yt as x,St as y};
3
+ //# sourceMappingURL=VerseConsoleApp-Dq_hREXs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/app/desktop-shell.ts","../../../../../../src/web-ui/components/primitives/Tooltip.tsx","../../../../../../src/web-ui/routes/verse/onboarding/onboarding-store.ts","../../../../../../src/web-ui/routes/verse/onboarding/useOnboarding.ts","../../../../../../src/web-ui/routes/verse/command/nav.ts","../../../../../../src/web-ui/routes/verse/shell/reveal-anchor.ts","../../../../../../src/web-ui/routes/verse/shell/run-command.ts","../../../../../../src/web-ui/routes/verse/shell/skeletons.tsx","../../../../../../src/web-ui/routes/verse/useVerseUi.ts","../../../../../../src/web-ui/routes/verse/verse-icons.tsx","../../../../../../src/web-ui/routes/verse/percent-text.ts","../../../../../../src/web-ui/routes/verse/VerseApp.tsx","../../../../../../src/web-ui/design/fonts/AshlrSans-latin.woff2?url","../../../../../../src/web-ui/design/fonts/SpaceGrotesk-latin.woff2?url","../../../../../../src/web-ui/app/VerseConsoleApp.tsx"],"sourcesContent":["/**\n * app/desktop-shell.ts — the web half of the desktop shell contract.\n *\n * The native side (`desktop/src-tauri/src/shell_contract.{rs,js}`, documented\n * in `desktop/README.md` → \"Desktop shell contract\") injects markers, CSS\n * variables, a drag-region mirror, a command event (menu bar, tray, clicked\n * notifications, the global hotkey), the desktop state behind Settings ▸\n * Desktop, and two page→native calls (theme, preferences). This module is the\n * ONLY place the web UI touches any of it, so the console keeps exactly one\n * seam to the desktop app and never references Tauri.\n *\n * Everything here is inert in a browser: the markers are absent, the global\n * is undefined, and the event is never dispatched. No caller needs a\n * conditional build or a feature flag.\n */\nimport { useSyncExternalStore } from 'react';\nimport type { ThemePreference } from '../data/theme-store.js';\nimport { parseDesktopCommand, type ParsedDesktopCommand } from '../routes/verse/shell/command-catalog.js';\n\n/**\n * The two commands the native MENU BAR sends (the 3.9 contract).\n * `subscribeDesktopCommands` keeps delivering exactly these; everything the\n * 3.10 shell sends (tray, notifications, hotkey) arrives through\n * `subscribeShellCommands`, parsed by the command catalog.\n */\nexport type DesktopCommand = 'open-settings' | 'toggle-theme';\n\nconst DESKTOP_COMMAND_EVENT = 'ashlr:desktop-command';\nconst COMMANDS: readonly DesktopCommand[] = ['open-settings', 'toggle-theme'];\n\n/**\n * True only inside the Tauri window, where `shell_contract.js` has stamped\n * `data-app-shell=\"desktop\"` on `<html>`. Layout does NOT branch on this —\n * the CSS reads `--app-titlebar-height` / `--app-traffic-light-inset` with a\n * `0px` fallback instead, so there is one layout, not two.\n */\nexport function isDesktopShell(): boolean {\n try {\n return document.documentElement.getAttribute('data-app-shell') === 'desktop';\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve a three-state preference down to what is actually painted, which is\n * what the native side needs: it stores the value and paints the window\n * background with the matching canvas colour on the NEXT launch, before the\n * webview has painted. 'system' therefore has to become a concrete answer\n * here, not be passed through.\n */\nexport function resolveTheme(preference: ThemePreference): 'light' | 'dark' {\n if (preference === 'light' || preference === 'dark') return preference;\n try {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n } catch {\n // jsdom and old webviews without matchMedia: light is the token default.\n return 'light';\n }\n}\n\ninterface DesktopBridge {\n reportTheme?: (theme: 'light' | 'dark') => void;\n getState?: () => unknown;\n setPreference?: (name: DesktopPreference, value: boolean) => boolean;\n}\n\nfunction bridge(): DesktopBridge | undefined {\n return (window as unknown as { __ASHLR_DESKTOP__?: DesktopBridge }).__ASHLR_DESKTOP__;\n}\n\n/**\n * Tell the native window which theme is painted, so the next cold launch does\n * not flash white. Optional by contract, best-effort by implementation: a\n * browser has no bridge, and a throwing bridge must never break a render.\n * Repeat calls with the same value are dropped on the native side.\n */\nexport function reportThemeToShell(preference: ThemePreference): void {\n try {\n bridge()?.reportTheme?.(resolveTheme(preference));\n } catch {\n /* the shell is an enhancement; never let it fail the page */\n }\n}\n\nfunction isDesktopCommand(value: unknown): value is DesktopCommand {\n return typeof value === 'string' && (COMMANDS as readonly string[]).includes(value);\n}\n\n/**\n * Listen for menu commands. Returns an unsubscribe function, so a component\n * can register it from an effect.\n *\n * Unknown commands are ignored rather than forwarded: the native menu can\n * grow ahead of the web UI, and an unhandled command is specified to be inert\n * rather than an error.\n */\nexport function subscribeDesktopCommands(handler: (command: DesktopCommand) => void): () => void {\n function onCommand(event: Event): void {\n const detail = (event as CustomEvent<{ command?: unknown }>).detail;\n const command = detail?.command;\n if (isDesktopCommand(command)) handler(command);\n }\n window.addEventListener(DESKTOP_COMMAND_EVENT, onCommand);\n return () => window.removeEventListener(DESKTOP_COMMAND_EVENT, onCommand);\n}\n\n/**\n * Every desktop command — menu bar, tray, a clicked notification, the global\n * hotkey — parsed by the command catalog (`parseDesktopCommand`): a catalog\n * command (`open-needs-you`, `new-chat`, `focus-composer`, …) or\n * `open-session:<id>`. Unknown strings are dropped, never guessed. This is\n * what the workbench shell (C1) listens to; `subscribeDesktopCommands` stays\n * for the 3.9 menu-only contract.\n */\nexport function subscribeShellCommands(handler: (command: ParsedDesktopCommand) => void): () => void {\n function onCommand(event: Event): void {\n const parsed = parseDesktopCommand((event as CustomEvent<{ command?: unknown }>).detail?.command);\n if (parsed) handler(parsed);\n }\n window.addEventListener(DESKTOP_COMMAND_EVENT, onCommand);\n return () => window.removeEventListener(DESKTOP_COMMAND_EVENT, onCommand);\n}\n\n// ===========================================================================\n// Desktop state — Settings ▸ Desktop (V3.10, C8)\n// ===========================================================================\n\n/** Preferences Settings ▸ Desktop may change (desktop_prefs.rs `PrefsPatch`). */\nexport type DesktopPreference = 'globalHotkey' | 'notifications';\n\n/**\n * What the desktop app reports (desktop_prefs.rs `DesktopStateView`). Every\n * string is the shell's own copy — nothing from the server.\n */\nexport interface DesktopState {\n hotkey: {\n /** The operator's choice. */\n enabled: boolean;\n /** Whether macOS actually gave Ashlr the chord. */\n registered: boolean;\n /** Display form, e.g. \"⌃⌥Space\". */\n accelerator: string;\n /** Why `registered` is false while `enabled` is true; null otherwise. */\n error: string | null;\n };\n notifications: {\n enabled: boolean;\n /**\n * `native` — a signed build, banners come from Ashlr.\n * `script` — an unsigned build, banners come through osascript and show\n * as Script Editor (say so beside the toggle).\n */\n delivery: 'native' | 'script';\n };\n}\n\nconst DESKTOP_STATE_EVENT = 'ashlr:desktop-state';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Boundary check: the value crossed from another runtime. */\nexport function isDesktopState(value: unknown): value is DesktopState {\n if (!isRecord(value) || !isRecord(value['hotkey']) || !isRecord(value['notifications'])) return false;\n const h = value['hotkey'];\n const n = value['notifications'];\n return (\n typeof h['enabled'] === 'boolean' &&\n typeof h['registered'] === 'boolean' &&\n typeof h['accelerator'] === 'string' &&\n h['accelerator'].length > 0 &&\n h['accelerator'].length <= 32 &&\n (h['error'] === null || (typeof h['error'] === 'string' && h['error'].length <= 300)) &&\n typeof n['enabled'] === 'boolean' &&\n (n['delivery'] === 'native' || n['delivery'] === 'script')\n );\n}\n\n// One module-level listener feeds a cached snapshot, so readers (and\n// useSyncExternalStore, which needs a STABLE snapshot) never see a stale or\n// freshly-copied object.\nlet cachedState: DesktopState | null | undefined;\nlet listening = false;\nconst stateListeners = new Set<(state: DesktopState) => void>();\n\nfunction readBridgeState(): DesktopState | null {\n try {\n const raw = bridge()?.getState?.();\n return isDesktopState(raw) ? raw : null;\n } catch {\n return null;\n }\n}\n\nfunction onDesktopState(event: Event): void {\n const detail = (event as CustomEvent<unknown>).detail;\n if (!isDesktopState(detail)) return;\n cachedState = detail;\n for (const listener of [...stateListeners]) listener(detail);\n}\n\nfunction ensureListening(): void {\n if (listening) return;\n listening = true;\n window.addEventListener(DESKTOP_STATE_EVENT, onDesktopState);\n}\n\n/** The latest desktop state, or null in a browser (and before native answered). */\nexport function getDesktopState(): DesktopState | null {\n ensureListening();\n if (cachedState === undefined || cachedState === null) cachedState = readBridgeState();\n return cachedState;\n}\n\n/** Called with every new state native sends. Returns an unsubscribe function. */\nexport function subscribeDesktopState(handler: (state: DesktopState) => void): () => void {\n ensureListening();\n stateListeners.add(handler);\n return () => {\n stateListeners.delete(handler);\n };\n}\n\n/**\n * Ask the desktop app to change a preference. True when the request was sent\n * (a desktop bridge exists), false in a browser. The answer arrives as a new\n * state — e.g. a hotkey another app holds comes back\n * `{ enabled: true, registered: false, error }` — so render from state, never\n * from the value you asked for.\n */\nexport function setDesktopPreference(name: DesktopPreference, value: boolean): boolean {\n if (name !== 'globalHotkey' && name !== 'notifications') return false;\n if (typeof value !== 'boolean') return false;\n try {\n return bridge()?.setPreference?.(name, value) === true;\n } catch {\n return false;\n }\n}\n\nfunction subscribeStore(onChange: () => void): () => void {\n return subscribeDesktopState(() => onChange());\n}\n\n/**\n * React: the live desktop state, or null in a browser. Settings ▸ Desktop\n * renders its hotkey and notification rows from this and hides them (or says\n * \"available in the desktop app\") when it is null.\n */\nexport function useDesktopState(): DesktopState | null {\n return useSyncExternalStore(subscribeStore, getDesktopState, () => null);\n}\n\n/** Tests only: forget the cached state and the module listener. */\nexport function resetDesktopStateForTests(): void {\n if (listening) window.removeEventListener(DESKTOP_STATE_EVENT, onDesktopState);\n listening = false;\n cachedState = undefined;\n stateListeners.clear();\n}\n","/**\n * components/primitives/Tooltip.tsx — the label for an icon-only control and\n * the numbers behind a 2px meter line.\n *\n * Rules it enforces so a tooltip never becomes the only way to read the UI:\n * - it shows on HOVER *and* on keyboard FOCUS (a mouse-only tooltip is\n * invisible to keyboard operators);\n * - Escape dismisses it while the trigger keeps focus (WCAG 1.4.13);\n * - the trigger is wired with aria-describedby, so the content is\n * announced rather than merely drawn;\n * - it carries description, never the accessible NAME — icon buttons still\n * need their own aria-label.\n *\n * WHY IT RENDERS THROUGH A PORTAL. This used to be an absolutely-positioned\n * span inside a `position: relative` wrapper, which is correct right up until\n * the trigger lives inside something that clips — and the first real consumer,\n * the Verse rail, is exactly that: a 56px flex column inside a grid shell with\n * its own stacking context. A bubble anchored there is cut off at the rail's\n * edge, which is the failure the native `title=` tooltip already had. Rendering\n * into `document.body` at `position: fixed`, positioned from the trigger's\n * bounding rect, means NO ancestor can clip it: not `overflow: hidden`, not a\n * `transform`, not a lower `z-index` on a sibling pane.\n *\n * The Popover API (`popover=\"manual\"` + the top layer) would do the same job\n * without the portal, but it is not yet safe to depend on across the WebKit\n * version bundled with the Tauri shell, and it still needs manual positioning\n * without `anchor-name`. The portal is the boring, verifiable option.\n *\n * TWO PROP SPELLINGS, on purpose. `label` + `shortcut` is the shape icon\n * controls want, and is what new call sites should use. `content` predates it\n * and takes arbitrary nodes (the Meter's numbers, for one), so it stays as the\n * other half of a union rather than being renamed out from under its callers.\n * Exactly one of the two is required.\n */\nimport {\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type FocusEvent as ReactFocusEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport styles from './Tooltip.module.css';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Hovering across a rail of six icons must not strobe six bubbles, so the\n * POINTER waits. Focus does not: a keyboard operator has already committed to\n * the control, and a delay there just reads as lag.\n */\nconst OPEN_DELAY_MS = 160;\n/** Distance between the trigger's edge and the bubble. */\nconst GAP = 8;\n/** Smallest distance the bubble may sit from the viewport edge. */\nconst MARGIN = 8;\n\n/** The props Tooltip clones onto its trigger. */\ninterface TooltipTriggerProps {\n 'aria-describedby'?: string;\n /** Read, never set: a disabled trigger fires no pointer events, so the wrapper must take over. */\n disabled?: boolean;\n onMouseEnter?: (event: ReactMouseEvent<HTMLElement>) => void;\n onMouseLeave?: (event: ReactMouseEvent<HTMLElement>) => void;\n onFocus?: (event: ReactFocusEvent<HTMLElement>) => void;\n onBlur?: (event: ReactFocusEvent<HTMLElement>) => void;\n}\n\ninterface TooltipCommonProps {\n /** Rendered as a distinct keycap beside the label, e.g. `⌘2`. */\n shortcut?: string;\n placement?: TooltipPlacement;\n /** Skip the tooltip entirely without changing the tree (e.g. the label is already visible). */\n disabled?: boolean;\n className?: string;\n /** The trigger. Tooltip adds no layout box of its own around it. */\n children: ReactElement<TooltipTriggerProps>;\n}\n\nexport type TooltipProps = TooltipCommonProps &\n (\n | { label: string; content?: undefined }\n | { label?: undefined; content: ReactNode }\n );\n\ninterface Position {\n left: number;\n top: number;\n placement: TooltipPlacement;\n}\n\n/** Placement order: the caller's choice first, then its opposite, then the rest. */\nfunction candidates(preferred: TooltipPlacement): TooltipPlacement[] {\n const opposite: Record<TooltipPlacement, TooltipPlacement> = {\n top: 'bottom', bottom: 'top', left: 'right', right: 'left',\n };\n const rest = (['top', 'bottom', 'right', 'left'] as const).filter(\n (p) => p !== preferred && p !== opposite[preferred],\n );\n return [preferred, opposite[preferred], ...rest];\n}\n\nfunction place(placement: TooltipPlacement, trigger: DOMRect, w: number, h: number): { left: number; top: number } {\n switch (placement) {\n case 'top': return { left: trigger.left + trigger.width / 2 - w / 2, top: trigger.top - h - GAP };\n case 'bottom': return { left: trigger.left + trigger.width / 2 - w / 2, top: trigger.bottom + GAP };\n case 'left': return { left: trigger.left - w - GAP, top: trigger.top + trigger.height / 2 - h / 2 };\n case 'right': return { left: trigger.right + GAP, top: trigger.top + trigger.height / 2 - h / 2 };\n }\n}\n\n/**\n * First placement whose bubble fits the viewport wins; if none fits we keep\n * the preferred one and clamp, which is still readable — a bubble nudged\n * inward beats a bubble half off-screen.\n */\nfunction resolve(trigger: DOMRect, w: number, h: number, preferred: TooltipPlacement): Position {\n const vw = window.innerWidth || 0;\n const vh = window.innerHeight || 0;\n let fallback: Position | null = null;\n for (const placement of candidates(preferred)) {\n const { left, top } = place(placement, trigger, w, h);\n if (!fallback) fallback = { left, top, placement };\n const fits = left >= MARGIN && top >= MARGIN && left + w <= vw - MARGIN && top + h <= vh - MARGIN;\n if (fits) return { left, top, placement };\n }\n const chosen = fallback!;\n return {\n placement: chosen.placement,\n left: Math.max(MARGIN, Math.min(chosen.left, vw - w - MARGIN)),\n top: Math.max(MARGIN, Math.min(chosen.top, vh - h - MARGIN)),\n };\n}\n\nexport function Tooltip(props: TooltipProps) {\n const { label, content, shortcut, placement = 'top', disabled = false, className, children } = props;\n const [open, setOpen] = useState(false);\n const [position, setPosition] = useState<Position | null>(null);\n const id = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const bubbleRef = useRef<HTMLDivElement | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelTimer = useCallback(() => {\n if (timer.current !== null) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n }, []);\n\n const close = useCallback(() => {\n cancelTimer();\n setOpen(false);\n setPosition(null);\n }, [cancelTimer]);\n\n // Unmounting mid-delay must not fire setOpen on a dead component.\n useEffect(() => cancelTimer, [cancelTimer]);\n\n const reposition = useCallback(() => {\n const trigger = triggerRef.current;\n const bubble = bubbleRef.current;\n if (!trigger || !bubble) return;\n const rect = trigger.getBoundingClientRect();\n setPosition(resolve(rect, bubble.offsetWidth, bubble.offsetHeight, placement));\n }, [placement]);\n\n // Measure AFTER the bubble exists but BEFORE paint, so it is never seen at\n // its unpositioned origin first.\n useLayoutEffect(() => {\n if (!open) return;\n reposition();\n }, [open, reposition]);\n\n // Escape closes while the trigger keeps focus (WCAG 1.4.13). Held at the\n // document so it works wherever the keystroke lands, and a scroll or resize\n // under an open bubble re-anchors it rather than leaving it stranded.\n useEffect(() => {\n if (!open) return;\n function onKeyDown(event: globalThis.KeyboardEvent) {\n if (event.key === 'Escape') close();\n }\n document.addEventListener('keydown', onKeyDown);\n window.addEventListener('resize', reposition);\n // Capture: a scroll inside any ancestor moves the trigger too, and scroll\n // events from those do not bubble to window.\n window.addEventListener('scroll', reposition, true);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', reposition);\n window.removeEventListener('scroll', reposition, true);\n };\n }, [open, close, reposition]);\n\n const body = label ?? content;\n const empty = body === null || body === undefined || body === '';\n if (disabled || empty) return children;\n\n function openAfterDelay(element: HTMLElement) {\n triggerRef.current = element;\n cancelTimer();\n timer.current = setTimeout(() => {\n timer.current = null;\n setOpen(true);\n }, OPEN_DELAY_MS);\n }\n\n function openNow(element: HTMLElement) {\n triggerRef.current = element;\n cancelTimer();\n setOpen(true);\n }\n\n const triggerDisabled = children.props.disabled === true;\n const describedBy = open ? id : undefined;\n\n const trigger = cloneElement(children, {\n 'aria-describedby': describedBy,\n onMouseEnter: (event: ReactMouseEvent<HTMLElement>) => {\n children.props.onMouseEnter?.(event);\n openAfterDelay(event.currentTarget);\n },\n onMouseLeave: (event: ReactMouseEvent<HTMLElement>) => {\n children.props.onMouseLeave?.(event);\n close();\n },\n onFocus: (event: ReactFocusEvent<HTMLElement>) => {\n children.props.onFocus?.(event);\n openNow(event.currentTarget);\n },\n onBlur: (event: ReactFocusEvent<HTMLElement>) => {\n children.props.onBlur?.(event);\n close();\n },\n });\n\n return (\n <>\n {/*\n `display: contents` — the wrapper exists in the DOM but generates no\n box, so it cannot disturb the trigger's own flex/grid placement. It is\n here only to carry the describedby relationship at the trigger's parent\n as well as on the trigger itself; the behaviour all lives on the cloned\n child, which is what actually has a hover target.\n */}\n <span\n className={`${styles.wrapper} ${className ?? ''}`}\n aria-describedby={describedBy}\n /*\n A DISABLED trigger emits no pointer events at all, so handlers on the\n cloned child can never fire and its tooltip could never open — which\n is precisely the tooltip that matters, since it is the one explaining\n WHY the control is disabled. When the child is disabled the wrapper\n stops being `display: contents`, takes a box of its own, and carries\n the hover itself. Focus is not mirrored here: a disabled control is\n not focusable, so there is no focus to mirror.\n */\n data-disabled-trigger={triggerDisabled ? 'true' : undefined}\n onMouseOver={triggerDisabled ? (event) => openNow(event.currentTarget) : undefined}\n onMouseOut={triggerDisabled ? close : undefined}\n >\n {trigger}\n </span>\n {open\n ? createPortal(\n <div\n ref={bubbleRef}\n role=\"tooltip\"\n id={id}\n className={styles.bubble}\n data-placement={position?.placement ?? placement}\n style={{\n // Inline, though the stylesheet says it too: `left`/`top`\n // below are VIEWPORT coordinates, and they only mean that\n // under `fixed`. The two travel together or the bubble lands\n // somewhere arbitrary.\n position: 'fixed',\n left: position ? `${position.left}px` : '0px',\n top: position ? `${position.top}px` : '0px',\n // Hidden until measured, but still laid out — the measurement\n // needs a real offsetWidth, and `visibility` gives one where\n // `display: none` would not.\n visibility: position ? 'visible' : 'hidden',\n }}\n >\n <span className={styles.label}>{body}</span>\n {shortcut ? <kbd className={styles.shortcut}>{shortcut}</kbd> : null}\n </div>,\n document.body,\n )\n : null}\n </>\n );\n}\n","/**\n * routes/verse/onboarding/onboarding-store.ts — whether the first-run tour\n * is showing, and whether it has already been answered.\n *\n * Framework-free, same shape as verse-ui-store.ts: a module-level snapshot,\n * a listener set, and one `useSyncExternalStore` hook in ./useOnboarding.ts.\n *\n * Persisted under `ashlr.verse.onboarding.v1`. Two facts are stored and they\n * are deliberately different:\n *\n * - `completedAt` — the operator walked to the end.\n * - `dismissedAt` — the operator skipped, or closed it part-way.\n *\n * Either one silences the tour for good; storing which happened means a\n * later build can tell \"has seen it\" from \"chose not to\", and it makes the\n * Settings replay affordance honest about what it is replaying.\n *\n * SHOWING IT IS FAIL-SAFE IN THE QUIET DIRECTION. A storage read that throws\n * (private window, storage disabled) or returns something malformed resolves\n * to NOT showing the tour. A first-run flow that reappears on every launch\n * because storage is unavailable would be worse than one that never appears:\n * the app is fully usable without it, and it is reachable from Settings.\n */\n\nexport interface OnboardingRecord {\n /** ISO timestamp of the run that reached the last step. */\n completedAt: string | null;\n /** ISO timestamp of a skip or an early close. */\n dismissedAt: string | null;\n}\n\nexport interface OnboardingState extends OnboardingRecord {\n /** Is the flow on screen right now? */\n open: boolean;\n /** 0-based index into the step list (./onboarding-model.ts ONBOARDING_STEPS). */\n step: number;\n}\n\nexport const VERSE_ONBOARDING_STORAGE_KEY = 'ashlr.verse.onboarding.v1';\n\nconst EMPTY: OnboardingRecord = { completedAt: null, dismissedAt: null };\n\nfunction readRecord(): OnboardingRecord {\n try {\n const raw = localStorage.getItem(VERSE_ONBOARDING_STORAGE_KEY);\n if (!raw) return EMPTY;\n const parsed = JSON.parse(raw) as Partial<OnboardingRecord>;\n return {\n completedAt: typeof parsed.completedAt === 'string' ? parsed.completedAt : null,\n dismissedAt: typeof parsed.dismissedAt === 'string' ? parsed.dismissedAt : null,\n };\n } catch {\n // Unreadable storage means \"answered\" — see the fail-safe note above.\n return { completedAt: null, dismissedAt: new Date(0).toISOString() };\n }\n}\n\nfunction persist(record: OnboardingRecord): void {\n try {\n localStorage.setItem(VERSE_ONBOARDING_STORAGE_KEY, JSON.stringify(record));\n } catch {\n /* best-effort: a private window without storage still runs the app */\n }\n}\n\n/** True when neither answer has been recorded yet. */\nexport function isFirstRun(record: OnboardingRecord): boolean {\n return record.completedAt === null && record.dismissedAt === null;\n}\n\nconst initialRecord = readRecord();\n\nlet state: OnboardingState = {\n ...initialRecord,\n open: isFirstRun(initialRecord),\n step: 0,\n};\n\nconst listeners = new Set<() => void>();\n\nfunction patch(delta: Partial<OnboardingState>): void {\n const next = { ...state, ...delta };\n if ((Object.keys(delta) as (keyof OnboardingState)[]).every((k) => Object.is(state[k], next[k]))) return;\n state = next;\n for (const l of listeners) l();\n}\n\nexport function subscribeOnboarding(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function getOnboardingState(): OnboardingState {\n return state;\n}\n\nexport function setOnboardingStep(step: number): void {\n patch({ step: Math.max(0, Math.trunc(step)) });\n}\n\n/** Skip, Escape, or the close button — all the same answer. */\nexport function dismissOnboarding(): void {\n const record: OnboardingRecord = { completedAt: state.completedAt, dismissedAt: new Date().toISOString() };\n persist(record);\n patch({ ...record, open: false });\n}\n\n/** Walked to the end. */\nexport function completeOnboarding(): void {\n const record: OnboardingRecord = { completedAt: new Date().toISOString(), dismissedAt: state.dismissedAt };\n persist(record);\n patch({ ...record, open: false });\n}\n\n/** Settings → \"Replay onboarding\". Reopens at the first step; the stored\n * answer is kept, so closing the replay does not re-arm the first run. */\nexport function replayOnboarding(): void {\n patch({ open: true, step: 0 });\n}\n\n/** Test hygiene — forgets the stored answer and re-arms the first run. */\nexport function resetOnboarding(): void {\n try {\n localStorage.removeItem(VERSE_ONBOARDING_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n state = { completedAt: null, dismissedAt: null, open: true, step: 0 };\n for (const l of listeners) l();\n}\n","/**\n * routes/verse/onboarding/useOnboarding.ts — the single React binding over\n * onboarding-store.ts, kept in its own file for the same reason\n * useVerseUi.ts is: the store stays framework-free and unit-testable\n * without a DOM.\n */\nimport { useSyncExternalStore } from 'react';\nimport { getOnboardingState, subscribeOnboarding, type OnboardingState } from './onboarding-store.js';\n\nexport function useOnboarding(): OnboardingState {\n return useSyncExternalStore(subscribeOnboarding, getOnboardingState, getOnboardingState);\n}\n","/**\n * routes/verse/command/nav.ts — how a surface card asks the shell to go\n * somewhere (unit C7). The shell (C1) owns navigation state; these are thin\n * wrappers over its store so every card words navigation the same way:\n *\n * openNeedsYou() ⌘J's drawer, optionally focused on one item;\n * goToSection(s, a) switch surface (keep-alive: the target keeps its\n * state) and, when `anchor` names a card or row on\n * it, scroll that into view once it is on screen;\n * openChat(sessionId) the chat a Needs-you item or insight is about.\n */\nimport type { WorkbenchSectionId } from '../../../../core/verse/workbench-types.js';\nimport { openVerseNeedsYou, openVerseSession, setVerseSection } from '../verse-ui-store.js';\n\nexport function openNeedsYou(focusId: string | null = null): void {\n openVerseNeedsYou(focusId ? { focusId } : {});\n}\n\n/** DOM id for an anchor (\"repo-ashlrai/binshield\" → \"c7-anchor-repo-ashlrai-binshield\"). */\nexport function anchorId(anchor: string): string {\n return `c7-anchor-${anchor.replace(/[^A-Za-z0-9_-]/g, '-')}`;\n}\n\nexport function scrollToAnchor(anchor: string): void {\n const el = document.getElementById(anchorId(anchor));\n if (el && typeof el.scrollIntoView === 'function') el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n}\n\nexport function goToSection(section: WorkbenchSectionId, anchor: string | null = null): void {\n setVerseSection(section);\n if (!anchor) return;\n // The target surface may be mounting (lazy chunk) or un-hiding (keep-alive):\n // try on the next two frames, then give up quietly — a missing anchor is\n // never an error, the operator is already on the right surface.\n requestAnimationFrame(() => {\n if (document.getElementById(anchorId(anchor))) scrollToAnchor(anchor);\n else requestAnimationFrame(() => scrollToAnchor(anchor));\n });\n}\n\nexport function openChat(sessionId: string): void {\n openVerseSession(sessionId);\n}\n","/**\n * routes/verse/shell/reveal-anchor.ts — \"go to that card\" for any surface\n * (unit C1; C7 cross-unit request 3).\n *\n * Needs-you items, Leader memos and Command cards point INTO a surface\n * (\"memo:m-7\" on Mind, \"seat:claude-a\" on Apps). Whoever raises it calls\n * `setVerseSection(section, anchor)` (or dispatches VERSE_ANCHOR_EVENT); the\n * shell listens once (VerseApp) and reveals the element here.\n *\n * WHY WAIT, AND FOR HOW LONG. The target surface may be a lazy chunk that has\n * not loaded, a keep-alive surface un-hiding, or a list still fetching its\n * rows. Two animation frames (C7's own fallback in command/nav.ts) cover the\n * keep-alive case only; a cold chunk takes longer. So this watches the\n * surface's subtree until the element appears, and gives up quietly after\n * ANCHOR_WAIT_MS — a missing anchor is never an error, the operator is\n * already on the right surface.\n *\n * WHICH ELEMENT. C7 stamps `id=\"c7-anchor-<key>\"` (command/nav.ts anchorId);\n * any other owner may stamp `data-verse-anchor=\"<key>\"` instead of adopting\n * C7's id scheme. The search is scoped to `[data-surface=<section>]` so an\n * identically-keyed card on a HIDDEN keep-alive surface never wins.\n */\nimport { anchorId } from '../command/nav.js';\nimport type { VerseAnchorRequest } from '../verse-ui-store.js';\n\nexport const ANCHOR_WAIT_MS = 3_000;\n\nfunction cssEscape(value: string): string {\n return typeof CSS !== 'undefined' && typeof CSS.escape === 'function' ? CSS.escape(value) : value.replace(/[\"\\\\]/g, '\\\\$&');\n}\n\n/** The anchor's element on `section`'s surface, or null when it is not in the DOM (yet). */\nexport function findAnchorElement(section: string, anchor: string, root: ParentNode = document): HTMLElement | null {\n const host = root.querySelector<HTMLElement>(`[data-surface=\"${cssEscape(section)}\"]`);\n if (!host) return null;\n return (\n host.querySelector<HTMLElement>(`#${cssEscape(anchorId(anchor))}`) ??\n host.querySelector<HTMLElement>(`[data-verse-anchor=\"${cssEscape(anchor)}\"]`)\n );\n}\n\nfunction reveal(el: HTMLElement): void {\n if (typeof el.scrollIntoView === 'function') el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n // Keyboard users land ON the card, not just near it. Only an element that\n // can already take focus is focused — the shell never rewrites another\n // unit's tab order to make a div focusable.\n if (el.tabIndex >= 0 || el.matches('a[href],button,input,select,textarea,[tabindex]')) {\n el.focus({ preventScroll: true });\n }\n}\n\n/**\n * Reveal `anchor` on `section`. Resolves true when it was found and scrolled\n * to, false when it did not appear within `waitMs`. Never throws.\n */\nexport function revealAnchor({ section, anchor }: VerseAnchorRequest, waitMs: number = ANCHOR_WAIT_MS): Promise<boolean> {\n if (typeof document === 'undefined') return Promise.resolve(false);\n const now = findAnchorElement(section, anchor);\n if (now && !now.closest('[hidden]')) {\n reveal(now);\n return Promise.resolve(true);\n }\n return new Promise((resolve) => {\n let done = false;\n const finish = (el: HTMLElement | null) => {\n if (done) return;\n done = true;\n observer.disconnect();\n window.clearTimeout(timer);\n if (el) reveal(el);\n resolve(el !== null);\n };\n const check = () => {\n const el = findAnchorElement(section, anchor);\n // Wait for the surface to be un-hidden too: scrolling a hidden element is a no-op.\n if (el && !el.closest('[hidden]')) finish(el);\n };\n const observer = new MutationObserver(check);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['hidden', 'id', 'data-verse-anchor'] });\n const timer = window.setTimeout(() => finish(null), waitMs);\n check();\n });\n}\n\n/** The shell's one listener. Returns the unsubscribe. */\nexport function subscribeAnchorRequests(eventName: string): () => void {\n if (typeof window === 'undefined') return () => {};\n function onAnchor(event: Event): void {\n const detail = (event as CustomEvent<unknown>).detail;\n if (typeof detail !== 'object' || detail === null) return;\n const { section, anchor } = detail as Record<string, unknown>;\n if (typeof section !== 'string' || typeof anchor !== 'string' || anchor.length === 0 || anchor.length > 200) return;\n void revealAnchor({ section: section as VerseAnchorRequest['section'], anchor });\n }\n window.addEventListener(eventName, onAnchor);\n return () => window.removeEventListener(eventName, onAnchor);\n}\n","/**\n * routes/verse/shell/run-command.ts — \"run catalog command X\" from anywhere:\n * a key, the palette, the native menu, a button (unit C1).\n *\n * - guarded commands (Stop running chats…, Stop the fleet…) go through\n * confirm → token → run (guarded-action.tsx), with the runner defined\n * HERE: they are shell actions, and a guard must never depend on some\n * other unit remembering to confirm;\n * - chat commands run on the chat's handler, and when Chat is not on\n * screen the shell switches to it and parks the command until the chat\n * registers (command-bus runCommandWhenReady);\n * - the composer's commands (`composer.*`, C3) are answered by the Composer\n * through the `ashlr:command` window event, not the bus — so they are\n * DISPATCHED to it, after switching to Chat and waiting for a composer to\n * exist (deliverComposerCommand);\n * - everything else runs on its registered handler.\n *\n * Palette-listed commands are remembered for the empty-query \"Recent\" list.\n */\nimport { useEffect } from 'react';\nimport { useToast } from '../../../components/primitives/Toast.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { ApiError, apiPost } from '../../../data/client.js';\nimport { cycleTheme } from '../../../data/theme-store.js';\nimport { cancelVerseTurn } from '../verse-queries.js';\nimport {\n closeVerseOverlay,\n cycleVerseRecentChat,\n getVerseUiState,\n openVerseNeedsYou,\n recordVerseAction,\n requestVerseCommand,\n setVerseSection,\n stepVerseHistory,\n toggleVerseOverlay,\n toggleVerseRail,\n type VerseSectionId,\n} from '../verse-ui-store.js';\nimport { COMPOSER_COMMAND_IDS, WORKBENCH_COMMAND_EVENT } from '../composer/composer-keys.js';\nimport { PARKED_COMMAND_TTL_MS, registerCommandHandler, runCommand, runCommandWhenReady, type CommandInvocation } from './command-bus.js';\nimport { findCommand } from './command-catalog.js';\nimport { requestGuarded } from './guarded-action.js';\nimport { getActivityState, refreshActivity } from './useActivity.js';\n\nexport type ShellNotify = (message: string, tone?: 'neutral' | 'success' | 'danger') => void;\n\nlet notify: ShellNotify = () => {};\n\n/** The shell installs its toast here (run-command has no React context). */\nexport function setShellNotifier(fn: ShellNotify | null): void {\n notify = fn ?? (() => {});\n}\n\nfunction requireToken(path: string): string {\n const token = getMutationToken();\n if (!token) throw new ApiError('Mutation token was rejected.', 401, path);\n return token;\n}\n\n/** Stop every running chat. Stops what activity says is running NOW, one cancel each. */\nasync function stopRunningChats(): Promise<void> {\n await refreshActivity();\n const running = getActivityState().data?.running ?? [];\n if (running.length === 0) {\n notify('Nothing is running.', 'neutral');\n return;\n }\n requireToken('/api/verse/sessions');\n const results = await Promise.allSettled(running.map((r) => cancelVerseTurn(r.sessionId)));\n touchMutationHold();\n const failed = results.filter((r) => r.status === 'rejected').length;\n void refreshActivity();\n if (failed > 0) throw new Error(`Stopped ${running.length - failed} of ${running.length} chats; ${failed} did not answer.`);\n notify(running.length === 1 ? 'Stopped 1 chat.' : `Stopped ${running.length} chats.`, 'success');\n}\n\n/**\n * Stop the fleet: the authority route's `stop` (B-U1) when this build has it;\n * otherwise the daemon's ordinary stop, which engages the kill switch\n * (control-api.ts `POST /api/verse/daemon {action:'stop'}`). Both stop\n * autonomous work only — chats keep running.\n */\nasync function stopFleet(): Promise<void> {\n const token = requireToken('/api/verse/authority');\n let body: unknown = null;\n try {\n body = await apiPost<unknown>('/api/verse/authority', { action: 'stop' }, token);\n } catch (err) {\n // A CODELESS 404 from the authority route = not in this build (or no\n // dispatch, which the daemon route will then report on its own).\n if (!(err instanceof ApiError && err.status === 404 && err.code === null)) throw err;\n await apiPost<unknown>('/api/verse/daemon', { action: 'stop' }, token);\n }\n touchMutationHold();\n void refreshActivity();\n notify(describeFleetStop(body), 'success');\n}\n\n/**\n * The toast after Stop, from B-U1's StopResult (`{ result: { stop } }` on\n * the authority route). Stop arms KILL at once but does not wait for agents\n * admitted before it (waitMs 0), so \"stopped\" alone would claim more than the\n * server knows (B-U6 request 8): the drain state and any armed merge it could\n * not revoke are said out loud. The daemon fallback has no such fields and\n * gets the plain sentence.\n */\nexport function describeFleetStop(body: unknown): string {\n const base = 'Fleet stopped. It stays stopped until you resume it.';\n const stop = (body as { result?: { stop?: unknown } } | null)?.result?.stop;\n if (typeof stop !== 'object' || stop === null) return base;\n const { quiesced, liveExecutionLeases, mergeRevokeFailures } = stop as {\n quiesced?: unknown;\n liveExecutionLeases?: unknown;\n mergeRevokeFailures?: unknown;\n };\n const parts = [base];\n if (quiesced === false) {\n const n = typeof liveExecutionLeases === 'number' && Number.isFinite(liveExecutionLeases) && liveExecutionLeases > 0 ? liveExecutionLeases : null;\n // Unknown counts as still running (the server fails closed the same way).\n parts.push(n === null ? 'Agents already running are finishing.' : `${n} agent${n === 1 ? ' is' : 's are'} still finishing work started before Stop.`);\n }\n if (Array.isArray(mergeRevokeFailures) && mergeRevokeFailures.length > 0) {\n const m = mergeRevokeFailures.length;\n parts.push(`${m} armed merge${m === 1 ? '' : 's'} could not be revoked; Stop still blocks ${m === 1 ? 'it' : 'them'}.`);\n }\n return parts.join(' ');\n}\n\n/** The composer's message box inside the Chat surface (C3's Composer names it \"Message\"). */\nfunction composerPresent(): boolean {\n return document.querySelector('[data-surface=\"chat\"] textarea[aria-label=\"Message\"]') !== null;\n}\n\nfunction dispatchComposerCommand(id: string): void {\n window.dispatchEvent(new CustomEvent(WORKBENCH_COMMAND_EVENT, { detail: { id } }));\n}\n\n/**\n * How long after the composer's box appears before the command is sent. The\n * box is in the DOM at React's commit; the Composer's window listener is a\n * passive effect that runs a moment LATER. Firing on the mutation itself can\n * beat the listener and the command vanishes, so the dispatch waits a beat.\n */\nexport const COMPOSER_LISTEN_GRACE_MS = 50;\n\n/**\n * Run a `composer.*` command on the Composer. With a composer already mounted\n * (even behind another surface: keep-alive leaves its listener live) it goes\n * now. Otherwise Chat is opened and the command waits — within the same TTL\n * as a parked bus command — for a composer to mount. A command that finds no\n * composer in time is dropped: running it 20 s later would be a surprise.\n */\nexport function deliverComposerCommand(id: string, ttlMs: number = PARKED_COMMAND_TTL_MS): void {\n if (typeof document === 'undefined') return;\n if (getVerseUiState().section !== 'chat') setVerseSection('chat');\n if (composerPresent()) {\n dispatchComposerCommand(id);\n return;\n }\n let done = false;\n const finish = (found: boolean) => {\n if (done) return;\n done = true;\n observer.disconnect();\n window.clearTimeout(expiry);\n if (found) window.setTimeout(() => dispatchComposerCommand(id), COMPOSER_LISTEN_GRACE_MS);\n };\n const observer = new MutationObserver(() => {\n if (composerPresent()) finish(true);\n });\n observer.observe(document.body, { childList: true, subtree: true });\n const expiry = window.setTimeout(() => finish(false), ttlMs);\n}\n\nconst COMPOSER_IDS: ReadonlySet<string> = new Set(COMPOSER_COMMAND_IDS);\n\nconst GUARDED_RUNNERS: Readonly<Record<string, () => Promise<void>>> = {\n 'chats.stop-all': stopRunningChats,\n 'fleet.stop': stopFleet,\n};\n\n/** Run catalog command `id`. Returns false when nothing could run it. */\nexport function executeCatalogCommand(id: string, invocation: CommandInvocation = {}): boolean {\n const command = findCommand(id);\n if (!command) return false;\n if (command.group !== null && invocation.via === 'palette') recordVerseAction(command.id);\n\n if (command.guard) {\n const runner = GUARDED_RUNNERS[command.id];\n if (!runner) return runCommand(id, invocation);\n const { confirm, token } = command.guard;\n requestGuarded({\n title: confirm.title,\n body: confirm.body,\n confirmLabel: confirm.confirmLabel,\n destructive: confirm.destructive,\n token,\n tokenReason: `${command.title.replace(/…$/, '')} requires the dispatch token.`,\n run: runner,\n });\n return true;\n }\n\n if (COMPOSER_IDS.has(command.id)) {\n // A bus handler (should C3 ever register one) outranks the event.\n if (runCommand(id, invocation)) return true;\n deliverComposerCommand(id);\n return true;\n }\n\n if (command.scope === 'chat' || command.scope === 'composer') {\n if (runCommand(id, invocation)) return true;\n // Explicitly asked for a chat action: going to Chat is the point.\n if (getVerseUiState().section !== 'chat') setVerseSection('chat');\n runCommandWhenReady(id, invocation);\n return true;\n }\n\n if (runCommand(id, invocation)) return true;\n notify(`${command.title} isn't available here yet.`, 'neutral');\n return false;\n}\n\n/**\n * The GLOBAL commands the shell itself serves (every other id belongs to the\n * unit that owns the behaviour). Returns the unregister function.\n */\nexport function registerShellCommandHandlers(): () => void {\n const surfaces: Array<[string, VerseSectionId]> = [\n ['surface.command', 'command'],\n ['surface.fleet', 'fleet'],\n ['surface.growth', 'growth'],\n ['surface.mind', 'mind'],\n ['surface.chat', 'chat'],\n ['section.settings', 'settings'],\n ['section.apps', 'apps'],\n ['section.usage', 'usage'],\n ];\n const offs = [\n ...surfaces.map(([id, section]) => registerCommandHandler(id, () => setVerseSection(section))),\n registerCommandHandler('palette.open', () => toggleVerseOverlay('palette')),\n registerCommandHandler('needs-you.open', (inv) => {\n // The menu / a notification OPENS it; the key toggles.\n if (inv.via !== 'menu' && getVerseUiState().overlay === 'needs-you') closeVerseOverlay();\n else openVerseNeedsYou();\n }),\n registerCommandHandler('shortcuts.open', () => toggleVerseOverlay('shortcuts')),\n registerCommandHandler('history.back', () => { stepVerseHistory(-1); }),\n registerCommandHandler('history.forward', () => { stepVerseHistory(1); }),\n registerCommandHandler('chat.recent-next', () => { cycleVerseRecentChat(1); }),\n registerCommandHandler('chat.recent-prev', () => { cycleVerseRecentChat(-1); }),\n registerCommandHandler('rail.toggle-labels', () => toggleVerseRail()),\n registerCommandHandler('chat.new', () => requestVerseCommand('new-chat')),\n registerCommandHandler('chat.new-on', (inv) => {\n const seat = inv.argument?.kind === 'seat' ? inv.argument.id : undefined;\n requestVerseCommand('new-chat', seat ? { seatId: seat } : {});\n }),\n registerCommandHandler('appearance.toggle-theme', () => cycleTheme()),\n registerCommandHandler('app.summon', () => requestVerseCommand('focus-composer')),\n ];\n return () => offs.forEach((off) => off());\n}\n\n/** Mounted once by the shell: the global handlers, and toasts for run-command. */\nexport function useShellCommands(): void {\n const toast = useToast();\n useEffect(() => {\n setShellNotifier(toast.show);\n return () => setShellNotifier(null);\n }, [toast.show]);\n useEffect(() => registerShellCommandHandlers(), []);\n}\n","/**\n * routes/verse/shell/skeletons.tsx — what a surface looks like while its\n * chunk loads (unit C1; SPEC-310C §1 \"Surfaces show skeletons while\n * loading\"). The pre-3.10 fallback was a bare \"Loading…\" line; a skeleton in\n * the surface's own shape means the layout does not jump when it lands.\n *\n * Also the designed state for a surface whose module is not in this build\n * (`SurfaceNotInBuild`): it names the surface in operator language — never a\n * source path (the old MissingSection printed `routes/verse/sections/X.tsx`).\n */\nimport { SkeletonCard, SkeletonLine, SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport type { VerseSectionId } from '../verse-ui-store.js';\nimport styles from './skeletons.module.css';\n\nconst DASHBOARD: ReadonlySet<VerseSectionId> = new Set(['command', 'fleet', 'growth', 'mind']);\n\nexport function SurfaceSkeleton({ section, label }: { section: VerseSectionId; label: string }) {\n return (\n <div className={styles.frame} role=\"status\" aria-label={`Loading ${label}`} data-skeleton={section}>\n <div className={styles.strip}>\n <SkeletonLine width=\"140px\" />\n </div>\n {section === 'chat' ? (\n <div className={styles.chat}>\n <div className={styles.chatList}>\n {Array.from({ length: 8 }, (_, i) => (\n <SkeletonLine key={i} width={`${70 + ((i * 13) % 25)}%`} />\n ))}\n </div>\n <div className={styles.chatBody}>\n <SkeletonLine width=\"42%\" />\n <SkeletonLine width=\"88%\" />\n <SkeletonLine width=\"76%\" />\n <SkeletonLine width=\"64%\" />\n </div>\n </div>\n ) : DASHBOARD.has(section) ? (\n <div className={styles.grid}>\n <div className={styles.wide}><SkeletonLine width=\"60%\" /></div>\n {Array.from({ length: 5 }, (_, i) => (\n <div key={i} className={styles.kpi}><SkeletonCard /></div>\n ))}\n <div className={styles.half}><SkeletonCard /></div>\n <div className={styles.half}><SkeletonCard /></div>\n </div>\n ) : (\n <div className={styles.column}>\n {Array.from({ length: 6 }, (_, i) => (\n <SkeletonRow key={i} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/** A surface this build does not ship yet. */\nexport function SurfaceNotInBuild({ label, blurb }: { label: string; blurb: string }) {\n return (\n <div className={styles.missing} role=\"status\">\n <h1 className={styles.missingTitle}>{label} isn't in this build yet</h1>\n <p className={styles.missingBody}>{blurb}</p>\n <p className={styles.missingBody}>It appears here as soon as it ships. Everything else in Verse works normally.</p>\n </div>\n );\n}\n","/**\n * routes/verse/useVerseUi.ts — the React glue over verse-ui-store.ts (same\n * split as useVerseSession.ts over verse-store.ts: the store stays\n * framework-free, this file is the only place that knows about React).\n */\nimport { useSyncExternalStore } from 'react';\nimport { getVerseUiState, subscribeVerseUi, type VerseUiState } from './verse-ui-store.js';\n\nexport function useVerseUi(): VerseUiState {\n return useSyncExternalStore(subscribeVerseUi, getVerseUiState, getVerseUiState);\n}\n","/**\n * routes/verse/verse-icons.tsx — the icons the shell rail and the chat chrome\n * use, under the names the Verse surfaces already import.\n *\n * Owner A's `components/primitives/icons.tsx` is now the drawing authority:\n * one geometry (16px box, 1.5px stroke, round caps/joins, currentColor), one\n * stroke weight, one accessibility convention. Everything below that has an\n * equivalent there is an ALIAS of it, so the rail and the inbox cannot drift\n * to two different chat glyphs.\n *\n * 3.10 adds the workbench surfaces (Command, Fleet, Growth, Mind), the gear\n * tray and Apps. They are drawn here, not in the shared set, because they\n * name Verse surfaces — a console page borrowing \"Fleet\" would be a lie.\n *\n * Five icons stay drawn here because the shared set has no equivalent and\n * they are Verse-specific chrome, not general console vocabulary:\n * `PanelIcon` / `SidebarIcon` (the two pane toggles, which must read as\n * mirror images of each other), `RailToggleIcon` (the rail's own expand /\n * collapse control, which has to read as the same family as those two),\n * `VerseMark` (the brand mark in the rail head, which is 32px and never takes\n * a color state) and `McpIcon` (a plug — the shared set has no connector\n * glyph, and every candidate in it already means another rail section).\n */\nimport type { ComponentType, ReactNode } from 'react';\nimport {\n IconChat,\n IconChevronDown,\n IconChevronRight,\n IconCpu,\n IconGauge,\n IconInbox,\n IconMoon,\n IconPlus,\n IconSearch,\n IconSliders,\n IconTrash,\n type IconProps,\n} from '../../components/primitives/icons.js';\nimport type { VerseSectionId } from './verse-ui-store.js';\n\nexport type { IconProps };\n\n/**\n * Aliases onto the shared set. The names are the ones the Verse rail, sidebar\n * and composer already import — keeping them means this reconciliation\n * touched no call site.\n */\nexport const ChatIcon = IconChat;\nexport const AutonomyIcon = IconCpu;\nexport const ApprovalsIcon = IconInbox;\nexport const UsageIcon = IconGauge;\nexport const SettingsIcon = IconSliders;\nexport const SearchIcon = IconSearch;\nexport const PlusIcon = IconPlus;\nexport const TrashIcon = IconTrash;\nexport const ArrowDownIcon = IconChevronDown;\nexport const ChevronIcon = IconChevronRight;\n/** The rail's theme quick-toggle. One glyph for the control, not per-theme. */\nexport const ThemeIcon = IconMoon;\n\n/** Local shell chrome — see the header note for why these three stay here. */\nfunction Icon({ size = 16, children, ...rest }: IconProps & { children: ReactNode }) {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width={size}\n height={size}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...rest}\n >\n {children}\n </svg>\n );\n}\n\nexport function PanelIcon(props: IconProps) {\n return <Icon {...props}><rect x=\"2.5\" y=\"3\" width=\"11\" height=\"10\" rx=\"1.5\" /><path d=\"M10 3v10\" /></Icon>;\n}\n\nexport function SidebarIcon(props: IconProps) {\n return <Icon {...props}><rect x=\"2.5\" y=\"3\" width=\"11\" height=\"10\" rx=\"1.5\" /><path d=\"M6 3v10\" /></Icon>;\n}\n\n/**\n * The Return key (↩) as a key-legend glyph, 1em and inline so it sits in a\n * <kbd> like the letters around it. WHY drawn: of the fonts the console\n * serves, only the 230 KB full Plex face has U+21A9, so typing it into the\n * palette's or the drawer's key legend fetched that face each time one opened\n * (3.10 first-paint review; global.css scopes the full faces).\n */\nexport function ReturnKeyIcon(props: IconProps) {\n return (\n <Icon width=\"1em\" height=\"1em\" style={{ display: 'inline-block', verticalAlign: '-0.125em' }} {...props}>\n <path d=\"M13 3.5v5a2 2 0 0 1-2 2H3.5\" /><path d=\"M6 8 3.5 10.5 6 13\" />\n </Icon>\n );\n}\n\n/**\n * The rail's own expand/collapse control: the same framed panel as the two\n * pane toggles above, plus a chevron saying which way it is about to move.\n * ONE glyph that rotates rather than two drawings, so the control reads as a\n * single thing in two states — and so the state is carried by direction, the\n * one property a user can read without having memorised the other icon.\n */\nexport function RailToggleIcon({ expanded = false, ...props }: IconProps & { expanded?: boolean }) {\n return (\n <Icon {...props}>\n <rect x=\"2.5\" y=\"3\" width=\"11\" height=\"10\" rx=\"1.5\" />\n <path d=\"M6 3v10\" />\n {expanded ? <path d=\"M11.2 6.4 9.6 8l1.6 1.6\" /> : <path d=\"M9.4 6.4 11 8l-1.6 1.6\" />}\n </Icon>\n );\n}\n\n/**\n * MCP — a plug in a socket. Drawn here rather than aliased: the shared set's\n * nearest candidates (`IconCpu`, `IconSliders`, `IconKey`) are already the\n * Autonomy, Settings and credential glyphs, and two rail items that read as\n * the same picture is worse than one more 16px drawing.\n */\nexport function McpIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <path d=\"M6 1.8v3.2M10 1.8v3.2\" />\n <path d=\"M3.8 5h8.4v2.6a4.2 4.2 0 0 1-4.2 4.2 4.2 4.2 0 0 1-4.2-4.2V5Z\" />\n <path d=\"M8 11.8v2.4\" />\n </Icon>\n );\n}\n\n/** The mark in the rail head. Not a section icon — it never gets a color state. */\nexport function VerseMark(props: IconProps) {\n const { size = 20, ...rest } = props;\n return (\n <svg viewBox=\"0 0 32 32\" width={size} height={size} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.8}\n strokeLinejoin=\"round\" strokeLinecap=\"round\" aria-hidden=\"true\" focusable=\"false\" {...rest}>\n <path d=\"m5 11 11-6 11 6-11 6Z M5 16l11 6 11-6 M5 21l11 6 11-6\" />\n </svg>\n );\n}\n\n/** Command — the morning read: a dashboard of unequal panes. */\nexport function CommandIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <rect x=\"2.5\" y=\"2.5\" width=\"5\" height=\"6\" rx=\"1\" />\n <rect x=\"8.5\" y=\"2.5\" width=\"5\" height=\"3.5\" rx=\"1\" />\n <rect x=\"8.5\" y=\"7.5\" width=\"5\" height=\"6\" rx=\"1\" />\n <rect x=\"2.5\" y=\"10\" width=\"5\" height=\"3.5\" rx=\"1\" />\n </Icon>\n );\n}\n\n/** Fleet — lanes of work, each with its runner (the live swimlane). */\nexport function FleetIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <path d=\"M2.5 4.5h5M2.5 8h9M2.5 11.5h3.5\" />\n <circle cx=\"10\" cy=\"4.5\" r=\"1.3\" />\n <circle cx=\"13.2\" cy=\"8\" r=\"1.3\" />\n <circle cx=\"8.5\" cy=\"11.5\" r=\"1.3\" />\n </Icon>\n );\n}\n\n/** Growth — a trend that climbs. */\nexport function GrowthIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <path d=\"M2.5 12.5 6.5 8.5l2.5 2.5 4.5-5\" />\n <path d=\"M10.5 6h3v3\" />\n </Icon>\n );\n}\n\n/** Mind — the Leader's thinking: a lit bulb. */\nexport function MindIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <path d=\"M8 2.5a4 4 0 0 0-2.4 7.2c.3.25.4.6.4 1v.8h4v-.8c0-.4.1-.75.4-1A4 4 0 0 0 8 2.5Z\" />\n <path d=\"M6.5 13.5h3\" />\n </Icon>\n );\n}\n\n/** Apps & Accounts — a grid of tiles. */\nexport function AppsIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <rect x=\"2.5\" y=\"2.5\" width=\"4.5\" height=\"4.5\" rx=\"1\" />\n <rect x=\"9\" y=\"2.5\" width=\"4.5\" height=\"4.5\" rx=\"1\" />\n <rect x=\"2.5\" y=\"9\" width=\"4.5\" height=\"4.5\" rx=\"1\" />\n <rect x=\"9\" y=\"9\" width=\"4.5\" height=\"4.5\" rx=\"1\" />\n </Icon>\n );\n}\n\n/** The gear tray (Settings, Apps, Usage, Shortcuts). */\nexport function GearIcon(props: IconProps) {\n return (\n <Icon {...props}>\n <circle cx=\"8\" cy=\"8\" r=\"2.1\" />\n <path d=\"M8 1.8v1.7M8 12.5v1.7M14.2 8h-1.7M3.5 8H1.8M12.4 3.6l-1.2 1.2M4.8 11.2l-1.2 1.2M12.4 12.4l-1.2-1.2M4.8 4.8 3.6 3.6\" />\n <circle cx=\"8\" cy=\"8\" r=\"4.4\" />\n </Icon>\n );\n}\n\n/** Needs you — the one inbox (⌘J). */\nexport const NeedsYouIcon = IconInbox;\n\nexport const SECTION_ICON: Record<VerseSectionId, ComponentType<IconProps>> = {\n command: CommandIcon,\n fleet: FleetIcon,\n growth: GrowthIcon,\n mind: MindIcon,\n chat: ChatIcon,\n settings: SettingsIcon,\n apps: AppsIcon,\n usage: UsageIcon,\n};\n","/**\n * THE ONE PERCENT RULE, dependency-free.\n *\n * A measured share of a window (or anything capped at 100) printed the same\n * way everywhere: a whole percent, except that a real reading under 1% is\n * \"<1%\" (never \"0%\", which reads as \"untouched\") and one just short of 100 is\n * \"99%\" (never a rounded \"100%\", which reads as \"spent\"). `used` is 0–100 and\n * is clamped; not a number is \"—\".\n *\n * This module imports nothing so the rail, composer and chat header can use\n * it without pulling panel code into chat first paint. `autonomy/format.ts`\n * `percentText` delegates here, so there is one rule, not two.\n */\nexport function usedPercentText(used: number | null | undefined): string {\n if (typeof used !== 'number' || !Number.isFinite(used)) return '—';\n const clamped = Math.max(0, Math.min(100, used));\n if (clamped > 0 && clamped < 1) return '<1%';\n if (clamped > 99 && clamped < 100) return '99%';\n return `${Math.round(clamped)}%`;\n}\n","/**\n * routes/verse/VerseApp.tsx — the Verse 3.10 workbench shell (unit C1;\n * SPEC-310C §1, SPEC-310B §6).\n *\n * [rail] Command ⌘1 · Fleet ⌘2 · Growth ⌘3 · Mind ⌘4 · Chat ⌘5\n * foot: Needs you (⌘J) · the scarcest seat's capacity ring · ⚙ tray\n * [main] the current surface, with up to three recent surfaces (and Chat,\n * once visited) kept MOUNTED behind it — hidden + inert\n * overlays ⌘K palette · ⌘J Needs-you drawer · ⌘/ shortcuts · the guard\n *\n * KEEP-ALIVE. Switching surfaces used to unmount the one you left: the\n * approvals selection, the autonomy scroll and the chat's streams were\n * rebuilt every time. Now a left surface stays mounted, `hidden` (no paint,\n * no layout) and `inert` (no focus, no clicks, out of the accessibility\n * tree), inside a SectionVisibilityProvider that tells its polls to stop\n * (C0's usePollWhileVisible). Coming back is instant and exactly where you\n * were. The list is bounded (verse-ui-store KEEP_ALIVE_SURFACES).\n *\n * KEYS come from C0's command catalog — the shell handles the GLOBAL ones\n * (surfaces, palette, drawer, shortcuts, history, recent chats, rail labels,\n * new chat, theme) through the command bus, so the palette, the native menu\n * and a key press all run the same handler. Chat and composer keys belong to\n * C2 / C3 and are never bound here. While the palette is open it owns every\n * key; while a dialog the shell did not open is up (a confirmation, the\n * token prompt, New chat), global keys stand down.\n *\n * SECTIONS resolve through `shell/section-modules.ts`'s glob, one lazy chunk\n * each; a surface whose module has not landed shows a designed \"not in this\n * build\" state (no source paths), and Fleet falls back to the legacy Autonomy\n * panels until C7 lands its own.\n *\n * NATIVE (C8). The desktop app's menu, tray, clicked notifications and the\n * system-wide hotkey arrive through app/desktop-shell.ts\n * `subscribeShellCommands` — the one web seam to the desktop app — already\n * parsed by the catalog: `open-needs-you`, `new-chat`, `focus-composer`,\n * `open-session:<id>` (and the 3.9 menu's two). Anchors (\"go to that card\")\n * arrive as VERSE_ANCHOR_EVENT and are revealed by shell/reveal-anchor.ts.\n */\nimport { Suspense, lazy, useEffect, useMemo, useRef, useState, type ComponentType } from 'react';\nimport { reportThemeToShell, subscribeShellCommands } from '../../app/desktop-shell.js';\nimport { RouteErrorBoundary } from '../../components/primitives/RouteErrorBoundary.js';\nimport { Tooltip } from '../../components/primitives/Tooltip.js';\nimport { useToast } from '../../components/primitives/Toast.js';\nimport { getMutationToken } from '../../data/auth-store.js';\nimport { queryGateStats } from '../../data/cache.js';\nimport { apiPost } from '../../data/client.js';\nimport { useTheme } from '../../data/hooks.js';\nimport { VERSE_ACTIVITY_SEEN_PATH, type VerseActivityCompletion } from '../../../core/verse/workbench-types.js';\nimport { useOnboarding } from './onboarding/useOnboarding.js';\nimport { detectKeyPlatform, findCommand, formatChord, matchCommand } from './shell/command-catalog.js';\nimport { GuardHost } from './shell/guarded-action.js';\nimport type { RailBadge } from './shell/RailStatus.js';\nimport { subscribeAnchorRequests } from './shell/reveal-anchor.js';\nimport { executeCatalogCommand, useShellCommands } from './shell/run-command.js';\nimport { SectionVisibilityProvider } from './shell/section-visibility.js';\nimport { SECTION_MODULES, sectionImporter } from './shell/section-modules.js';\nimport { SurfaceNotInBuild, SurfaceSkeleton } from './shell/skeletons.js';\nimport { onActivityCompletions, useActivity } from './shell/useActivity.js';\nimport { useViewport } from './shell/viewport.js';\nimport type { WarmupOptions } from './shell/warmup.js';\nimport { useVerseUi } from './useVerseUi.js';\nimport { GearIcon, NeedsYouIcon, SECTION_ICON, VerseMark } from './verse-icons.js';\nimport {\n acknowledgeChatMoved,\n closeVerseOverlay,\n getVerseUiState,\n landedModule,\n openVerseSession,\n RAIL_SECTIONS,\n sectionEntry,\n setVerseSection,\n VERSE_ANCHOR_EVENT,\n VERSE_SECTIONS,\n type VerseSectionId,\n} from './verse-ui-store.js';\nimport styles from './VerseApp.module.css';\nimport { usedPercentText } from './percent-text.js';\n\nexport { SECTION_MODULES };\n\n/**\n * The designed state for a surface whose module has not landed. Exported so\n * it can be tested directly (which surfaces exist changes as owners land).\n */\nexport function MissingSection({ label, blurb }: { label: string; blurb?: string }) {\n return <SurfaceNotInBuild label={label} blurb={blurb ?? ''} />;\n}\n\n/**\n * Resolve one section to a lazy component: the primary module, else its\n * fallback, else the designed missing state. A module that throws while\n * loading is logged to the console (never printed to the operator: messages\n * can carry paths) and shown as missing, never as a torn-down shell.\n */\nfunction sectionLoader(id: VerseSectionId): () => Promise<{ default: ComponentType }> {\n const entry = sectionEntry(id);\n return async () => {\n const module = landedModule(id);\n const importer = module ? sectionImporter(module) : undefined;\n if (!module || !importer) return { default: () => <MissingSection label={entry.label} blurb={entry.blurb} /> };\n try {\n const mod = (await importer()) as Record<string, unknown>;\n const exported = mod[module] ?? mod.default;\n if (typeof exported === 'function') return { default: exported as ComponentType };\n console.error(`[verse] ${module} exports no ${module} component`);\n } catch (err) {\n console.error(`[verse] ${entry.label} failed to load`, err);\n }\n return { default: () => <MissingSection label={entry.label} blurb={entry.blurb} /> };\n };\n}\n\n/** One load per section for the life of the tab — shared by its lazy component and the idle prefetch. */\nconst sectionLoads = new Map<VerseSectionId, Promise<{ default: ComponentType }>>();\n/** Sections whose module has arrived, mounted directly (no Suspense round-trip, so no skeleton frame). */\nconst loadedSections = new Map<VerseSectionId, ComponentType>();\n\nfunction loadSection(id: VerseSectionId): Promise<{ default: ComponentType }> {\n let load = sectionLoads.get(id);\n if (!load) {\n load = sectionLoader(id)().then((mod) => {\n loadedSections.set(id, mod.default);\n return mod;\n });\n sectionLoads.set(id, load);\n }\n return load;\n}\n\n/** One lazy component per section, for the life of the tab. */\nconst SECTION_COMPONENTS = new Map<VerseSectionId, ComponentType>(\n VERSE_SECTIONS.map((s) => [s.id, lazy(() => loadSection(s.id))] as const),\n);\n\n// ---------------------------------------------------------------------------\n// Off the first-paint path (review 3.10 d1)\n// ---------------------------------------------------------------------------\n//\n// WHY: every module this file imports statically is in the chunk a cold chat\n// paint must download and parse before anything shows (SPEC-310A §1: chat\n// critical JS ≤ 350 KB, SPEC-310C \"xterm, the charts and the palette each load\n// as separate lazy chunks\"). The overlays render only while open, onboarding\n// only on a first run, and the rail's badges and capacity ring only once the\n// activity / capacity reads answer — none of them can draw anything at first\n// paint, so none of them may cost first-paint bytes. Each is its own chunk,\n// fetched after first paint (the overlays on idle, below) so ⌘K still opens\n// without a visible wait.\n\nconst importPalette = () => import('./shell/CommandPalette.js');\nconst importDrawer = () => import('./shell/NeedsYouDrawer.js');\nconst importShortcuts = () => import('./shell/ShortcutsOverlay.js');\nconst importGearTray = () => import('./shell/GearTray.js');\nconst importOnboarding = () => import('./onboarding/OnboardingFlow.js');\nconst importRailStatus = () => import('./shell/RailStatus.js');\nconst importWarmup = () => import('./shell/warmup.js');\n\nconst CommandPalette = lazy(() => importPalette().then((m) => ({ default: m.CommandPalette })));\nconst NeedsYouDrawer = lazy(() => importDrawer().then((m) => ({ default: m.NeedsYouDrawer })));\nconst ShortcutsOverlay = lazy(() => importShortcuts().then((m) => ({ default: m.ShortcutsOverlay })));\nconst GearTray = lazy(() => importGearTray().then((m) => ({ default: m.GearTray })));\nconst OnboardingFlow = lazy(() => importOnboarding().then((m) => ({ default: m.OnboardingFlow })));\n\n/**\n * The after-first-paint warm-up (shell/warmup.ts): the overlay chunks, then\n * each rail surface not yet open — its chunk (the same load its lazy\n * component uses, so the first visit mounts it directly) and the reads it\n * opens with — one piece at a time, and only while the operator is idle: no\n * input for a quiet period and none of their reads in flight.\n *\n * The scheduler and the step list are a lazy chunk; this trigger is all the\n * warm-up costs chat first paint. Returns a cancel (called on unmount; safe\n * before the chunk has even arrived).\n */\nexport function prefetchAfterFirstPaint(options?: WarmupOptions): () => void {\n const readsInFlight = () => {\n const gate = queryGateStats();\n return gate.active + gate.queued > 0;\n };\n let live = true;\n let cancel: (() => void) | null = null;\n void importWarmup().then(\n (m) => {\n if (live) cancel = m.warmUpAfterFirstPaint({ loadSection, overlays: [importPalette, importDrawer, importShortcuts], readsInFlight }, options);\n },\n () => undefined,\n );\n return () => {\n live = false;\n cancel?.();\n };\n}\n\ntype RailStatusModule = typeof import('./shell/RailStatus.js');\nlet railStatusModule: RailStatusModule | null = null;\n\n/**\n * The rail badge / capacity module, loaded after first paint. RailStatus\n * pulls the usage contract and capacity-strip model (~30 KB) for the ring;\n * the badges it draws depend on the activity read, which is not back at first\n * paint either, so waiting for the module costs nothing visible. Null until\n * loaded — the rail then draws no badge, which RailStatus already defines as\n * \"not known yet\", never \"zero\".\n */\nfunction useRailStatusModule(): RailStatusModule | null {\n const [mod, setMod] = useState<RailStatusModule | null>(railStatusModule);\n useEffect(() => {\n if (mod) return undefined;\n let alive = true;\n void importRailStatus().then(\n (m) => {\n railStatusModule = m;\n if (alive) setMod(m);\n },\n (err) => console.error('[verse] rail status failed to load', err),\n );\n return () => {\n alive = false;\n };\n }, [mod]);\n return mod;\n}\n\n/** A dialog the shell did not open (a confirmation, the token prompt, New chat) is up. */\nfunction foreignModalOpen(): boolean {\n return [...document.querySelectorAll('[aria-modal=\"true\"]')].some(\n (el) => !el.hasAttribute('data-verse-overlay') && !el.querySelector('[data-verse-overlay]'),\n );\n}\n\nconst COMPLETION_TOAST_LIMIT = 3;\n\nexport function VerseApp() {\n const ui = useVerseUi();\n const theme = useTheme();\n const toast = useToast();\n const activity = useActivity();\n const { compact } = useViewport();\n const platform = useMemo(() => detectKeyPlatform(), []);\n const gearRef = useRef<HTMLButtonElement>(null);\n const [trayOpen, setTrayOpen] = useState(false);\n const data = activity.data;\n const rail = useRailStatusModule();\n const onboarding = useOnboarding();\n\n useEffect(() => prefetchAfterFirstPaint(), []);\n // The gear tray is fetched right after mount (not on idle) and then stays\n // MOUNTED closed, exactly as before it was split out: its open effect\n // schedules the first item's focus on a frame, and mounting it only on the\n // click shifted that frame behind the operator's first arrow key.\n const [gearReady, setGearReady] = useState(false);\n useEffect(() => {\n let alive = true;\n void importGearTray().then(\n () => { if (alive) setGearReady(true); },\n (err) => console.error('[verse] settings tray failed to load', err),\n );\n return () => { alive = false; };\n }, []);\n\n // ── the global commands the shell serves, and run-command's toasts ─────\n useShellCommands();\n\n // ── global keys ─────────────────────────────────────────────────────────\n useEffect(() => {\n function onKey(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n if (getVerseUiState().overlay === 'palette') return;\n if (foreignModalOpen()) return;\n const command = matchCommand(event, ['global']);\n if (!command) return;\n // preventDefault BEFORE running: the chat's key fallback and the\n // transcript's ⌥↑/⌥↓ skip default-prevented events (C2), which is what\n // keeps one press from running two handlers. stopPropagation is not\n // used — other listeners still see the event, they just know it is taken.\n event.preventDefault();\n executeCatalogCommand(command.id, { via: 'key' });\n }\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, []);\n\n // ── the desktop shell: menu, tray, notifications, hotkey ────────────────\n useEffect(\n () =>\n subscribeShellCommands((command) => {\n if (command.kind === 'open-session') {\n closeVerseOverlay();\n openVerseSession(command.sessionId);\n return;\n }\n // The tray's \"New chat\" and the hotkey's \"focus the composer\" must\n // land in the composer: an open palette or shortcuts sheet would keep\n // focus (and every key) for itself. The drawer opener, the theme and\n // Settings leave overlays alone — open-needs-you REPLACES the overlay.\n if (command.name === 'new-chat' || command.name === 'focus-composer') closeVerseOverlay();\n executeCatalogCommand(command.commandId, { via: 'menu' });\n }),\n [],\n );\n // \"Go to that card\": whoever raises it (drawer, Command, Mind), the shell reveals it.\n useEffect(() => subscribeAnchorRequests(VERSE_ANCHOR_EVENT), []);\n // Report the PAINTED theme so the native window pre-paints its background\n // on the next cold launch instead of flashing white. No-op in a browser.\n useEffect(() => { reportThemeToShell(theme.theme); }, [theme.theme]);\n\n // ── one-time announcements ──────────────────────────────────────────────\n useEffect(() => {\n if (!ui.announceChatMoved) return;\n const chat = findCommand('surface.chat')?.keys[0];\n toast.show(`Chat moved to ${chat ? formatChord(chat, platform) : '⌘5'} — Command, Fleet, Growth and Mind come first now.`);\n acknowledgeChatMoved();\n }, [ui.announceChatMoved, toast, platform]);\n\n // ── in-app \"Finished / Failed\" (the window is visible; C8 notifies when it is not) ─\n useEffect(\n () =>\n onActivityCompletions((batch: VerseActivityCompletion[]) => {\n if (typeof document !== 'undefined' && document.visibilityState === 'hidden') return;\n const s = getVerseUiState();\n const news = batch.filter((c) => !(s.section === 'chat' && s.activeSessionId === c.sessionId));\n const failed = news.filter((c) => c.outcome === 'failed');\n for (const c of failed.slice(0, COMPLETION_TOAST_LIMIT)) toast.show(`Failed: ${c.title}`, 'danger');\n const done = news.filter((c) => c.outcome === 'ok');\n if (done.length > COMPLETION_TOAST_LIMIT) toast.show(`${done.length} chats finished.`, 'success');\n else for (const c of done) toast.show(`Finished: ${c.title}`, 'success');\n }),\n [toast],\n );\n\n // ── Mind's dot clears when Mind is opened ───────────────────────────────\n const [mindSeenLocal, setMindSeenLocal] = useState<string | null>(null);\n const latestMemoAt = data?.mind?.latestMemoAt ?? null;\n useEffect(() => {\n if (ui.section !== 'mind' || !data?.mind?.unseen || !latestMemoAt) return;\n setMindSeenLocal(latestMemoAt);\n // Best-effort on the server too (it needs a held token; reading Mind is\n // not worth a token prompt — the local mark already clears the dot).\n const token = getMutationToken();\n if (token) void apiPost<unknown>(VERSE_ACTIVITY_SEEN_PATH, { surface: 'mind' }, token).catch(() => undefined);\n }, [ui.section, data?.mind?.unseen, latestMemoAt]);\n\n const expanded = ui.railExpanded && !compact;\n const needsYouCount = data ? data.counts.needsYou : null;\n // Settings, Apps & Accounts and Usage open from the gear, so on those pages\n // the gear IS the current rail item — for assistive tech too (aria-current,\n // and the page's name, since one gear stands for three pages), not only\n // through the data-active styling.\n const currentPage = sectionEntry(ui.section);\n const gearPage = currentPage.placement === 'tray' ? currentPage : null;\n const BadgeMark = rail?.RailBadgeMark ?? null;\n const shortcut = (id: string) => {\n const chord = findCommand(id)?.keys[0];\n return chord ? formatChord(chord, platform) : undefined;\n };\n\n return (\n <div className={styles.shell} data-rail={expanded ? 'expanded' : 'collapsed'} data-compact={compact || undefined}>\n <nav className={styles.rail} data-rail={expanded ? 'expanded' : 'collapsed'} aria-label=\"Verse sections\">\n {/*\n Desktop shell: the window's top 48px is overlaid by the OS title bar\n and the traffic lights. The rail clears it in CSS; this strip makes\n the cleared space drag the window. 0px tall in a browser, where\n `--app-titlebar-height` is not set. See desktop/README.md.\n */}\n <span className={styles.railDragStrip} data-app-region=\"drag\" aria-hidden=\"true\" />\n <Tooltip label=\"Ashlr Verse\" placement=\"right\" disabled={expanded}>\n <span className={styles.mark}>\n <VerseMark />\n <span className=\"visually-hidden\">Ashlr Verse</span>\n </span>\n </Tooltip>\n <ul className={styles.railList}>\n {RAIL_SECTIONS.map((entry) => {\n const IconComponent = SECTION_ICON[entry.id];\n // Mind's dot also clears on sight in THIS window, whether or not\n // the server-side mark could be written (it needs a held token).\n const mindSeenHere = entry.id === 'mind' && latestMemoAt !== null && mindSeenLocal === latestMemoAt;\n const badge: RailBadge | null = mindSeenHere || !rail ? null : rail.railBadgeFor(entry.id, data);\n const active = ui.section === entry.id;\n const keys = shortcut(`surface.${entry.id}`);\n return (\n <li key={entry.id}>\n {/* The name stays on the button; badges ride it so they are announced, not just drawn. */}\n <Tooltip label={entry.label} shortcut={keys} placement=\"right\" disabled={expanded || compact}>\n <button\n type=\"button\"\n className={styles.railButton}\n aria-current={active ? 'page' : undefined}\n data-section={entry.id}\n aria-label={`${entry.label}${badge?.spoken ?? ''}`}\n onClick={() => setVerseSection(entry.id)}\n >\n <span className={styles.railIcon}>\n <IconComponent />\n {badge && BadgeMark ? <BadgeMark badge={badge} /> : null}\n </span>\n {expanded || compact ? <span className={styles.railLabel}>{entry.label}</span> : null}\n {expanded && keys ? <span className={styles.railKey} aria-hidden=\"true\">{keys}</span> : null}\n </button>\n </Tooltip>\n </li>\n );\n })}\n </ul>\n <div className={styles.railFoot}>\n <Tooltip label=\"Needs you\" shortcut={shortcut('needs-you.open')} placement=\"right\" disabled={expanded || compact}>\n <button\n type=\"button\"\n className={styles.railButton}\n aria-label={needsYouCount === null ? 'Needs you' : `Needs you, ${needsYouCount}`}\n aria-expanded={ui.overlay === 'needs-you'}\n data-needs-you={needsYouCount ?? undefined}\n onClick={() => executeCatalogCommand('needs-you.open', { via: 'button' })}\n >\n <span className={styles.railIcon}>\n <NeedsYouIcon />\n {needsYouCount && BadgeMark ? <BadgeMark badge={{ kind: 'count', count: needsYouCount, spoken: '', tone: 'warning' }} /> : null}\n </span>\n {expanded || compact ? <span className={styles.railLabel}>{compact ? 'Inbox' : 'Needs you'}</span> : null}\n </button>\n </Tooltip>\n {rail && !compact ? <RailCapacityButton rail={rail} expanded={expanded} /> : null}\n <Tooltip label=\"Settings and more\" placement=\"right\" disabled={expanded || compact || trayOpen}>\n <button\n ref={gearRef}\n type=\"button\"\n className={styles.railButton}\n aria-label={gearPage ? `Settings and more (${gearPage.label} open)` : 'Settings and more'}\n aria-haspopup=\"menu\"\n aria-expanded={trayOpen}\n aria-current={gearPage ? 'page' : undefined}\n data-gear\n data-active={gearPage ? true : undefined}\n onClick={() => setTrayOpen((v) => !v)}\n >\n <span className={styles.railIcon}><GearIcon /></span>\n {expanded || compact ? <span className={styles.railLabel}>{compact ? 'More' : 'Settings'}</span> : null}\n </button>\n </Tooltip>\n </div>\n </nav>\n\n {/*\n The ONE <main id=\"main-content\"> for the whole shell (SkipToContent\n focuses it). Every mounted surface lives inside it; only the current\n one is visible.\n */}\n <main className={styles.section} data-section={ui.section} id=\"main-content\" tabIndex={-1}>\n {ui.mounted.map((id) => (\n <SurfaceHost key={id} id={id} active={id === ui.section} />\n ))}\n </main>\n\n {/* Lazy chunks (see \"Off the first-paint path\"); each mounts only while it can draw. */}\n <Suspense fallback={null}>\n {gearReady || trayOpen ? <GearTray open={trayOpen} anchorRef={gearRef} onClose={() => setTrayOpen(false)} compact={compact} /> : null}\n </Suspense>\n <Suspense fallback={null}>\n {ui.overlay === 'palette' ? <CommandPalette /> : null}\n {ui.overlay === 'needs-you' ? <NeedsYouDrawer /> : null}\n {ui.overlay === 'shortcuts' ? <ShortcutsOverlay /> : null}\n </Suspense>\n <GuardHost />\n {/*\n First run only, outside the surfaces: a docked card, not a modal, so\n the rail and the surface stay usable while it is open.\n */}\n <Suspense fallback={null}>{onboarding.open ? <OnboardingFlow /> : null}</Suspense>\n </div>\n );\n}\n\n/**\n * The rail foot's capacity ring for the scarcest seat. Its own component so\n * `useRailCapacity` (a hook from the lazily loaded RailStatus module) is only\n * called once that module is here, always in the same place.\n */\nfunction RailCapacityButton({ rail, expanded }: { rail: RailStatusModule; expanded: boolean }) {\n const capacity = rail.useRailCapacity();\n if (!capacity) return null;\n const { CapacityRing, describeRailCapacity } = rail;\n return (\n <Tooltip label={describeRailCapacity(capacity)} placement=\"right\" disabled={expanded}>\n <button\n type=\"button\"\n className={styles.railButton}\n aria-label={`Capacity — ${describeRailCapacity(capacity)}`}\n data-capacity={Math.round(capacity.usedPercent)}\n onClick={() => setVerseSection('apps', `seat:${capacity.seatId}`)}\n >\n <span className={styles.railIcon}>\n <CapacityRing badge={capacity} />\n </span>\n {expanded ? (\n <span className={styles.railLabel}>\n {capacity.label} {capacity.limitReached ? 'limit' : usedPercentText(capacity.usedPercent)}\n </span>\n ) : null}\n </button>\n </Tooltip>\n );\n}\n\nfunction SurfaceHost({ id, active }: { id: VerseSectionId; active: boolean }) {\n // A section the idle prefetch already loaded mounts directly: React.lazy\n // would still suspend once on its first render — even with the module in\n // hand — and commit the skeleton, the very flash the prefetch exists to\n // remove. Chosen ONCE per host, so a load that lands while this surface is\n // up never swaps the component type under it (that would remount the\n // surface and drop its state).\n const [Section] = useState<ComponentType>(() => loadedSections.get(id) ?? SECTION_COMPONENTS.get(id)!);\n const entry = sectionEntry(id);\n return (\n <div className={styles.surface} data-surface={id} hidden={!active} inert={!active}>\n <SectionVisibilityProvider visible={active}>\n <RouteErrorBoundary resetKey={id}>\n <Suspense fallback={<SurfaceSkeleton section={id} label={entry.label} />}>\n <Section />\n </Suspense>\n </RouteErrorBoundary>\n </SectionVisibilityProvider>\n </div>\n );\n}\n","export default \"__VITE_ASSET__VRAku6fjghkApIISiBWPzg__\"","export default \"__VITE_ASSET__WPGYjwIlzWVNM1bYhOc83w__\"","/**\n * app/VerseConsoleApp.tsx — isolated bootstrap for /verse (pattern:\n * ResourcePoolConsoleApp). No global dashboard shell, router, or observer\n * stream: the read session is probed against /api/verse/bootstrap, host-\n * injected tokens (desktop wrapper) are adopted before that probe, and the\n * full-bleed VerseApp takes over once authenticated.\n *\n * V3.10 — first paint without a serial wait. The chunk of the section the\n * shell will mount (Chat, unless the operator left another one open) used to\n * start downloading only AFTER the bootstrap probe answered: index →\n * this module → probe → section chunk, one round trip after another. Now\n * this module starts that import the moment it evaluates, in parallel with\n * the probe (Vite shares the in-flight import with the lazy() that mounts\n * it later), and preloads the two Latin font subsets the first paint needs.\n *\n * V3.10 — a restarted desktop sidecar is re-adopted at once. The desktop\n * shell restarts a crashed server in the background, hands the new tokens to\n * this page as `window.__ASHLR_TOKENS__` and fires `ashlr:sidecar-restarted`\n * (desktop/src-tauri/src/main.rs token_handoff_script). The old cookie died\n * with the old server, so without listening the page would sit until its\n * next 401 → failed renewal → SessionGate → adoption.\n */\nimport { useEffect } from 'react';\nimport { SessionGate } from '../components/auth/SessionGate.js';\nimport { ToastProvider } from '../components/primitives/Toast.js';\nimport { adoptInjectedTokens, markCheckComplete } from '../data/auth-store.js';\nimport { getQuerySnapshot, runQuery } from '../data/cache.js';\nimport { useAuthPhase } from '../data/hooks.js';\nimport { SECTION_MODULES, VerseApp } from '../routes/verse/VerseApp.js';\nimport { invalidateVerseLists, verseBootstrapQuery } from '../routes/verse/verse-queries.js';\nimport { getVerseUiState, VERSE_SECTIONS } from '../routes/verse/verse-ui-store.js';\nimport uiFontLatin from '../design/fonts/AshlrSans-latin.woff2?url';\nimport displayFontLatin from '../design/fonts/SpaceGrotesk-latin.woff2?url';\nimport { SkipToContent } from './SkipToContent.js';\nimport styles from './VerseConsoleApp.module.css';\nimport '../design/global.css';\n\n/**\n * Start what the first paint will need, without waiting for the auth probe.\n * Everything here is a cache warm-up: a failure is ignored, because the real\n * mount (VerseApp's sectionLoader, the CSS @font-face) repeats the request\n * and owns the error handling.\n */\nexport function preloadVerseFirstPaint(doc: Document | null = typeof document === 'undefined' ? null : document): void {\n const section = VERSE_SECTIONS.find((s) => s.id === getVerseUiState().section);\n const importer = section ? SECTION_MODULES[`./sections/${section.module}.tsx`] : undefined;\n if (importer) void importer().catch(() => undefined);\n if (!doc?.head) return;\n for (const href of [uiFontLatin, displayFontLatin]) {\n const present = [...doc.head.querySelectorAll('link[rel=\"preload\"]')].some((l) => l.getAttribute('href') === href);\n if (present) continue;\n const link = doc.createElement('link');\n link.rel = 'preload';\n link.as = 'font';\n link.type = 'font/woff2';\n // Font preloads are CORS requests even same-origin; without this the\n // browser fetches the file twice.\n link.crossOrigin = 'anonymous';\n link.href = href;\n doc.head.append(link);\n }\n}\n\npreloadVerseFirstPaint();\n\n/** DOM event the desktop shell fires after handing a restarted sidecar's tokens to this page. */\nexport const SIDECAR_RESTARTED_EVENT = 'ashlr:sidecar-restarted';\n\n/**\n * Re-adopt host tokens whenever the desktop shell says its sidecar restarted.\n * Returns the disposer.\n *\n * Installed for the page's whole life, whatever the auth phase: the event may\n * land while the SessionGate is showing (adoption then replaces the prompt,\n * because establishReadSession flips the phase) or while the app looks\n * authenticated on a dead cookie. After a successful adoption the lists are\n * refetched — the restarted server may have marked turns interrupted — and\n * the live streams reconnect on their own: their next attempt now carries a\n * valid cookie. A failed adoption changes nothing; the ordinary 401 path\n * still ends at the SessionGate. The event carries no data, so a page script\n * firing it can at most make the page re-read tokens that are already there.\n */\nexport function listenForSidecarRestart(target: Pick<Window, 'addEventListener' | 'removeEventListener'> = window): () => void {\n let inFlight = false;\n let again = false;\n let disposed = false;\n const onRestart = (): void => {\n if (disposed) return;\n // Restarts in quick succession: adoption reads `window.__ASHLR_TOKENS__`\n // when it STARTS, so a second restart during an exchange left newer\n // tokens behind it. Run exactly once more after the current exchange\n // instead of racing a second one for the cookie.\n if (inFlight) {\n again = true;\n return;\n }\n inFlight = true;\n void adoptInjectedTokens()\n .then((adopted) => { if (adopted) invalidateVerseLists(); })\n .catch(() => undefined)\n .finally(() => {\n inFlight = false;\n if (again) {\n again = false;\n onRestart();\n }\n });\n };\n target.addEventListener(SIDECAR_RESTARTED_EVENT, onRestart);\n return () => {\n disposed = true;\n target.removeEventListener(SIDECAR_RESTARTED_EVENT, onRestart);\n };\n}\n\nexport function VerseConsoleApp() {\n const phase = useAuthPhase();\n useEffect(() => listenForSidecarRestart(), []);\n useEffect(() => {\n if (phase !== 'checking') return;\n let cancelled = false;\n void adoptInjectedTokens().then((adopted) => {\n if (cancelled || adopted) return;\n return runQuery(verseBootstrapQuery.key, verseBootstrapQuery.fetch).then(() => {\n if (!cancelled) markCheckComplete(getQuerySnapshot(verseBootstrapQuery.key).status === 'success');\n });\n });\n return () => { cancelled = true; };\n }, [phase]);\n if (phase === 'checking') return <p className={styles.checking} role=\"status\">Checking for an existing Verse session…</p>;\n if (phase === 'unauthenticated') {\n return <SessionGate heading=\"Connect to Ashlr Verse\" command=\"ashlr verse\" subject=\"Ashlr Verse\" mutationField />;\n }\n return (\n <ToastProvider>\n <SkipToContent />\n <div className={styles.shell}><VerseApp /></div>\n </ToastProvider>\n );\n}\n"],"file":"VerseConsoleApp-Dq_hREXs.js"}
@@ -0,0 +1 @@
1
+ ._slot_ka933_6{gap:var(--space-1);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-2) var(--space-6) 0;flex-direction:column;flex-shrink:0;margin:0 auto;display:flex}._list_ka933_18{gap:var(--space-2);overscroll-behavior:contain;flex-direction:column;max-height:45vh;display:flex;overflow-y:auto}._notice_ka933_29{min-width:0;animation:_notice-in_ka933_1 var(--duration-base) var(--ease-decelerate)}._more_ka933_34{min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary);font:inherit;font-size:var(--text-xs-size);cursor:pointer;background:0 0;border:0;align-self:flex-end}._more_ka933_34:hover{color:var(--text-primary);background:var(--bg-hover)}._more_ka933_34:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}@keyframes _notice-in_ka933_1{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._notice_ka933_29{animation:none}}:root[data-motion=reduce] ._notice_ka933_29{animation:none}@media (max-width:479.98px){._slot_ka933_6{padding:var(--space-2) var(--space-3) 0}}._tray_10ld6_5{align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-full);background:var(--bg-surface);color:var(--text-secondary);font:inherit;font-size:var(--text-xs-size);white-space:nowrap;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);flex:none;display:inline-flex}._tray_10ld6_5:hover{color:var(--text-primary);background:var(--bg-hover);border-color:var(--border-default)}._tray_10ld6_5:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._tray_10ld6_5[aria-pressed=true]{border-color:var(--border-strong);color:var(--text-primary)}._ring_10ld6_27{border:1.5px dashed var(--status-running-solid);border-radius:var(--radius-full);width:10px;height:10px;animation:_tray-turn_10ld6_1 calc(var(--duration-pulse) * 3) linear infinite}._count_10ld6_34{font-family:var(--font-display);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums;color:var(--text-primary)}@keyframes _tray-turn_10ld6_1{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._ring_10ld6_27{animation:none}}:root[data-motion=reduce] ._ring_10ld6_27{animation:none}@media (max-width:479.98px){._word_10ld6_48{display:none}}._footer_hpc1p_15{gap:var(--space-2);flex-wrap:nowrap}._footerLeft_hpc1p_16,._footerRight_hpc1p_17{align-items:center;gap:var(--space-2);flex:none;display:flex}._footerLeft_hpc1p_16{flex:1 0 auto}._footerRight_hpc1p_17{justify-content:flex-end}._iconButton_hpc1p_21{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-base-size);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._iconButton_hpc1p_21:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._iconButton_hpc1p_21:active:not(:disabled){background:var(--bg-active)}._iconButton_hpc1p_21:disabled{opacity:.45;cursor:not-allowed}._iconButton_hpc1p_21[aria-disabled=true]{opacity:.55}._iconButtonDanger_hpc1p_37{color:var(--status-danger-fg)}._boxDragging_hpc1p_39{border-color:var(--accent-500);background:var(--accent-50,var(--bg-hover));border-style:dashed}._boxBypass_hpc1p_41{border-color:var(--status-danger-solid)}._boxBypass_hpc1p_41._boxBypass_hpc1p_41:has(>textarea:focus){border-color:var(--status-danger-solid);box-shadow:0 0 0 1px var(--status-danger-solid)}._composerCompact_hpc1p_46 ._footer_hpc1p_15,._composerCompact_hpc1p_46 ._footerLeft_hpc1p_16,._composerCompact_hpc1p_46 ._footerRight_hpc1p_17{gap:var(--space-1)}._controlWrap_hpc1p_51{flex:none;display:inline-flex;position:relative}._control_hpc1p_51{align-items:center;gap:var(--space-1);min-height:var(--control-h-sm);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);display:inline-flex}._control_hpc1p_51:hover:not(:disabled),._control_hpc1p_51[aria-expanded=true]{background:var(--bg-hover);color:var(--text-primary)}._control_hpc1p_51:active:not(:disabled){background:var(--bg-active)}._control_hpc1p_51:disabled{opacity:.55;cursor:not-allowed}._controlDanger_hpc1p_69,._controlDanger_hpc1p_69:hover:not(:disabled),._controlDanger_hpc1p_69[aria-expanded=true]{color:var(--status-danger-fg);background:var(--status-danger-bg)}._controlIconOnly_hpc1p_72{padding:0 var(--space-2)}._controlIcon_hpc1p_72{font-size:var(--text-xs-size);flex-shrink:0;line-height:1;display:inline-flex}._controlText_hpc1p_75{white-space:nowrap}._caret_hpc1p_76{opacity:.7;border-top:4px solid;border-left:3px solid #0000;border-right:3px solid #0000;flex-shrink:0;width:0;height:0}._controlStatic_hpc1p_87{min-height:var(--control-h-sm);padding:0 var(--space-2);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;flex:none;align-items:center;display:inline-flex}._menu_hpc1p_99{bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);min-width:240px;max-width:min(360px, calc(100vw - var(--space-8)));max-height:min(420px,60vh);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);color:var(--text-primary);box-shadow:var(--shadow-menu,var(--shadow-md));flex-direction:column;gap:1px;display:flex;position:absolute;right:0;overflow-y:auto}._footerLeft_hpc1p_16 ._menu_hpc1p_99{left:0;right:auto}._menuWide_hpc1p_119{min-width:280px}._menuHeading_hpc1p_120{justify-content:space-between;align-items:center;gap:var(--space-2);margin:0 0 var(--space-1);padding:var(--space-2);border-bottom:1px solid var(--border-subtle);font-size:var(--text-xs-size);color:var(--text-tertiary);display:flex}._menuHeading_hpc1p_120 strong{color:var(--text-primary);font-weight:var(--font-weight-medium)}._menuKbd_hpc1p_132{font-family:var(--font-mono);font-size:var(--text-2xs-size);padding:0 var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-secondary)}._menuNote_hpc1p_140{margin:0 0 var(--space-1);padding:0 var(--space-2) var(--space-1);font-size:var(--text-xs-size);color:var(--text-tertiary)}._menuItem_hpc1p_146{align-items:flex-start;gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;color:var(--text-primary);cursor:pointer;outline:none;display:flex}._menuItem_hpc1p_146:hover,._menuItem_hpc1p_146:focus-visible,._menuItem_hpc1p_146:focus{background:var(--bg-hover)}._menuItem_hpc1p_146:focus-visible{box-shadow:inset 0 0 0 1px var(--accent-500)}._menuItem_hpc1p_146[aria-disabled=true]{cursor:not-allowed}._menuItem_hpc1p_146[aria-disabled=true] ._menuLabel_hpc1p_163{color:var(--text-tertiary)}._menuItem_hpc1p_146[aria-checked=true] ._menuLabel_hpc1p_163{font-weight:var(--font-weight-medium)}._menuItemDanger_hpc1p_165 ._menuLabel_hpc1p_163,._menuItemDanger_hpc1p_165 ._menuCheck_hpc1p_166{color:var(--status-danger-fg)}._menuItem_hpc1p_146[data-capacity=tight] ._menuDesc_hpc1p_167{color:var(--status-warning-fg)}._menuItem_hpc1p_146[data-capacity=blocked] ._menuDesc_hpc1p_167{color:var(--status-danger-fg)}._menuCheck_hpc1p_166{width:1.1em;color:var(--accent-600);font-size:var(--text-sm-size);line-height:var(--text-sm-line);text-align:center;flex-shrink:0}._menuText_hpc1p_177{flex-direction:column;gap:1px;min-width:0;display:flex}._menuLabel_hpc1p_163{font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._menuDesc_hpc1p_167{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-tertiary)}._menuSeparator_hpc1p_180{height:1px;margin:var(--space-1) 0;background:var(--border-subtle)}._controlList_hpc1p_183{padding-bottom:var(--space-3);flex-direction:column;gap:1px;display:flex}._controlList_hpc1p_183+._controlList_hpc1p_183{border-top:1px solid var(--border-subtle);padding-top:var(--space-2)}._controlList_hpc1p_183 ._menuHeading_hpc1p_120{font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;border-bottom:0;justify-content:flex-start;margin:0}._controlList_hpc1p_183 ._menuItem_hpc1p_146{min-height:var(--control-h);align-items:center}._engine-claude_hpc1p_198{--verse-engine:var(--engine-claude)}._engine-codex_hpc1p_199{--verse-engine:var(--engine-codex)}._engine-grok_hpc1p_200{--verse-engine:var(--engine-grok)}._engine-local_hpc1p_201{--verse-engine:var(--engine-local)}._seatChipWrap_hpc1p_202{flex:none;display:inline-flex;position:relative}._seatChip_hpc1p_202{align-items:center;gap:var(--space-2);min-height:var(--control-h-sm);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);display:inline-flex}._seatChip_hpc1p_202:hover:not(:disabled),._seatChip_hpc1p_202[aria-expanded=true]{background:var(--bg-hover);color:var(--text-primary)}._seatChip_hpc1p_202:disabled{opacity:.55;cursor:not-allowed}._seatChipCompact_hpc1p_218{gap:var(--space-1)}._seatChipText_hpc1p_219{white-space:nowrap}._monogram_hpc1p_220{width:var(--engine-marker-h,14px);height:var(--engine-marker-h,14px);border-radius:var(--radius-xs);border-left:2px solid var(--verse-engine,var(--text-tertiary));background:var(--bg-hover);color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-2xs-size);font-weight:var(--font-weight-semibold,600);flex-shrink:0;justify-content:center;align-items:center;line-height:1;display:inline-flex}._menuItem_hpc1p_146 ._monogram_hpc1p_220{margin-top:2px}._ring_hpc1p_238{flex-shrink:0}._ringTrack_hpc1p_239{stroke:var(--border-default)}._ringFill_hpc1p_240{stroke:var(--data-seq-5);transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._ring_hpc1p_238[data-tone=tight] ._ringFill_hpc1p_240{stroke:var(--status-warning-solid)}._ring_hpc1p_238[data-tone=limit] ._ringFill_hpc1p_240{stroke:var(--status-danger-solid)}._ring_hpc1p_238[data-tone=unknown] ._ringTrack_hpc1p_239{stroke-dasharray:2 2}._seatTip_hpc1p_245{bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);width:max-content;max-width:min(320px, calc(100vw - var(--space-8)));padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);border:1px solid var(--border-default);background:var(--bg-surface-raised);color:var(--text-primary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);box-shadow:var(--shadow-menu,var(--shadow-md));pointer-events:none;position:absolute;right:0}._tip_hpc1p_262{text-align:left;flex-direction:column;gap:2px;max-width:320px;display:flex}._tip_hpc1p_262 strong{font-weight:var(--font-weight-medium)}._tipMuted_hpc1p_264{opacity:.75}._budgetDialog_hpc1p_266{width:min(640px, calc(100vw - var(--space-8)))}._contextRing_hpc1p_270{align-items:center;gap:var(--space-1);min-height:var(--control-h-sm);padding:0 var(--space-1);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;cursor:default;flex:none;display:inline-flex}._contextRing_hpc1p_270:focus-visible{outline:2px solid var(--accent-500);outline-offset:1px}._contextRing_hpc1p_270 circle{fill:none;stroke-width:2px}._contextFill_hpc1p_285{stroke:var(--data-seq-5);stroke-linecap:round;transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._contextTick_hpc1p_290{stroke:var(--text-secondary);stroke-width:1.25px;stroke-linecap:round}._contextRing_hpc1p_270[data-tone=warn] ._contextFill_hpc1p_285{stroke:var(--status-warning-solid)}._contextRing_hpc1p_270[data-tone=warn]{color:var(--status-warning-fg)}._contextRing_hpc1p_270[data-tone=danger] ._contextFill_hpc1p_285,._contextRing_hpc1p_270[data-tone=over] ._contextFill_hpc1p_285{stroke:var(--status-danger-solid)}._contextRing_hpc1p_270[data-tone=danger],._contextRing_hpc1p_270[data-tone=over]{color:var(--status-danger-fg)}._contextRing_hpc1p_270[data-tone=unknown] ._ringTrack_hpc1p_239{stroke-dasharray:2 2}._contextRing_hpc1p_270[data-exact=false] ._contextFill_hpc1p_285{opacity:.55}._contextText_hpc1p_301{min-width:4ch}._sendKey_hpc1p_304{font-size:var(--text-2xs-size);opacity:.8;line-height:1}._queue_hpc1p_307{max-width:var(--measure-read);margin:0 auto var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--border-subtle);border-left:2px solid var(--status-running-solid);border-radius:var(--radius-sm);background:var(--bg-surface-raised)}._queueHeld_hpc1p_316{border-left-color:var(--status-warning-solid)}._queueHeading_hpc1p_317{margin:0 0 var(--space-1);font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._queueHeld_hpc1p_316 ._queueHeading_hpc1p_317{color:var(--status-warning-fg)}._queueList_hpc1p_324{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._queueItem_hpc1p_325{align-items:center;gap:var(--space-2);min-width:0;display:flex}._queueIndex_hpc1p_326{width:1.4em;color:var(--text-tertiary);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0}._queueText_hpc1p_334{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-sm-size);color:var(--text-primary);flex:auto;overflow:hidden}._queueActions_hpc1p_343{align-items:center;gap:var(--space-1);flex-shrink:0;display:inline-flex}._queueButton_hpc1p_344{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size)}._queueButton_hpc1p_344:hover:not(:disabled){border-color:var(--border-strong);color:var(--text-primary)}._queueButtonPrimary_hpc1p_353{border-color:var(--accent-600);color:var(--accent-700)}._queueButtonPrimary_hpc1p_353:hover:not(:disabled){background:var(--accent-600);border-color:var(--accent-600);color:var(--accent-contrast)}._queueRemove_hpc1p_355{width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-tertiary);justify-content:center;align-items:center;display:inline-flex}._queueRemove_hpc1p_355:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._chips_hpc1p_367{gap:var(--space-2);padding:var(--space-3) var(--space-3) 0;flex-wrap:wrap;margin:0;list-style:none;display:flex}._chip_hpc1p_367{align-items:center;gap:var(--space-2);max-width:240px;padding:var(--space-1) var(--space-1) var(--space-1) var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-surface);display:flex}._chip_hpc1p_367[data-status=error]{border-color:var(--status-danger-solid)}._chipThumb_hpc1p_379,._chipExt_hpc1p_380{border-radius:var(--radius-xs);object-fit:cover;flex-shrink:0;width:36px;height:36px}._chipExt_hpc1p_380{background:var(--bg-hover);color:var(--text-secondary);font-family:var(--font-display);font-size:var(--text-2xs-size);letter-spacing:var(--tracking-label,.06em);justify-content:center;align-items:center;display:inline-flex}._chipText_hpc1p_397{flex-direction:column;min-width:0;display:flex}._chipName_hpc1p_398{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs-size);color:var(--text-primary);overflow:hidden}._chipMeta_hpc1p_399{align-items:center;gap:var(--space-1);font-size:var(--text-2xs-size);color:var(--text-tertiary);display:inline-flex}._chip_hpc1p_367[data-status=error] ._chipMeta_hpc1p_399{color:var(--status-danger-fg);white-space:normal}._chipSpinner_hpc1p_401{border-radius:var(--radius-full);border:1.5px solid var(--border-default);border-top-color:var(--status-running-solid);width:8px;height:8px;animation:_composer-spin_hpc1p_1 var(--duration-pulse,1.6s) linear infinite}._chipRemove_hpc1p_409{width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._chipRemove_hpc1p_409:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._suggest_hpc1p_422{left:var(--space-2);right:var(--space-2);bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);max-height:min(320px,50vh);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu,var(--shadow-md));position:absolute;overflow-y:auto}._suggestHeading_hpc1p_436{padding:var(--space-1) var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary);margin:0}._suggestList_hpc1p_446{margin:0;padding:0;list-style:none}._suggestItem_hpc1p_447{align-items:baseline;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-xs);cursor:pointer;display:flex}._suggestItem_hpc1p_447[aria-selected=true]{background:var(--bg-hover);box-shadow:inset 2px 0 0 var(--accent-500)}._suggestItem_hpc1p_447[aria-disabled=true]{cursor:not-allowed}._suggestItem_hpc1p_447[aria-disabled=true] ._suggestPrimary_hpc1p_457{color:var(--text-tertiary)}._suggestPrimary_hpc1p_457{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-primary);overflow:hidden}._suggestSecondary_hpc1p_467{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-xs-size);color:var(--text-tertiary);flex-shrink:1;overflow:hidden}._suggestStatus_hpc1p_476{padding:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary);margin:0}._bypassList_hpc1p_479{margin:0 0 var(--space-4);padding-left:var(--space-4);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed,var(--text-sm-line))}._bypassList_hpc1p_479 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);padding:0 3px}._bypassActions_hpc1p_493{justify-content:flex-end;gap:var(--space-2);display:flex}._sheetBackdrop_hpc1p_496{z-index:var(--z-dialog);background:var(--bg-overlay,#00000052);justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}._sheet_hpc1p_496{width:100%;max-height:75vh;padding:var(--space-3) var(--space-4) calc(var(--space-4) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-default);border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:var(--bg-surface-raised);color:var(--text-primary);animation:_composer-rise_hpc1p_1 var(--duration-slow,.22s) var(--ease-standard);overflow-y:auto}._sheetHeader_hpc1p_516{justify-content:space-between;align-items:center;gap:var(--space-2);display:flex}._sheetTitle_hpc1p_517{font-size:var(--text-base-size);font-weight:var(--font-weight-medium);margin:0}._sheetClose_hpc1p_518{min-height:var(--control-h);padding:0 var(--space-3);border-radius:var(--radius-sm);color:var(--accent-700);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._sheetNote_hpc1p_526{margin:var(--space-1) 0 var(--space-3);font-size:var(--text-xs-size);color:var(--text-tertiary)}._sheetBody_hpc1p_527{gap:var(--space-2);flex-direction:column;display:flex}@keyframes _composer-spin_hpc1p_1{to{transform:rotate(360deg)}}@keyframes _composer-rise_hpc1p_1{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._chipSpinner_hpc1p_401,:root:not([data-motion=full]) ._sheet_hpc1p_496{animation:none}:root:not([data-motion=full]) ._contextFill_hpc1p_285{transition:none}}:root[data-motion=reduce] ._chipSpinner_hpc1p_401,:root[data-motion=reduce] ._sheet_hpc1p_496{animation:none}._workspace_1xryc_1{background:var(--bg-surface);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}._header_1xryc_14{align-items:center;gap:var(--space-3);height:var(--strip-height);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);flex-wrap:nowrap;flex-shrink:0;display:flex;position:relative}._headerSpacer_1xryc_14{flex:1 1 var(--space-4);min-width:var(--space-2)}._identity_1xryc_41{flex-direction:column;flex:0 auto;justify-content:center;gap:1px;min-width:0;display:flex;overflow:hidden}._eyebrow_1xryc_50{max-width:100%;color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);line-height:1.2;font-weight:var(--font-weight-medium);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._eyebrowSkeleton_1xryc_60{height:calc(var(--text-2xs-size,11px) * 1.2);border-radius:var(--radius-xs);width:9ch}._title_1xryc_68,._titleStatic_1xryc_69{min-width:0;max-width:100%;font-family:var(--font-display);font-size:var(--text-md-size);line-height:1.2;font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._titleStatic_1xryc_69{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._titleStatic_1xryc_69[data-state=empty]{color:var(--text-secondary)}._title_1xryc_68{margin-left:calc(-1 * var(--space-2));max-width:calc(100% + var(--space-2))}._titleButton_1xryc_94{max-width:100%;padding:2px var(--space-2);border-radius:var(--radius-xs);color:inherit;font:inherit;letter-spacing:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}._titleButton_1xryc_94:hover:not(:disabled){background:var(--bg-hover)}._titleButton_1xryc_94:active:not(:disabled){background:var(--bg-active)}._titleButton_1xryc_94:disabled{cursor:default}._titleInput_1xryc_123{width:calc(100% + var(--space-2));max-width:48ch;padding:2px var(--space-2);margin-left:calc(-1 * var(--space-2));border:1px solid var(--accent-500);border-radius:var(--radius-xs);background:var(--bg-input);color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-md-size);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._titleSkeleton_1xryc_141{height:calc(var(--text-md-size) * 1.2);border-radius:var(--radius-xs);width:22ch;max-width:40%}._seatPill_1xryc_153{align-items:center;gap:var(--space-2);min-width:0;max-width:28ch;padding:0 var(--space-2);height:var(--control-h-xs);border-radius:var(--radius-xs);background:color-mix(in srgb, var(--verse-engine,var(--text-tertiary)) 10%, transparent);color:var(--text-secondary);font-size:var(--text-2xs-size,11px);flex:0 auto;display:inline-flex}._seatPill_1xryc_153[data-seat-capacity]{max-width:40ch}._engineDot_1xryc_174{border-radius:var(--radius-full);background:var(--verse-engine,var(--text-tertiary));flex-shrink:0;width:5px;height:5px}._seatText_1xryc_157{text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);font-weight:var(--font-weight-medium);overflow:hidden}._seatPill_1xryc_153[data-status=running] ._seatText_1xryc_157{color:var(--status-running-fg)}._seatPill_1xryc_153[data-status=error] ._seatText_1xryc_157{color:var(--status-danger-fg)}._engine-claude_1xryc_190{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_1xryc_191{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_1xryc_192{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_1xryc_193{--verse-engine:var(--engine-local,#7c5cff)}._streamState_1xryc_195{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);flex-shrink:0}._actions_1xryc_203{align-items:center;gap:var(--space-1);flex:none;display:flex}._actionDivider_1xryc_212{width:1px;height:var(--space-4);margin:0 var(--space-1);background:var(--border-default);flex-shrink:0}._toggles_1xryc_221{flex-shrink:0;align-items:center;gap:2px;display:flex}._ghost_1xryc_228,._ghostIcon_1xryc_229,._danger_1xryc_230{border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex-shrink:0}._ghostIcon_1xryc_229{width:var(--control-h-sm);height:var(--control-h-sm);justify-content:center;align-items:center;display:flex}._ghost_1xryc_228{min-height:var(--control-h-xs);padding:0 var(--space-2)}._ghostIcon_1xryc_229:hover:not(:disabled),._ghost_1xryc_228:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._ghostIcon_1xryc_229:active:not(:disabled),._ghost_1xryc_228:active:not(:disabled){background:var(--bg-active)}._ghostIcon_1xryc_229:disabled,._ghost_1xryc_228:disabled{opacity:.4;cursor:not-allowed}._ghostIcon_1xryc_229[aria-pressed=true]{color:var(--text-primary);background:var(--bg-hover)}._ghostIcon_1xryc_229[aria-pressed=true]:hover:not(:disabled){background:var(--bg-active)}._danger_1xryc_230{min-height:var(--control-h-xs);padding:0 var(--space-2);color:var(--status-danger-fg)}._danger_1xryc_230:hover:not(:disabled){background:var(--status-danger-bg)}._danger_1xryc_230:active:not(:disabled){background:var(--status-danger-bg);border-color:var(--status-danger-solid)}._confirm_1xryc_262{align-items:center;gap:var(--space-1);display:inline-flex}._confirmText_1xryc_263{font-size:var(--text-xs-size);color:var(--text-secondary);white-space:nowrap;flex-shrink:0}._meter_1xryc_274,._ring_1xryc_275{--meter-color:var(--data-seq-5);--meter-text:var(--text-secondary);align-items:baseline;gap:var(--space-2);flex-shrink:0;display:inline-flex}._meter-warn_1xryc_285{--meter-color:var(--status-warning-solid);--meter-text:var(--status-warning-fg)}._meter-danger_1xryc_286{--meter-color:var(--status-danger-solid);--meter-text:var(--status-danger-fg)}._meter-unknown_1xryc_287{--meter-color:var(--border-strong);--meter-text:var(--text-tertiary)}._meter-over_1xryc_290{--meter-color:var(--status-danger-solid);--meter-text:var(--status-danger-fg)}._meterTrack_1xryc_293{background:0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}._meterFill_1xryc_301{background:var(--meter-color);height:100%;transition:width var(--duration-slow) var(--ease-decelerate), background var(--duration-base) var(--ease-standard)}._meterTick_1xryc_310{background:var(--text-tertiary);border-radius:var(--radius-xs);pointer-events:none;width:2px;height:6px;margin-left:-1px;position:absolute;bottom:0}._meterInline_1xryc_320 ._meterTrack_1xryc_293{background:var(--meter-track);border-radius:var(--radius-full);width:64px;position:relative;overflow:hidden}._meterText_1xryc_328{align-items:baseline;gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);display:inline-flex}._meterTokens_1xryc_337,._meterCompact_1xryc_338{white-space:nowrap}._meterPercent_1xryc_342{text-align:right;min-width:4ch;color:var(--meter-text);font-weight:var(--font-weight-medium)}._modeWrap_1xryc_348{flex-shrink:0;display:inline-flex;position:relative}._modeChip_1xryc_349{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-full);color:var(--text-secondary);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);white-space:nowrap;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);align-items:center;display:inline-flex}._modeChip_1xryc_349:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._modeChip_1xryc_349:active:not(:disabled){background:var(--bg-active)}._modeChip_1xryc_349:disabled{opacity:.4;cursor:not-allowed}._modeChip_1xryc_349[data-mode=expansive]{border-color:var(--accent-500);color:var(--text-primary)}._modeMenu_1xryc_366{top:calc(100% + var(--space-2));z-index:var(--z-dropdown);width:max-content;min-width:280px;max-width:min(380px, calc(100vw - var(--space-6)));padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);color:var(--text-primary);box-shadow:var(--shadow-menu,var(--shadow-md));flex-direction:column;gap:1px;display:flex;position:absolute;right:0}._modeMenuHeading_1xryc_387{padding:var(--space-2) var(--space-2) var(--space-1);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeItem_1xryc_393{width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;color:var(--text-primary);flex-direction:column;gap:1px;display:flex}._modeItem_1xryc_393:hover:not(:disabled),._modeItem_1xryc_393:focus-visible{background:var(--bg-hover)}._modeItem_1xryc_393:active:not(:disabled){background:var(--bg-active)}._modeItem_1xryc_393:disabled{opacity:.5;cursor:not-allowed}._modeItem_1xryc_393[aria-checked=true]{box-shadow:inset 2px 0 0 var(--accent-500)}._modeItemPrimary_1xryc_408{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._modeItemSecondary_1xryc_409{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._modeMenuNote_1xryc_410{padding:var(--space-1) var(--space-2);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeMenuWarn_1xryc_418{margin:0 var(--space-1);padding:var(--space-1) var(--space-2);border-left:2px solid var(--status-warning-fg,var(--accent-500));color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeMenuError_1xryc_426{padding:var(--space-1) var(--space-2) var(--space-2);color:var(--status-danger-fg);font-size:var(--text-xs-size)}._advice_1xryc_436{gap:var(--space-2);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-3) var(--space-6) 0;flex-direction:column;flex-shrink:0;margin:0 auto;display:flex}._adviceNote_1xryc_448{align-items:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-left:2px solid var(--status-warning-solid);border-radius:var(--radius-xs);background:var(--status-warning-bg);display:flex}._adviceNote_1xryc_448[data-level=urge]{border-left-color:var(--status-danger-solid);background:var(--status-danger-bg)}._adviceNote_1xryc_448[data-kind=expansive]{border-left-color:var(--accent-500);background:var(--bg-hover)}._adviceNote_1xryc_448[data-kind=compact]{border-left-color:var(--border-strong,var(--border-default));background:var(--bg-hover)}._compactForm_1xryc_462{align-items:flex-start;gap:var(--space-3);flex:1;min-width:0;display:flex}._compactLabel_1xryc_463{margin-top:var(--space-1);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium)}._compactInput_1xryc_464{width:100%;min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--text-xs-size)}._compactInput_1xryc_464:focus-visible{outline:2px solid var(--accent-500);outline-offset:1px}._modeItemAction_1xryc_476{margin-top:var(--space-1);border-top:1px solid var(--border-subtle);border-radius:0 0 var(--radius-xs) var(--radius-xs)}._adviceBody_1xryc_477{gap:var(--space-1);flex-direction:column;flex:1;min-width:0;display:flex}._adviceTitle_1xryc_478{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);color:var(--text-primary)}._adviceReasons_1xryc_479{padding-left:var(--space-4);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4);margin:0;list-style:outside}._adviceFine_1xryc_487{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._adviceActions_1xryc_488{align-items:flex-end;gap:var(--space-1);flex-direction:column;flex-shrink:0;display:flex}._adviceAction_1xryc_488{min-height:var(--control-h-xs);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;transition:border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);align-items:center;display:inline-flex}._adviceAction_1xryc_488:hover:not(:disabled){border-color:var(--accent-500)}._adviceAction_1xryc_488:active:not(:disabled){background:var(--bg-active)}._adviceAction_1xryc_488:disabled{opacity:.5;cursor:not-allowed}._adviceStatus_1xryc_507{padding:var(--space-2) var(--space-3);border-left:2px solid var(--accent-500);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._emptyState_1xryc_516{justify-content:center;align-items:flex-start;gap:var(--space-3);max-width:52ch;padding:var(--space-8) var(--space-6);flex-direction:column;flex:1;margin:0 auto;display:flex}._emptyMark_1xryc_527{color:var(--accent-500)}._emptyTitle_1xryc_528{font-family:var(--font-display);font-size:var(--text-2xl-size);line-height:var(--text-2xl-line);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._emptyBody_1xryc_535{color:var(--text-secondary);font-size:var(--text-md-size);line-height:var(--text-md-line)}._emptyButton_1xryc_536{align-items:center;gap:var(--space-2);min-height:var(--control-h);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);transition:border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);display:inline-flex}._emptyButton_1xryc_536:hover{border-color:var(--accent-500)}._emptyButton_1xryc_536:active{background:var(--bg-active)}._emptyButton_1xryc_536 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._emptyWarn_1xryc_552{padding-left:var(--space-3);border-left:2px solid var(--status-warning-solid);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._emptyWarn_1xryc_552 code{font-size:var(--text-xs-size);color:var(--text-primary)}@media (max-width:1100px){._meterCompact_1xryc_338{display:none}}@media (max-width:900px){._seatPill_1xryc_153{max-width:20ch}._seatPill_1xryc_153[data-seat-capacity]{max-width:28ch}}@media (max-width:760px){._meterTokens_1xryc_337{display:none}._seatPill_1xryc_153{max-width:14ch}._seatPill_1xryc_153[data-seat-capacity]{max-width:22ch}}@media (max-width:620px){._seatPill_1xryc_153{display:none}._header_1xryc_14{gap:var(--space-2)}._advice_1xryc_436{padding:var(--space-2) var(--space-3) 0}._adviceNote_1xryc_448,._compactForm_1xryc_462{flex-direction:column}._adviceActions_1xryc_488{flex-direction:row;align-items:center}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._meterFill_1xryc_301{transition:none}}._header_1xryc_14{padding-left:max(var(--space-3), calc(var(--app-traffic-light-inset,0px) - var(--rail-width,56px) + var(--space-2)))}._ring_1xryc_275{--meter-text:var(--text-secondary);align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-1);border-radius:var(--radius-sm);cursor:default;flex-shrink:0;display:inline-flex}._ringSvg_1xryc_640{flex:none;overflow:visible}._ringTrack_1xryc_641{fill:none;stroke:var(--meter-track);stroke-width:2px}._ringFill_1xryc_642{fill:none;stroke:var(--meter-color);stroke-width:2px;stroke-linecap:round;transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._ringTick_1xryc_649{stroke:var(--text-secondary);stroke-width:1.25px;stroke-linecap:round}._ringText_1xryc_650{font-family:var(--font-display);font-size:var(--text-2xs-size);font-variant-numeric:tabular-nums;color:var(--meter-text)}._ring_1xryc_275[data-exact=false] ._ringFill_1xryc_642{opacity:.55}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._ringFill_1xryc_642{transition:none}}._adviceStack_1xryc_663{gap:var(--space-2);flex-direction:column;display:flex}._crumbSep_1xryc_670{color:var(--text-tertiary)}._crumbBranch_1xryc_671{font-family:var(--font-mono);font-size:var(--text-2xs-size);color:var(--text-secondary)}._engineTick_1xryc_678{background:var(--verse-engine,var(--text-tertiary));border-radius:1px;flex-shrink:0;width:2px;height:12px}._monogram_1xryc_685{font-family:var(--font-display);font-size:var(--text-2xs-size);font-weight:var(--font-weight-semibold);color:var(--text-secondary);flex-shrink:0}._modeError_1xryc_692{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:28ch;font-size:var(--text-2xs-size);color:var(--status-danger-fg);flex-shrink:1;overflow:hidden}._queueHost_1xryc_707{box-sizing:border-box;width:100%;padding:var(--space-2) var(--space-6) 0;flex-shrink:0}._queueHost_1xryc_707:empty{display:none}._queueHost_1xryc_707>*{margin-bottom:0}@media (max-width:900px){._queueHost_1xryc_707{padding:var(--space-2) var(--space-4) 0}}._liveRow_1xryc_720{align-items:center;gap:var(--space-3);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-2) var(--space-6) 0;flex-shrink:0;margin:0 auto;display:flex}._liveRow_1xryc_720>:first-child{flex:1;min-width:0}._liveRow_1xryc_720[data-running]>:first-child{padding-top:var(--space-1);border-top:1px solid var(--status-running-solid)}._liveSpacer_1xryc_736{flex:1}._engineNotice_1xryc_739{align-items:baseline;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-left:2px solid var(--status-warning-solid);border-radius:0 var(--radius-sm) var(--radius-sm) 0;background:var(--status-warning-bg);color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);margin:0;display:flex}._engineNotice_1xryc_739[data-kind=watchdog]{border-left-color:var(--status-running-solid);background:var(--status-running-bg)}._engineNoticeWord_1xryc_753{font-weight:var(--font-weight-semibold);color:var(--status-warning-fg);flex-shrink:0}._engineNotice_1xryc_739[data-kind=watchdog] ._engineNoticeWord_1xryc_753{color:var(--status-running-fg)}@media (max-width:479.98px){._liveRow_1xryc_720{padding:var(--space-2) var(--space-3) 0}._seatPill_1xryc_153 ._seatText_1xryc_157,._paneToggle_1xryc_766{display:none}}._banner_tv0om_4{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-size:var(--text-sm-size);border-left-width:3px;min-width:0;max-width:100%;display:grid}._banner_tv0om_4[data-tone=danger]{border-left-color:var(--status-danger-solid)}._banner_tv0om_4[data-tone=warning]{border-left-color:var(--status-warning-solid)}._banner_tv0om_4[data-tone=neutral]{border-left-color:var(--status-neutral-solid)}._head_tv0om_22{align-items:center;gap:var(--space-2);min-width:0;display:flex}._headline_tv0om_29{min-width:0;font-weight:var(--font-weight-medium);overflow-wrap:anywhere;flex:auto}._list_tv0om_36{gap:var(--space-2);margin:0;padding:0;list-style:none;display:grid}._row_tv0om_44{gap:var(--space-1);min-width:0;display:grid}._rowHead_tv0om_50{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}._dot_tv0om_57{background:var(--status-neutral-solid);border-radius:50%;flex:none;align-self:center;width:8px;height:8px}._row_tv0om_44[data-tone=danger] ._dot_tv0om_57{background:var(--status-danger-solid)}._row_tv0om_44[data-tone=warning] ._dot_tv0om_57{background:var(--status-warning-solid)}._row_tv0om_44[data-tone=success] ._dot_tv0om_57{background:var(--status-success-solid)}._label_tv0om_70{font-weight:var(--font-weight-medium)}._word_tv0om_72{color:var(--text-secondary)}._row_tv0om_44[data-tone=danger] ._word_tv0om_72{color:var(--status-danger-fg)}._row_tv0om_44[data-tone=warning] ._word_tv0om_72{color:var(--status-warning-fg)}._reset_tv0om_76{color:var(--text-tertiary);font-variant-numeric:tabular-nums}._detail_tv0om_81{color:var(--text-secondary);font-size:var(--text-xs-size);overflow-wrap:anywhere;margin:0}._actions_tv0om_88{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}._command_tv0om_95{min-width:0;padding:2px var(--space-1);border-radius:var(--radius-xs);background:var(--bg-code);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex:16rem}._status_tv0om_105{color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0}._status_tv0om_105[data-error=true]{color:var(--status-danger-fg)}._block_tv0om_114{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--status-danger-solid);border-radius:var(--radius-sm);background:var(--status-danger-bg);color:var(--text-primary);font-size:var(--text-sm-size);min-width:0;display:grid}._blockReason_tv0om_126{font-weight:var(--font-weight-medium);overflow-wrap:anywhere;margin:0}._alternatives_tv0om_132{align-items:center;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}._alternativesLabel_tv0om_139{color:var(--text-secondary);font-size:var(--text-xs-size)}@media (max-width:480px){._banner_tv0om_4,._block_tv0om_114{padding:var(--space-2)}._command_tv0om_95{flex-basis:100%}}._group_12xsh_9{font-size:var(--text-sm-size)}._line_12xsh_13{align-items:center;gap:var(--space-2);width:100%;min-height:var(--density-row-sm);padding:0 var(--space-2) 0 var(--space-3);border:0;border-left:2px solid var(--border-subtle);color:var(--text-secondary);font:inherit;text-align:left;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);background:0 0;display:flex}._line_12xsh_13:hover{color:var(--text-primary);background:var(--bg-hover)}._line_12xsh_13:active{background:var(--bg-active)}._line_12xsh_13:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._group_12xsh_9[data-failed]>._line_12xsh_13{border-left-color:var(--status-danger-solid)}._group_12xsh_9[data-running]:not([data-failed])>._line_12xsh_13{border-left-color:var(--status-running-solid)}._chevron_12xsh_37{opacity:.7;width:0;height:0;transition:transform var(--duration-fast) var(--ease-standard);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:5px solid;flex:none;margin:0 3px 0 2px}._group_12xsh_9:not([data-view=collapsed])>._line_12xsh_13 ._chevron_12xsh_37{transform:rotate(90deg)}._work_12xsh_50{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}._state_12xsh_58{white-space:nowrap;font-size:var(--text-xs-size);flex:none;align-items:center;display:inline-flex}._state_12xsh_58:before{content:"·";margin-right:var(--space-2);color:var(--text-tertiary)}._failed_12xsh_70{color:var(--status-danger-fg);font-weight:var(--font-weight-medium)}._sep_12xsh_71{color:var(--text-tertiary);white-space:pre}._running_12xsh_72{align-items:center;gap:var(--space-1);color:var(--status-running-fg);display:inline-flex}._pulse_12xsh_78{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:_activity-pulse_12xsh_1 var(--duration-pulse) ease-in-out infinite}._time_12xsh_86{padding-left:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size);font-variant-numeric:tabular-nums;color:var(--text-tertiary);white-space:nowrap;flex:none;margin-left:auto}._line_12xsh_13:hover ._time_12xsh_86{color:var(--text-secondary)}._body_12xsh_98{gap:var(--space-2);margin-top:var(--space-2);padding-left:var(--space-3);border-left:2px solid var(--border-subtle);display:grid}._body_12xsh_98[hidden]{display:none}._list_12xsh_106{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._list_12xsh_106>li{min-width:0}._more_12xsh_116{min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--text-link);font:inherit;font-size:var(--text-xs-size);cursor:pointer;background:0 0;border:0;justify-self:start}._more_12xsh_116:hover{background:var(--bg-hover)}._more_12xsh_116:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}@keyframes _activity-pulse_12xsh_1{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._pulse_12xsh_78{animation:none}}:root[data-motion=reduce] ._pulse_12xsh_78{animation:none}@media (max-width:479.98px){._state_12xsh_58:before{display:none}}._rail_99z8l_7{top:var(--space-6);bottom:var(--space-6);right:var(--space-4);z-index:var(--z-sticky);flex-direction:column;align-items:center;width:22px;display:flex;position:absolute}._handoff_99z8l_20{margin-bottom:var(--space-1);color:var(--text-tertiary);font-size:var(--text-2xs-size);flex:none;line-height:1}._track_99z8l_28{flex:1;width:100%;min-height:0;position:relative}._tick_99z8l_36{border-radius:var(--radius-xs);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;width:100%;height:12px;padding:0;display:flex;position:absolute;left:0;transform:translateY(-50%)}._tick_99z8l_36:hover,._tick_99z8l_36:focus-visible{background:var(--bg-hover)}._tick_99z8l_36:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._bar_99z8l_55{border-radius:var(--radius-full);background:var(--border-strong);width:10px;height:2px;transition:width var(--duration-fast) var(--ease-standard)}._tick_99z8l_36:hover ._bar_99z8l_55,._tick_99z8l_36:focus-visible ._bar_99z8l_55{width:14px}._tick_99z8l_36[data-status=error] ._bar_99z8l_55{background:var(--status-danger-solid);height:3px}._tick_99z8l_36[data-status=running] ._bar_99z8l_55{background:var(--status-running-solid);height:3px;animation:_rail-pulse_99z8l_1 var(--duration-pulse) ease-in-out infinite}._tick_99z8l_36[data-status=stopped] ._bar_99z8l_55{background:var(--text-tertiary)}._markers_99z8l_72{pointer-events:none;gap:1px;display:inline-flex;position:absolute;left:-2px;transform:translate(-100%)}._marker_99z8l_72{color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:1}._marker_99z8l_72[data-marker=recovered]{color:var(--status-info-fg)}._card_99z8l_88{right:calc(100% + var(--space-2));gap:var(--space-1);width:max-content;max-width:min(320px,60vw);padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu);pointer-events:none;display:grid;position:absolute;transform:translateY(-50%)}._cardMeta_99z8l_103{font-family:var(--font-display);font-size:var(--text-2xs-size);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-tertiary)}._cardTitle_99z8l_110{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-primary);overflow-wrap:anywhere}@keyframes _rail-pulse_99z8l_1{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._tick_99z8l_36[data-status=running] ._bar_99z8l_55{animation:none}:root:not([data-motion=full]) ._bar_99z8l_55{transition:none}}:root[data-motion=reduce] ._tick_99z8l_36[data-status=running] ._bar_99z8l_55{animation:none}@media (max-width:767.98px){._rail_99z8l_7{display:none}}._markerIcon_99z8l_133{width:1em;height:1em;display:block}._diff_1x50e_30{--diff-add:color-mix(in srgb, var(--status-success-solid) 22%, var(--bg-code));--diff-del:color-mix(in srgb, var(--status-danger-solid) 22%, var(--bg-code));border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);overflow:hidden}._visuallyHidden_1x50e_46{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._diffMulti_1x50e_58{min-width:0}._diffHead_1x50e_60{align-items:center;gap:var(--space-3);min-height:var(--control-h-xs);padding:0 var(--space-2) 0 var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._diffPath_1x50e_68{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-secondary);direction:rtl;flex:auto;overflow:hidden}._diffOldPath_1x50e_83{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-tertiary);direction:rtl;flex:0 auto;overflow:hidden}._diffOldPath_1x50e_83:after{content:" →";color:var(--text-tertiary)}._diffStatus_1x50e_101{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-secondary);flex:none}._diffStats_1x50e_110{gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;flex:none;display:flex}._diffAdd_1x50e_118{color:var(--status-success-fg)}._diffDel_1x50e_119{color:var(--status-danger-fg)}._diffNotice_1x50e_121{padding:var(--space-2) var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs-size);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text-secondary);margin:0}._diffEmpty_1x50e_130{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._diffTable_1x50e_136{border-collapse:collapse;table-layout:fixed;width:100%;font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed)}._diffNo_1x50e_121{width:42px;min-width:42px;padding:0 var(--space-2);text-align:right;vertical-align:top;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;color:var(--text-secondary)}._diffMarker_1x50e_30{text-align:center;vertical-align:top;-webkit-user-select:none;user-select:none;width:14px;min-width:14px;color:var(--text-secondary)}._diffText_1x50e_159{padding:0 var(--space-2) 0 0;vertical-align:top;white-space:pre-wrap;overflow-wrap:anywhere}._diffCode_1x50e_179{font-family:inherit}._diffRow_add_1x50e_181{background:var(--diff-add)}._diffRow_del_1x50e_182{background:var(--diff-del)}._diffRow_context_1x50e_183{background:0 0}._diffHunkRow_1x50e_185>*{padding-top:var(--space-1);padding-bottom:var(--space-1);border-top:1px solid var(--border-subtle);background:var(--bg-canvas)}._diffHunkRow_1x50e_185:first-child>*{border-top:0}._diffHunkHead_1x50e_192{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary)}._diffMore_1x50e_200,._commandMore_1x50e_201,._activityMore_1x50e_202{width:100%;min-height:var(--control-h-xs);padding:0 var(--space-3);border-top:1px solid var(--border-subtle);color:var(--text-secondary);font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0;display:block}._diffMore_1x50e_200:hover,._commandMore_1x50e_201:hover,._activityMore_1x50e_202:hover{background:var(--bg-hover);color:var(--text-primary)}._diffUnanchored_1x50e_221{padding:var(--space-2) var(--space-3);border-top:1px solid var(--border-subtle);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);margin:0}._tok_plain_1x50e_232{color:var(--text-primary)}._tok_comment_1x50e_233{color:var(--text-tertiary);font-style:italic}._tok_string_1x50e_234{color:var(--status-success-fg)}._tok_number_1x50e_235{color:var(--status-warning-fg)}._tok_keyword_1x50e_236{color:var(--accent-600);font-weight:var(--font-weight-medium)}._command_1x50e_201{border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);overflow:hidden}._command_1x50e_201[data-failed=true]{border-left:2px solid var(--status-danger-solid)}._commandLine_1x50e_250{align-items:baseline;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._commandPrompt_1x50e_257{font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex:none}._commandText_1x50e_264{min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;flex:1}._commandStatus_1x50e_275{align-items:center;gap:var(--space-3);min-height:var(--control-h-xs);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._commandStatusText_1x50e_283{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;font-variant-numeric:tabular-nums;color:var(--text-secondary)}._commandStatusText_1x50e_283[data-tone=bad]{color:var(--status-danger-fg)}._commandStatusText_1x50e_283[data-tone=pending]{color:var(--status-warning-fg)}._commandMeta_1x50e_293{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._commandPre_1x50e_298{max-height:420px;padding:var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);white-space:pre;color:var(--text-primary);tab-size:8;margin:0;overflow:auto}._commandPending_1x50e_310{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0}._activity_1x50e_202{margin-top:var(--space-4);border:1px solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}._activityHead_1x50e_330{align-items:baseline;gap:var(--space-2);min-height:var(--control-h-xs);padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas);font-size:var(--text-xs-size);display:flex}._activityLabel_1x50e_340{font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums;color:var(--text-secondary)}._activityBreakdown_1x50e_345{color:var(--text-tertiary);margin-left:auto}._activityList_1x50e_350{margin:0;padding:0;list-style:none}._activityList_1x50e_350>li>span:not([role=tooltip]),._activityList_1x50e_350>li>span>span:not([role=tooltip]){width:100%;min-width:0;display:block}._activityRow_1x50e_363{grid-template-columns:2px calc(var(--space-3) + 7.5ch) minmax(0, 1fr) auto auto;align-items:center;gap:var(--space-2);width:100%;min-height:var(--density-row-sm);padding:0 var(--space-3) 0 0;text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;border:0;display:grid}._activityRow_1x50e_363:hover{background:var(--bg-hover)}._activityRow_1x50e_363:active{background:var(--bg-active)}._activityRule_1x50e_385{background:var(--border-default);align-self:stretch}._activityRow_1x50e_363[data-action=edit] ._activityRule_1x50e_385{background:var(--status-info-solid)}._activityRow_1x50e_363[data-action=create] ._activityRule_1x50e_385{background:var(--status-success-solid)}._activityRow_1x50e_363[data-action=delete] ._activityRule_1x50e_385,._activityRow_1x50e_363[data-failed=true] ._activityRule_1x50e_385{background:var(--status-danger-solid)}._activityVerb_1x50e_380{font-size:var(--text-xs-size);color:var(--text-tertiary);padding-left:var(--space-3);white-space:nowrap}._activityRow_1x50e_363[data-action=edit] ._activityVerb_1x50e_380,._activityRow_1x50e_363[data-action=create] ._activityVerb_1x50e_380,._activityRow_1x50e_363[data-action=delete] ._activityVerb_1x50e_380{color:var(--text-secondary)}._activityFailed_1x50e_384{font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--status-danger-fg);flex:none}._activityPath_1x50e_411{align-items:baseline;gap:var(--space-2);min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);display:flex}._activityName_1x50e_419{color:var(--text-primary);white-space:nowrap}._activityDir_1x50e_420{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);direction:rtl;overflow:hidden}._activityTimes_1x50e_430,._activityDelta_1x50e_431{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);white-space:nowrap}._activityDelta_1x50e_431{gap:var(--space-2);display:flex}._activityAdd_1x50e_439{color:var(--status-success-fg)}._activityDel_1x50e_431{color:var(--status-danger-fg)}._nav_1x50e_446{z-index:1;align-items:center;gap:var(--space-2);min-height:var(--density-row,32px);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);flex-shrink:0;display:flex;position:relative}._navSpacer_1x50e_457{flex:1}._navOutlineButton_1x50e_459{align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0;border:0;display:inline-flex}._navOutlineButton_1x50e_459:hover{background:var(--bg-hover);color:var(--text-primary)}._navChevron_1x50e_473{transition:transform var(--duration-fast) var(--ease-standard);display:inline-flex}._navChevron_1x50e_473[data-open=true]{transform:rotate(90deg)}._navCount_1x50e_475{font-family:var(--font-display);font-size:var(--text-xs-size);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}._navWord_1x50e_481{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase}._navSearch_1x50e_488{align-items:center;gap:var(--space-2);min-width:12ch;height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-input);transition:border-color var(--duration-fast) var(--ease-standard);flex:0 26ch;display:flex}._navSearch_1x50e_488:focus-within{border-color:var(--accent-500);box-shadow:var(--shadow-focus-ring)}._navSearchIcon_1x50e_512{color:var(--text-tertiary);display:inline-flex}._navSearch_1x50e_488 input{min-width:0;color:var(--text-primary);font-family:var(--font-ui);font-size:var(--text-xs-size);background:0 0;border:0;flex:1}._navSearch_1x50e_488 input::-webkit-search-cancel-button{display:none}._navSearch_1x50e_488 input:focus-visible{box-shadow:none;outline:none}._navMatches_1x50e_525{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-secondary);white-space:nowrap}._navStep_1x50e_532{gap:2px;display:inline-flex}._navStep_1x50e_532 button{min-width:var(--control-h-xs);min-height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-secondary);cursor:pointer;background:0 0;border:0;line-height:1}._navStep_1x50e_532 button:hover{background:var(--bg-hover);color:var(--text-primary)}._navError_1x50e_545{align-items:center;gap:var(--space-2);min-height:var(--control-h-xs);padding:0 var(--space-2);border:0;border-left:2px solid var(--status-danger-solid);border-radius:0 var(--radius-xs) var(--radius-xs) 0;color:var(--status-danger-fg);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);white-space:nowrap;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;display:inline-flex}._navError_1x50e_545:hover{background:var(--status-danger-bg)}._navErrorGlyph_1x50e_563{font-family:var(--font-display);font-weight:var(--font-weight-semibold)}._outline_1x50e_568{top:calc(100% + 2px);left:var(--space-2);right:var(--space-2);max-width:var(--measure-read);max-height:min(60vh,520px);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu,var(--shadow-md));position:absolute;overflow-y:auto}._outlineEmpty_1x50e_582{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._outlineList_1x50e_587{margin:0;padding:0;list-style:none}._outlineRow_1x50e_588{gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;border:0;grid-template-columns:3ch minmax(0,1fr) auto;display:grid}._outlineRow_1x50e_588:hover{background:var(--bg-hover)}._outlineIndex_1x50e_602{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);padding-top:2px}._outlineBody_1x50e_609{gap:2px;min-width:0;display:grid}._outlineTitle_1x50e_610{font-size:var(--text-xs-size);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._outlineSnippet_1x50e_617{font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._outlineMeta_1x50e_627{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._outlineStatus_1x50e_631{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);color:var(--text-tertiary)}._outlineRow_1x50e_588[data-status=error] ._outlineStatus_1x50e_631{color:var(--status-danger-fg)}._outlineRow_1x50e_588[data-status=running] ._outlineStatus_1x50e_631{color:var(--status-running-fg)}@media (max-width:900px){._navSearch_1x50e_488{flex-basis:14ch}._activityDir_1x50e_420{display:none}}._commandRun_1x50e_646{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);color:var(--text-secondary);font:inherit;font-size:var(--text-2xs-size);white-space:nowrap;cursor:pointer;background:0 0;flex:none;align-self:center}._commandRun_1x50e_646:hover{color:var(--text-primary);background:var(--bg-hover);border-color:var(--border-default)}._commandRun_1x50e_646:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._thinking_lm3ty_11{color:var(--text-tertiary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);min-width:0}._summary_lm3ty_18,._line_lm3ty_19{align-items:center;gap:var(--space-2);min-height:var(--control-h-xs);max-width:100%;padding-left:var(--space-3);border-left:2px solid #0000;display:inline-flex}._line_lm3ty_19{padding-left:calc(var(--space-3) + 10px + var(--space-2))}._summary_lm3ty_18{cursor:pointer;border-radius:var(--radius-xs);padding-right:var(--space-2);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);list-style:none}._summary_lm3ty_18::-webkit-details-marker{display:none}._summary_lm3ty_18:hover{color:var(--text-secondary);background:var(--bg-hover)}._chevron_lm3ty_40{opacity:.7;width:0;height:0;transition:transform var(--duration-fast) var(--ease-standard);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:5px solid;flex:none;margin:0 3px 0 2px}._thinking_lm3ty_11[open] ._chevron_lm3ty_40{transform:rotate(90deg)}._glyph_lm3ty_55{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:_thinking-breathe_lm3ty_1 1.6s var(--ease-standard) infinite;flex:none}._label_lm3ty_64{font-family:var(--font-display);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}._kind_lm3ty_73,._hidden_lm3ty_74{font-size:var(--text-xs-size);color:var(--text-tertiary);white-space:nowrap}._kind_lm3ty_73{padding:0 var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-xs)}._body_lm3ty_85{margin-top:var(--space-2);padding-left:var(--space-4);border-left:2px solid var(--border-subtle);white-space:pre-wrap;overflow-wrap:anywhere;line-height:var(--text-sm-line-relaxed);color:var(--text-secondary);overscroll-behavior:contain;max-height:min(40vh,480px);overflow-y:auto}._thinking_lm3ty_11[data-streaming] ._body_lm3ty_85{border-left-color:var(--status-running-solid)}._body_lm3ty_85[data-window]{max-height:calc(3 * var(--text-sm-line-relaxed));cursor:pointer;overflow:hidden}._body_lm3ty_85[data-window][data-clipped]{-webkit-mask-image:linear-gradient(#0000 0,#000 1.2em);mask-image:linear-gradient(#0000 0,#000 1.2em)}@keyframes _thinking-breathe_lm3ty_1{50%{opacity:.35}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._glyph_lm3ty_55{animation:none}:root:not([data-motion=full]) ._chevron_lm3ty_40{transition:none}}:root[data-motion=reduce] ._glyph_lm3ty_55{animation:none}:root[data-motion=reduce] ._chevron_lm3ty_40{transition:none}._chip_15tdd_8{align-items:center;gap:var(--space-1);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--status-unknown-fg);white-space:nowrap;flex:none;display:inline-flex}._chipGlyph_15tdd_22{font-family:var(--font-ui);font-size:var(--text-2xs-size);letter-spacing:0;line-height:1}._chip_15tdd_8[data-capacity=ready]{color:var(--status-success-fg)}._chip_15tdd_8[data-capacity=tight]{color:var(--status-warning-fg)}._chip_15tdd_8[data-capacity=blocked]{color:var(--status-danger-fg)}._chip_15tdd_8[data-capacity=unread]{color:var(--status-unknown-fg)}._window_15tdd_36,._windowLead_15tdd_37{flex-direction:column;gap:2px;min-width:0;display:flex}._windowLead_15tdd_37 ._windowLabel_15tdd_44,._windowLead_15tdd_37 ._pct_15tdd_45{color:var(--text-primary)}._windowLabel_15tdd_44{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-secondary);overflow:hidden}._pct_15tdd_45{font-variant-numeric:tabular-nums;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-secondary)}._flag_15tdd_61{font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);font-weight:var(--font-weight-medium);color:var(--status-danger-fg);white-space:nowrap}._unknownHead_15tdd_70{justify-content:space-between;align-items:baseline;gap:var(--space-2);min-width:0;display:flex}._unknownValue_15tdd_77{font-family:var(--font-ui);font-style:italic;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--status-unknown-fg);flex:none}._unknownRule_15tdd_86{border:0;border-top:1px dashed var(--border-strong);width:100%;height:0;margin:3px 0 0}._reset_15tdd_94{text-overflow:ellipsis;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);margin:0;overflow:hidden}._note_15tdd_105{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}._noteHead_15tdd_111{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;min-width:0;display:flex}._plan_15tdd_118{padding:0 var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-xs);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;flex:none}._noteSummary_15tdd_131{min-width:0;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);flex:100%}._credits_15tdd_138{font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);margin:0}