@ashlr/hub 3.5.1 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +3 -0
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/activation.d.ts +41 -0
  5. package/dist/cli/activation.js +485 -0
  6. package/dist/cli/activation.js.map +1 -0
  7. package/dist/core/daemon/cutoff-checkpoint-scheduler.js +7 -0
  8. package/dist/core/daemon/cutoff-checkpoint-scheduler.js.map +1 -1
  9. package/dist/core/daemon/loop.d.ts +19 -0
  10. package/dist/core/daemon/loop.js +235 -5
  11. package/dist/core/daemon/loop.js.map +1 -1
  12. package/dist/core/daemon/overnight-status.d.ts +152 -0
  13. package/dist/core/daemon/overnight-status.js +275 -0
  14. package/dist/core/daemon/overnight-status.js.map +1 -0
  15. package/dist/core/daemon/post-merge-halt.d.ts +212 -0
  16. package/dist/core/daemon/post-merge-halt.js +503 -0
  17. package/dist/core/daemon/post-merge-halt.js.map +1 -0
  18. package/dist/core/daemon/run-window.d.ts +218 -0
  19. package/dist/core/daemon/run-window.js +420 -0
  20. package/dist/core/daemon/run-window.js.map +1 -0
  21. package/dist/core/fleet/generated-repair-resolution.d.ts +36 -0
  22. package/dist/core/fleet/generated-repair-resolution.js +245 -0
  23. package/dist/core/fleet/generated-repair-resolution.js.map +1 -0
  24. package/dist/core/local-runtime/llama/port.d.ts +17 -0
  25. package/dist/core/local-runtime/llama/port.js +47 -0
  26. package/dist/core/local-runtime/llama/port.js.map +1 -0
  27. package/dist/core/local-runtime/llama/proxy-host.d.ts +54 -0
  28. package/dist/core/local-runtime/llama/proxy-host.js +159 -0
  29. package/dist/core/local-runtime/llama/proxy-host.js.map +1 -0
  30. package/dist/core/local-runtime/llama/proxy-process.d.ts +148 -0
  31. package/dist/core/local-runtime/llama/proxy-process.js +250 -0
  32. package/dist/core/local-runtime/llama/proxy-process.js.map +1 -0
  33. package/dist/core/local-runtime/llama/proxy-record.d.ts +40 -0
  34. package/dist/core/local-runtime/llama/proxy-record.js +133 -0
  35. package/dist/core/local-runtime/llama/proxy-record.js.map +1 -0
  36. package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +118 -0
  37. package/dist/core/local-runtime/llama/proxy-supervisor.js +511 -0
  38. package/dist/core/local-runtime/llama/proxy-supervisor.js.map +1 -0
  39. package/dist/core/web/public/next/assets/{App-BbVoUCIi.js → App-vtaHB9mp.js} +2 -2
  40. package/dist/core/web/public/next/assets/{App-BbVoUCIi.js.map → App-vtaHB9mp.js.map} +1 -1
  41. package/dist/core/web/public/next/assets/{ApprovalsSection-BW9iVjUa.js → ApprovalsSection-B-bFJ0I9.js} +2 -2
  42. package/dist/core/web/public/next/assets/{ApprovalsSection-BW9iVjUa.js.map → ApprovalsSection-B-bFJ0I9.js.map} +1 -1
  43. package/dist/core/web/public/next/assets/{AutonomySection-Cpk_oEhc.css → AutonomySection-CHjxJt2z.css} +1 -1
  44. package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js +2 -0
  45. package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js.map +1 -0
  46. package/dist/core/web/public/next/assets/ChatSection-BfnLe5dT.css +1 -0
  47. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js +80 -0
  48. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js.map +1 -0
  49. package/dist/core/web/public/next/assets/{ConfirmDialog-CXevY3Au.js → ConfirmDialog-Dd2APQhB.js} +2 -2
  50. package/dist/core/web/public/next/assets/{ConfirmDialog-CXevY3Au.js.map → ConfirmDialog-Dd2APQhB.js.map} +1 -1
  51. package/dist/core/web/public/next/assets/{Dialog-Bn0CgEGz.js → Dialog-CPM9JxBc.js} +2 -2
  52. package/dist/core/web/public/next/assets/{Dialog-Bn0CgEGz.js.map → Dialog-CPM9JxBc.js.map} +1 -1
  53. package/dist/core/web/public/next/assets/{DiffViewer-QKyisN2L.js → DiffViewer-B84qVef9.js} +2 -2
  54. package/dist/core/web/public/next/assets/{DiffViewer-QKyisN2L.js.map → DiffViewer-B84qVef9.js.map} +1 -1
  55. package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js +2 -0
  56. package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js.map +1 -0
  57. package/dist/core/web/public/next/assets/McpSection-D88QlDpG.css +1 -0
  58. package/dist/core/web/public/next/assets/Meter--h3MmZS-.js +2 -0
  59. package/dist/core/web/public/next/assets/Meter--h3MmZS-.js.map +1 -0
  60. package/dist/core/web/public/next/assets/Meter-CLcr-4wS.css +1 -0
  61. package/dist/core/web/public/next/assets/{MutationTokenDialog-DbSHPy3w.js → MutationTokenDialog-DA8t97XT.js} +2 -2
  62. package/dist/core/web/public/next/assets/{MutationTokenDialog-DbSHPy3w.js.map → MutationTokenDialog-DA8t97XT.js.map} +1 -1
  63. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-C-PCgCzo.js → ResourcePoolConsoleApp-Bq7Vyud0.js} +2 -2
  64. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-C-PCgCzo.js.map → ResourcePoolConsoleApp-Bq7Vyud0.js.map} +1 -1
  65. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Dw8ZjmkS.js → RouteErrorBoundary-Badio_uO.js} +2 -2
  66. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Dw8ZjmkS.js.map → RouteErrorBoundary-Badio_uO.js.map} +1 -1
  67. package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js +2 -0
  68. package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js.map +1 -0
  69. package/dist/core/web/public/next/assets/{UniverseConsoleApp-Bk5HipM0.js → UniverseConsoleApp-_FSohAdN.js} +2 -2
  70. package/dist/core/web/public/next/assets/{UniverseConsoleApp-Bk5HipM0.js.map → UniverseConsoleApp-_FSohAdN.js.map} +1 -1
  71. package/dist/core/web/public/next/assets/{UniverseView-D8k9q0ce.js → UniverseView-DqcXbed4.js} +2 -2
  72. package/dist/core/web/public/next/assets/{UniverseView-D8k9q0ce.js.map → UniverseView-DqcXbed4.js.map} +1 -1
  73. package/dist/core/web/public/next/assets/{UsageSection-B2E06ZH1.js → UsageSection-Bq6Daaby.js} +2 -2
  74. package/dist/core/web/public/next/assets/{UsageSection-B2E06ZH1.js.map → UsageSection-Bq6Daaby.js.map} +1 -1
  75. package/dist/core/web/public/next/assets/VerseConsoleApp-CMkCizvL.css +1 -0
  76. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js +3 -0
  77. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js.map +1 -0
  78. package/dist/core/web/public/next/assets/{charts-DSUpczxG.js → charts-CTZJ-JrH.js} +2 -2
  79. package/dist/core/web/public/next/assets/{charts-DSUpczxG.js.map → charts-CTZJ-JrH.js.map} +1 -1
  80. package/dist/core/web/public/next/assets/global-D6bTxIRn.js +2 -0
  81. package/dist/core/web/public/next/assets/global-D6bTxIRn.js.map +1 -0
  82. package/dist/core/web/public/next/assets/global-z-JfD3ow.css +1 -0
  83. package/dist/core/web/public/next/assets/{icons-BxOX8-XB.js → icons-D9vlf85u.js} +2 -2
  84. package/dist/core/web/public/next/assets/{icons-BxOX8-XB.js.map → icons-D9vlf85u.js.map} +1 -1
  85. package/dist/core/web/public/next/assets/{index-BMRIET7F.js → index-CZamKRUg.js} +3 -3
  86. package/dist/core/web/public/next/assets/{index-BMRIET7F.js.map → index-CZamKRUg.js.map} +1 -1
  87. package/dist/core/web/public/next/assets/{queries-AxnVa02h.js → queries-B8eBnFox.js} +2 -2
  88. package/dist/core/web/public/next/assets/{queries-AxnVa02h.js.map → queries-B8eBnFox.js.map} +1 -1
  89. package/dist/core/web/public/next/assets/{use-guarded-action-BO6c94Wp.js → use-guarded-action-bzrVVAYq.js} +2 -2
  90. package/dist/core/web/public/next/assets/{use-guarded-action-BO6c94Wp.js.map → use-guarded-action-bzrVVAYq.js.map} +1 -1
  91. package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js +2 -0
  92. package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js.map +1 -0
  93. package/dist/core/web/public/next/index.html +1 -1
  94. package/dist/release-dependency-inventory.json +1 -1
  95. package/package.json +1 -1
  96. package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js +0 -2
  97. package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js.map +0 -1
  98. package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js +0 -80
  99. package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js.map +0 -1
  100. package/dist/core/web/public/next/assets/ChatSection-LQiAn6Eu.css +0 -1
  101. package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js +0 -2
  102. package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js.map +0 -1
  103. package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js +0 -3
  104. package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js.map +0 -1
  105. package/dist/core/web/public/next/assets/VerseConsoleApp-D2E3mU9a.css +0 -1
  106. package/dist/core/web/public/next/assets/global-C4jfYHrj.js +0 -2
  107. package/dist/core/web/public/next/assets/global-C4jfYHrj.js.map +0 -1
  108. package/dist/core/web/public/next/assets/global-D463gG1X.css +0 -1
  109. package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js +0 -2
  110. package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js.map +0 -1
@@ -1 +0,0 @@
1
- ._chip_rrd6q_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_rrd6q_22{font-family:var(--font-ui);letter-spacing:0;font-size:10px;line-height:1}._chip_rrd6q_8[data-capacity=ready]{color:var(--status-success-fg)}._chip_rrd6q_8[data-capacity=tight]{color:var(--status-warning-fg)}._chip_rrd6q_8[data-capacity=blocked]{color:var(--status-danger-fg)}._chip_rrd6q_8[data-capacity=unread]{color:var(--status-unknown-fg)}._window_rrd6q_35,._windowLead_rrd6q_36{flex-direction:column;gap:2px;min-width:0;display:flex}._windowLead_rrd6q_36 ._windowLabel_rrd6q_43,._windowLead_rrd6q_36 ._pct_rrd6q_44{color:var(--text-primary)}._windowLabel_rrd6q_43{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_rrd6q_44{font-variant-numeric:tabular-nums;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-secondary)}._flag_rrd6q_60{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_rrd6q_69{justify-content:space-between;align-items:baseline;gap:var(--space-2);min-width:0;display:flex}._unknownValue_rrd6q_76{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_rrd6q_85{border:0;border-top:1px dashed var(--border-strong);width:100%;height:0;margin:3px 0 0}._reset_rrd6q_93{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_rrd6q_104{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}._noteHead_rrd6q_110{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;min-width:0;display:flex}._plan_rrd6q_117{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_rrd6q_130{min-width:0;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);flex:100%}._credits_rrd6q_137{font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);margin:0}._composer_1q5ss_5{padding:0 var(--space-6) var(--space-4);background:var(--bg-surface);flex-shrink:0}._box_1q5ss_10{width:100%;max-width:var(--measure-read);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-input);transition:border-color var(--duration-fast) var(--ease-standard);margin:0 auto}._box_1q5ss_10:has(>._textarea_1q5ss_21:focus){border-color:var(--accent-500);box-shadow:0 0 0 1px var(--accent-500)}._boxListening_1q5ss_28{border-color:var(--status-running-solid)}._textarea_1q5ss_21{width:100%;min-height:calc(var(--control-h) + var(--space-2));resize:none;max-height:40vh;padding:var(--space-3) var(--space-3) var(--space-1);color:var(--text-primary);font-size:var(--text-base-size);line-height:var(--text-base-line-relaxed);background:0 0;border:0;display:block}._textarea_1q5ss_21::placeholder{color:var(--text-tertiary)}._textarea_1q5ss_21:focus-visible{box-shadow:none;outline:none}._textarea_1q5ss_21:disabled{color:var(--text-secondary);cursor:not-allowed}._row_1q5ss_47{align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2) var(--space-2) var(--space-2);display:flex}._spacer_1q5ss_53{flex:1}._engine-claude_1q5ss_56{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_1q5ss_57{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_1q5ss_58{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_1q5ss_59{--verse-engine:var(--engine-local,#7c5cff)}._engineDot_1q5ss_60{border-radius:var(--radius-full);background:var(--verse-engine,var(--text-tertiary));flex-shrink:0;width:5px;height:5px}._seatField_1q5ss_69{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}._seatFieldCompact_1q5ss_70{flex-direction:row;align-items:center;max-width:320px}._fieldLabel_1q5ss_71{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);color:var(--text-primary)}._seatSelect_1q5ss_72{width:100%;min-height:var(--control-h);max-width:100%;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-sm-size);text-overflow:ellipsis}._seatSelect_1q5ss_72:hover:not(:disabled){border-color:var(--border-strong)}._seatSelect_1q5ss_72:disabled{opacity:.6;cursor:not-allowed}._seatFieldCompact_1q5ss_70 ._seatSelect_1q5ss_72{min-height:var(--control-h-sm);font-size:var(--text-xs-size);background:0 0;border-color:#0000}._seatPillWrap_1q5ss_89{min-width:0;display:inline-flex;position:relative}._seatPill_1q5ss_89{align-items:center;gap:var(--space-2);max-width:34ch;min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);display:inline-flex}._seatPill_1q5ss_89:hover:not(:disabled),._seatPill_1q5ss_89[aria-expanded=true]{background:var(--bg-hover);color:var(--text-primary)}._seatPill_1q5ss_89:active:not(:disabled){background:var(--bg-active)}._seatPill_1q5ss_89:disabled{opacity:.6;cursor:not-allowed}._seatPillText_1q5ss_107{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._seatMenu_1q5ss_109{bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);min-width:260px;max-width:360px;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;left:0}._seatMenuHeading_1q5ss_126{margin:0 0 var(--space-1);padding:var(--space-2) var(--space-2) var(--space-2);border-bottom:1px solid var(--border-subtle);font-size:var(--text-xs-size);color:var(--text-tertiary)}._seatMenuHeading_1q5ss_126 strong{color:var(--text-primary);font-weight:var(--font-weight-medium)}._seatMenuEmpty_1q5ss_134{padding:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary);margin:0}._seatMenuItem_1q5ss_135{align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;color:var(--text-primary);display:flex}._seatMenuItem_1q5ss_135:hover,._seatMenuItem_1q5ss_135:focus-visible{background:var(--bg-hover)}._seatMenuItem_1q5ss_135:active{background:var(--bg-active)}._seatMenuText_1q5ss_148{flex-direction:column;gap:1px;min-width:0;display:flex}._seatMenuPrimary_1q5ss_149{font-size:var(--text-sm-size)}._seatMenuSecondary_1q5ss_150{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._seatMenuCapacity_1q5ss_156{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)}._seatMenuItem_1q5ss_135[data-capacity=tight] ._seatMenuCapacity_1q5ss_156{color:var(--status-warning-fg)}._seatMenuItem_1q5ss_135[data-capacity=blocked] ._seatMenuCapacity_1q5ss_156{color:var(--status-danger-fg)}._dictationWrap_1q5ss_167{align-items:center;display:inline-flex;position:relative}._dictation_1q5ss_167{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-xs);color:var(--text-tertiary);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);justify-content:center;align-items:center;display:inline-flex;position:relative}._dictation_1q5ss_167:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._dictation_1q5ss_167:active:not(:disabled){background:var(--bg-active)}._dictation_1q5ss_167:disabled{opacity:.45;cursor:not-allowed}._dictationLive_1q5ss_182{color:var(--status-running-fg);background:var(--status-running-bg)}._dictationPulse_1q5ss_183{border-radius:var(--radius-sm);border:1px solid var(--status-running-solid);pointer-events:none;animation:1.4s ease-out infinite _verse-ring_1q5ss_1;position:absolute;inset:-2px}._dictationHint_1q5ss_191{bottom:calc(100% + var(--space-2));width:max-content;max-width:260px;padding:var(--space-2) var(--space-3);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));font-size:var(--text-xs-size);line-height:var(--text-xs-line);opacity:0;pointer-events:none;transition:opacity var(--duration-fast) var(--ease-standard);z-index:var(--z-dropdown);position:absolute;right:0}._dictationWrap_1q5ss_167:hover ._dictationHint_1q5ss_191,._dictationWrap_1q5ss_167:focus-within ._dictationHint_1q5ss_191{opacity:1}._dictationError_1q5ss_212{margin-left:var(--space-2);font-size:var(--text-xs-size);color:var(--status-danger-fg)}._send_1q5ss_215,._stop_1q5ss_216{align-items:center;gap:var(--space-2);min-height:var(--control-h-sm);padding:0 var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);border:1px solid #0000;display:inline-flex}._send_1q5ss_215{background:var(--accent-600);color:var(--accent-contrast)}._send_1q5ss_215:hover:not(:disabled){background:var(--accent-700)}._send_1q5ss_215:active:not(:disabled){background:var(--accent-700);border-color:var(--accent-700)}._send_1q5ss_215:disabled{opacity:.4;cursor:not-allowed}._stop_1q5ss_216{border-color:var(--border-default);color:var(--text-primary)}._stop_1q5ss_216:hover{border-color:var(--status-danger-solid);color:var(--status-danger-fg)}._stop_1q5ss_216:active{background:var(--status-danger-bg)}._stopIcon_1q5ss_235{background:currentColor;border-radius:1px;width:8px;height:8px}._help_1q5ss_238{max-width:var(--measure-read);margin:var(--space-2) auto 0;min-height:var(--text-2xs-line);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);line-height:1.4}._helpQuiet_1q5ss_246{min-height:0;margin-top:0}._help_1q5ss_238 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-secondary);padding:0 3px}._helpError_1q5ss_255{color:var(--status-danger-fg)}@keyframes _verse-ring_1q5ss_1{0%{opacity:.9;transform:scale(.94)}to{opacity:0;transform:scale(1.35)}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._dictationPulse_1q5ss_183{animation:none}}:root[data-motion=reduce] ._dictationPulse_1q5ss_183{animation:none}@media (max-width:900px){._composer_1q5ss_5{padding:0 var(--space-4) var(--space-3)}}@media (max-width:640px){._row_1q5ss_47{flex-wrap:wrap}._seatPill_1q5ss_89{max-width:100%}._textarea_1q5ss_21{font-size:16px}}._cost_1q5ss_283{max-width:var(--measure-read);margin:var(--space-2) auto 0;padding-left:var(--space-3);border-left:2px solid var(--status-warning-solid);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed)}._cost_1q5ss_283[data-tone=danger]{border-left-color:var(--status-danger-solid)}._costFigure_1q5ss_295{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-weight:var(--font-weight-medium);color:var(--text-primary)}._width_1185y_1{width:min(520px,100vw - 32px)}._form_1185y_3{gap:var(--space-4);display:grid}._field_1185y_4{gap:var(--space-1);min-width:0;display:grid}._label_1185y_5{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary)}._optional_1185y_13{font-weight:var(--font-weight-regular);letter-spacing:0;text-transform:none;opacity:.8}._select_1185y_15,._input_1185y_16{width:100%;min-height:var(--control-h);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-sm-size);text-overflow:ellipsis}._input_1185y_16::placeholder{color:var(--text-tertiary)}._select_1185y_15,._input_1185y_16{transition:border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard)}._select_1185y_15:hover:not(:disabled),._input_1185y_16:hover:not(:disabled){border-color:var(--border-strong)}._select_1185y_15:focus-visible,._input_1185y_16:focus-visible{border-color:var(--border-focus);box-shadow:var(--shadow-focus-ring)}._hint_1185y_40{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-tertiary)}._error_1185y_41{padding-left:var(--space-3);border-left:2px solid var(--status-danger-solid);color:var(--status-danger-fg);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._actions_1185y_49{justify-content:flex-end;gap:var(--space-2);display:flex}._cancel_1185y_50,._create_1185y_51{min-height:var(--control-h);padding:0 var(--space-4);border-radius:var(--radius-sm);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);border:1px solid #0000}._cancel_1185y_50{color:var(--text-secondary)}._cancel_1185y_50:hover{background:var(--bg-hover);color:var(--text-primary)}._cancel_1185y_50:active{background:var(--bg-active)}._create_1185y_51{background:var(--accent-600);color:var(--accent-contrast)}._create_1185y_51:hover:not(:disabled),._create_1185y_51:active:not(:disabled){background:var(--accent-700)}._create_1185y_51:disabled{opacity:.4;cursor:not-allowed}._capacity_1185y_72{padding-left:var(--space-3);border-left:1px solid var(--border-default)}._rootRow_1185y_78{gap:var(--space-2);margin-top:var(--space-2);align-items:center;display:flex}._rootRow_1185y_78 ._input_1185y_16{flex:auto;min-width:0}._removeRoot_1185y_87,._addRoot_1185y_88{padding:var(--space-1) var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--surface-raised);color:var(--text-default);font-size:var(--text-xs);cursor:pointer;flex:none}._addRoot_1185y_88{margin-top:var(--space-2);align-self:flex-start}._removeRoot_1185y_87:hover,._addRoot_1185y_88:hover{border-color:var(--border-strong,var(--border-subtle))}._width_k2wwr_1{width:min(560px,100vw - 32px)}._input_k2wwr_3{width:100%;min-height:calc(var(--control-h) + var(--space-1));padding:0 var(--space-3);margin-bottom:var(--space-2);border:0;border-bottom:1px solid var(--border-subtle);color:var(--text-primary);font-size:var(--text-md-size);background:0 0;border-radius:0}._input_k2wwr_3::placeholder{color:var(--text-tertiary)}._input_k2wwr_3:focus-visible{box-shadow:inset 0 -1px 0 var(--accent-500);border-bottom-color:var(--accent-500);outline:none}._list_k2wwr_19{max-height:min(60vh,440px);margin:0;padding:0;list-style:none;overflow-y:auto}._row_k2wwr_27{align-items:center;gap:var(--space-3);min-height:calc(var(--density-row) + var(--space-2));padding:var(--space-1) var(--space-3);cursor:pointer;color:var(--text-secondary);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);grid-template-columns:2px minmax(0,1fr) auto;display:grid}._row_k2wwr_27:hover:not(._rowActive_k2wwr_41){background:var(--bg-hover);color:var(--text-primary)}._rowActive_k2wwr_41{background:var(--bg-selected);color:var(--text-primary)}._marker_k2wwr_44{width:2px;height:var(--engine-marker-h);background:var(--verse-engine,var(--text-tertiary));border-radius:1px}._engine-claude_k2wwr_45{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_k2wwr_46{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_k2wwr_47{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_k2wwr_48{--verse-engine:var(--engine-local,#7c5cff)}._rowText_k2wwr_50{flex-direction:column;gap:1px;min-width:0;display:flex}._rowPrimary_k2wwr_51{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm-size);color:var(--text-primary);overflow:hidden}._rowSecondary_k2wwr_58{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);overflow:hidden}._rowActive_k2wwr_41 ._rowSecondary_k2wwr_58,._row_k2wwr_27:hover ._rowSecondary_k2wwr_58,._rowActive_k2wwr_41 ._rowTrailing_k2wwr_67,._row_k2wwr_27:hover ._rowTrailing_k2wwr_67{color:var(--text-secondary)}._rowTrailing_k2wwr_67{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary)}._emptyRow_k2wwr_76{padding:var(--space-4) var(--space-3);color:var(--text-tertiary);font-size:var(--text-sm-size)}._roots_1h85g_8{padding:var(--space-4) var(--space-4) 0}._title_1h85g_10{align-items:center;gap:var(--space-2);margin:0 0 var(--space-2);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;display:flex}._count_1h85g_22{padding:0 var(--space-1);border-radius:var(--radius-sm);background:var(--surface-raised);font-variant-numeric:tabular-nums;letter-spacing:0}._workspace_1h85g_30{margin:0 0 var(--space-2);font-size:var(--text-xs);color:var(--text-muted)}._list_1h85g_36{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._root_1h85g_8{padding:var(--space-2);border-radius:var(--radius-sm);border-left:3px solid var(--border-subtle);background:var(--surface-raised)}._root_1h85g_8[data-tone=primary]{border-left-color:var(--accent)}._root_1h85g_8[data-tone=extra]{border-left-color:var(--border-strong,var(--border-subtle))}._root_1h85g_8[data-tone=unreachable]{border-left-color:var(--warning,#b7791f)}._root_1h85g_8[data-tone=missing]{border-left-color:var(--danger,#c53030)}._rootHead_1h85g_57{justify-content:space-between;align-items:baseline;gap:var(--space-2);display:flex}._name_1h85g_64{font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}._badge_1h85g_72{font-size:var(--text-2xs,.6875rem);text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);flex:none}._git_1h85g_80,._remote_1h85g_81,._caveat_1h85g_82{margin:var(--space-1) 0 0;font-size:var(--text-xs);color:var(--text-muted)}._git_1h85g_80{font-variant-numeric:tabular-nums}._remote_1h85g_81{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._caveat_1h85g_82{color:var(--text-strong,var(--text-default))}._note_1h85g_99,._error_1h85g_100{margin:var(--space-2) 0 0;font-size:var(--text-xs);color:var(--text-muted);line-height:1.45}._error_1h85g_100{color:var(--danger,#c53030)}._panel_b2xdj_3{background:var(--bg-canvas);flex-direction:column;min-height:0;display:flex}._head_b2xdj_10{justify-content:space-between;align-items:center;gap:var(--space-2);height:var(--strip-height);padding:0 var(--space-2) 0 var(--space-4);border-bottom:1px solid var(--border-subtle);flex-shrink:0;display:flex}._title_b2xdj_22{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary)}._close_b2xdj_30{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-md-size);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);justify-content:center;align-items:center;line-height:1;display:flex}._close_b2xdj_30:hover{background:var(--bg-hover);color:var(--text-primary)}._close_b2xdj_30:active{background:var(--bg-active)}._scroll_b2xdj_45{min-height:0;padding-bottom:var(--space-6);scrollbar-gutter:stable;flex:1;overflow-y:auto}._section_b2xdj_46{padding:var(--space-4) var(--space-4) 0}._section_b2xdj_46+._section_b2xdj_46{margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--border-subtle)}._sectionTitle_b2xdj_48{align-items:baseline;gap:var(--space-2);margin-bottom:var(--space-3);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary);flex-wrap:wrap;display:flex}._asOf_b2xdj_64{font-family:var(--font-display);font-weight:var(--font-weight-regular,400);font-variant-numeric:tabular-nums;letter-spacing:0;text-transform:none;color:var(--text-tertiary);margin-left:auto}._refresh_b2xdj_73{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);letter-spacing:0;text-transform:none;color:var(--text-secondary);transition:border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex:none}._refresh_b2xdj_73:hover{border-color:var(--border-strong);color:var(--text-primary);background:var(--bg-hover)}._refresh_b2xdj_73:active{background:var(--bg-active)}._count_b2xdj_89{font-variant-numeric:tabular-nums;color:var(--text-secondary)}._skeleton_b2xdj_90{gap:var(--space-2);flex-direction:column;display:flex}._muted_b2xdj_91{color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._muted_b2xdj_91 code{font-size:.95em}._engineGroup_b2xdj_95+._engineGroup_b2xdj_95{margin-top:var(--space-4)}._engineTitle_b2xdj_96{margin-bottom:var(--space-2);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);color:var(--text-tertiary)}._groupToggle_b2xdj_105,._seatToggle_b2xdj_106{align-items:center;gap:var(--space-2);width:100%;min-width:0;min-height:var(--control-h-xs);text-align:left;color:inherit;display:flex}._groupToggle_b2xdj_105{font:inherit;letter-spacing:inherit}._seatToggle_b2xdj_106{min-height:var(--density-row,32px)}._groupToggle_b2xdj_105:hover,._seatToggle_b2xdj_106:hover{color:var(--text-secondary)}._groupToggle_b2xdj_105:focus-visible,._seatToggle_b2xdj_106:focus-visible{outline:2px solid var(--accent-500);outline-offset:2px;border-radius:var(--radius-xs)}._twist_b2xdj_126{width:0;height:0;transition:transform var(--duration-fast) var(--ease-standard);border-top:3px solid #0000;border-bottom:3px solid #0000;border-left:4px solid;flex:none}._twist_b2xdj_126[data-open]{transform:rotate(90deg)}._groupToggle_b2xdj_105 ._count_b2xdj_89{margin-left:auto}._seatList_b2xdj_137,._models_b2xdj_137,._runningList_b2xdj_137{margin:0;padding:0;list-style:none}._seat_b2xdj_106{padding-left:var(--space-3);border-left:2px solid var(--verse-engine,var(--border-subtle))}._seat_b2xdj_106+._seat_b2xdj_106{margin-top:var(--space-3)}._engine-claude_b2xdj_143{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_b2xdj_144{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_b2xdj_145{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_b2xdj_146{--verse-engine:var(--engine-local,#7c5cff)}._seatHead_b2xdj_148{justify-content:space-between;align-items:center;gap:var(--space-2);min-width:0;display:flex}._seatToggle_b2xdj_106 ._seatLabel_b2xdj_149{color:var(--text-primary);flex:1}._seatLabel_b2xdj_149{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);color:var(--text-primary);overflow:hidden}._seatMeta_b2xdj_158{gap:var(--space-1);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);flex-wrap:wrap;margin-top:2px;display:flex}._seatSummary_b2xdj_166{margin-top:var(--space-1);font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._plan_b2xdj_169{font-family:var(--font-display);text-transform:uppercase;letter-spacing:var(--tracking-label,.06em);color:var(--text-secondary)}._num_b2xdj_170{font-family:var(--font-display);font-variant-numeric:tabular-nums}._notes_b2xdj_174{margin:var(--space-2) 0 0;gap:var(--space-1);flex-direction:column;padding:0;list-style:none;display:flex}._notes_b2xdj_174 li{padding-left:var(--space-2);border-left:1px solid var(--border-default);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);overflow-wrap:anywhere}._seatWindows_b2xdj_191{margin-top:var(--space-2);gap:var(--space-2);flex-direction:column;display:flex}._credits_b2xdj_192{margin:var(--space-2) 0 0;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary)}._local_b2xdj_195{gap:var(--space-1);flex-direction:column;display:flex}._mono_b2xdj_196{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._models_b2xdj_137{margin-top:var(--space-1);flex-direction:column;gap:2px;display:flex}._models_b2xdj_137 code{font-size:var(--text-2xs-size,11px);color:var(--text-secondary)}._runningList_b2xdj_137{gap:var(--space-1);flex-direction:column;display:flex}._runningRow_b2xdj_209{align-items:center;gap:var(--space-2);min-width:0;display:flex}._runningOpen_b2xdj_210{align-items:center;gap:var(--space-2);min-width:0;min-height:var(--density-row,32px);padding:0 var(--space-2);margin-left:calc(-1 * var(--space-2));border-radius:var(--radius-xs);text-align:left;transition:background var(--duration-fast) var(--ease-standard);flex:1;grid-template-columns:6px minmax(0,1fr);display:grid}._runningOpen_b2xdj_210:hover{background:var(--bg-hover)}._runningOpen_b2xdj_210:active{background:var(--bg-active)}._runningOpen_b2xdj_210:hover ._runningMeta_b2xdj_230,._runningOpen_b2xdj_210:active ._runningMeta_b2xdj_230{color:var(--text-secondary)}._runningDot_b2xdj_232{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:1.8s ease-out infinite _verse-pulse-res_b2xdj_1}._runningTitle_b2xdj_239{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm-size);color:var(--text-primary);grid-column:2;overflow:hidden}._runningMeta_b2xdj_230{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);grid-column:2;overflow:hidden}._stop_b2xdj_255{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-2xs-size,11px);font-weight:var(--font-weight-medium);transition:border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex-shrink:0}._stop_b2xdj_255:hover{border-color:var(--status-danger-solid);color:var(--status-danger-fg)}._stop_b2xdj_255:active{background:var(--status-danger-bg)}._usage_b2xdj_270{gap:var(--space-2) var(--space-4);grid-template-columns:1fr 1fr;margin:0;display:grid}._usage_b2xdj_270>div{flex-direction:column;gap:1px;min-width:0;display:flex}._usage_b2xdj_270 dt{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)}._usage_b2xdj_270 dd{font-family:var(--font-display);font-size:var(--text-sm-size);font-variant-numeric:tabular-nums;color:var(--text-primary);margin:0}@keyframes _verse-pulse-res_b2xdj_1{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--status-running-solid) 55%, transparent)}to{box-shadow:0 0 0 5px #0000}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._runningDot_b2xdj_232{animation:none}:root:not([data-motion=full]) ._twist_b2xdj_126{transition:none}}:root[data-motion=reduce] ._runningDot_b2xdj_232{animation:none}:root[data-motion=reduce] ._twist_b2xdj_126{transition:none}._sidebar_bu0vt_1{background:var(--bg-canvas);flex-direction:column;min-height:0;display:flex}._head_bu0vt_9{align-items:center;gap:var(--space-1);height:var(--strip-height);padding:0 var(--space-2) 0 var(--space-3);border-bottom:1px solid var(--border-subtle);height:calc(var(--strip-height) + var(--app-titlebar-height,0px));padding-top:var(--app-titlebar-height,0px);flex-shrink:0;display:flex;position:relative}._headDragStrip_bu0vt_40{height:var(--app-titlebar-height,0px);-webkit-app-region:drag;app-region:drag;pointer-events:auto;position:absolute;top:0;left:0;right:0}._search_bu0vt_51{flex:1;align-items:center;min-width:0;display:flex;position:relative}._searchIcon_bu0vt_58{color:var(--text-tertiary);pointer-events:none;display:flex;position:absolute;left:0}._search_bu0vt_51 input{width:100%;height:var(--control-h-sm);padding:0 var(--space-2) 0 22px;color:var(--text-primary);font-size:var(--text-sm-size);background:0 0;border:0}._search_bu0vt_51 input::placeholder{color:var(--text-tertiary)}._search_bu0vt_51 input::-webkit-search-cancel-button{appearance:none}._search_bu0vt_51:focus-within ._searchIcon_bu0vt_58{color:var(--accent-500)}._iconButton_bu0vt_80{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-sm);color:var(--text-tertiary);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex-shrink:0;justify-content:center;align-items:center;display:flex}._iconButton_bu0vt_80:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._iconButton_bu0vt_80:active:not(:disabled){background:var(--bg-active)}._iconButton_bu0vt_80:disabled{color:var(--text-disabled);cursor:not-allowed}._scroll_bu0vt_98{min-height:0;padding-bottom:var(--space-4);scrollbar-gutter:stable;flex:1;overflow-y:auto}._skeleton_bu0vt_105{gap:var(--space-3);padding:var(--space-4) var(--space-3);flex-direction:column;display:flex}._error_bu0vt_106{gap:var(--space-2);padding:var(--space-4) var(--space-3);color:var(--status-danger-fg);font-size:var(--text-sm-size);justify-items:start;display:grid}._error_bu0vt_106 button{min-height:var(--control-h-sm);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--text-xs-size);transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard)}._error_bu0vt_106 button:hover{background:var(--bg-hover);border-color:var(--border-strong)}._error_bu0vt_106 button:active{background:var(--bg-active)}._empty_bu0vt_125{padding:var(--space-8) var(--space-4);color:var(--text-tertiary);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._emptyTitle_bu0vt_131{color:var(--text-secondary);font-weight:var(--font-weight-medium);margin-bottom:var(--space-1)}._group_bu0vt_133{padding-top:var(--space-4)}._groupTitle_bu0vt_134{font-family:var(--font-display);align-items:baseline;gap:var(--space-2);padding:0 var(--space-3) var(--space-1);font-size:var(--text-2xs-size,11px);line-height:1.4;font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary);display:flex}._groupName_bu0vt_147{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._enrolled_bu0vt_148{color:var(--text-tertiary);opacity:.7;font-weight:var(--font-weight-regular);flex-shrink:0}._list_bu0vt_150{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._session_bu0vt_153{align-items:center;gap:var(--space-2);width:100%;min-height:var(--density-row,32px);padding:0 var(--space-3) 0 var(--space-3);color:var(--text-secondary);text-align:left;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);grid-template-columns:2px minmax(0,1fr) auto auto;display:grid;position:relative}._session_bu0vt_153:hover{background:var(--bg-hover);color:var(--text-primary)}._session_bu0vt_153:active{background:var(--bg-active)}._session_bu0vt_153[aria-current]{background:var(--bg-selected);color:var(--text-primary)}._marker_bu0vt_170{width:2px;height:var(--engine-marker-h);background:var(--verse-engine,var(--text-tertiary));border-radius:1px}._engine-claude_bu0vt_176{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_bu0vt_177{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_bu0vt_178{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_bu0vt_179{--verse-engine:var(--engine-local,#7c5cff)}._sessionText_bu0vt_181{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm-size);line-height:var(--text-sm-line);overflow:hidden}._running_bu0vt_190{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:1.8s ease-out infinite _verse-pulse_bu0vt_1}._errored_bu0vt_197{width:12px;height:12px;color:var(--status-danger-fg);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-bold);justify-content:center;align-items:center;line-height:1;display:flex}._seatSpent_bu0vt_212{width:12px;height:12px;color:var(--status-danger-fg);flex:none;justify-content:center;align-items:center;font-size:9px;line-height:1;display:flex}._time_bu0vt_224{text-align:right;min-width:3ch;font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);flex-shrink:0}._session_bu0vt_153:hover ._time_bu0vt_224,._session_bu0vt_153[aria-current] ._time_bu0vt_224{color:var(--text-secondary)}._footer_bu0vt_243{height:var(--control-h);padding:0 var(--space-3);border-top:1px solid var(--border-subtle);flex-shrink:0;align-items:center;display:flex}._footerButton_bu0vt_251{min-height:var(--control-h-xs);padding:0 var(--space-2);margin-left:calc(-1 * var(--space-2));border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard)}._footerButton_bu0vt_251:hover{color:var(--text-primary);background:var(--bg-hover)}._footerButton_bu0vt_251:active{background:var(--bg-active)}@keyframes _verse-pulse_bu0vt_1{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--status-running-solid) 55%, transparent)}to{box-shadow:0 0 0 5px #0000}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._running_bu0vt_190{animation:none}}:root[data-motion=reduce] ._running_bu0vt_190{animation:none}._workspace_yz289_1{background:var(--bg-surface);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}._header_yz289_11{align-items:center;gap:var(--space-2);height:var(--strip-height);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);flex-shrink:0;display:flex;position:relative}._headerSpacer_yz289_23{min-width:var(--space-2);flex:1}._title_yz289_25{min-width:0;margin-left:calc(-1 * var(--space-2));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)}._titleButton_yz289_29{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_yz289_29:hover:not(:disabled){background:var(--bg-hover)}._titleButton_yz289_29:active:not(:disabled){background:var(--bg-active)}._titleButton_yz289_29:disabled{cursor:default}._titleInput_yz289_59{width:100%;max-width:48ch;padding:2px 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_yz289_72{height:calc(var(--text-md-size) * 1.2);border-radius:var(--radius-xs);width:22ch;max-width:40%}._seatPill_yz289_81{align-items:center;gap:var(--space-2);min-width:0;max-width:34ch;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-shrink:0;display:inline-flex}._seatPill_yz289_81[data-seat-capacity]{max-width:46ch}._engineDot_yz289_100{border-radius:var(--radius-full);background:var(--verse-engine,var(--text-tertiary));flex-shrink:0;width:5px;height:5px}._seatText_yz289_107{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);font-weight:var(--font-weight-medium);overflow:hidden}._projectName_yz289_114{padding-left:var(--space-2);border-left:1px solid var(--border-default);color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;overflow:hidden}._engine-claude_yz289_123{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_yz289_124{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_yz289_125{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_yz289_126{--verse-engine:var(--engine-local,#7c5cff)}._streamState_yz289_128{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);flex-shrink:0}._ghost_yz289_130,._ghostIcon_yz289_131,._danger_yz289_132{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_yz289_131{width:var(--control-h-sm);height:var(--control-h-sm);justify-content:center;align-items:center;display:flex}._ghost_yz289_130{min-height:var(--control-h-xs);padding:0 var(--space-2)}._ghostIcon_yz289_131:hover:not(:disabled),._ghost_yz289_130:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._ghostIcon_yz289_131:active:not(:disabled),._ghost_yz289_130:active:not(:disabled){background:var(--bg-active)}._ghostIcon_yz289_131:disabled,._ghost_yz289_130:disabled{opacity:.4;cursor:not-allowed}._ghostIcon_yz289_131[aria-pressed=true]{color:var(--text-primary)}._danger_yz289_132{min-height:var(--control-h-xs);padding:0 var(--space-2);color:var(--status-danger-fg)}._danger_yz289_132:hover:not(:disabled){background:var(--status-danger-bg)}._danger_yz289_132:active:not(:disabled){background:var(--status-danger-bg);border-color:var(--status-danger-solid)}._confirm_yz289_158{align-items:center;gap:var(--space-1);display:inline-flex}._confirmText_yz289_159{font-size:var(--text-xs-size);color:var(--text-secondary)}._meter_yz289_170{--meter-color:var(--accent-500);--meter-text:var(--text-secondary);align-items:baseline;gap:var(--space-2);flex-shrink:0;display:inline-flex}._meter-warn_yz289_178{--meter-color:var(--status-warning-solid);--meter-text:var(--status-warning-fg)}._meter-danger_yz289_179{--meter-color:var(--status-danger-solid);--meter-text:var(--status-danger-fg)}._meter-unknown_yz289_180{--meter-color:var(--border-strong);--meter-text:var(--text-tertiary)}._meterTrack_yz289_183{background:0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}._meterFill_yz289_191{background:var(--meter-color);height:100%;transition:width var(--duration-slow) var(--ease-decelerate), background var(--duration-base) var(--ease-standard)}._meterInline_yz289_196 ._meterTrack_yz289_183{background:var(--meter-track);border-radius:var(--radius-full);width:64px;position:static;overflow:hidden}._meterText_yz289_204{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_yz289_213{white-space:nowrap}._meterPercent_yz289_217{text-align:right;min-width:4ch;color:var(--meter-text);font-weight:var(--font-weight-medium)}._emptyState_yz289_221{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_yz289_232{color:var(--accent-500)}._emptyTitle_yz289_233{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_yz289_240{color:var(--text-secondary);font-size:var(--text-md-size);line-height:var(--text-md-line)}._emptyButton_yz289_241{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_yz289_241:hover{border-color:var(--accent-500)}._emptyButton_yz289_241:active{background:var(--bg-active)}._emptyButton_yz289_241 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._emptyWarn_yz289_257{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_yz289_257 code{font-size:var(--text-xs-size);color:var(--text-primary)}@media (max-width:900px){._projectName_yz289_114{display:none}}@media (max-width:760px){._meterTokens_yz289_213{display:none}._seatPill_yz289_81{max-width:18ch}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._meterFill_yz289_191{transition:none}}._header_yz289_11{padding-left:max(var(--space-3), calc(var(--app-traffic-light-inset,0px) - var(--rail-width,56px)))}._diff_6z1ga_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_6z1ga_46{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._diffMulti_6z1ga_58{min-width:0}._diffHead_6z1ga_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_6z1ga_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_6z1ga_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_6z1ga_83:after{content:" →";color:var(--text-tertiary)}._diffStatus_6z1ga_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_6z1ga_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_6z1ga_118{color:var(--status-success-fg)}._diffDel_6z1ga_119{color:var(--status-danger-fg)}._diffNotice_6z1ga_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_6z1ga_130{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._diffTable_6z1ga_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_6z1ga_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_6z1ga_30{text-align:center;vertical-align:top;-webkit-user-select:none;user-select:none;width:14px;min-width:14px;color:var(--text-secondary)}._diffText_6z1ga_159{padding:0 var(--space-2) 0 0;vertical-align:top;white-space:pre-wrap;overflow-wrap:anywhere}._diffCode_6z1ga_179{font-family:inherit}._diffRow_add_6z1ga_181{background:var(--diff-add)}._diffRow_del_6z1ga_182{background:var(--diff-del)}._diffRow_context_6z1ga_183{background:0 0}._diffHunkRow_6z1ga_185>*{padding-top:var(--space-1);padding-bottom:var(--space-1);border-top:1px solid var(--border-subtle);background:var(--bg-canvas)}._diffHunkRow_6z1ga_185:first-child>*{border-top:0}._diffHunkHead_6z1ga_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_6z1ga_200,._commandMore_6z1ga_201,._activityMore_6z1ga_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_6z1ga_200:hover,._commandMore_6z1ga_201:hover,._activityMore_6z1ga_202:hover{background:var(--bg-hover);color:var(--text-primary)}._diffUnanchored_6z1ga_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_6z1ga_232{color:var(--text-primary)}._tok_comment_6z1ga_233{color:var(--text-tertiary);font-style:italic}._tok_string_6z1ga_234{color:var(--status-success-fg)}._tok_number_6z1ga_235{color:var(--status-warning-fg)}._tok_keyword_6z1ga_236{color:var(--accent-600);font-weight:var(--font-weight-medium)}._command_6z1ga_201{border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);overflow:hidden}._command_6z1ga_201[data-failed=true]{border-left:2px solid var(--status-danger-solid)}._commandLine_6z1ga_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_6z1ga_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_6z1ga_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}._commandStatus_6z1ga_274{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_6z1ga_282{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_6z1ga_282[data-tone=bad]{color:var(--status-danger-fg)}._commandStatusText_6z1ga_282[data-tone=pending]{color:var(--status-warning-fg)}._commandMeta_6z1ga_292{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._commandPre_6z1ga_297{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_6z1ga_309{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0}._activity_6z1ga_202{margin-top:var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);overflow:hidden}._activityHead_6z1ga_327{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);display:flex}._activityCount_6z1ga_336{font-family:var(--font-display);font-size:var(--text-xs-size);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums;color:var(--text-primary)}._activityLabel_6z1ga_343{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)}._activityBreakdown_6z1ga_350{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);margin-left:auto}._activityList_6z1ga_356{margin:0;padding:0;list-style:none}._activityRow_6z1ga_358{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;grid-template-columns:2px 6ch minmax(0,1fr) auto auto;display:grid}._activityRow_6z1ga_358:hover{background:var(--bg-hover)}._activityRow_6z1ga_358:active{background:var(--bg-active)}._activityRule_6z1ga_380{background:var(--border-default);align-self:stretch}._activityRow_6z1ga_358[data-action=edit] ._activityRule_6z1ga_380{background:var(--status-info-solid)}._activityRow_6z1ga_358[data-action=create] ._activityRule_6z1ga_380{background:var(--status-success-solid)}._activityRow_6z1ga_358[data-action=delete] ._activityRule_6z1ga_380,._activityRow_6z1ga_358[data-failed=true] ._activityRule_6z1ga_380{background:var(--status-danger-solid)}._activityVerb_6z1ga_375{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);padding-left:var(--space-3);white-space:nowrap}._activityRow_6z1ga_358[data-action=edit] ._activityVerb_6z1ga_375,._activityRow_6z1ga_358[data-action=create] ._activityVerb_6z1ga_375,._activityRow_6z1ga_358[data-action=delete] ._activityVerb_6z1ga_375{color:var(--text-secondary)}._activityFailed_6z1ga_379{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;white-space:nowrap;color:var(--status-danger-fg);flex:none}._activityPath_6z1ga_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_6z1ga_419{color:var(--text-primary);white-space:nowrap}._activityDir_6z1ga_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_6z1ga_430,._activityDelta_6z1ga_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_6z1ga_431{gap:var(--space-2);display:flex}._activityAdd_6z1ga_439{color:var(--status-success-fg)}._activityDel_6z1ga_431{color:var(--status-danger-fg)}._nav_6z1ga_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_6z1ga_457{flex:1}._navOutlineButton_6z1ga_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_6z1ga_459:hover{background:var(--bg-hover);color:var(--text-primary)}._navChevron_6z1ga_473{transition:transform var(--duration-fast) var(--ease-standard);display:inline-flex}._navChevron_6z1ga_473[data-open=true]{transform:rotate(90deg)}._navCount_6z1ga_475{font-family:var(--font-display);font-size:var(--text-xs-size);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}._navWord_6z1ga_481{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase}._navSearch_6z1ga_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_6z1ga_488:focus-within{border-color:var(--accent-500);box-shadow:var(--shadow-focus-ring)}._navSearchIcon_6z1ga_512{color:var(--text-tertiary);display:inline-flex}._navSearch_6z1ga_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_6z1ga_488 input::-webkit-search-cancel-button{display:none}._navSearch_6z1ga_488 input:focus-visible{box-shadow:none;outline:none}._navMatches_6z1ga_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_6z1ga_532{gap:2px;display:inline-flex}._navStep_6z1ga_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_6z1ga_532 button:hover{background:var(--bg-hover);color:var(--text-primary)}._navError_6z1ga_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_6z1ga_545:hover{background:var(--status-danger-bg)}._navErrorGlyph_6z1ga_563{font-family:var(--font-display);font-weight:var(--font-weight-semibold)}._outline_6z1ga_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_6z1ga_582{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._outlineList_6z1ga_587{margin:0;padding:0;list-style:none}._outlineRow_6z1ga_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_6z1ga_588:hover{background:var(--bg-hover)}._outlineIndex_6z1ga_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_6z1ga_609{gap:2px;min-width:0;display:grid}._outlineTitle_6z1ga_610{font-size:var(--text-xs-size);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._outlineSnippet_6z1ga_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_6z1ga_627{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._outlineStatus_6z1ga_631{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);color:var(--text-tertiary)}._outlineRow_6z1ga_588[data-status=error] ._outlineStatus_6z1ga_631{color:var(--status-danger-fg)}._outlineRow_6z1ga_588[data-status=running] ._outlineStatus_6z1ga_631{color:var(--status-running-fg)}@media (max-width:900px){._navSearch_6z1ga_488{flex-basis:14ch}._activityRow_6z1ga_358{grid-template-columns:2px 6ch minmax(0,1fr) auto auto}._activityDir_6z1ga_420{display:none}}._transcriptWrap_yy5uu_5{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}._transcript_yy5uu_5{min-height:0;padding:var(--space-8) var(--space-6) var(--space-6);scrollbar-gutter:stable;scroll-behavior:smooth;flex:1;overflow-y:auto}._list_yy5uu_14{gap:var(--space-6);width:100%;max-width:var(--measure-read);flex-direction:column;margin:0 auto;padding:0;list-style:none;display:flex}._item_yy5uu_24{min-width:0}._skeleton_yy5uu_26{max-width:var(--measure-read);gap:calc(var(--text-base-line-relaxed) - var(--text-base-line));flex-direction:column;margin:0 auto;display:flex}._skeletonUser_yy5uu_38{margin-block:var(--space-2);padding-left:var(--space-4)}._loadError_yy5uu_39{gap:var(--space-3);max-width:var(--measure-read);margin:var(--space-8) auto 0;padding-left:var(--space-4);border-left:2px solid var(--status-danger-solid);color:var(--text-secondary);font-size:var(--text-sm-size);justify-items:start;display:grid}._loadError_yy5uu_39 button{min-height:var(--control-h-sm);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--text-xs-size);transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard)}._loadError_yy5uu_39 button:hover{background:var(--bg-hover);border-color:var(--border-strong)}._loadError_yy5uu_39 button:active{background:var(--bg-active)}._empty_yy5uu_62{max-width:var(--measure-read);color:var(--text-secondary);margin:clamp(24px,12vh,120px) auto 0}._emptyTitle_yy5uu_63{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,-.02em);color:var(--text-primary);margin-bottom:var(--space-2)}._emptyBody_yy5uu_72{font-size:var(--text-sm-size);line-height:var(--text-sm-line);max-width:52ch}._user_yy5uu_75{display:block}._userText_yy5uu_76{padding-left:var(--space-4);border-left:2px solid var(--border-strong);color:var(--text-secondary);white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--text-base-size);line-height:var(--text-base-line-relaxed)}._assistant_yy5uu_87{display:block}._markdown_yy5uu_31{color:var(--text-primary);font-size:var(--text-base-size);line-height:var(--text-base-line-relaxed);overflow-wrap:anywhere}._markdown_yy5uu_31>*+*{margin-top:var(--space-4)}._markdown_yy5uu_31 p{margin:0}._markdown_yy5uu_31 h1,._markdown_yy5uu_31 h2,._markdown_yy5uu_31 h3,._markdown_yy5uu_31 h4{font-family:var(--font-display);letter-spacing:var(--tracking-display,-.02em);font-weight:var(--font-weight-semibold);margin-top:var(--space-6);margin-bottom:calc(-1 * var(--space-1))}._markdown_yy5uu_31 h1{font-size:var(--text-xl-size);line-height:var(--text-xl-line)}._markdown_yy5uu_31 h2{font-size:var(--text-lg-size);line-height:var(--text-lg-line)}._markdown_yy5uu_31 h3{font-size:var(--text-md-size);line-height:var(--text-md-line)}._markdown_yy5uu_31 h4{font-size:var(--text-base-size);font-weight:var(--font-weight-medium)}._markdown_yy5uu_31 ul,._markdown_yy5uu_31 ol{margin-block:0;padding-left:1.5em}._markdown_yy5uu_31 ul{list-style:outside}._markdown_yy5uu_31 ol{list-style:decimal}._markdown_yy5uu_31 ul ul{list-style:circle}._markdown_yy5uu_31 li{padding-left:.15em}._markdown_yy5uu_31 li::marker{color:var(--text-tertiary)}._markdown_yy5uu_31 li+li,._markdown_yy5uu_31 li>ul,._markdown_yy5uu_31 li>ol{margin-top:var(--space-2)}._markdown_yy5uu_31 a{color:var(--text-link);text-underline-offset:2px;text-decoration:underline}._markdown_yy5uu_31 blockquote{padding-left:var(--space-4);border-left:2px solid var(--border-strong);color:var(--text-secondary);margin:0}._markdown_yy5uu_31 hr{border:0;border-top:1px solid var(--border-subtle);margin-block:var(--space-6)}._markdown_yy5uu_31 table{border-collapse:collapse;font-size:var(--text-sm-size);max-width:100%;display:block;overflow-x:auto}._markdown_yy5uu_31 th,._markdown_yy5uu_31 td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-subtle);text-align:left;vertical-align:top}._markdown_yy5uu_31 th{border-bottom-color:var(--border-default);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary)}._markdown_yy5uu_31 tr:last-child td{border-bottom:0}._markdown_yy5uu_31 img{border-radius:var(--radius-xs)}._markdown_yy5uu_31 code{font-family:var(--font-mono);background:var(--bg-code);border-radius:var(--radius-xs);padding:.1em .3em;font-size:.92em}._markdown_yy5uu_31 pre{padding:var(--space-4);padding-top:var(--control-h-xs);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-code);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed);tab-size:2;margin:0;position:relative;overflow-x:auto}._markdown_yy5uu_31 pre code{font-size:inherit;white-space:pre;background:0 0;padding:0}._codeHead_yy5uu_182{justify-content:space-between;align-items:center;gap:var(--space-2);height:var(--control-h-xs);padding:0 var(--space-2) 0 var(--space-4);pointer-events:none;display:flex;position:absolute;top:0;left:0;right:0}._codeLang_yy5uu_199{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)}._copy_yy5uu_198{pointer-events:auto;min-height:calc(var(--control-h-xs) - var(--space-1));padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);opacity:0;transition:opacity var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard)}._markdown_yy5uu_31 pre:hover ._copy_yy5uu_198,._copy_yy5uu_198:focus-visible{opacity:1}._copy_yy5uu_198:hover{color:var(--text-primary);background:var(--bg-hover)}._copy_yy5uu_198:active{background:var(--bg-active)}._caret_yy5uu_224,._streaming_yy5uu_225>:last-child:after{content:"";vertical-align:-.15em;background:var(--accent-500);width:2px;height:1em;animation:_verse-caret_yy5uu_1 1.2s var(--ease-standard) infinite;margin-left:2px;display:inline-block}._caret_yy5uu_224{vertical-align:middle}._thinking_yy5uu_238{color:var(--text-tertiary);font-size:var(--text-sm-size)}._thinkingSummary_yy5uu_239{cursor:pointer;align-items:center;gap:var(--space-2);min-height:var(--density-row,32px);font-style:italic;list-style:none;display:inline-flex}._thinkingSummary_yy5uu_239::-webkit-details-marker{display:none}._thinkingSummary_yy5uu_239:before{content:"›";transition:transform var(--duration-fast) var(--ease-standard);font-style:normal}._thinking_yy5uu_238[open] ._thinkingSummary_yy5uu_239:before{transform:rotate(90deg)}._thinkingBody_yy5uu_251{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)}._tool_yy5uu_262,._toolRun_yy5uu_263{font-size:var(--text-sm-size)}._toolLine_yy5uu_265{align-items:center;gap:var(--space-2);min-height:var(--density-row-sm);padding-left:var(--space-3);border-left:2px solid var(--border-subtle);cursor:pointer;color:var(--text-tertiary);grid-template-columns:12px auto minmax(0,1fr) auto;list-style:none;display:grid}._toolLine_yy5uu_265::-webkit-details-marker{display:none}._toolLine_yy5uu_265{transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard)}._toolLine_yy5uu_265:hover{color:var(--text-secondary);background:var(--bg-hover)}._toolLine_yy5uu_265:active{background:var(--bg-active)}._toolLine_yy5uu_265:hover ._toolArg_yy5uu_283,._toolLine_yy5uu_265:hover ._toolState_yy5uu_283,._toolLine_yy5uu_265:active ._toolArg_yy5uu_283,._toolLine_yy5uu_265:active ._toolState_yy5uu_283{color:var(--text-secondary)}._toolGlyph_yy5uu_294{width:12px;height:12px;transition:transform var(--duration-fast) var(--ease-standard);border:1px solid;border-radius:2px}._tool_yy5uu_262[open]>._toolLine_yy5uu_265>._toolGlyph_yy5uu_294,._toolRun_yy5uu_263[open]>._toolLine_yy5uu_265>._toolGlyph_yy5uu_294{background:currentColor}._toolName_yy5uu_304{font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-secondary);white-space:nowrap}._toolArg_yy5uu_283{text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-tertiary);overflow:hidden}._toolState_yy5uu_283{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);white-space:nowrap;justify-self:end}._toolFailed_yy5uu_328>._toolLine_yy5uu_265{border-left-color:var(--status-danger-solid)}._toolFailed_yy5uu_328>._toolLine_yy5uu_265>._toolState_yy5uu_283{color:var(--status-danger-fg)}._toolBody_yy5uu_331,._toolRunBody_yy5uu_332{gap:var(--space-3);margin-top:var(--space-2);padding-left:var(--space-3);border-left:2px solid var(--border-subtle);display:grid}._toolRunList_yy5uu_339{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._toolRunList_yy5uu_339>li{min-width:0}._toolLabel_yy5uu_341{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary);margin-bottom:var(--space-1)}._toolPre_yy5uu_350{max-height:360px;padding:var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text-primary);margin:0;overflow:auto}._toolPending_yy5uu_365{color:var(--text-tertiary);font-size:var(--text-xs-size)}._note_yy5uu_368{padding-left:var(--space-4);border-left:2px solid var(--border-subtle);color:var(--text-tertiary);font-size:var(--text-sm-size)}._noteError_yy5uu_374{border-left-color:var(--status-danger-solid);color:var(--status-danger-fg)}._meta_yy5uu_375{padding-left:var(--space-4)}._noteDuration_yy5uu_376{font-family:var(--font-display);font-variant-numeric:tabular-nums}._metaText_yy5uu_380{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary)}._jump_yy5uu_387{left:50%;bottom:var(--space-4);align-items:center;gap:var(--space-2);min-height:var(--control-h-sm);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-full);background:var(--bg-surface-raised);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);box-shadow:var(--shadow-menu,var(--shadow-md));transition:color var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);display:inline-flex;position:absolute;transform:translate(-50%)}._jump_yy5uu_387:hover{color:var(--text-primary);border-color:var(--border-strong)}._jump_yy5uu_387:active{background:var(--bg-active)}._jumpUnseen_yy5uu_410{border-color:var(--accent-500);color:var(--text-primary)}@keyframes _verse-caret_yy5uu_1{50%{opacity:.15}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._transcript_yy5uu_5{scroll-behavior:auto}:root:not([data-motion=full]) ._caret_yy5uu_224,:root:not([data-motion=full]) ._streaming_yy5uu_225>:last-child:after{animation:none}}:root[data-motion=reduce] ._caret_yy5uu_224,:root[data-motion=reduce] ._streaming_yy5uu_225>:last-child:after{animation:none}:root[data-motion=reduce] ._transcript_yy5uu_5{scroll-behavior:auto}@media (max-width:900px){._transcript_yy5uu_5{padding:var(--space-5) var(--space-4)}}._turn_yy5uu_435{min-width:0;scroll-margin-block:var(--space-6);border-radius:var(--radius-xs);display:block}._turn_yy5uu_435:focus-visible{outline:2px solid var(--accent-500);outline-offset:var(--space-2);box-shadow:none}._turnItems_yy5uu_457{gap:var(--space-6);flex-direction:column;min-width:0;margin:0;padding:0;list-style:none;display:flex}._turn_yy5uu_435[data-match]{box-shadow:-2px 0 0 0 var(--text-tertiary)}._turn_yy5uu_435[data-match=active]{box-shadow:-2px 0 0 0 var(--accent-500)}._turn_yy5uu_435[data-flash],[data-flash]{animation:_verse-flash_yy5uu_1 1.4s var(--ease-standard) 1}@keyframes _verse-flash_yy5uu_1{0%,60%{background:var(--bg-selected)}to{background:0 0}}._turnErrorJump_yy5uu_493{margin-top:var(--space-3);min-height:var(--control-h-xs);padding:0 var(--space-2);border:0;border-left:2px solid var(--status-danger-solid);color:var(--status-danger-fg);font-size:var(--text-xs-size);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;align-items:center;display:inline-flex}._turnErrorJump_yy5uu_493:hover{background:var(--status-danger-bg)}._toolLine_yy5uu_265{grid-template-columns:12px auto minmax(0,1fr) auto auto}._toolDelta_yy5uu_511{gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;white-space:nowrap;display:inline-flex}._toolAdd_yy5uu_519{color:var(--status-success-fg)}._toolDel_yy5uu_511{color:var(--status-danger-fg)}._toolNote_yy5uu_522{margin-top:var(--space-2);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed)}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._turn_yy5uu_435[data-flash],:root:not([data-motion=full]) [data-flash]{animation:none}}:root[data-motion=reduce] ._turn_yy5uu_435[data-flash],:root[data-motion=reduce] [data-flash]{animation:none}._chat_fzgvr_6{grid-template-columns:var(--verse-sidebar-width,264px) 1px minmax(0, 1fr) 1px var(--verse-resources-width,320px);background:var(--bg-canvas);height:100%;min-height:0;color:var(--text-primary);flex:1;display:grid;position:relative;overflow:hidden}._chat_fzgvr_6[data-resources=closed]{grid-template-columns:var(--verse-sidebar-width,264px) 1px minmax(0, 1fr)}._chat_fzgvr_6[data-sidebar=collapsed]{grid-template-columns:0 0 minmax(0, 1fr) 1px var(--verse-resources-width,320px)}._chat_fzgvr_6[data-sidebar=collapsed][data-resources=closed]{grid-template-columns:0 0 minmax(0,1fr)}._chat_fzgvr_6[data-sidebar=collapsed]>nav{display:none}._chat_fzgvr_6>*{min-width:0;min-height:0}._main_fzgvr_30{background:var(--bg-surface);flex-direction:column;min-width:0;min-height:0;display:flex}._main_fzgvr_30:focus{outline:none}._banner_fzgvr_40,._bannerWarn_fzgvr_41{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-5);font-size:var(--text-sm-size);line-height:var(--text-sm-line);border-bottom:1px solid var(--border-subtle);flex-shrink:0;display:flex}._banner_fzgvr_40{background:var(--status-danger-bg);color:var(--status-danger-fg)}._bannerWarn_fzgvr_41{background:var(--status-warning-bg);color:var(--status-warning-fg)}._bannerWarn_fzgvr_41 code{font-size:var(--text-xs-size)}._banner_fzgvr_40 button{min-height:var(--control-h-sm);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);transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);flex-shrink:0}._banner_fzgvr_40 button:hover{background:var(--bg-hover);border-color:var(--border-strong)}._banner_fzgvr_40 button:active{background:var(--bg-active)}._resize_fzgvr_75{cursor:col-resize;background:var(--border-subtle);touch-action:none;transition:background var(--duration-fast) var(--ease-standard);position:relative}._resize_fzgvr_75:before{content:"";inset-block:0;position:absolute;left:-4px;right:-4px}._resize_fzgvr_75:hover,._resize_fzgvr_75:focus-visible{background:var(--accent-500)}._chat_fzgvr_6[data-sidebar=collapsed]>._resize_fzgvr_75:first-of-type,._scrim_fzgvr_94{display:none}@media (max-width:900px){._chat_fzgvr_6,._chat_fzgvr_6[data-resources=open]{grid-template-columns:var(--verse-sidebar-width,264px) 1px minmax(0, 1fr)}._chat_fzgvr_6[data-sidebar=collapsed],._chat_fzgvr_6[data-sidebar=collapsed][data-resources=open]{grid-template-columns:0 0 minmax(0,1fr)}._chat_fzgvr_6>aside,._chat_fzgvr_6>._resize_fzgvr_75:last-of-type{display:none}}@media (max-width:760px){._chat_fzgvr_6,._chat_fzgvr_6[data-sidebar=collapsed]{grid-template-columns:minmax(0,1fr)}._chat_fzgvr_6>nav{z-index:var(--z-overlay);inset-block:0;width:min(var(--verse-sidebar-width,264px), 86vw);box-shadow:var(--shadow-menu,var(--shadow-lg));position:absolute;left:0}._chat_fzgvr_6>._resize_fzgvr_75{display:none}._scrim_fzgvr_94{z-index:calc(var(--z-overlay) - 1);background:var(--bg-overlay);cursor:default;display:block;position:absolute;inset:0}._chat_fzgvr_6[data-sidebar=collapsed] ._scrim_fzgvr_94{display:none}}
@@ -1,2 +0,0 @@
1
- import{a as e,n as t,o as n}from"./index-BMRIET7F.js";import{C as r,O as i,S as a,T as o,_ as s,g as c,h as l,k as u,p as d,w as f}from"./global-C4jfYHrj.js";import{t as p}from"./Dialog-Bn0CgEGz.js";import{r as m}from"./RouteErrorBoundary-Dw8ZjmkS.js";import{f as ee,h,l as g,m as te,p as _,r as v,s as y,t as b,y as x}from"./icons-BxOX8-XB.js";import{B as S,F as C,H as w,I as T,L as E,V as D,_ as O,g as k,z as A}from"./VerseConsoleApp-CRfZUV-T.js";var j={section:`_section_3qpbp_5`,strip:`_strip_3qpbp_13`,stripTitle:`_stripTitle_3qpbp_25`,scroll:`_scroll_3qpbp_32`,column:`_column_3qpbp_38`,panel:`_panel_3qpbp_51`,panelHead:`_panelHead_3qpbp_56`,panelTitle:`_panelTitle_3qpbp_64`,panelBody:`_panelBody_3qpbp_74`,row:`_row_3qpbp_81`,rowStacked:`_rowStacked_3qpbp_90`,rowText:`_rowText_3qpbp_95`,rowLabel:`_rowLabel_3qpbp_99`,rowDescription:`_rowDescription_3qpbp_107`,rowControl:`_rowControl_3qpbp_114`,swatches:`_swatches_3qpbp_140`,swatch:`_swatch_3qpbp_140`,swatchCheck:`_swatchCheck_3qpbp_165`,sliderStack:`_sliderStack_3qpbp_173`,contrastWarning:`_contrastWarning_3qpbp_180`,preview:`_preview_3qpbp_197`,previewRow:`_previewRow_3qpbp_207`,previewHeading:`_previewHeading_3qpbp_214`,previewBody:`_previewBody_3qpbp_222`,previewNumerals:`_previewNumerals_3qpbp_228`,origin:`_origin_3qpbp_238`,note:`_note_3qpbp_242`,noteIcon:`_noteIcon_3qpbp_258`,code:`_code_3qpbp_249`,shortcuts:`_shortcuts_3qpbp_278`,shortcut:`_shortcut_3qpbp_278`,keys:`_keys_3qpbp_294`,key:`_key_3qpbp_294`,about:`_about_3qpbp_315`,aboutLine:`_aboutLine_3qpbp_321`,aboutName:`_aboutName_3qpbp_329`,link:`_link_3qpbp_338`},M=t();function N({title:e,action:t,children:n}){return(0,M.jsxs)(`section`,{className:j.panel,children:[(0,M.jsxs)(`div`,{className:j.panelHead,children:[(0,M.jsx)(`h3`,{className:j.panelTitle,children:e}),t]}),(0,M.jsx)(`div`,{className:j.panelBody,children:n})]})}function P({label:e,description:t,htmlFor:n,labelId:r,stacked:i=!1,children:a}){let o=(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:j.rowLabel,id:r,children:e}),t?(0,M.jsx)(`span`,{className:j.rowDescription,children:t}):null]});return(0,M.jsxs)(`div`,{className:`${j.row} ${i?j.rowStacked:``}`,children:[(0,M.jsx)(`div`,{className:j.rowText,children:n?(0,M.jsx)(`label`,{htmlFor:n,className:j.rowText,children:o}):o}),(0,M.jsx)(`div`,{className:j.rowControl,children:a})]})}function F(e,t){return e?`Last completed ${new Date(e).toLocaleDateString()}.`:t?`Skipped. Nothing was missed — it is all reachable from the sections themselves.`:`Not seen yet.`}function I(){let{completedAt:e,dismissedAt:t,open:n}=k();return(0,M.jsx)(N,{title:`Onboarding`,children:(0,M.jsx)(P,{label:`Replay the first-run tour`,description:`Your connected seats, whether a local runtime is available, and what each of the three stop controls really halts. ${F(e,t)}`,children:(0,M.jsx)(w,{variant:`subtle`,size:`sm`,onClick:O,disabled:n,children:n?`Showing`:`Replay`})})})}var L=`3.5.1`,R=`Ashlr Verse`;function z(){return(0,M.jsx)(N,{title:`About`,children:(0,M.jsx)(`div`,{className:`${j.row} ${j.rowStacked}`,children:(0,M.jsxs)(`div`,{className:j.about,children:[(0,M.jsx)(`p`,{className:j.aboutName,children:R}),(0,M.jsxs)(`p`,{className:j.aboutLine,children:[(0,M.jsxs)(C,{mono:!0,children:[`v`,L]}),(0,M.jsx)(`span`,{children:`ashlr-hub — local-first command center for agentic engineers.`})]}),(0,M.jsx)(`p`,{className:j.aboutLine,children:`Every session, token and artifact stays on this machine. The console talks to one local server and no third-party service.`}),(0,M.jsx)(`p`,{className:j.aboutLine,children:(0,M.jsxs)(`a`,{className:j.link,href:`https://github.com/ashlrai/ashlr-hub`,target:`_blank`,rel:`noreferrer noopener`,children:[`Source and changelog`,(0,M.jsx)(g,{size:12})]})})]})})})}var B=n(e(),1),V=/^#([0-9a-f]{3,8})$/i,H=/^(rgba?|hsla?)\(([^)]*)\)$/i;function U(e,t,n){return Math.min(n,Math.max(t,e))}function W(e,t){let n=e.trim();return n.endsWith(`%`)?Number.parseFloat(n)/100*t:Number.parseFloat(n)}function G(e,t,n){let r=(e%360+360)%360,i=(1-Math.abs(2*n-1))*t,a=i*(1-Math.abs(r/60%2-1)),o=n-i/2,s;return s=r<60?[i,a,0]:r<120?[a,i,0]:r<180?[0,i,a]:r<240?[0,a,i]:r<300?[a,0,i]:[i,0,a],{r:Math.round((s[0]+o)*255),g:Math.round((s[1]+o)*255),b:Math.round((s[2]+o)*255)}}function K(e){let t=[],n=0,r=``;for(let i of e){if(i===`(`?n+=1:i===`)`&&--n,i===`,`&&n===0){t.push(r),r=``;continue}r+=i}return t.push(r),t.map(e=>e.trim()).filter(e=>e.length>0)}function q(e){let t=e.trim(),n=/\s(\d*\.?\d+)%$/.exec(t);if(n)return{color:t.slice(0,n.index).trim(),pct:Number.parseFloat(n[1])};let r=/^(\d*\.?\d+)%\s/.exec(t);return r?{color:t.slice(r[0].length).trim(),pct:Number.parseFloat(r[1])}:{color:t,pct:null}}function J(e){let t=/^color-mix\((.*)\)$/is.exec(e.trim());if(!t)return null;let n=K(t[1]);if(n.length!==3||n[0].replace(/\s+/g,` `).trim()!==`in srgb`)return null;let r=q(n[1]),i=q(n[2]);if(!r||!i)return null;let a=Y(r.color),o=Y(i.color);if(!a||!o)return null;let s=r.pct,c=i.pct;s===null&&c===null?(s=50,c=50):s===null?s=100-c:c===null&&(c=100-s);let l=s+c;if(l<=0)return null;let u=s/l,d=c/l,f=a.a*u+o.a*d;if(f<=0)return{r:0,g:0,b:0,a:0};let p=e=>U(Math.round((a[e]*a.a*u+o[e]*o.a*d)/f),0,255);return{r:p(`r`),g:p(`g`),b:p(`b`),a:U(f,0,1)}}function Y(e){let t=e.trim().toLowerCase();if(t===`transparent`)return{r:0,g:0,b:0,a:0};if(t.startsWith(`color-mix(`))return J(t);let n=V.exec(t);if(n){let e=n[1],t=e=>Number.parseInt(e.length===1?e+e:e,16);return e.length===3||e.length===4?{r:t(e[0]),g:t(e[1]),b:t(e[2]),a:e.length===4?t(e[3])/255:1}:e.length===6||e.length===8?{r:t(e.slice(0,2)),g:t(e.slice(2,4)),b:t(e.slice(4,6)),a:e.length===8?t(e.slice(6,8))/255:1}:null}let r=H.exec(t);if(!r)return null;let i=r[1],a=r[2].replace(/\//g,` `).split(/[\s,]+/).filter(Boolean);if(a.length<3)return null;let o=a.length>=4?U(W(a[3],1),0,1):1;if(i.startsWith(`rgb`))return{r:U(Math.round(W(a[0],255)),0,255),g:U(Math.round(W(a[1],255)),0,255),b:U(Math.round(W(a[2],255)),0,255),a:o};let s=Number.parseFloat(a[0]),c=U(W(a[1],1),0,1),l=U(W(a[2],1),0,1);return Number.isFinite(s)?{...G(s,c,l),a:o}:null}function X(e,t){if(e.a>=1)return e;let n=e.a;return{r:Math.round(e.r*n+t.r*(1-n)),g:Math.round(e.g*n+t.g*(1-n)),b:Math.round(e.b*n+t.b*(1-n)),a:1}}function Z(e){let t=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*t(e.r)+.7152*t(e.g)+.0722*t(e.b)}function Q(e,t,n=`#ffffff`){let r=Y(t),i=Y(e),a=Y(n);if(!r||!i||!a)return null;let o=X(r,a),s=Z(X(i,o)),c=Z(o),[l,u]=s>=c?[s,c]:[c,s];return(l+.05)/(u+.05)}function $(e,t,n,r=0){let i=G(e,U(t,0,100)/100,U(n+r,0,100)/100),a=e=>e.toString(16).padStart(2,`0`);return`#${a(i.r)}${a(i.g)}${a(i.b)}`}var ne=`#ffffff`,re=`#121214`,ie=[{value:`system`,label:`System`,icon:(0,M.jsx)(te,{})},{value:`light`,label:`Light`,icon:(0,M.jsx)(x,{})},{value:`dark`,label:`Dark`,icon:(0,M.jsx)(h,{})}],ae=[{value:`comfortable`,label:`Comfortable`},{value:`compact`,label:`Compact`}],oe=[{value:`grotesk`,label:`Space Grotesk`},{value:`ui`,label:`UI sans`},{value:`mono`,label:`Mono`}],se=[{value:`sharp`,label:`Sharp`},{value:`default`,label:`Default`},{value:`soft`,label:`Soft`}];function ce(e,t){return`linear-gradient(to right, ${[0,60,120,180,240,300,360].map(n=>`${$(n,e,t)} ${n/360*100}%`).join(`, `)})`}function le(e,t,n){let r=$(e,t,n,-8),i=$(e,t,n,14),a=Q(r,ne),o=Q(i,re),s=[];return a!==null&&a<4.5&&s.push(`light`),o!==null&&o<4.5&&s.push(`dark`),{lightRatio:a,darkRatio:o,failing:s}}function ue({appearance:e,onChange:t,onReset:n}){let i=(0,B.useId)(),s=(0,B.useId)(),c=(0,B.useId)(),l=(0,B.useId)(),u=(0,B.useId)(),p=o(e),m=le(e.accentH,e.accentS,e.accentL);return(0,M.jsxs)(N,{title:`Appearance`,action:(0,M.jsx)(w,{variant:`ghost`,size:`sm`,onClick:n,disabled:f(e),title:`Restore the shipped theme, accent, density, font, radius and motion`,children:`Reset to defaults`}),children:[(0,M.jsx)(P,{label:`Theme`,description:`System follows your OS appearance setting.`,children:(0,M.jsx)(A,{"aria-label":`Theme`,options:ie,value:e.theme,onChange:e=>t({theme:e})})}),(0,M.jsx)(P,{label:`Accent`,labelId:i,description:p?`${p.label} — used for links, focus rings and the one primary action per surface.`:`Custom hue — used for links, focus rings and the one primary action per surface.`,children:(0,M.jsx)(`div`,{className:j.swatches,role:`radiogroup`,"aria-labelledby":i,children:r.map(e=>{let n=p?.id===e.id;return(0,M.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e.label,tabIndex:n||!p&&e.id===r[0].id?0:-1,className:j.swatch,style:{background:$(e.h,e.s,e.l)},onClick:()=>t({accentH:e.h,accentS:e.s,accentL:e.l}),children:n?(0,M.jsx)(`span`,{className:j.swatchCheck,children:(0,M.jsx)(v,{size:12})}):null},e.id)})})}),(0,M.jsx)(P,{label:`Accent channels`,description:`Hue, saturation and lightness are written straight onto the root element — the whole app follows as you drag.`,stacked:!0,children:(0,M.jsxs)(`div`,{className:j.sliderStack,children:[(0,M.jsx)(E,{id:s,label:`Hue`,min:0,max:359,value:e.accentH,valueLabel:`${e.accentH}°`,valueText:`${e.accentH} degrees`,trackImage:ce(e.accentS,e.accentL),onChange:e=>t({accentH:Number(e.currentTarget.value)})}),(0,M.jsx)(E,{id:c,label:`Saturation`,min:0,max:100,value:e.accentS,valueLabel:`${e.accentS}%`,valueText:`${e.accentS} percent`,onChange:e=>t({accentS:Number(e.currentTarget.value)})}),(0,M.jsx)(E,{id:l,label:`Lightness`,min:a.min,max:a.max,value:e.accentL,valueLabel:`${e.accentL}%`,valueText:`${e.accentL} percent`,onChange:e=>t({accentL:Number(e.currentTarget.value)})}),m.failing.length>0?(0,M.jsxs)(`p`,{className:j.contrastWarning,role:`status`,children:[(0,M.jsx)(b,{size:14}),(0,M.jsxs)(`span`,{children:[`This accent falls below 4.5:1 as link text in`,` `,m.failing.length===2?`both themes`:`${m.failing[0]} mode`,`. Raise or lower the lightness to keep it readable.`]})]}):null]})}),(0,M.jsx)(P,{label:`Density`,description:`Row height and control padding across every view.`,children:(0,M.jsx)(A,{"aria-label":`Density`,options:ae,value:e.density,onChange:e=>t({density:e})})}),(0,M.jsx)(P,{label:`Display font`,description:`Titles, seat names, metrics and numerals. Body copy stays in the UI sans.`,children:(0,M.jsx)(A,{"aria-label":`Display font`,options:oe,value:e.displayFont,onChange:e=>t({displayFont:e})})}),(0,M.jsx)(P,{label:`Corner radius`,description:`Sharp reads like a terminal; soft reads like a consumer app.`,children:(0,M.jsx)(A,{"aria-label":`Corner radius`,options:se,value:e.radius,onChange:e=>t({radius:e})})}),(0,M.jsx)(P,{label:`Reduce motion`,htmlFor:u,description:`Collapses every transition to 1ms. Defaults to your system preference; turning it off here overrides that.`,children:(0,M.jsx)(T,{id:u,checked:e.reduceMotion,onChange:e=>t({reduceMotion:e}),"aria-label":`Reduce motion`})}),(0,M.jsx)(P,{label:`Preview`,description:`Live — these are the real primitives, not a picture of them.`,stacked:!0,children:(0,M.jsxs)(`div`,{className:j.preview,children:[(0,M.jsx)(`p`,{className:j.previewHeading,children:`Ashlr Verse`}),(0,M.jsxs)(`p`,{className:j.previewBody,children:[`Body copy stays in the UI sans at the reading measure; numerals like`,` `,(0,M.jsx)(`span`,{className:j.previewNumerals,children:`18,420 / 66,000`}),` use the display face.`]}),(0,M.jsxs)(`div`,{className:j.previewRow,children:[(0,M.jsx)(w,{variant:`primary`,size:`sm`,children:`Primary`}),(0,M.jsx)(w,{variant:`subtle`,size:`sm`,children:`Subtle`}),(0,M.jsx)(w,{variant:`ghost`,size:`sm`,children:`Ghost`}),(0,M.jsx)(w,{variant:`danger`,size:`sm`,children:`Destructive`})]}),(0,M.jsxs)(`div`,{className:j.previewRow,children:[(0,M.jsx)(d,{status:`running`}),(0,M.jsx)(C,{engine:`claude`,children:`Claude Max`}),(0,M.jsx)(C,{engine:`local`,mono:!0,children:`qwen3-coder`})]}),(0,M.jsx)(S,{value:18420,max:66e3,label:`Context`}),(0,M.jsx)(D,{"aria-label":`Preview field`,placeholder:`A field at the current density`,size:`sm`})]})})]})}function de(e){if(e===null)return`locked`;let t=Math.max(0,Math.round((e-Date.now())/6e4));return t<=0?`expiring now`:`unlocked for ${t} more minute${t===1?``:`s`}`}function fe(){let e=c(),t=s(),n=m(),[r,a]=(0,B.useState)(!1),o=(0,B.useRef)(null),l=typeof window>`u`?``:window.location.origin;async function f(){try{await navigator.clipboard.writeText(l),n.show(`Server address copied.`)}catch{n.show(`Could not reach the clipboard — select the field and copy manually.`,`danger`)}}async function h(){a(!1),await u(),n.show(`Disconnected. Paste the read token to reconnect.`)}return(0,M.jsxs)(N,{title:`Connection`,children:[(0,M.jsxs)(P,{label:`Server`,description:`This window talks to one local hub. Nothing leaves your machine.`,children:[(0,M.jsx)(`div`,{className:j.origin,children:(0,M.jsx)(D,{value:l,readOnly:!0,mono:!0,size:`sm`,"aria-label":`Server address`})}),(0,M.jsx)(w,{variant:`ghost`,size:`sm`,icon:(0,M.jsx)(y,{}),onClick:()=>void f(),children:`Copy`})]}),(0,M.jsx)(P,{label:`Read session`,description:`A 15-minute signed cookie, renewed silently while this tab stays open.`,children:(0,M.jsx)(d,{status:e===`authenticated`?`connected`:e===`checking`?`checking`:`disconnected`,tone:e===`authenticated`?`success`:e===`checking`?`running`:`danger`})}),(0,M.jsxs)(P,{label:`Mutation hold`,description:`Every action that changes something needs the mutation token. It is held in memory only, never stored, and clears when this tab closes.`,children:[(0,M.jsx)(d,{status:t.hasHold?de(t.heldUntil):`locked`,tone:t.hasHold?`success`:`neutral`}),(0,M.jsx)(w,{variant:`subtle`,size:`sm`,icon:(0,M.jsx)(_,{}),onClick:()=>{i(),n.show(`Mutation hold cleared.`)},disabled:!t.hasHold,children:`Lock now`})]}),(0,M.jsx)(P,{label:`Disconnect`,description:`Ends the read session in this browser and clears the mutation hold. Chats on the server are untouched.`,children:(0,M.jsx)(w,{variant:`danger`,size:`sm`,onClick:()=>a(!0),children:`Disconnect`})}),(0,M.jsx)(`div`,{className:j.row,children:(0,M.jsxs)(`p`,{className:j.note,children:[(0,M.jsx)(`span`,{className:j.noteIcon,children:(0,M.jsx)(ee,{size:14})}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`strong`,{children:`Where the tokens come from.`}),` Start the console with`,` `,(0,M.jsx)(`code`,{className:j.code,children:`ashlr verse`}),` — it prints a read token and a mutation token in that terminal, and opens this page. The desktop app injects both for you. Tokens are never displayed here, and the hub never writes them into a page, a log line or an API response. Lost them? Stop the server and start it again; it mints a fresh pair.`]})]})}),(0,M.jsx)(p,{open:r,onClose:()=>a(!1),titleId:`verse-settings-disconnect`,title:`Disconnect from this server?`,description:`You will need the read token again to get back in. Running sessions keep running on the server.`,initialFocusRef:o,children:(0,M.jsxs)(`div`,{className:j.previewRow,style:{justifyContent:`flex-end`},children:[(0,M.jsx)(w,{ref:o,variant:`subtle`,onClick:()=>a(!1),children:`Cancel`}),(0,M.jsx)(w,{variant:`danger`,onClick:()=>void h(),children:`Disconnect`})]})})]})}function pe(){if(typeof navigator>`u`)return!0;let e=`${navigator.platform??``} ${navigator.userAgent??``}`;return/mac|iphone|ipad|ipod/i.test(e)}function me(e){return[{title:`Navigation`,items:[{keys:[e,`1`],action:`Chat`},{keys:[e,`2`],action:`Autonomy`},{keys:[e,`3`],action:`Approvals`},{keys:[e,`4`],action:`Usage`},{keys:[e,`5`],action:`Settings`},{keys:[e,`K`],action:`Quick switcher`},{keys:[e,`,`],action:`Settings`}]},{title:`Chat`,items:[{keys:[e,`N`],action:`New chat`},{keys:[`Enter`],action:`Send message`},{keys:[`Shift`,`Enter`],action:`New line`},{keys:[`Esc`],action:`Stop dictation / close overlay`}]}]}function he(){let e=pe()?`⌘`:`Ctrl`;return(0,M.jsx)(N,{title:`Keyboard`,children:(0,M.jsx)(`div`,{className:j.shortcuts,children:me(e).flatMap(e=>e.items.map(t=>(0,M.jsxs)(`div`,{className:j.shortcut,children:[(0,M.jsx)(`span`,{children:t.action}),(0,M.jsx)(`span`,{className:j.keys,children:t.keys.map(e=>(0,M.jsx)(`kbd`,{className:j.key,children:e},e))})]},`${e.title}-${t.action}-${t.keys.join(`+`)}`)))})})}function ge(){let{appearance:e,set:t,reset:n}=l();return(0,M.jsxs)(`div`,{className:j.section,children:[(0,M.jsx)(`header`,{className:j.strip,"data-app-region":`drag`,children:(0,M.jsx)(`h2`,{className:j.stripTitle,children:`Settings`})}),(0,M.jsx)(`div`,{className:j.scroll,children:(0,M.jsxs)(`div`,{className:j.column,children:[(0,M.jsx)(ue,{appearance:e,onChange:t,onReset:n}),(0,M.jsx)(fe,{}),(0,M.jsx)(he,{}),(0,M.jsx)(I,{}),(0,M.jsx)(z,{})]})})]})}export{ge as SettingsSection};
2
- //# sourceMappingURL=SettingsSection-CWxtTNlD.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsSection-CWxtTNlD.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/sections/SettingsSection.module.css","../../../../../../src/web-ui/routes/verse/sections/SettingRow.tsx","../../../../../../src/web-ui/routes/verse/onboarding/OnboardingPanel.tsx","../../../../../../package.json","../../../../../../src/web-ui/routes/verse/sections/app-version.ts","../../../../../../src/web-ui/routes/verse/sections/AboutPanel.tsx","../../../../../../src/web-ui/design/contrast.ts","../../../../../../src/web-ui/routes/verse/sections/AppearancePanel.tsx","../../../../../../src/web-ui/routes/verse/sections/ConnectionPanel.tsx","../../../../../../src/web-ui/routes/verse/sections/ShortcutsPanel.tsx","../../../../../../src/web-ui/routes/verse/sections/SettingsSection.tsx"],"sourcesContent":["/* Settings — one reading column of quiet two-column rows. Shared by every\n panel in this folder so the label/control rhythm can never drift between\n Appearance and Connection. */\n\n.section {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--bg-canvas);\n}\n\n.strip {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n flex: none;\n height: var(--strip-height);\n padding: 0 var(--space-5);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n\n.stripTitle {\n font-family: var(--font-display);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-display);\n}\n\n.scroll {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n\n.column {\n width: 100%;\n max-width: var(--measure-read);\n margin: 0 auto;\n padding: var(--space-6) var(--space-5) var(--space-16);\n display: flex;\n flex-direction: column;\n gap: var(--space-8);\n}\n\n/* ---------------------------------------------------------------------------\n * Panel = a titled group of rows, separated by hairlines rather than cards.\n * ------------------------------------------------------------------------- */\n.panel {\n display: flex;\n flex-direction: column;\n}\n\n.panelHead {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--space-3);\n padding-bottom: var(--space-2);\n}\n\n.panelTitle {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n font-weight: var(--font-weight-medium);\n color: var(--text-tertiary);\n}\n\n.panelBody {\n border-top: 1px solid var(--border-subtle);\n}\n\n/* ---------------------------------------------------------------------------\n * Row: label + description on the left, control on the right.\n * ------------------------------------------------------------------------- */\n.row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--space-4);\n padding: var(--density-pad) 0;\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.rowStacked {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n}\n\n.rowText {\n min-width: 0;\n}\n\n.rowLabel {\n display: block;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n.rowDescription {\n margin-top: 2px;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n.rowControl {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.rowStacked .rowControl {\n justify-content: flex-start;\n}\n\n/* Below the shell's 900px breakpoint the two columns stack rather than\n squeezing a slider into 80px. */\n@media (max-width: 720px) {\n .row {\n grid-template-columns: minmax(0, 1fr);\n }\n .rowControl {\n justify-content: flex-start;\n }\n}\n\n/* ---------------------------------------------------------------------------\n * Accent controls\n * ------------------------------------------------------------------------- */\n.swatches {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.swatch {\n width: 22px;\n height: 22px;\n padding: 0;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-xs);\n cursor: pointer;\n transition: transform var(--duration-fast) var(--ease-standard);\n}\n\n.swatch:hover {\n transform: translateY(-1px);\n}\n\n/* Selection is carried by a ring AND the check glyph, never by color. */\n.swatch[aria-checked='true'] {\n box-shadow: 0 0 0 2px var(--bg-surface), 0 0 0 3px var(--text-primary);\n}\n\n.swatchCheck {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n mix-blend-mode: difference;\n}\n\n.sliderStack {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n width: min(320px, 100%);\n}\n\n.contrastWarning {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n margin-top: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border: 1px solid var(--status-warning-solid);\n border-radius: var(--radius-xs);\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n/* ---------------------------------------------------------------------------\n * Live preview\n * ------------------------------------------------------------------------- */\n.preview {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n padding: var(--space-4);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-surface);\n}\n\n.previewRow {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.previewHeading {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n letter-spacing: var(--tracking-display);\n font-weight: var(--font-weight-semibold);\n}\n\n.previewBody {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n.previewNumerals {\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n letter-spacing: var(--tracking-display);\n color: var(--text-primary);\n}\n\n/* ---------------------------------------------------------------------------\n * Connection / About\n * ------------------------------------------------------------------------- */\n.origin {\n width: min(320px, 100%);\n}\n\n.note {\n display: flex;\n gap: var(--space-2);\n padding: var(--space-3);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n /* --bg-canvas, not --bg-hover: in light both --bg-hover and --bg-code\n resolve to --gray-100, so the .code chip nested inside this note had no\n ground of its own and was distinguished only by its hairline — a rounded\n bordered box inside a rounded bordered box, which §1.2 forbids. */\n background: var(--bg-canvas);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.noteIcon {\n flex: none;\n margin-top: 1px;\n color: var(--text-tertiary);\n}\n\n.code {\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n padding: 1px 4px;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n background: var(--bg-code);\n color: var(--text-primary);\n white-space: nowrap;\n}\n\n/* ---------------------------------------------------------------------------\n * Keyboard reference\n * ------------------------------------------------------------------------- */\n.shortcuts {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n gap: 0 var(--space-6);\n}\n\n.shortcut {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n font-size: var(--text-sm-size);\n}\n\n.keys {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n flex: none;\n}\n\n.key {\n min-width: 20px;\n padding: 2px var(--space-1);\n border: 1px solid var(--border-default);\n border-bottom-width: 2px;\n border-radius: var(--radius-xs);\n background: var(--bg-surface);\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n text-align: center;\n}\n\n.about {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.aboutLine {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-sm-size);\n color: var(--text-secondary);\n}\n\n.aboutName {\n font-family: var(--font-display);\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n letter-spacing: var(--tracking-display);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--text-link);\n text-decoration: none;\n}\n\n.link:hover {\n text-decoration: underline;\n}\n\n/* ---- desktop shell (see desktop/README.md \"Desktop shell contract\") -----\n * In the Tauri window the OS title bar overlays the top 48px and the macOS\n * traffic lights float over the top-LEFT 92px of the WINDOW. This strip does\n * not start at the window's left edge — the 56px rail does — so the inset it\n * owes is the overlap, never the full 92px. Both vars are absent in a\n * browser, where the expression floors to 0px and the layout is unchanged. */\n.strip {\n padding-left: max(\n var(--space-5),\n calc(var(--app-traffic-light-inset, 0px) - var(--rail-width, 56px))\n );\n}\n","/**\n * routes/verse/sections/SettingRow.tsx — the Settings layout primitive:\n * label + description on the left, control on the right, hairline between.\n *\n * The label is a real <label> bound to the control's id when one is given;\n * for composite controls (a radiogroup, a swatch grid) pass `labelId` and\n * point the group's `aria-labelledby` at it instead — a <label> cannot name\n * a group, and an unnamed radiogroup is announced as \"group\".\n */\nimport type { ReactNode } from 'react';\nimport styles from './SettingsSection.module.css';\n\nexport interface PanelProps {\n title: ReactNode;\n /** Right-aligned affordance in the panel header (e.g. \"Reset\"). */\n action?: ReactNode;\n children: ReactNode;\n}\n\nexport function Panel({ title, action, children }: PanelProps) {\n return (\n <section className={styles.panel}>\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>{title}</h3>\n {action}\n </div>\n <div className={styles.panelBody}>{children}</div>\n </section>\n );\n}\n\nexport interface SettingRowProps {\n label: ReactNode;\n description?: ReactNode;\n /** id of the control this row labels (renders a real <label for>). */\n htmlFor?: string;\n /** id to put on the label text, for a control using aria-labelledby. */\n labelId?: string;\n /** Put the control under the text instead of beside it (sliders, previews). */\n stacked?: boolean;\n children: ReactNode;\n}\n\nexport function SettingRow({\n label,\n description,\n htmlFor,\n labelId,\n stacked = false,\n children,\n}: SettingRowProps) {\n const text = (\n <>\n <span className={styles.rowLabel} id={labelId}>\n {label}\n </span>\n {description ? <span className={styles.rowDescription}>{description}</span> : null}\n </>\n );\n\n return (\n <div className={`${styles.row} ${stacked ? styles.rowStacked : ''}`}>\n <div className={styles.rowText}>\n {htmlFor ? (\n <label htmlFor={htmlFor} className={styles.rowText}>\n {text}\n </label>\n ) : (\n text\n )}\n </div>\n <div className={styles.rowControl}>{children}</div>\n </div>\n );\n}\n","/**\n * routes/verse/onboarding/OnboardingPanel.tsx — the Settings row that brings\n * the first-run tour back.\n *\n * It lives here rather than in sections/ so the whole onboarding feature is\n * one folder; SettingsSection.tsx imports it the same way it imports its own\n * panels, and reuses the same Panel/SettingRow primitives so the row keeps\n * the label-left / control-right rhythm of every other setting.\n *\n * The description states what the tour actually covers, and — because this\n * is the only place the stored answer is visible — whether it has been seen.\n */\nimport { Button } from '../../../components/primitives/index.js';\nimport { Panel, SettingRow } from '../sections/SettingRow.js';\nimport { replayOnboarding } from './onboarding-store.js';\nimport { useOnboarding } from './useOnboarding.js';\n\nfunction describe(completedAt: string | null, dismissedAt: string | null): string {\n if (completedAt) return `Last completed ${new Date(completedAt).toLocaleDateString()}.`;\n if (dismissedAt) return 'Skipped. Nothing was missed — it is all reachable from the sections themselves.';\n return 'Not seen yet.';\n}\n\nexport function OnboardingPanel() {\n const { completedAt, dismissedAt, open } = useOnboarding();\n\n return (\n <Panel title=\"Onboarding\">\n <SettingRow\n label=\"Replay the first-run tour\"\n description={`Your connected seats, whether a local runtime is available, and what each of the three stop controls really halts. ${describe(completedAt, dismissedAt)}`}\n >\n <Button variant=\"subtle\" size=\"sm\" onClick={replayOnboarding} disabled={open}>\n {open ? 'Showing' : 'Replay'}\n </Button>\n </SettingRow>\n </Panel>\n );\n}\n","{\n \"name\": \"@ashlr/hub\",\n \"version\": \"3.5.1\",\n \"description\": \"Local-first command center for agentic engineers.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": \"Mason Wyatt <mason@evero-consulting.com>\",\n \"homepage\": \"https://github.com/ashlrai/ashlr-hub#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ashlrai/ashlr-hub.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ashlrai/ashlr-hub/issues\"\n },\n \"keywords\": [\n \"cli\",\n \"agentic\",\n \"mcp\",\n \"local-first\",\n \"raycast\",\n \"developer-tools\",\n \"ai\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"ashlr\": \"bin/ashlr\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"scripts/run-verify-command.mjs\",\n \"scripts/scorecard-history-worker.mjs\",\n \"scripts/evaluators/preparation-verification-activity.mjs\",\n \"scripts/evaluators/preparation-verification-activity.d.mts\",\n \"scripts/evaluators/preparation-verification-protocol.mjs\",\n \"scripts/evaluators/preparation-verification-native.mjs\",\n \"scripts/evaluators/preparation-verification-native.d.mts\",\n \"schema\",\n \"CHANGELOG.md\",\n \"docs/README.md\",\n \"docs/QUICKSTART.md\",\n \"docs/DEMO.md\",\n \"docs/ARCHITECTURE.md\",\n \"docs/MISSION-OS.md\",\n \"docs/ASHLR-UNIVERSE.md\",\n \"docs/AUTONOMY-GAP.md\",\n \"docs/FIRM-DEMO.md\",\n \"docs/UNIVERSE-RESEARCH.md\",\n \"docs/UNIVERSE-AUTONOMY-RESEARCH.md\",\n \"docs/RESOURCE-POOLS.md\",\n \"docs/NORTH-STAR.md\",\n \"docs/ELITE-AGENT-EFFICIENCY.md\",\n \"docs/RUNTIME_ACTIVATION_AUTHORITY.md\",\n \"docs/contracts/CONTRACT-M515.md\",\n \"docs/contracts/CONTRACT-M521.md\",\n \"docs/contracts/CONTRACT-M568.md\",\n \"docs/contracts/CONTRACT-MISSION-RECEIPT-V1.md\"\n ],\n \"bundledDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"marked\",\n \"tar\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/api/index.d.ts\",\n \"import\": \"./dist/api/index.js\"\n },\n \"./core\": {\n \"types\": \"./dist/api/core.d.ts\",\n \"import\": \"./dist/api/core.js\"\n },\n \"./types\": {\n \"types\": \"./dist/api/types.d.ts\",\n \"import\": \"./dist/api/types.js\"\n },\n \"./plugin\": {\n \"types\": \"./dist/api/plugin.d.ts\",\n \"import\": \"./dist/api/plugin.js\"\n },\n \"./universe\": {\n \"types\": \"./dist/core/universe/index.d.ts\",\n \"import\": \"./dist/core/universe/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=22.15.0\"\n },\n \"scripts\": {\n \"prepublishOnly\": \"npm run typecheck && npm run lint && npm run test:ci && npm run test:web\",\n \"prepack\": \"npm run build\",\n \"build\": \"tsc -p tsconfig.json && node scripts/copy-assets.mjs && node scripts/build-preparation-builtin.mjs && vite build --config vite.config.web.ts && node scripts/build-release-dependency-inventory.mjs && node scripts/build-identity.mjs\",\n \"build:preparation-builtin\": \"node scripts/build-preparation-builtin.mjs\",\n \"build:binary\": \"node scripts/build-sea.mjs\",\n \"release:canary\": \"node scripts/run-signed-release-canary.mjs\",\n \"verify:local-production\": \"node scripts/run-local-production-gate.mjs\",\n \"build:web\": \"vite build --config vite.config.web.ts\",\n \"dev\": \"tsx src/cli/index.ts\",\n \"dev:web\": \"vite --config vite.config.web.ts\",\n \"test\": \"vitest run\",\n \"test:serial\": \"vitest run --no-file-parallelism\",\n \"test:web\": \"vitest run --config vitest.config.web.ts\",\n \"test:ci\": \"node scripts/test-ci.mjs\",\n \"test:invariants\": \"vitest run test/h*.test.ts --no-file-parallelism\",\n \"test:engineering-responsiveness\": \"vitest run --config vitest.config.engineering-performance.ts\",\n \"conformance:ecosystem\": \"tsx scripts/run-ecosystem-conformance.ts\",\n \"check:docs\": \"node scripts/check-documentation.mjs\",\n \"lint\": \"eslint . && npm run lint:realio-lane\",\n \"lint:realio-lane\": \"node scripts/check-realio-lane-membership.mjs\",\n \"typecheck\": \"tsc --noEmit && npm run typecheck:web\",\n \"typecheck:web\": \"tsc --noEmit -p src/web-ui/tsconfig.json\"\n },\n \"devDependencies\": {\n \"@testing-library/jest-dom\": \"^7.0.1\",\n \"@testing-library/react\": \"^16.1.0\",\n \"@testing-library/user-event\": \"^14.5.2\",\n \"@types/node\": \"^26.2.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@vitejs/plugin-react\": \"^6.1.0\",\n \"dompurify\": \"^3.4.15\",\n \"eslint\": \"^9.0.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0\",\n \"jsdom\": \"^25.0.1\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-router-dom\": \"^7.1.1\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.5.0\",\n \"typescript-eslint\": \"^8.61.0\",\n \"vite\": \"8.2.2\",\n \"vitest\": \"4.1.11\",\n \"yaml\": \"^2.8.1\"\n },\n \"overrides\": {\n \"fast-uri\": \"3.1.6\",\n \"hono\": \"4.13.5\",\n \"ip-address\": \"10.4.0\",\n \"vite\": \"8.2.2\",\n \"js-yaml\": \"4.3.2\",\n \"nanoid\": \"3.3.18\",\n \"qs\": \"6.16.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.30.0\",\n \"marked\": \"18.0.10\",\n \"tar\": \"7.5.22\"\n },\n \"bundleDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"marked\",\n \"tar\"\n ]\n}\n","/**\n * routes/verse/sections/app-version.ts — the hub's version, for About.\n *\n * Read straight from package.json (Vite inlines the named export at build\n * time and `resolveJsonModule` types it), because no API route reports it:\n * /api/health answers liveness, /api/snapshot answers fleet state, and\n * neither carries the running hub's version. A hardcoded string here would\n * silently drift from the published package on every release.\n */\nimport { version } from '../../../../../package.json';\n\nexport const APP_VERSION: string = version;\nexport const APP_NAME = 'Ashlr Verse';\n","/**\n * routes/verse/sections/AboutPanel.tsx — what this is and which build it is.\n * The version comes from package.json at build time (./app-version.ts).\n */\nimport { IconExternalLink } from '../../../components/primitives/icons.js';\nimport { Tag } from '../../../components/primitives/index.js';\nimport { APP_NAME, APP_VERSION } from './app-version.js';\nimport { Panel } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\nexport function AboutPanel() {\n return (\n <Panel title=\"About\">\n <div className={`${styles.row} ${styles.rowStacked}`}>\n <div className={styles.about}>\n <p className={styles.aboutName}>{APP_NAME}</p>\n <p className={styles.aboutLine}>\n <Tag mono>v{APP_VERSION}</Tag>\n <span>ashlr-hub — local-first command center for agentic engineers.</span>\n </p>\n <p className={styles.aboutLine}>\n Every session, token and artifact stays on this machine. The console talks to one local server and no\n third-party service.\n </p>\n <p className={styles.aboutLine}>\n <a\n className={styles.link}\n href=\"https://github.com/ashlrai/ashlr-hub\"\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n >\n Source and changelog\n <IconExternalLink size={12} />\n </a>\n </p>\n </div>\n </div>\n </Panel>\n );\n}\n","/**\n * design/contrast.ts — WCAG 2.1 contrast math over CSS color strings.\n *\n * Two callers, one implementation:\n * - routes/verse/sections/AppearancePanel.tsx warns, live, when a\n * hand-dragged accent stops being readable as link/button text in the\n * active theme. The design language allows any hue; it does not allow an\n * unreadable one to ship silently.\n * - design/tokens-contrast.test.ts asserts the whole palette in BOTH\n * themes (design doc §6: >= 4.5:1 body text, >= 3:1 meaningful borders).\n *\n * Deliberately dependency-free and DOM-free: parse -> linearize -> ratio.\n * Supports the subset of CSS color syntax the stylesheets actually use —\n * #rgb / #rrggbb / #rrggbbaa, rgb()/rgba(), hsl()/hsla(), both the legacy\n * comma form and the modern space form, plus `color-mix(in srgb, ...)`.\n * Anything else returns null rather than guessing a color.\n *\n * `color-mix` is in that list because the meaning-carrying marks that the\n * contrast suite has to guard are not all plain tokens: the chart gridline,\n * the empty half of a window meter and the diff row tints are all declared as\n * a mix in a CSS module. Without this the suite could only assert the token a\n * mix is DERIVED from, which is precisely the gap that let a 45%-alpha\n * gridline ship under a comment claiming it cleared 3:1.\n */\n\nexport interface Rgba {\n /** 0-255 */\n r: number;\n /** 0-255 */\n g: number;\n /** 0-255 */\n b: number;\n /** 0-1 */\n a: number;\n}\n\nconst HEX_RE = /^#([0-9a-f]{3,8})$/i;\nconst FN_RE = /^(rgba?|hsla?)\\(([^)]*)\\)$/i;\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\n/** \"50%\" -> 0.5, \"0.5\" -> 0.5, \"128\" (of 255) handled by the caller. */\nfunction unitValue(raw: string, scale: number): number {\n const text = raw.trim();\n if (text.endsWith('%')) return (Number.parseFloat(text) / 100) * scale;\n return Number.parseFloat(text);\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n const hue = ((h % 360) + 360) % 360;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n if (hue < 60) rgb = [c, x, 0];\n else if (hue < 120) rgb = [x, c, 0];\n else if (hue < 180) rgb = [0, c, x];\n else if (hue < 240) rgb = [0, x, c];\n else if (hue < 300) rgb = [x, 0, c];\n else rgb = [c, 0, x];\n return {\n r: Math.round((rgb[0] + m) * 255),\n g: Math.round((rgb[1] + m) * 255),\n b: Math.round((rgb[2] + m) * 255),\n };\n}\n\n/**\n * Split a function's argument list on top-level commas, so a nested\n * `rgb(...)`/`color-mix(...)` argument survives intact.\n */\nfunction splitTopLevel(text: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let current = '';\n for (const ch of text) {\n if (ch === '(') depth += 1;\n else if (ch === ')') depth -= 1;\n if (ch === ',' && depth === 0) {\n parts.push(current);\n current = '';\n continue;\n }\n current += ch;\n }\n parts.push(current);\n return parts.map((p) => p.trim()).filter((p) => p.length > 0);\n}\n\n/** `#abc 40%` -> ['#abc', 40]; a missing percentage comes back as null. */\nfunction colorWithPercent(raw: string): { color: string; pct: number | null } | null {\n const text = raw.trim();\n const m = /\\s(\\d*\\.?\\d+)%$/.exec(text);\n if (m) return { color: text.slice(0, m.index).trim(), pct: Number.parseFloat(m[1]!) };\n const lead = /^(\\d*\\.?\\d+)%\\s/.exec(text);\n if (lead) return { color: text.slice(lead[0].length).trim(), pct: Number.parseFloat(lead[1]!) };\n return { color: text, pct: null };\n}\n\n/**\n * `color-mix(in srgb, <color> [p%], <color> [p%])`, per CSS Color 5: the two\n * percentages are normalized to sum to 100, the result's alpha is their\n * alpha-weighted sum, and the channels are mixed PREMULTIPLIED — which is why\n * mixing against `transparent` yields the first color at that alpha rather\n * than a color darkened toward black.\n *\n * Only the `srgb` color space is accepted. Every other space would need its\n * own transfer function, and silently treating `oklab` as srgb would report a\n * contrast ratio the browser does not agree with.\n */\nfunction parseColorMix(text: string): Rgba | null {\n const body = /^color-mix\\((.*)\\)$/is.exec(text.trim());\n if (!body) return null;\n const args = splitTopLevel(body[1]!);\n if (args.length !== 3) return null;\n if (args[0]!.replace(/\\s+/g, ' ').trim() !== 'in srgb') return null;\n\n const first = colorWithPercent(args[1]!);\n const second = colorWithPercent(args[2]!);\n if (!first || !second) return null;\n const c1 = parseColor(first.color);\n const c2 = parseColor(second.color);\n if (!c1 || !c2) return null;\n\n let p1 = first.pct;\n let p2 = second.pct;\n if (p1 === null && p2 === null) {\n p1 = 50;\n p2 = 50;\n } else if (p1 === null) p1 = 100 - p2!;\n else if (p2 === null) p2 = 100 - p1;\n const total = p1 + p2!;\n if (total <= 0) return null;\n const w1 = p1 / total;\n const w2 = p2! / total;\n\n const alpha = c1.a * w1 + c2.a * w2;\n if (alpha <= 0) return { r: 0, g: 0, b: 0, a: 0 };\n const channel = (k: 'r' | 'g' | 'b'): number =>\n clamp(Math.round((c1[k] * c1.a * w1 + c2[k] * c2.a * w2) / alpha), 0, 255);\n return { r: channel('r'), g: channel('g'), b: channel('b'), a: clamp(alpha, 0, 1) };\n}\n\n/** Parse a CSS color string. Returns null for anything unrecognized. */\nexport function parseColor(input: string): Rgba | null {\n const text = input.trim().toLowerCase();\n if (text === 'transparent') return { r: 0, g: 0, b: 0, a: 0 };\n if (text.startsWith('color-mix(')) return parseColorMix(text);\n\n const hex = HEX_RE.exec(text);\n if (hex) {\n const body = hex[1]!;\n const expand = (s: string) => Number.parseInt(s.length === 1 ? s + s : s, 16);\n if (body.length === 3 || body.length === 4) {\n return {\n r: expand(body[0]!),\n g: expand(body[1]!),\n b: expand(body[2]!),\n a: body.length === 4 ? expand(body[3]!) / 255 : 1,\n };\n }\n if (body.length === 6 || body.length === 8) {\n return {\n r: expand(body.slice(0, 2)),\n g: expand(body.slice(2, 4)),\n b: expand(body.slice(4, 6)),\n a: body.length === 8 ? expand(body.slice(6, 8)) / 255 : 1,\n };\n }\n return null;\n }\n\n const fn = FN_RE.exec(text);\n if (!fn) return null;\n const name = fn[1]!;\n // Both syntaxes: `a, b, c, d` and `a b c / d`.\n const parts = fn[2]!\n .replace(/\\//g, ' ')\n .split(/[\\s,]+/)\n .filter(Boolean);\n if (parts.length < 3) return null;\n const alpha = parts.length >= 4 ? clamp(unitValue(parts[3]!, 1), 0, 1) : 1;\n\n if (name.startsWith('rgb')) {\n return {\n r: clamp(Math.round(unitValue(parts[0]!, 255)), 0, 255),\n g: clamp(Math.round(unitValue(parts[1]!, 255)), 0, 255),\n b: clamp(Math.round(unitValue(parts[2]!, 255)), 0, 255),\n a: alpha,\n };\n }\n\n const hue = Number.parseFloat(parts[0]!);\n const sat = clamp(unitValue(parts[1]!, 1), 0, 1);\n const light = clamp(unitValue(parts[2]!, 1), 0, 1);\n if (!Number.isFinite(hue)) return null;\n return { ...hslToRgb(hue, sat, light), a: alpha };\n}\n\n/** Composite a (possibly translucent) color over an opaque backdrop. */\nexport function flatten(color: Rgba, backdrop: Rgba): Rgba {\n if (color.a >= 1) return color;\n const a = color.a;\n return {\n r: Math.round(color.r * a + backdrop.r * (1 - a)),\n g: Math.round(color.g * a + backdrop.g * (1 - a)),\n b: Math.round(color.b * a + backdrop.b * (1 - a)),\n a: 1,\n };\n}\n\n/** WCAG relative luminance of an opaque color. */\nexport function relativeLuminance(color: Rgba): number {\n const channel = (v: number): number => {\n const s = v / 255;\n return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * channel(color.r) + 0.7152 * channel(color.g) + 0.0722 * channel(color.b);\n}\n\n/**\n * WCAG contrast ratio (1-21) between two CSS colors. A translucent color is\n * composited over `backdrop` first (default white) — asking for the contrast\n * of a 14%-alpha status background is otherwise meaningless.\n * Returns null when either color cannot be parsed, so a caller can say\n * \"unknown\" instead of asserting on a guess.\n */\nexport function contrastRatio(foreground: string, background: string, backdrop = '#ffffff'): number | null {\n const bgRaw = parseColor(background);\n const fgRaw = parseColor(foreground);\n const base = parseColor(backdrop);\n if (!bgRaw || !fgRaw || !base) return null;\n const bg = flatten(bgRaw, base);\n const fg = flatten(fgRaw, bg);\n const l1 = relativeLuminance(fg);\n const l2 = relativeLuminance(bg);\n const [hi, lo] = l1 >= l2 ? [l1, l2] : [l2, l1];\n return (hi + 0.05) / (lo + 0.05);\n}\n\n/** Convenience for the appearance panel: does this pair clear body-text contrast? */\nexport function meetsTextContrast(foreground: string, background: string, backdrop?: string): boolean {\n const ratio = contrastRatio(foreground, background, backdrop);\n return ratio !== null && ratio >= 4.5;\n}\n\n/**\n * The accent, resolved to a hex the same way tokens.css derives its ramp\n * (hsl channels + a per-step lightness offset). Used by the appearance panel\n * to preview and contrast-check a hue the operator is dragging, without\n * reading computed styles mid-drag.\n */\nexport function accentHex(h: number, s: number, l: number, lightnessOffset = 0): string {\n const rgb = hslToRgb(h, clamp(s, 0, 100) / 100, clamp(l + lightnessOffset, 0, 100) / 100);\n const hex = (n: number) => n.toString(16).padStart(2, '0');\n return `#${hex(rgb.r)}${hex(rgb.g)}${hex(rgb.b)}`;\n}\n","/**\n * routes/verse/sections/AppearancePanel.tsx — the \"Linux\" part of the design\n * language: theme, accent, density, display face, radius, motion.\n *\n * Every control applies IMMEDIATELY (design doc §3: live preview, no save\n * button) because the whole app is the preview — the panel writes through\n * data/appearance-store.ts, which writes the tokens on <html>. The preview\n * block at the end exists to show type, numerals, a filled action and a\n * meter in one place, so the effect of a change is visible without leaving\n * Settings.\n *\n * The hue slider is free-range, so the panel checks the resulting link color\n * against BOTH themes with design/contrast.ts and warns when a choice drops\n * under 4.5:1 — the operator keeps the hue they asked for, but is never\n * allowed to make it unreadable without being told.\n */\nimport { useId } from 'react';\nimport { Button, Input, Meter, Segmented, Slider, StatusBadge, Switch, Tag } from '../../../components/primitives/index.js';\nimport { IconAlert, IconCheck, IconMonitor, IconMoon, IconSun } from '../../../components/primitives/icons.js';\nimport { accentHex, contrastRatio } from '../../../design/contrast.js';\nimport {\n ACCENT_LIGHTNESS_RANGE,\n ACCENT_PRESETS,\n isDefaultAppearance,\n matchingAccentPreset,\n type Appearance,\n type Density,\n type DisplayFont,\n type RadiusScale,\n type ThemePreference,\n} from '../../../data/appearance-store.js';\nimport { Panel, SettingRow } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\n/**\n * The literal `--bg-surface` of each theme (design/tokens.css). Used only to\n * score a candidate accent; design/tokens-contrast.test.ts asserts these two\n * constants still match the stylesheet, so a future retune cannot leave the\n * warning scoring against a color the app no longer paints.\n */\nexport const LIGHT_SURFACE = '#ffffff';\nexport const DARK_SURFACE = '#121214';\n/** Dark raises accent lightness by --accent-l-shift; --accent-600 sits 8% below/above it. */\nconst DARK_L_SHIFT = 6;\nconst LINK_STEP = 8;\n\nconst THEME_OPTIONS = [\n { value: 'system' as ThemePreference, label: 'System', icon: <IconMonitor /> },\n { value: 'light' as ThemePreference, label: 'Light', icon: <IconSun /> },\n { value: 'dark' as ThemePreference, label: 'Dark', icon: <IconMoon /> },\n];\n\nconst DENSITY_OPTIONS = [\n { value: 'comfortable' as Density, label: 'Comfortable' },\n { value: 'compact' as Density, label: 'Compact' },\n];\n\nconst FONT_OPTIONS = [\n { value: 'grotesk' as DisplayFont, label: 'Space Grotesk' },\n { value: 'ui' as DisplayFont, label: 'UI sans' },\n { value: 'mono' as DisplayFont, label: 'Mono' },\n];\n\nconst RADIUS_OPTIONS = [\n { value: 'sharp' as RadiusScale, label: 'Sharp' },\n { value: 'default' as RadiusScale, label: 'Default' },\n { value: 'soft' as RadiusScale, label: 'Soft' },\n];\n\n/** A 360° sweep at the current saturation/lightness, so the track shows the choice. */\nfunction hueTrack(s: number, l: number): string {\n const stops = [0, 60, 120, 180, 240, 300, 360].map((h) => `${accentHex(h, s, l)} ${(h / 360) * 100}%`);\n return `linear-gradient(to right, ${stops.join(', ')})`;\n}\n\nexport interface AccentReadability {\n lightRatio: number | null;\n darkRatio: number | null;\n /** Themes in which the derived link color drops below 4.5:1. */\n failing: Array<'light' | 'dark'>;\n}\n\n/** Exported for the section's test: the same math the warning renders from. */\nexport function accentReadability(h: number, s: number, l: number): AccentReadability {\n const lightLink = accentHex(h, s, l, -LINK_STEP);\n const darkLink = accentHex(h, s, l, DARK_L_SHIFT + LINK_STEP);\n const lightRatio = contrastRatio(lightLink, LIGHT_SURFACE);\n const darkRatio = contrastRatio(darkLink, DARK_SURFACE);\n const failing: Array<'light' | 'dark'> = [];\n if (lightRatio !== null && lightRatio < 4.5) failing.push('light');\n if (darkRatio !== null && darkRatio < 4.5) failing.push('dark');\n return { lightRatio, darkRatio, failing };\n}\n\nexport interface AppearancePanelProps {\n appearance: Appearance;\n onChange: (patch: Partial<Appearance>) => void;\n onReset: () => void;\n}\n\nexport function AppearancePanel({ appearance, onChange, onReset }: AppearancePanelProps) {\n const accentLabelId = useId();\n const hueId = useId();\n const satId = useId();\n const lightId = useId();\n const motionId = useId();\n\n const preset = matchingAccentPreset(appearance);\n const readability = accentReadability(appearance.accentH, appearance.accentS, appearance.accentL);\n\n return (\n <Panel\n title=\"Appearance\"\n action={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onReset}\n disabled={isDefaultAppearance(appearance)}\n title=\"Restore the shipped theme, accent, density, font, radius and motion\"\n >\n Reset to defaults\n </Button>\n }\n >\n <SettingRow label=\"Theme\" description=\"System follows your OS appearance setting.\">\n <Segmented\n aria-label=\"Theme\"\n options={THEME_OPTIONS}\n value={appearance.theme}\n onChange={(theme) => onChange({ theme })}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Accent\"\n labelId={accentLabelId}\n description={\n preset\n ? `${preset.label} — used for links, focus rings and the one primary action per surface.`\n : 'Custom hue — used for links, focus rings and the one primary action per surface.'\n }\n >\n <div className={styles.swatches} role=\"radiogroup\" aria-labelledby={accentLabelId}>\n {ACCENT_PRESETS.map((p) => {\n const selected = preset?.id === p.id;\n return (\n <button\n key={p.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n aria-label={p.label}\n tabIndex={selected || (!preset && p.id === ACCENT_PRESETS[0]!.id) ? 0 : -1}\n className={styles.swatch}\n style={{ background: accentHex(p.h, p.s, p.l) }}\n onClick={() => onChange({ accentH: p.h, accentS: p.s, accentL: p.l })}\n >\n {selected ? (\n <span className={styles.swatchCheck}>\n <IconCheck size={12} />\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n </SettingRow>\n\n <SettingRow\n label=\"Accent channels\"\n description=\"Hue, saturation and lightness are written straight onto the root element — the whole app follows as you drag.\"\n stacked\n >\n <div className={styles.sliderStack}>\n <Slider\n id={hueId}\n label=\"Hue\"\n min={0}\n max={359}\n value={appearance.accentH}\n valueLabel={`${appearance.accentH}°`}\n valueText={`${appearance.accentH} degrees`}\n trackImage={hueTrack(appearance.accentS, appearance.accentL)}\n onChange={(e) => onChange({ accentH: Number(e.currentTarget.value) })}\n />\n <Slider\n id={satId}\n label=\"Saturation\"\n min={0}\n max={100}\n value={appearance.accentS}\n valueLabel={`${appearance.accentS}%`}\n valueText={`${appearance.accentS} percent`}\n onChange={(e) => onChange({ accentS: Number(e.currentTarget.value) })}\n />\n <Slider\n id={lightId}\n label=\"Lightness\"\n min={ACCENT_LIGHTNESS_RANGE.min}\n max={ACCENT_LIGHTNESS_RANGE.max}\n value={appearance.accentL}\n valueLabel={`${appearance.accentL}%`}\n valueText={`${appearance.accentL} percent`}\n onChange={(e) => onChange({ accentL: Number(e.currentTarget.value) })}\n />\n {readability.failing.length > 0 ? (\n <p className={styles.contrastWarning} role=\"status\">\n <IconAlert size={14} />\n <span>\n This accent falls below 4.5:1 as link text in{' '}\n {readability.failing.length === 2 ? 'both themes' : `${readability.failing[0]} mode`}. Raise or lower\n the lightness to keep it readable.\n </span>\n </p>\n ) : null}\n </div>\n </SettingRow>\n\n <SettingRow label=\"Density\" description=\"Row height and control padding across every view.\">\n <Segmented\n aria-label=\"Density\"\n options={DENSITY_OPTIONS}\n value={appearance.density}\n onChange={(density) => onChange({ density })}\n />\n </SettingRow>\n\n <SettingRow label=\"Display font\" description=\"Titles, seat names, metrics and numerals. Body copy stays in the UI sans.\">\n <Segmented\n aria-label=\"Display font\"\n options={FONT_OPTIONS}\n value={appearance.displayFont}\n onChange={(displayFont) => onChange({ displayFont })}\n />\n </SettingRow>\n\n <SettingRow label=\"Corner radius\" description=\"Sharp reads like a terminal; soft reads like a consumer app.\">\n <Segmented\n aria-label=\"Corner radius\"\n options={RADIUS_OPTIONS}\n value={appearance.radius}\n onChange={(radius) => onChange({ radius })}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Reduce motion\"\n htmlFor={motionId}\n description=\"Collapses every transition to 1ms. Defaults to your system preference; turning it off here overrides that.\"\n >\n <Switch\n id={motionId}\n checked={appearance.reduceMotion}\n onChange={(reduceMotion) => onChange({ reduceMotion })}\n aria-label=\"Reduce motion\"\n />\n </SettingRow>\n\n <SettingRow label=\"Preview\" description=\"Live — these are the real primitives, not a picture of them.\" stacked>\n <div className={styles.preview}>\n <p className={styles.previewHeading}>Ashlr Verse</p>\n <p className={styles.previewBody}>\n Body copy stays in the UI sans at the reading measure; numerals like{' '}\n <span className={styles.previewNumerals}>18,420 / 66,000</span> use the display face.\n </p>\n <div className={styles.previewRow}>\n <Button variant=\"primary\" size=\"sm\">\n Primary\n </Button>\n <Button variant=\"subtle\" size=\"sm\">\n Subtle\n </Button>\n <Button variant=\"ghost\" size=\"sm\">\n Ghost\n </Button>\n <Button variant=\"danger\" size=\"sm\">\n Destructive\n </Button>\n </div>\n <div className={styles.previewRow}>\n <StatusBadge status=\"running\" />\n <Tag engine=\"claude\">Claude Max</Tag>\n <Tag engine=\"local\" mono>\n qwen3-coder\n </Tag>\n </div>\n <Meter value={18_420} max={66_000} label=\"Context\" />\n <Input aria-label=\"Preview field\" placeholder=\"A field at the current density\" size=\"sm\" />\n </div>\n </SettingRow>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/ConnectionPanel.tsx — which server this window is\n * talking to, what authority it currently holds, and how to get the tokens\n * back if it loses them.\n *\n * SECURITY: this panel never renders, copies or logs a token. It shows the\n * STATE of the two authorities (read session, mutation hold) and tells the\n * operator where the real values are printed — the terminal that started the\n * server. The mutation token is memory-only by design (data/auth-store.ts);\n * showing it here would put it on screen, in a screenshot, and in any\n * screen-recording of a demo.\n */\nimport { useRef, useState } from 'react';\nimport { Button, Dialog, Input, StatusBadge } from '../../../components/primitives/index.js';\nimport { IconCopy, IconInfo, IconLock } from '../../../components/primitives/icons.js';\nimport { clearMutationToken, clearReadSession } from '../../../data/auth-store.js';\nimport { useAuthPhase, useMutationHold } from '../../../data/hooks.js';\nimport { useToast } from '../../../components/primitives/Toast.js';\nimport { Panel, SettingRow } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\nfunction formatHoldExpiry(heldUntil: number | null): string {\n if (heldUntil === null) return 'locked';\n const minutes = Math.max(0, Math.round((heldUntil - Date.now()) / 60_000));\n if (minutes <= 0) return 'expiring now';\n return `unlocked for ${minutes} more minute${minutes === 1 ? '' : 's'}`;\n}\n\nexport function ConnectionPanel() {\n const phase = useAuthPhase();\n const hold = useMutationHold();\n const toast = useToast();\n const [confirmOpen, setConfirmOpen] = useState(false);\n const cancelRef = useRef<HTMLButtonElement>(null);\n\n const origin = typeof window === 'undefined' ? '' : window.location.origin;\n\n async function copyOrigin(): Promise<void> {\n try {\n await navigator.clipboard.writeText(origin);\n toast.show('Server address copied.');\n } catch {\n toast.show('Could not reach the clipboard — select the field and copy manually.', 'danger');\n }\n }\n\n async function disconnect(): Promise<void> {\n setConfirmOpen(false);\n await clearReadSession();\n toast.show('Disconnected. Paste the read token to reconnect.');\n }\n\n return (\n <Panel title=\"Connection\">\n <SettingRow label=\"Server\" description=\"This window talks to one local hub. Nothing leaves your machine.\">\n <div className={styles.origin}>\n <Input value={origin} readOnly mono size=\"sm\" aria-label=\"Server address\" />\n </div>\n <Button variant=\"ghost\" size=\"sm\" icon={<IconCopy />} onClick={() => void copyOrigin()}>\n Copy\n </Button>\n </SettingRow>\n\n <SettingRow label=\"Read session\" description=\"A 15-minute signed cookie, renewed silently while this tab stays open.\">\n <StatusBadge\n status={phase === 'authenticated' ? 'connected' : phase === 'checking' ? 'checking' : 'disconnected'}\n tone={phase === 'authenticated' ? 'success' : phase === 'checking' ? 'running' : 'danger'}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Mutation hold\"\n description=\"Every action that changes something needs the mutation token. It is held in memory only, never stored, and clears when this tab closes.\"\n >\n <StatusBadge\n status={hold.hasHold ? formatHoldExpiry(hold.heldUntil) : 'locked'}\n tone={hold.hasHold ? 'success' : 'neutral'}\n />\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<IconLock />}\n onClick={() => {\n clearMutationToken();\n toast.show('Mutation hold cleared.');\n }}\n disabled={!hold.hasHold}\n >\n Lock now\n </Button>\n </SettingRow>\n\n <SettingRow\n label=\"Disconnect\"\n description=\"Ends the read session in this browser and clears the mutation hold. Chats on the server are untouched.\"\n >\n <Button variant=\"danger\" size=\"sm\" onClick={() => setConfirmOpen(true)}>\n Disconnect\n </Button>\n </SettingRow>\n\n <div className={styles.row}>\n <p className={styles.note}>\n <span className={styles.noteIcon}>\n <IconInfo size={14} />\n </span>\n <span>\n <strong>Where the tokens come from.</strong> Start the console with{' '}\n <code className={styles.code}>ashlr verse</code> — it prints a read token and a mutation token in that\n terminal, and opens this page. The desktop app injects both for you. Tokens are never displayed here, and\n the hub never writes them into a page, a log line or an API response. Lost them? Stop the server and start\n it again; it mints a fresh pair.\n </span>\n </p>\n </div>\n\n <Dialog\n open={confirmOpen}\n onClose={() => setConfirmOpen(false)}\n titleId=\"verse-settings-disconnect\"\n title=\"Disconnect from this server?\"\n description=\"You will need the read token again to get back in. Running sessions keep running on the server.\"\n initialFocusRef={cancelRef}\n >\n <div className={styles.previewRow} style={{ justifyContent: 'flex-end' }}>\n <Button ref={cancelRef} variant=\"subtle\" onClick={() => setConfirmOpen(false)}>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={() => void disconnect()}>\n Disconnect\n </Button>\n </div>\n </Dialog>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/ShortcutsPanel.tsx — the keyboard reference.\n *\n * It documents the bindings the V2 shell contract fixes (⌘1-⌘5, ⌘K, ⌘N, ⌘,)\n * plus the composer's own keys. It is a REFERENCE, not the implementation:\n * the handlers live with the shell (owner C) and the composer. Keeping the\n * list here means an operator can find a binding without a manual; keeping\n * it declarative means it is one array to update when a binding changes.\n */\nimport { Panel } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\n/** ⌘ on Apple platforms, Ctrl everywhere else. */\nexport function isApplePlatform(): boolean {\n if (typeof navigator === 'undefined') return true;\n const source = `${navigator.platform ?? ''} ${navigator.userAgent ?? ''}`;\n return /mac|iphone|ipad|ipod/i.test(source);\n}\n\ninterface Shortcut {\n keys: string[];\n action: string;\n}\n\nexport function shortcutGroups(mod: string): Array<{ title: string; items: Shortcut[] }> {\n return [\n {\n title: 'Navigation',\n items: [\n { keys: [mod, '1'], action: 'Chat' },\n { keys: [mod, '2'], action: 'Autonomy' },\n { keys: [mod, '3'], action: 'Approvals' },\n { keys: [mod, '4'], action: 'Usage' },\n { keys: [mod, '5'], action: 'Settings' },\n { keys: [mod, 'K'], action: 'Quick switcher' },\n { keys: [mod, ','], action: 'Settings' },\n ],\n },\n {\n title: 'Chat',\n items: [\n { keys: [mod, 'N'], action: 'New chat' },\n { keys: ['Enter'], action: 'Send message' },\n { keys: ['Shift', 'Enter'], action: 'New line' },\n { keys: ['Esc'], action: 'Stop dictation / close overlay' },\n ],\n },\n ];\n}\n\nexport function ShortcutsPanel() {\n const mod = isApplePlatform() ? '⌘' : 'Ctrl';\n return (\n <Panel title=\"Keyboard\">\n <div className={styles.shortcuts}>\n {shortcutGroups(mod).flatMap((group) =>\n group.items.map((item) => (\n <div key={`${group.title}-${item.action}-${item.keys.join('+')}`} className={styles.shortcut}>\n <span>{item.action}</span>\n <span className={styles.keys}>\n {item.keys.map((key) => (\n <kbd key={key} className={styles.key}>\n {key}\n </kbd>\n ))}\n </span>\n </div>\n )),\n )}\n </div>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/SettingsSection.tsx — the Settings rail item\n * (VERSE-CONTRACT-V2, owner A). Named export, NO props: the shell\n * lazy-mounts it and it reads everything it needs from the stores.\n *\n * Four panels in one 720px reading column: Appearance (live, no save\n * button), Connection (server, authority state, how to get tokens back),\n * Keyboard, and About. Each row is label + description on the left, control\n * on the right — the same rhythm all the way down, so the page reads as one\n * object rather than four inventions.\n */\nimport { useAppearance } from '../../../data/hooks.js';\nimport { OnboardingPanel } from '../onboarding/OnboardingPanel.js';\nimport { AboutPanel } from './AboutPanel.js';\nimport { AppearancePanel } from './AppearancePanel.js';\nimport { ConnectionPanel } from './ConnectionPanel.js';\nimport { ShortcutsPanel } from './ShortcutsPanel.js';\nimport styles from './SettingsSection.module.css';\n\nexport function SettingsSection() {\n const { appearance, set, reset } = useAppearance();\n\n return (\n <div className={styles.section}>\n <header className={styles.strip} data-app-region=\"drag\">\n <h2 className={styles.stripTitle}>Settings</h2>\n </header>\n <div className={styles.scroll}>\n <div className={styles.column}>\n <AppearancePanel appearance={appearance} onChange={set} onReset={reset} />\n <ConnectionPanel />\n <ShortcutsPanel />\n <OnboardingPanel />\n <AboutPanel />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ApprovalsSection-BW9iVjUa.js","assets/index-BMRIET7F.js","assets/global-C4jfYHrj.js","assets/global-D463gG1X.css","assets/RouteErrorBoundary-Dw8ZjmkS.js","assets/RouteErrorBoundary-ekyMXAK8.css","assets/queries-AxnVa02h.js","assets/ConfirmDialog-CXevY3Au.js","assets/Dialog-Bn0CgEGz.js","assets/Dialog-tQ8kFulD.css","assets/ConfirmDialog-Dx15x0Ho.css","assets/MutationTokenDialog-DbSHPy3w.js","assets/MutationTokenDialog-CrfJ0PdD.css","assets/DiffViewer-QKyisN2L.js","assets/DiffViewer-C8HHTnVE.css","assets/format-BNYWGJat.js","assets/use-guarded-action-BO6c94Wp.js","assets/ApprovalsSection-Su-NUTis.css","assets/AutonomySection-CRqHUhED.js","assets/fleet-model-ClBbQ0Uj.js","assets/workspace-model-cE4LkKpE.js","assets/verse-model-CvtK6vP6.js","assets/AutonomySection-Cpk_oEhc.css","assets/ChatSection-5irrh6Jw.js","assets/ChatSection-LQiAn6Eu.css","assets/SettingsSection-CWxtTNlD.js","assets/icons-BxOX8-XB.js","assets/SettingsSection-BII7TTSD.css","assets/UsageSection-B2E06ZH1.js","assets/charts-DSUpczxG.js","assets/charts-CsrtT4rk.css","assets/UsageSection-DwgNOYvi.css"])))=>i.map(i=>d[i]);
2
- import{a as e,i as t,n,o as r,t as i}from"./index-BMRIET7F.js";import{D as a,I as o,K as s,P as c,U as l,W as u,g as d,j as f,l as p,n as ee,s as m,t as te,u as ne,v as re,x as ie}from"./global-C4jfYHrj.js";import"./Dialog-Bn0CgEGz.js";import{n as ae,t as oe}from"./RouteErrorBoundary-Dw8ZjmkS.js";import{u as se}from"./queries-AxnVa02h.js";import{_ as ce,a as le,b as ue,c as de,d as fe,f as pe,g as me,i as he,n as ge,o as _e,t as ve,u as ye,v as be,x as xe}from"./icons-BxOX8-XB.js";var h=r(e(),1),Se=`ashlr:desktop-command`,Ce=[`open-settings`,`toggle-theme`];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 Te(){return window.__ASHLR_DESKTOP__}function Ee(e){try{Te()?.reportTheme?.(we(e))}catch{}}function De(e){return typeof e==`string`&&Ce.includes(e)}function Oe(e){function t(t){let n=t.detail?.command;De(n)&&e(n)}return window.addEventListener(Se,t),()=>window.removeEventListener(Se,t)}var g=n(),ke=ge,Ae=de,je=fe,Me=ye,Ne=be,Pe=ce,Fe=me,Ie=ue,Le=le,Re=_e;function ze({size:e=16,children:t,...n}){return(0,g.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 Be(e){return(0,g.jsxs)(ze,{...e,children:[(0,g.jsx)(`rect`,{x:`2.5`,y:`3`,width:`11`,height:`10`,rx:`1.5`}),(0,g.jsx)(`path`,{d:`M10 3v10`})]})}function Ve(e){return(0,g.jsxs)(ze,{...e,children:[(0,g.jsx)(`rect`,{x:`2.5`,y:`3`,width:`11`,height:`10`,rx:`1.5`}),(0,g.jsx)(`path`,{d:`M6 3v10`})]})}function He(e){let{size:t=20,...n}=e;return(0,g.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,g.jsx)(`path`,{d:`m5 11 11-6 11 6-11 6Z M5 16l11 6 11-6 M5 21l11 6 11-6`})})}var Ue={chat:ke,autonomy:Ae,approvals:je,usage:Me,settings:Ne},_={button:`_button_12qr7_1`,glyph:`_glyph_12qr7_30`,sm:`_sm_12qr7_37`,block:`_block_12qr7_43`,iconOnly:`_iconOnly_12qr7_48`,ghost:`_ghost_12qr7_60`,subtle:`_subtle_12qr7_71`,primary:`_primary_12qr7_84`,danger:`_danger_12qr7_99`};function v({variant:e=`subtle`,size:t=`md`,icon:n,trailingIcon:r,block:i=!1,busy:a=!1,iconOnly:o=!1,className:s,children:c,disabled:l,type:u=`button`,...d}){let f=[_.button,_[e],_[t],o?_.iconOnly:``,i?_.block:``,s??``].filter(Boolean).join(` `);return(0,g.jsxs)(`button`,{type:u,className:f,disabled:l||a,"aria-busy":a||void 0,...d,children:[n?(0,g.jsx)(`span`,{className:_.glyph,children:n}):null,o?null:c,r?(0,g.jsx)(`span`,{className:_.glyph,children:r}):null]})}var y={field:`_field_ki2n9_1`,label:`_label_ki2n9_8`,shell:`_shell_ki2n9_15`,sm:`_sm_ki2n9_29`,input:`_input_ki2n9_33`,invalid:`_invalid_ki2n9_50`,mono:`_mono_ki2n9_80`,prefix:`_prefix_ki2n9_85`,hint:`_hint_ki2n9_91`,error:`_error_ki2n9_97`};function We({label:e,hint:t,error:n,size:r=`md`,mono:i=!1,prefix:a,className:o,id:s,...c}){let l=(0,h.useId)(),u=s??l,d=`${u}-hint`,f=`${u}-error`,p=[c[`aria-describedby`],t?d:null,n?f:null].filter(Boolean).join(` `);return(0,g.jsxs)(`div`,{className:`${y.field} ${o??``}`,children:[e?(0,g.jsx)(`label`,{className:y.label,htmlFor:u,children:e}):null,(0,g.jsxs)(`div`,{className:`${y.shell} ${y[r]} ${n?y.invalid:``}`,children:[a?(0,g.jsx)(`span`,{className:y.prefix,children:a}):null,(0,g.jsx)(`input`,{...c,id:u,className:`${y.input} ${i?y.mono:``}`,"aria-invalid":n?!0:c[`aria-invalid`],"aria-describedby":p||void 0})]}),t?(0,g.jsx)(`p`,{id:d,className:y.hint,children:t}):null,n?(0,g.jsx)(`p`,{id:f,className:y.error,role:`alert`,children:n}):null]})}var b={wrap:`_wrap_ti026_1`,lineWrap:`_lineWrap_ti026_8`,head:`_head_ti026_12`,label:`_label_ti026_19`,value:`_value_ti026_28`,unknown:`_unknown_ti026_37`,track:`_track_ti026_43`,bar:`_bar_ti026_49`,line:`_line_ti026_8`,fill:`_fill_ti026_61`,accent:`_accent_ti026_66`,neutral:`_neutral_ti026_69`,running:`_running_ti026_72`,warning:`_warning_ti026_75`,danger:`_danger_ti026_78`,engine:`_engine_ti026_81`};function Ge(e){return e>=1e6?`${(e/1e6).toFixed(e>=1e7?0:1)}m`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(Math.round(e))}function Ke(e){return e>=90?`danger`:e>=70?`warning`:`accent`}function qe({value:e,max:t,variant:n=`labelled`,label:r,valueText:i,tone:a,engineColor:o,className:s,...c}){let l=e!==null&&Number.isFinite(e)&&t!==null&&Number.isFinite(t)&&t>0,u=l?Math.min(100,Math.max(0,e/t*100)):0,d=a??(l?Ke(u):`neutral`),f=l?i??`${Ge(e)} / ${Ge(t)}`:i??`unknown`,p=(0,g.jsx)(`div`,{className:`${b.track} ${n===`line`?b.line:b.bar}`,role:`meter`,"aria-valuenow":l?Math.round(u):void 0,"aria-valuemin":0,"aria-valuemax":100,"aria-valuetext":l?`${Math.round(u)}%`:`unknown`,...c,children:(0,g.jsx)(`div`,{className:`${b.fill} ${b[d]}`,style:{width:`${u}%`,...d===`engine`&&o?{background:o}:{}}})});return n===`line`?(0,g.jsx)(`div`,{className:`${b.lineWrap} ${s??``}`,children:p}):(0,g.jsxs)(`div`,{className:`${b.wrap} ${s??``}`,children:[r||f?(0,g.jsxs)(`div`,{className:b.head,children:[r?(0,g.jsx)(`span`,{className:b.label,children:r}):(0,g.jsx)(`span`,{}),(0,g.jsx)(`span`,{className:`${b.value} ${l?``:b.unknown}`,children:f})]}):null,p]})}var x={group:`_group_15ia8_1`,block:`_block_15ia8_11`,option:`_option_15ia8_16`,sm:`_sm_15ia8_45`,glyph:`_glyph_15ia8_72`};function Je({options:e,value:t,onChange:n,size:r=`md`,block:i=!1,className:a,...o}){let s=(0,h.useRef)(null);function c(r){let i=e.filter(e=>!e.disabled);if(i.length===0)return;let a=i[((i.findIndex(e=>e.value===t)+r)%i.length+i.length)%i.length];n(a.value),requestAnimationFrame(()=>{s.current?.querySelector(`[data-value="${a.value}"]`)?.focus()})}return(0,g.jsx)(`div`,{ref:s,role:`radiogroup`,className:`${x.group} ${x[r]} ${i?x.block:``} ${a??``}`,...o,children:e.map(e=>{let r=e.value===t;return(0,g.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,"aria-label":e.ariaLabel,"data-value":e.value,tabIndex:r?0:-1,disabled:e.disabled,className:x.option,onClick:()=>n(e.value),onKeyDown:e=>{e.key===`ArrowRight`||e.key===`ArrowDown`?(e.preventDefault(),c(1)):(e.key===`ArrowLeft`||e.key===`ArrowUp`)&&(e.preventDefault(),c(-1))},children:[e.icon?(0,g.jsx)(`span`,{className:x.glyph,children:e.icon}):null,e.label]},e.value)})})}var S={field:`_field_1yhua_1`,label:`_label_1yhua_8`,shell:`_shell_1yhua_15`,sm:`_sm_1yhua_28`,select:`_select_1yhua_42`,chevron:`_chevron_1yhua_72`,hint:`_hint_1yhua_79`};function Ye({label:e,hint:t,size:n=`md`,className:r,id:i,children:a,...o}){let s=(0,h.useId)(),c=i??s,l=`${c}-hint`;return(0,g.jsxs)(`div`,{className:`${S.field} ${r??``}`,children:[e?(0,g.jsx)(`label`,{className:S.label,htmlFor:c,children:e}):null,(0,g.jsxs)(`div`,{className:`${S.shell} ${S[n]}`,children:[(0,g.jsx)(`select`,{...o,id:c,className:S.select,"aria-describedby":[o[`aria-describedby`],t?l:null].filter(Boolean).join(` `)||void 0,children:a}),(0,g.jsx)(le,{className:S.chevron,size:14})]}),t?(0,g.jsx)(`p`,{id:l,className:S.hint,children:t}):null]})}t();var C={field:`_field_228wn_1`,label:`_label_228wn_8`,row:`_row_228wn_15`,value:`_value_228wn_22`,input:`_input_228wn_32`};function Xe({label:e,value:t,min:n=0,max:r=100,valueLabel:i,valueText:a,trackImage:o,className:s,id:c,...l}){let u=(0,h.useId)(),d=c??u,f=Math.max(1,r-n),p=Math.round((t-n)/f*100);return(0,g.jsxs)(`div`,{className:`${C.field} ${s??``}`,children:[e?(0,g.jsx)(`label`,{className:C.label,htmlFor:d,children:e}):null,(0,g.jsxs)(`div`,{className:C.row,children:[(0,g.jsx)(`input`,{...l,id:d,type:`range`,className:C.input,value:t,min:n,max:r,"aria-valuetext":a,style:{"--slider-fill":`${p}%`,...o?{"--slider-track-image":o}:{}},"data-custom-track":o?`true`:void 0}),i===void 0?null:(0,g.jsx)(`span`,{className:C.value,children:i})]})]})}var w={wrapper:`_wrapper_1xq82_1`,label:`_label_1xq82_8`,track:`_track_1xq82_13`,knob:`_knob_1xq82_44`};function Ze({checked:e,onChange:t,label:n,disabled:r=!1,id:i,className:a,...o}){let s=(0,g.jsx)(`button`,{type:`button`,id:i,role:`switch`,"aria-checked":e,disabled:r,className:w.track,onClick:()=>t(!e),...o,children:(0,g.jsx)(`span`,{className:w.knob,"aria-hidden":`true`})});return n?(0,g.jsxs)(`label`,{className:`${w.wrapper} ${a??``}`,children:[s,(0,g.jsx)(`span`,{className:w.label,children:n})]}):(0,g.jsx)(`span`,{className:a,children:s})}var T={tag:`_tag_2eqdv_1`,sm:`_sm_2eqdv_19`,mono:`_mono_2eqdv_25`,dot:`_dot_2eqdv_30`,marker:`_marker_2eqdv_38`},Qe={claude:`var(--engine-claude)`,codex:`var(--engine-codex)`,grok:`var(--engine-grok)`,local:`var(--engine-local)`};function $e({children:e,engine:t,mono:n=!1,size:r=`md`,dot:i=!1,title:a,className:o}){let s=i||t!==void 0;return(0,g.jsxs)(`span`,{className:`${T.tag} ${T[r]} ${n?T.mono:``} ${o??``}`,title:a,"data-engine":t,children:[s?(0,g.jsx)(`span`,{className:T.dot,style:t?{background:Qe[t]}:void 0,"aria-hidden":`true`}):null,e]})}var E=[{id:`chat`,label:`Chat`,module:`ChatSection`},{id:`autonomy`,label:`Autonomy`,module:`AutonomySection`},{id:`approvals`,label:`Approvals`,module:`ApprovalsSection`},{id:`usage`,label:`Usage`,module:`UsageSection`},{id:`settings`,label:`Settings`,module:`SettingsSection`}],et=new Set(E.map(e=>e.id)),D={min:240,max:360,def:264},O={min:260,max:480,def:320},tt=`ashlr.verse.ui.v2`,k={section:`chat`,sidebarWidth:D.def,sidebarCollapsed:!1,resourcesOpen:!0,resourcesWidth:O.def,pendingApprovals:0,command:null};function A(e,t){let n=Number(e);return!Number.isFinite(n)||n<=0?t.def:Math.max(t.min,Math.min(t.max,Math.round(n)))}function nt(){try{let e=localStorage.getItem(tt);if(!e)return k;let t=JSON.parse(e);return{...k,section:typeof t.section==`string`&&et.has(t.section)?t.section:k.section,sidebarWidth:A(t.sidebarWidth,D),sidebarCollapsed:t.sidebarCollapsed===!0,resourcesOpen:t.resourcesOpen!==!1,resourcesWidth:A(t.resourcesWidth,O)}}catch{return k}}var j=nt(),rt=0,it=new Set;function at(e){let t={section:e.section,sidebarWidth:e.sidebarWidth,sidebarCollapsed:e.sidebarCollapsed,resourcesOpen:e.resourcesOpen,resourcesWidth:e.resourcesWidth};try{localStorage.setItem(tt,JSON.stringify(t))}catch{}}function M(e){let t={...j,...e};if(Object.keys(e).every(e=>Object.is(j[e],t[e])))return;let n=[`section`,`sidebarWidth`,`sidebarCollapsed`,`resourcesOpen`,`resourcesWidth`].some(e=>!Object.is(j[e],t[e]));j=t,n&&at(t);for(let e of it)e()}function ot(e){return it.add(e),()=>it.delete(e)}function st(){return j}function N(e){M({section:e})}function ct(e){M({sidebarWidth:A(e,D)})}function lt(e){M({sidebarCollapsed:e})}function ut(e){M({resourcesOpen:e})}function dt(e){M({resourcesWidth:A(e,O)})}function ft(e){M({pendingApprovals:Number.isFinite(e)?Math.max(0,Math.trunc(e)):0})}function P(e){rt+=1,M({section:`chat`,command:{name:e,nonce:rt}})}function pt(){M({command:null})}var mt=`ashlr.verse.seats.v1`,ht=50,gt=null;function _t(){if(gt)return gt;let e={};try{let t=localStorage.getItem(mt),n=t?JSON.parse(t):null;if(n&&typeof n==`object`&&!Array.isArray(n))for(let[t,r]of Object.entries(n)){if(!r||typeof r!=`object`||Array.isArray(r))continue;let{seatId:n,model:i}=r;typeof n==`string`&&n.length!==0&&typeof i==`string`&&i.length!==0&&(e[t]={seatId:n,model:i})}}catch{}return gt=e,e}function vt(e){let t=_t();if(e){let n=t[e];if(n)return n}let n=Object.keys(t),r=n[n.length-1];return r?t[r]??null:null}function yt(e,t){if(!e||!t.seatId||!t.model)return;let n=_t();delete n[e],n[e]={seatId:t.seatId,model:t.model};let r=Object.keys(n);for(let e of r.slice(0,Math.max(0,r.length-ht)))delete n[e];try{localStorage.setItem(mt,JSON.stringify(n))}catch{}}var bt=`2.1.257`;function F(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function I(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:null}function L(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:null}function R(e,t,n=!1){let r=e[t];return typeof r==`boolean`?r:n}function z(e){return Array.isArray(e)?e:[]}var xt=/(launcher\.mjs|native-profiles|account-connections|console-startup|\/\.ashlr\b|Bearer\s|--token\b)/i;function St(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length===0||t.length>200||xt.test(t)||/[\r\n]/.test(t)?null:t}function Ct(e){return e===null?null:Math.max(0,Math.min(100,e))}function wt(e){let t=F(e);if(!t)return null;let n=I(t,`id`)??I(t,`label`);if(n===null)return null;let r=F(t.nativeReport),i=R(t,`limitReached`)||R(t,`rateLimitReached`),a=t.measured;return{id:n,label:I(t,`label`),usedPercent:Ct(L(t,`usedPercent`)??L(t,`used_percent`)),resetsAt:I(t,`resetsAt`)??I(t,`resets_at`),resetDescription:(r?I(r,`resetDescription`):null)??I(t,`resetDescription`),limitReached:i,measured:typeof a==`boolean`?a:!i}}function Tt(e){let t=F(e);if(!t)return null;let n=I(t,`balance`),r=n===null?L(t,`balance`):Number.parseFloat(n);return{hasCredits:R(t,`hasCredits`)||R(t,`has_credits`),unlimited:R(t,`unlimited`),balance:n,balanceValue:typeof r==`number`&&Number.isFinite(r)?r:null}}var Et=[`claude`,`codex`,`grok`];function Dt(e){let t=F(e);if(!t)return null;let n=I(t,`id`),r=I(t,`provider`);if(n===null||r===null||!Et.includes(r))return null;let i=z(t.windows).map(wt).filter(e=>e!==null),a=I(t,`state`),o=I(t,`authentication`),s=F(t.unsupported);return{id:n,label:I(t,`label`)??n,provider:r,state:a===`checking`||a===`observed`||a===`signed-out`||a===`unavailable`?a:`unavailable`,authentication:o===`signed-in`||o===`signed-out`?o:`unknown`,health:I(t,`health`),planType:I(t,`planType`)??I(t,`plan_type`),observedAt:I(t,`observedAt`),windows:i,binding:wt(t.binding),credits:Tt(t.credits),reason:I(t,`reason`),unsupported:Ot(t,s),reconnectCommand:St(t.reconnectCommand),notes:z(t.notes).filter(e=>typeof e==`string`)}}function Ot(e,t){if(t)return{code:I(t,`code`)??`usage-version-unsupported`,pinnedVersion:I(t,`pinnedVersion`)??I(t,`version`)};let n=I(e,`reason`);return n===`usage-version-unsupported`?{code:n,pinnedVersion:bt}:null}function kt(e){let t=I(e,`collectorNote`);if(t)return t;let n=F(e.collector);return!n||I(n,`owner`)!==`another-collector`?null:I(n,`note`)??`Another collector process owns the quota-refresh lease, so these readings are read-only and may be staler than this server’s poll interval.`}function At(e){let t=F(e);if(!t)return null;let n=Array.isArray(t.accounts)?t.accounts:Array.isArray(e)?e:null;return n===null?null:{sampledAt:I(t,`sampledAt`),refreshing:R(t,`refreshing`),accounts:n.map(Dt).filter(e=>e!==null),collectorNote:kt(t)}}function jt(e){let t=F(e);if(!t)return null;let n=I(t,`day`);return n===null||!/^\d{4}-\d{2}-\d{2}$/.test(n)?null:{day:n,tokensIn:L(t,`tokensIn`)??0,tokensOut:L(t,`tokensOut`)??0,estCostUsd:L(t,`estCostUsd`)??0,sessions:L(t,`sessions`)??0,cacheRead:L(t,`cacheRead`),cacheWrite:L(t,`cacheWrite`),cacheHitRate:L(t,`cacheHitRate`)}}function Mt(e,t){let n=F(e),r=n?Array.isArray(n.byDay)?n.byDay:Array.isArray(n.days)?n.days:null:Array.isArray(e)?e:null;if(r===null)return null;let i=n?I(n,`window`):null;return{window:i===`7d`||i===`30d`?i:t,days:r.map(jt).filter(e=>e!==null).sort((e,t)=>e.day.localeCompare(t.day)),generatedAt:n?I(n,`generatedAt`):null,estimated:!n||R(n,`estimated`,!0),caveats:n?z(n.caveats).filter(e=>typeof e==`string`):[]}}function Nt(e,t){let n=F(e);if(!n)return null;let r=I(n,`label`)??I(n,`id`)??I(n,`name`)??I(n,`model`);if(r===null)return null;let i=n.capabilities,a=I(n,`state`),o=n.supportsTools,s=L(n,`nativeContextLength`)??L(n,`nativeContext`),c=L(n,`contextLength`)??L(n,`configuredContext`),l=I(n,`placement`);return{name:r,runtime:t,loaded:a===null?R(n,`loaded`)||R(n,`resident`):a===`loaded`,sizeBytes:L(n,`sizeBytes`)??L(n,`size`),sizeVramBytes:L(n,`sizeVramBytes`)??L(n,`size_vram`),placement:l===`gpu`||l===`cpu`||l===`split`?l:`unknown`,gpuPercent:Ct(L(n,`gpuPercent`)),memoryPercent:Ct(L(n,`memoryPercent`)),family:I(n,`family`),arch:I(n,`arch`),expiresAt:I(n,`expiresAt`)??I(n,`expires_at`),parameterSize:I(n,`parameterSize`)??I(n,`parameter_size`),quantization:I(n,`quantization`)??I(n,`quantization_level`),nativeContext:s,configuredContext:c!==null&&s!==null&&c===s?null:c,capabilities:Array.isArray(i)?i.filter(e=>typeof e==`string`):null,supportsTools:typeof o==`boolean`?o:null}}function Pt(e,t){let n=F(e);if(!n)return null;let r=Array.isArray(n.models)?n.models:null;if(r===null)return null;let i=r.map(e=>Nt(e,t)).filter(e=>e!==null),a=R(n,`stale`);return{models:i,status:{runtime:t,reachable:R(n,`reachable`),reason:I(n,`reason`),stale:a,staleForMs:a?L(n,`staleForMs`):null,modelCount:i.length}}}function Ft(e){let t=F(e);if(!t)return null;let n=Pt(t.ollama,`ollama`),r=Pt(t.lmStudio??t.lmstudio,`lmstudio`);if(n!==null||r!==null){let e=[n,r].filter(e=>e!==null),i=e.some(e=>e.status.reachable),a=F(t.machine);return{reachable:i,models:e.flatMap(e=>e.models),memoryBudgetBytes:(a?L(a,`totalMemoryBytes`):null)??L(t,`memoryBudgetBytes`)??L(t,`memoryBudget`),freeMemoryBytes:a?L(a,`freeMemoryBytes`):null,reason:i?null:e.map(e=>e.status.reason).find(e=>e!==null)??null,runtimes:e.map(e=>e.status),notes:z(t.notes).filter(e=>typeof e==`string`),sampledAt:I(t,`sampledAt`)}}let i=Array.isArray(t.models)?t.models:null;return i===null?null:{reachable:R(t,`reachable`,!0),models:i.map(e=>Nt(e,null)).filter(e=>e!==null),memoryBudgetBytes:L(t,`memoryBudgetBytes`)??L(t,`memoryBudget`),freeMemoryBytes:L(t,`freeMemoryBytes`),reason:I(t,`reason`),runtimes:[],notes:z(t.notes).filter(e=>typeof e==`string`),sampledAt:I(t,`sampledAt`)}}var It=`verse-usage-frontier`,Lt=`verse-usage-control`,Rt={key:It,fetch:e=>p(`/api/usage`,e)};function zt(e){return e instanceof m?e.status===404?`This server does not expose /api/verse/control, so configured caps and today’s spend are unavailable here.`:`Configured caps unavailable (HTTP ${e.status}).`:`Configured caps unavailable: the request failed.`}var Bt={key:Lt,fetch:async e=>{try{return{raw:await p(`/api/verse/control`,e),available:!0,reason:null}}catch(e){if(e instanceof m&&e.status===401||e instanceof DOMException&&e.name===`AbortError`)throw e;return{raw:null,available:!1,reason:zt(e)}}}},Vt=`verse-usage-accounts`,Ht=`verse-usage-local-models`,Ut=`verse-usage-series`;function Wt(e,t){return t instanceof m?t.status===404?`This server does not expose ${e} yet, so this panel has no source.`:`${e} answered HTTP ${t.status}.`:`${e} could not be reached.`}function B(e){return async t=>{try{return{raw:await p(e,t),available:!0,reason:null}}catch(t){if(t instanceof m&&t.status===401||t instanceof DOMException&&t.name===`AbortError`)throw t;return{raw:null,available:!1,reason:Wt(e,t)}}}}var Gt={key:Vt,fetch:B(`/api/verse/accounts`)},Kt=[350,1200],qt=B(`/api/verse/local-models`);function Jt(e){if(!e.available)return!1;let t=Ft(e.raw);return t!==null&&!t.reachable}function Yt(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=()=>{clearTimeout(a),r(new DOMException(`Aborted`,`AbortError`))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}var Xt={key:Ht,fetch:async e=>{let t=await qt(e);for(let n of Kt){if(!Jt(t))return t;await Yt(n,e),t=await qt(e)}return t}},Zt={"7d":{key:`${Ut}:7d`,fetch:B(`/api/verse/usage-series?window=7d`)},"30d":{key:`${Ut}:30d`,fetch:B(`/api/verse/usage-series?window=30d`)}};function Qt(e){return Zt[e]}var V=[{id:`welcome`,title:`Welcome to Verse`,subtitle:`Five sections, one rail. Two minutes and you will know what each one does.`},{id:`accounts`,title:`Your seats`,subtitle:`Which provider accounts this machine can actually dispatch to right now.`},{id:`local`,title:`Local runtime`,subtitle:`Whether there is a model on this machine, and what that changes.`},{id:`stops`,title:`Three ways to stop`,subtitle:`They do not have the same blast radius. This is the one screen that says so.`},{id:`finish`,title:`Make it yours`,subtitle:`Theme, accent, density and font live in Settings. Then start a chat.`}];function $t(e){return Number.isFinite(e)?Math.min(V.length-1,Math.max(0,Math.trunc(e))):0}var en={claude:`Sign back in with the Claude CLI on this machine, then reopen Verse.`,codex:`Sign back in with the Codex CLI on this machine, then reopen Verse.`,grok:"Reconnect the Grok seat through `ashlr resources`."};function tn(e){let t=e.label||e.id,n={id:e.id,label:t,provider:e.provider};if(e.authentication===`signed-out`||e.state===`signed-out`)return{...n,tone:`attention`,state:`signed out`,detail:e.reason??e.notes[0]??`Verse cannot dispatch to ${t} until this seat is signed in again.`,fix:e.reconnectCommand??en[e.provider]};if(e.unsupported)return{...n,tone:`attention`,state:`probe blocked`,detail:`The usage probe for ${t} is pinned to a specific CLI build`+(e.unsupported.pinnedVersion?` (${e.unsupported.pinnedVersion})`:``)+` and this machine is running a different one, so its quota is unreadable. The seat itself still works.`,fix:null};if(e.state===`unavailable`)return{...n,tone:`unknown`,state:`no reading`,detail:e.reason??`No usage reading came back for ${t}. That is not the same as a limit.`,fix:null};if(e.state===`checking`)return{...n,tone:`unknown`,state:`checking`,detail:`Still probing ${t}.`,fix:null};let r=e.binding,i=r?.limitReached===!0,a=e.credits?.hasCredits===!0||e.credits?.unlimited===!0;if(i&&!a)return{...n,tone:`attention`,state:`limit reached`,detail:`${t} reported its limit reached. Pick another seat, or wait for the window to reset.`,fix:null};if(i&&a)return{...n,tone:`ok`,state:`usable on credits`,detail:`${t} has used up its included window but still has a spendable balance, so it can still dispatch.`,fix:null};let o=r?.measured===!0&&typeof r.usedPercent==`number`?r.usedPercent:null;return{...n,tone:`ok`,state:`connected`,detail:o===null?`${t} is signed in. No local utilization signal for this provider — that is expected, not a fault.`:`${t} is signed in, ${Math.round(o)}% through its binding window.`,fix:null}}function nn(e){if(e.loading)return{findings:null,summary:`Checking which accounts this machine can reach…`,caveat:null,signedOutCount:0};if(!e.snapshot)return{findings:null,summary:`This server did not report a per-account roster, so Verse cannot say which seats are connected.`,caveat:e.unavailableReason,signedOutCount:0};let t=e.snapshot.accounts.map(tn);if(t.length===0)return{findings:t,summary:`No provider accounts are connected on this machine yet. Verse will still run local models.`,caveat:e.snapshot.collectorNote,signedOutCount:0};let n=t.filter(e=>e.state===`signed out`),r=t.filter(e=>e.tone===`ok`);return{findings:t,summary:n.length===0?`${r.length} of ${t.length} ${t.length===1?`seat is`:`seats are`} ready to dispatch.`:`${n.length} ${n.length===1?`seat is`:`seats are`} signed out. Each one below says how to get it back.`,caveat:e.snapshot.collectorNote,signedOutCount:n.length}}var rn=`Local seats cost nothing and consume no provider quota, so the autonomous loop can keep working after a cloud window is used up.`,an=`Without one, every turn and every autonomous tick spends a provider account, and a used-up window stops the work.`;function on(e){if(e.loading)return{tone:`unknown`,state:`checking`,summary:`Probing the local runtimes on this machine…`,meaning:rn,fix:null,modelCount:0,toolCapableCount:0,stale:!1};if(!e.snapshot)return{tone:`unknown`,state:`not reported`,summary:`This server does not report local runtimes, so Verse cannot say whether one is available here.`,meaning:an,fix:e.unavailableReason,modelCount:0,toolCapableCount:0,stale:!1};let t=e.snapshot.models,n=t.filter(e=>e.supportsTools===!0).length,r=e.snapshot.runtimes.some(e=>e.stale);return e.snapshot.reachable?t.length===0?{tone:`attention`,state:`no models`,summary:`A local runtime answered, but it has no models installed.`,meaning:an,fix:`Pull a model into the runtime, then press Refresh in Usage.`,modelCount:0,toolCapableCount:0,stale:r}:{tone:`ok`,state:r?`available (retained reading)`:`available`,summary:`${t.length} local ${t.length===1?`model`:`models`} available`+(n>0?`, ${n} of them tool-capable.`:`, none of them tool-capable.`)+(r?` This is a retained reading, not a fresh probe.`:``),meaning:n>0?rn:`${rn} A model that cannot call tools can answer, but cannot run an agentic turn.`,fix:null,modelCount:t.length,toolCapableCount:n,stale:r}:{tone:`attention`,state:`unreachable`,summary:`No local runtime answered. Verse cannot tell whether one is not running or not installed — the probe only knows it got no answer.`,meaning:an,fix:`Start Ollama (or LM Studio) and press Refresh in Usage. If neither is installed, everything still works — it all runs on the cloud seats.`,modelCount:0,toolCapableCount:0,stale:r}}var sn=[{name:`Pause`,scope:`Halts autonomous dispatch only. A running loop parks instead of exiting.`,limit:`Your own chats and the agent’s write tools keep working.`,reversible:`Reversible in one click, with no restart and no confirmation.`,tone:`ok`},{name:`Stop loop`,scope:`Stops the daemon — and engages the GLOBAL kill switch while doing it.`,limit:`That means it also refuses the agent’s own write tools, exactly like the emergency control.`,reversible:`Reversible, but confirm-guarded. For an ordinary halt, use Pause.`,tone:`attention`},{name:`Emergency stop`,scope:`Engages the global kill switch (~/.ashlr/KILL) directly.`,limit:`Every mutating path refuses: the loop, dispatch, and the agent’s own write tools.`,reversible:`Reversible, confirm-guarded, and deliberately separated from the other two.`,tone:`attention`}],cn=`ashlr.verse.onboarding.v1`,ln={completedAt:null,dismissedAt:null};function un(){try{let e=localStorage.getItem(cn);if(!e)return ln;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 dn(e){try{localStorage.setItem(cn,JSON.stringify(e))}catch{}}function fn(e){return e.completedAt===null&&e.dismissedAt===null}var pn=un(),H={...pn,open:fn(pn),step:0},U=new Set;function W(e){let t={...H,...e};if(!Object.keys(e).every(e=>Object.is(H[e],t[e]))){H=t;for(let e of U)e()}}function mn(e){return U.add(e),()=>U.delete(e)}function hn(){return H}function gn(e){W({step:Math.max(0,Math.trunc(e))})}function _n(){let e={completedAt:H.completedAt,dismissedAt:new Date().toISOString()};dn(e),W({...e,open:!1})}function vn(){let e={completedAt:new Date().toISOString(),dismissedAt:H.dismissedAt};dn(e),W({...e,open:!1})}function yn(){W({open:!0,step:0})}function bn(){return(0,h.useSyncExternalStore)(mn,hn,hn)}var G={card:`_card_13g9r_14`,"onboarding-in":`_onboarding-in_13g9r_1`,head:`_head_13g9r_56`,headText:`_headText_13g9r_64`,eyebrow:`_eyebrow_13g9r_72`,title:`_title_13g9r_80`,subtitle:`_subtitle_13g9r_88`,body:`_body_13g9r_96`,lead:`_lead_13g9r_107`,aside:`_aside_13g9r_113`,caveat:`_caveat_13g9r_114`,kbd:`_kbd_13g9r_125`,sections:`_sections_13g9r_138`,findings:`_findings_13g9r_139`,sectionRow:`_sectionRow_13g9r_148`,sectionIcon:`_sectionIcon_13g9r_160`,localIcon:`_localIcon_13g9r_161`,sectionText:`_sectionText_13g9r_173`,sectionName:`_sectionName_13g9r_180`,sectionBlurb:`_sectionBlurb_13g9r_190`,finding:`_finding_13g9r_139`,findingHead:`_findingHead_13g9r_210`,stopName:`_stopName_13g9r_218`,findingDetail:`_findingDetail_13g9r_225`,findingNote:`_findingNote_13g9r_231`,findingFix:`_findingFix_13g9r_237`,fixLabel:`_fixLabel_13g9r_245`,fixText:`_fixText_13g9r_254`,code:`_code_13g9r_260`,tone:`_tone_13g9r_276`,toneLabel:`_toneLabel_13g9r_283`,foot:`_foot_13g9r_305`,pips:`_pips_13g9r_315`,pip:`_pip_13g9r_315`,actions:`_actions_13g9r_338`};function K({tone:e,label:t}){let n=e===`ok`?he:e===`attention`?ve:pe;return(0,g.jsxs)(`span`,{className:G.tone,"data-tone":e,children:[(0,g.jsx)(n,{size:13,"aria-hidden":`true`,focusable:`false`}),(0,g.jsx)(`span`,{className:G.toneLabel,children:t})]})}function q({children:e}){return(0,g.jsx)(`div`,{className:G.body,children:e})}var xn={chat:`Talk to a seat. Sessions are grouped by project and resume where they stopped.`,autonomy:`The human-out-of-the-loop cockpit: the loop, its budget, its scope, and what it did while you were away.`,approvals:`Everything the loop produced that is waiting on you. Approving a PR proposal pushes a branch.`,usage:`Which account you can actually use right now, and what it costs.`,settings:`Theme, accent, density, font — and this tour again whenever you want it.`};function Sn(){return(0,g.jsxs)(q,{children:[(0,g.jsx)(`p`,{className:G.lead,children:`Verse is the desktop surface over this machine’s agentic fleet. Everything it shows comes from one local server — no session, token or artifact leaves this machine.`}),(0,g.jsx)(`ul`,{className:G.sections,children:E.map((e,t)=>{let n=Ue[e.id];return(0,g.jsxs)(`li`,{className:G.sectionRow,children:[(0,g.jsx)(`span`,{className:G.sectionIcon,"aria-hidden":`true`,children:(0,g.jsx)(n,{})}),(0,g.jsxs)(`span`,{className:G.sectionText,children:[(0,g.jsxs)(`span`,{className:G.sectionName,children:[e.label,` `,(0,g.jsxs)(`kbd`,{className:G.kbd,children:[`⌘`,t+1]})]}),(0,g.jsx)(`span`,{className:G.sectionBlurb,children:xn[e.id]})]})]},e.id)})})]})}function Cn(){let e=re(Gt),t=(0,h.useMemo)(()=>nn({snapshot:e.data?.available?At(e.data.raw):null,loading:e.data===void 0&&e.status!==`error`,unavailableReason:e.data?.reason??e.error?.message??null}),[e.data,e.status,e.error]);return(0,g.jsxs)(q,{children:[(0,g.jsx)(`p`,{className:G.lead,children:t.summary}),t.findings===null?null:(0,g.jsx)(`ul`,{className:G.findings,children:t.findings.map(e=>(0,g.jsxs)(`li`,{className:G.finding,children:[(0,g.jsxs)(`div`,{className:G.findingHead,children:[(0,g.jsx)($e,{engine:e.provider,children:e.label}),(0,g.jsx)(K,{tone:e.tone,label:e.state})]}),(0,g.jsx)(`p`,{className:G.findingDetail,children:e.detail}),e.fix?(0,g.jsxs)(`p`,{className:G.findingFix,children:[(0,g.jsx)(`span`,{className:G.fixLabel,children:`Fix`}),(0,g.jsx)(`code`,{className:G.code,children:e.fix})]}):null]},e.id))}),t.caveat?(0,g.jsx)(`p`,{className:G.caveat,children:t.caveat}):null,(0,g.jsxs)(`p`,{className:G.aside,children:[`The full per-window picture — resets, credits, limits — lives in Usage`,` `,(0,g.jsx)(`kbd`,{className:G.kbd,children:`⌘4`}),`.`]})]})}function wn(){let e=re(Xt),t=(0,h.useMemo)(()=>on({snapshot:e.data?.available?Ft(e.data.raw):null,loading:e.data===void 0&&e.status!==`error`,unavailableReason:e.data?.reason??e.error?.message??null}),[e.data,e.status,e.error]);return(0,g.jsxs)(q,{children:[(0,g.jsxs)(`div`,{className:G.findingHead,children:[(0,g.jsx)(`span`,{className:G.localIcon,"aria-hidden":`true`,children:(0,g.jsx)(de,{size:15})}),(0,g.jsx)(K,{tone:t.tone,label:t.state})]}),(0,g.jsx)(`p`,{className:G.lead,children:t.summary}),(0,g.jsx)(`p`,{className:G.findingDetail,children:t.meaning}),t.fix?(0,g.jsxs)(`p`,{className:G.findingFix,children:[(0,g.jsx)(`span`,{className:G.fixLabel,children:`Fix`}),(0,g.jsx)(`span`,{className:G.fixText,children:t.fix})]}):null]})}function Tn(){return(0,g.jsxs)(q,{children:[(0,g.jsxs)(`p`,{className:G.lead,children:[`Autonomy `,(0,g.jsx)(`kbd`,{className:G.kbd,children:`⌘2`}),` has three stop controls. They are not interchangeable, and the difference is the most important thing on this screen.`]}),(0,g.jsx)(`ul`,{className:G.findings,children:sn.map(e=>(0,g.jsxs)(`li`,{className:G.finding,children:[(0,g.jsxs)(`div`,{className:G.findingHead,children:[(0,g.jsx)(`span`,{className:G.stopName,children:e.name}),(0,g.jsx)(K,{tone:e.tone,label:e.tone===`ok`?`narrow`:`global`})]}),(0,g.jsx)(`p`,{className:G.findingDetail,children:e.scope}),(0,g.jsx)(`p`,{className:G.findingDetail,children:e.limit}),(0,g.jsx)(`p`,{className:G.findingNote,children:e.reversible})]},e.name))})]})}function En(){return(0,g.jsxs)(q,{children:[(0,g.jsxs)(`p`,{className:G.lead,children:[`Settings `,(0,g.jsx)(`kbd`,{className:G.kbd,children:`⌘,`}),` carries theme, accent hue, density, display font, corner radius and reduced motion. Every change applies as you make it — there is no save button.`]}),(0,g.jsx)(v,{variant:`subtle`,icon:(0,g.jsx)(be,{size:14}),onClick:()=>N(`settings`),children:`Open Settings`}),(0,g.jsx)(`p`,{className:G.aside,children:`You can replay this tour any time from Settings → Onboarding.`})]})}var Dn=[Sn,Cn,wn,Tn,En];function On(){let{open:e,step:t}=bn(),n=$t(t),r=V[n],i=Dn[n],a=n===V.length-1,o=(0,h.useCallback)(()=>_n(),[]),s=(0,h.useRef)(null);return(0,h.useEffect)(()=>{if(!e)return;function t(e){if(e.key!==`Escape`)return;let t=s.current;t&&e.target instanceof Node&&t.contains(e.target)&&(e.preventDefault(),_n())}return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e]),e?(0,g.jsxs)(`aside`,{ref:s,className:G.card,"aria-labelledby":`verse-onboarding-title`,role:`region`,children:[(0,g.jsxs)(`header`,{className:G.head,children:[(0,g.jsxs)(`div`,{className:G.headText,children:[(0,g.jsxs)(`p`,{className:G.eyebrow,children:[`Getting started · `,n+1,` of `,V.length]}),(0,g.jsx)(`h2`,{id:`verse-onboarding-title`,className:G.title,children:r.title}),(0,g.jsx)(`p`,{className:G.subtitle,children:r.subtitle})]}),(0,g.jsx)(v,{iconOnly:!0,variant:`ghost`,size:`sm`,"aria-label":`Close getting started`,icon:(0,g.jsx)(xe,{size:14}),onClick:o})]}),(0,g.jsx)(i,{}),(0,g.jsxs)(`footer`,{className:G.foot,children:[(0,g.jsx)(`ol`,{className:G.pips,"aria-hidden":`true`,children:V.map((e,t)=>(0,g.jsx)(`li`,{className:G.pip,"data-state":t===n?`current`:t<n?`done`:`todo`},e.id))}),(0,g.jsxs)(`div`,{className:G.actions,children:[(0,g.jsx)(v,{variant:`ghost`,size:`sm`,onClick:o,children:`Skip setup`}),n>0?(0,g.jsx)(v,{variant:`subtle`,size:`sm`,onClick:()=>gn(n-1),children:`Back`}):null,a?(0,g.jsx)(v,{variant:`primary`,size:`sm`,icon:(0,g.jsx)(ge,{size:14}),onClick:()=>{vn(),P(`new-chat`)},children:`Start a first chat`}):(0,g.jsx)(v,{variant:`primary`,size:`sm`,onClick:()=>gn(n+1),children:`Next`})]})]})]}):null}function kn(){return(0,h.useSyncExternalStore)(ot,st,st)}var J={shell:`_shell_tbse1_5`,rail:`_rail_tbse1_21`,railDragStrip:`_railDragStrip_tbse1_44`,mark:`_mark_tbse1_52`,railList:`_railList_tbse1_62`,railFoot:`_railFoot_tbse1_71`,railButton:`_railButton_tbse1_73`,railDot:`_railDot_tbse1_104`,section:`_section_tbse1_116`,loading:`_loading_tbse1_126`,missing:`_missing_tbse1_135`,missingTitle:`_missingTitle_tbse1_142`,missingBody:`_missingBody_tbse1_149`,missingDetail:`_missingDetail_tbse1_150`},An=Object.assign({"./sections/ApprovalsSection.tsx":()=>i(()=>import(`./ApprovalsSection-BW9iVjUa.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),"./sections/AutonomySection.tsx":()=>i(()=>import(`./AutonomySection-CRqHUhED.js`),__vite__mapDeps([18,1,2,3,4,5,7,8,9,10,11,12,15,16,19,20,21,22])),"./sections/ChatSection.tsx":()=>i(()=>import(`./ChatSection-5irrh6Jw.js`),__vite__mapDeps([23,1,2,3,8,9,4,5,11,12,13,14,21,20,24])),"./sections/SettingsSection.tsx":()=>i(()=>import(`./SettingsSection-CWxtTNlD.js`),__vite__mapDeps([25,1,2,3,8,9,4,5,26,27])),"./sections/UsageSection.tsx":()=>i(()=>import(`./UsageSection-B2E06ZH1.js`),__vite__mapDeps([28,1,2,3,4,5,6,29,30,15,19,21,31]))});function Y({label:e,moduleName:t,detail:n}){return(0,g.jsxs)(`div`,{className:J.missing,role:`status`,children:[(0,g.jsxs)(`h1`,{className:J.missingTitle,children:[e,` is not wired up yet`]}),(0,g.jsxs)(`p`,{className:J.missingBody,children:[`This build has no `,(0,g.jsxs)(`code`,{children:[`routes/verse/sections/`,t,`.tsx`]}),`. The rail keeps the slot so the section appears the moment that module lands — nothing here is broken, and the other sections still work.`]}),n?(0,g.jsx)(`p`,{className:J.missingDetail,children:n}):null]})}function jn(e){let t=E.find(t=>t.id===e),n=An[`./sections/${t.module}.tsx`];return async()=>{if(!n)return{default:()=>(0,g.jsx)(Y,{label:t.label,moduleName:t.module})};try{let e=await n(),r=e[t.module]??e.default;return typeof r==`function`?{default:r}:{default:()=>(0,g.jsx)(Y,{label:t.label,moduleName:t.module,detail:`The module loaded but exports no \`${t.module}\` component.`})}}catch(e){let n=e instanceof Error?e.message:String(e);return{default:()=>(0,g.jsx)(Y,{label:t.label,moduleName:t.module,detail:n})}}}}var Mn=new Map(E.map(e=>[e.id,(0,h.lazy)(jn(e.id))])),Nn=se({status:`pending`,limit:500});function Pn(){let e=kn(),t=ie(),n=Mn.get(e.section),r=re(Nn).data?.pending;(0,h.useEffect)(()=>{typeof r==`number`&&ft(r)},[r]),(0,h.useEffect)(()=>{function e(e){if(!(e.metaKey||e.ctrlKey)||e.altKey||e.shiftKey)return;let t=Number.parseInt(e.key,10);if(Number.isInteger(t)&&t>=1&&t<=E.length){e.preventDefault(),N(E[t-1].id);return}switch(e.key.toLowerCase()){case`k`:e.preventDefault(),P(`quick-switcher`);break;case`n`:e.preventDefault(),P(`new-chat`);break;case`,`:e.preventDefault(),N(`settings`)}}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[]),(0,h.useEffect)(()=>Oe(e=>{e===`open-settings`?N(`settings`):e===`toggle-theme`&&t.cycle()}),[t]),(0,h.useEffect)(()=>{Ee(t.theme)},[t.theme]);let i=(0,h.useMemo)(()=>`Theme: ${t.theme} — click to cycle`,[t.theme]);return(0,g.jsxs)(`div`,{className:J.shell,children:[(0,g.jsxs)(`nav`,{className:J.rail,"aria-label":`Verse sections`,children:[(0,g.jsx)(`span`,{className:J.railDragStrip,"data-app-region":`drag`,"aria-hidden":`true`}),(0,g.jsxs)(`span`,{className:J.mark,title:`Ashlr Verse`,children:[(0,g.jsx)(He,{}),(0,g.jsx)(`span`,{className:`visually-hidden`,children:`Ashlr Verse`})]}),(0,g.jsx)(`ul`,{className:J.railList,children:E.map((t,n)=>{let r=Ue[t.id],i=t.id===`approvals`?e.pendingApprovals:0,a=e.section===t.id;return(0,g.jsx)(`li`,{children:(0,g.jsxs)(`button`,{type:`button`,className:J.railButton,"aria-current":a?`page`:void 0,"data-section":t.id,title:`${t.label} (⌘${n+1})`,"aria-label":i>0?`${t.label}, ${i} pending`:t.label,onClick:()=>N(t.id),children:[(0,g.jsx)(r,{}),i>0?(0,g.jsx)(`span`,{className:J.railDot,"data-pending":i,"aria-hidden":`true`}):null]})},t.id)})}),(0,g.jsx)(`div`,{className:J.railFoot,children:(0,g.jsx)(`button`,{type:`button`,className:J.railButton,onClick:t.cycle,title:i,"aria-label":i,"data-theme-toggle":t.theme,children:(0,g.jsx)(Fn,{preference:t.theme})})})]}),(0,g.jsx)(`main`,{className:J.section,"data-section":e.section,id:`main-content`,tabIndex:-1,children:(0,g.jsx)(oe,{resetKey:e.section,children:(0,g.jsx)(h.Suspense,{fallback:(0,g.jsx)(In,{}),children:(0,g.jsx)(n,{})})})}),(0,g.jsx)(On,{})]})}function Fn({preference:e}){return(0,g.jsxs)(`svg`,{viewBox:`0 0 16 16`,width:16,height:16,fill:`none`,stroke:`currentColor`,strokeWidth:1.4,strokeLinejoin:`round`,strokeLinecap:`round`,"aria-hidden":`true`,focusable:`false`,children:[(0,g.jsx)(`circle`,{cx:`8`,cy:`8`,r:`4.2`}),e===`dark`?(0,g.jsx)(`path`,{d:`M8 3.8a4.2 4.2 0 0 0 0 8.4Z`,fill:`currentColor`,stroke:`none`}):null,e===`light`?(0,g.jsx)(`path`,{d:`M8 1.6v1M8 13.4v1M14.4 8h-1M2.6 8h-1M12.5 3.5l-.7.7M4.2 11.8l-.7.7M12.5 12.5l-.7-.7M4.2 4.2l-.7-.7`}):null]})}function In(){return(0,g.jsx)(`div`,{className:J.loading,role:`status`,"aria-live":`polite`,children:`Loading…`})}var Ln=`verse-bootstrap`,X=`verse-sessions`,Z={key:Ln,fetch:e=>p(`/api/verse/bootstrap`,e)},Rn={key:X,fetch:e=>p(`/api/verse/sessions`,e)};function Q(e,t=``){return`/api/verse/sessions/${encodeURIComponent(e)}${t}`}function zn(e,t){return p(Q(e),t)}var Bn=class extends Error{constructor(){super(`Unlock actions with the mutation token before chatting.`),this.name=`VerseMutationLockedError`}};async function $(e,t){let n=f();if(!n)throw new Bn;let r=await ne(e,t,n);return o(),r}function Vn(){u(X),u(Ln)}async function Hn(e){let t=await $(`/api/verse/sessions`,e);return Vn(),t}async function Un(e,t){let n={text:t},r=await $(Q(e,`/turns`),n);return u(X),r}async function Wn(e){await $(Q(e,`/cancel`),{}),u(X)}async function Gn(e){await $(Q(e,`/delete`),{}),Vn()}async function Kn(e,t){let n=await $(Q(e,`/rename`),{title:t});return u(X),n}var qn=`verse-workspaces`,Jn=`verse-autonomy-scope`,Yn={key:qn,fetch:e=>p(`/api/verse/workspaces`,e)},Xn={key:Jn,fetch:e=>p(`/api/verse/autonomy-scope`,e)};function Zn(e,t){return p(Q(e,`/roots`),t)}var Qn={shell:`_shell_k4nf7_1`,checking:`_checking_k4nf7_2`};function $n(){let e=d();return(0,h.useEffect)(()=>{if(e!==`checking`)return;let t=!1;return a().then(e=>{if(!(t||e))return s(Z.key,Z.fetch).then(()=>{t||c(l(Z.key).status===`success`)})}),()=>{t=!0}},[e]),e===`checking`?(0,g.jsx)(`p`,{className:Qn.checking,role:`status`,children:`Checking for an existing Verse session…`}):e===`unauthenticated`?(0,g.jsx)(te,{heading:`Connect to Ashlr Verse`,command:`ashlr verse`,subject:`Ashlr Verse`,mutationField:!0}):(0,g.jsxs)(ae,{children:[(0,g.jsx)(ee,{}),(0,g.jsx)(`div`,{className:Qn.shell,children:(0,g.jsx)(Pn,{})})]})}export{yt as A,qe as B,At as C,D,O as E,$e as F,Be as G,v as H,Ze as I,Ve as J,Fe as K,Xe as L,dt as M,lt as N,pt as O,ct as P,Ye as R,Xt as S,Mt as T,Le as U,We as V,$n as VerseConsoleApp,Re as W,He as X,Ie as Y,yn as _,zn as a,Gt as b,Kn as c,Z as d,Q as f,bn as g,kn as h,Gn as i,ut as j,vt as k,Un as l,Yn as m,Wn as n,Zn as o,Rn as p,Pe as q,Hn as r,Vn as s,Bn as t,Xn as u,Rt as v,Ft as w,Bt as x,Qt as y,Je as z};
3
- //# sourceMappingURL=VerseConsoleApp-CRfZUV-T.js.map