aicodeman 0.6.0 → 0.6.2

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 (199) hide show
  1. package/README.md +4 -0
  2. package/dist/ai-idle-checker.d.ts +2 -1
  3. package/dist/ai-idle-checker.d.ts.map +1 -1
  4. package/dist/ai-plan-checker.d.ts +3 -2
  5. package/dist/ai-plan-checker.d.ts.map +1 -1
  6. package/dist/bash-tool-parser.d.ts +3 -2
  7. package/dist/bash-tool-parser.d.ts.map +1 -1
  8. package/dist/file-stream-manager.d.ts +3 -28
  9. package/dist/file-stream-manager.d.ts.map +1 -1
  10. package/dist/hooks-config.d.ts +8 -0
  11. package/dist/hooks-config.d.ts.map +1 -1
  12. package/dist/hooks-config.js +35 -0
  13. package/dist/hooks-config.js.map +1 -1
  14. package/dist/image-watcher.d.ts +0 -5
  15. package/dist/image-watcher.d.ts.map +1 -1
  16. package/dist/image-watcher.js +1 -0
  17. package/dist/image-watcher.js.map +1 -1
  18. package/dist/mux-interface.d.ts +4 -0
  19. package/dist/mux-interface.d.ts.map +1 -1
  20. package/dist/orchestrator-loop.d.ts +1 -15
  21. package/dist/orchestrator-loop.d.ts.map +1 -1
  22. package/dist/orchestrator-loop.js +3 -0
  23. package/dist/orchestrator-loop.js.map +1 -1
  24. package/dist/plan-orchestrator.d.ts +2 -2
  25. package/dist/plan-orchestrator.d.ts.map +1 -1
  26. package/dist/prompts/index.d.ts +1 -1
  27. package/dist/prompts/index.d.ts.map +1 -1
  28. package/dist/prompts/index.js +1 -1
  29. package/dist/prompts/index.js.map +1 -1
  30. package/dist/prompts/orchestrator.d.ts +0 -10
  31. package/dist/prompts/orchestrator.d.ts.map +1 -1
  32. package/dist/prompts/orchestrator.js +0 -15
  33. package/dist/prompts/orchestrator.js.map +1 -1
  34. package/dist/ralph-config.d.ts +2 -1
  35. package/dist/ralph-config.d.ts.map +1 -1
  36. package/dist/ralph-loop.d.ts +2 -9
  37. package/dist/ralph-loop.d.ts.map +1 -1
  38. package/dist/ralph-loop.js.map +1 -1
  39. package/dist/ralph-tracker.d.ts +0 -37
  40. package/dist/ralph-tracker.d.ts.map +1 -1
  41. package/dist/ralph-tracker.js +11 -1
  42. package/dist/ralph-tracker.js.map +1 -1
  43. package/dist/respawn-controller.d.ts +6 -64
  44. package/dist/respawn-controller.d.ts.map +1 -1
  45. package/dist/respawn-controller.js +1 -1
  46. package/dist/respawn-controller.js.map +1 -1
  47. package/dist/session-auto-ops.d.ts +2 -14
  48. package/dist/session-auto-ops.d.ts.map +1 -1
  49. package/dist/session-auto-ops.js +3 -0
  50. package/dist/session-auto-ops.js.map +1 -1
  51. package/dist/session-cli-builder.d.ts +0 -5
  52. package/dist/session-cli-builder.d.ts.map +1 -1
  53. package/dist/session-cli-builder.js +1 -1
  54. package/dist/session-cli-builder.js.map +1 -1
  55. package/dist/session-manager.d.ts +0 -15
  56. package/dist/session-manager.d.ts.map +1 -1
  57. package/dist/session-manager.js +10 -2
  58. package/dist/session-manager.js.map +1 -1
  59. package/dist/session.d.ts +12 -64
  60. package/dist/session.d.ts.map +1 -1
  61. package/dist/session.js +55 -5
  62. package/dist/session.js.map +1 -1
  63. package/dist/subagent-watcher.d.ts +0 -10
  64. package/dist/subagent-watcher.d.ts.map +1 -1
  65. package/dist/subagent-watcher.js.map +1 -1
  66. package/dist/task-queue.d.ts +0 -8
  67. package/dist/task-queue.d.ts.map +1 -1
  68. package/dist/task-queue.js +3 -0
  69. package/dist/task-queue.js.map +1 -1
  70. package/dist/task-tracker.d.ts +0 -10
  71. package/dist/task-tracker.d.ts.map +1 -1
  72. package/dist/task-tracker.js +8 -0
  73. package/dist/task-tracker.js.map +1 -1
  74. package/dist/tmux-manager.d.ts +22 -0
  75. package/dist/tmux-manager.d.ts.map +1 -1
  76. package/dist/tmux-manager.js +82 -16
  77. package/dist/tmux-manager.js.map +1 -1
  78. package/dist/transcript-watcher.d.ts +0 -34
  79. package/dist/transcript-watcher.d.ts.map +1 -1
  80. package/dist/transcript-watcher.js +0 -2
  81. package/dist/transcript-watcher.js.map +1 -1
  82. package/dist/tunnel-manager.d.ts +2 -1
  83. package/dist/tunnel-manager.d.ts.map +1 -1
  84. package/dist/types/orchestrator.d.ts +0 -2
  85. package/dist/types/orchestrator.d.ts.map +1 -1
  86. package/dist/types/orchestrator.js +0 -12
  87. package/dist/types/orchestrator.js.map +1 -1
  88. package/dist/types/respawn.d.ts +0 -16
  89. package/dist/types/respawn.d.ts.map +1 -1
  90. package/dist/types/session.d.ts +0 -8
  91. package/dist/types/session.d.ts.map +1 -1
  92. package/dist/types/session.js +3 -0
  93. package/dist/types/session.js.map +1 -1
  94. package/dist/utils/cleanup-manager.d.ts +2 -1
  95. package/dist/utils/cleanup-manager.d.ts.map +1 -1
  96. package/dist/utils/index.d.ts +4 -5
  97. package/dist/utils/index.d.ts.map +1 -1
  98. package/dist/utils/index.js +2 -3
  99. package/dist/utils/index.js.map +1 -1
  100. package/dist/utils/lru-map.d.ts +2 -1
  101. package/dist/utils/lru-map.d.ts.map +1 -1
  102. package/dist/utils/regex-patterns.d.ts +0 -10
  103. package/dist/utils/regex-patterns.d.ts.map +1 -1
  104. package/dist/utils/regex-patterns.js +0 -16
  105. package/dist/utils/regex-patterns.js.map +1 -1
  106. package/dist/utils/stale-expiration-map.d.ts +2 -1
  107. package/dist/utils/stale-expiration-map.d.ts.map +1 -1
  108. package/dist/web/middleware/auth.d.ts +2 -1
  109. package/dist/web/middleware/auth.d.ts.map +1 -1
  110. package/dist/web/ports/index.d.ts +1 -1
  111. package/dist/web/ports/index.d.ts.map +1 -1
  112. package/dist/web/public/api-client.3adebdc2.js.gz +0 -0
  113. package/dist/web/public/{app.8b544e9f.js → app.6f362fec.js} +7 -5
  114. package/dist/web/public/app.6f362fec.js.br +0 -0
  115. package/dist/web/public/app.6f362fec.js.gz +0 -0
  116. package/dist/web/public/constants.193cefd7.js.gz +0 -0
  117. package/dist/web/public/index.html +21 -9
  118. package/dist/web/public/index.html.br +0 -0
  119. package/dist/web/public/index.html.gz +0 -0
  120. package/dist/web/public/input-cjk.88082175.js.gz +0 -0
  121. package/dist/web/public/{keyboard-accessory.9bb75102.js → keyboard-accessory.29aebd9c.js} +5 -1
  122. package/dist/web/public/keyboard-accessory.29aebd9c.js.br +0 -0
  123. package/dist/web/public/keyboard-accessory.29aebd9c.js.gz +0 -0
  124. package/dist/web/public/mobile-handlers.1e2a8ef8.js.gz +0 -0
  125. package/dist/web/public/mobile.37d62c06.css +1 -0
  126. package/dist/web/public/mobile.37d62c06.css.br +0 -0
  127. package/dist/web/public/mobile.37d62c06.css.gz +0 -0
  128. package/dist/web/public/notification-manager.2d5ea8ec.js.gz +0 -0
  129. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  130. package/dist/web/public/panels-ui.07e4dee7.js.gz +0 -0
  131. package/dist/web/public/ralph-panel.61076370.js.gz +0 -0
  132. package/dist/web/public/{ralph-wizard.f31ab90e.js → ralph-wizard.6b0f0be7.js} +5 -0
  133. package/dist/web/public/ralph-wizard.6b0f0be7.js.br +0 -0
  134. package/dist/web/public/ralph-wizard.6b0f0be7.js.gz +0 -0
  135. package/dist/web/public/respawn-ui.60be6ef5.js.gz +0 -0
  136. package/dist/web/public/session-ui.536c2703.js +36 -0
  137. package/dist/web/public/session-ui.536c2703.js.br +0 -0
  138. package/dist/web/public/session-ui.536c2703.js.gz +0 -0
  139. package/dist/web/public/{settings-ui.45cbf627.js → settings-ui.25a18120.js} +2 -2
  140. package/dist/web/public/settings-ui.25a18120.js.br +0 -0
  141. package/dist/web/public/settings-ui.25a18120.js.gz +0 -0
  142. package/dist/web/public/styles.24bfe89a.css +1 -0
  143. package/dist/web/public/styles.24bfe89a.css.br +0 -0
  144. package/dist/web/public/styles.24bfe89a.css.gz +0 -0
  145. package/dist/web/public/subagent-windows.a366a4ad.js.gz +0 -0
  146. package/dist/web/public/sw.js.gz +0 -0
  147. package/dist/web/public/terminal-ui.f8f6f753.js +3 -0
  148. package/dist/web/public/terminal-ui.f8f6f753.js.br +0 -0
  149. package/dist/web/public/terminal-ui.f8f6f753.js.gz +0 -0
  150. package/dist/web/public/upload.html.gz +0 -0
  151. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  152. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  153. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  154. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  155. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  156. package/dist/web/public/vendor/xterm.css.gz +0 -0
  157. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  158. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  159. package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
  160. package/dist/web/routes/hook-event-routes.js +7 -0
  161. package/dist/web/routes/hook-event-routes.js.map +1 -1
  162. package/dist/web/routes/ralph-routes.d.ts.map +1 -1
  163. package/dist/web/routes/ralph-routes.js +7 -2
  164. package/dist/web/routes/ralph-routes.js.map +1 -1
  165. package/dist/web/routes/session-routes.d.ts.map +1 -1
  166. package/dist/web/routes/session-routes.js +113 -9
  167. package/dist/web/routes/session-routes.js.map +1 -1
  168. package/dist/web/schemas.d.ts +4 -38
  169. package/dist/web/schemas.d.ts.map +1 -1
  170. package/dist/web/schemas.js +4 -0
  171. package/dist/web/schemas.js.map +1 -1
  172. package/dist/web/server.d.ts.map +1 -1
  173. package/dist/web/server.js +9 -1
  174. package/dist/web/server.js.map +1 -1
  175. package/dist/web/session-listener-wiring.d.ts +2 -1
  176. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  177. package/dist/web/sse-stream-manager.d.ts +2 -1
  178. package/dist/web/sse-stream-manager.d.ts.map +1 -1
  179. package/package.json +4 -2
  180. package/dist/web/public/app.8b544e9f.js.br +0 -0
  181. package/dist/web/public/app.8b544e9f.js.gz +0 -0
  182. package/dist/web/public/keyboard-accessory.9bb75102.js.br +0 -0
  183. package/dist/web/public/keyboard-accessory.9bb75102.js.gz +0 -0
  184. package/dist/web/public/mobile.225b595d.css +0 -1
  185. package/dist/web/public/mobile.225b595d.css.br +0 -0
  186. package/dist/web/public/mobile.225b595d.css.gz +0 -0
  187. package/dist/web/public/ralph-wizard.f31ab90e.js.br +0 -0
  188. package/dist/web/public/ralph-wizard.f31ab90e.js.gz +0 -0
  189. package/dist/web/public/session-ui.15c8b22a.js +0 -36
  190. package/dist/web/public/session-ui.15c8b22a.js.br +0 -0
  191. package/dist/web/public/session-ui.15c8b22a.js.gz +0 -0
  192. package/dist/web/public/settings-ui.45cbf627.js.br +0 -0
  193. package/dist/web/public/settings-ui.45cbf627.js.gz +0 -0
  194. package/dist/web/public/styles.2e748af7.css +0 -1
  195. package/dist/web/public/styles.2e748af7.css.br +0 -0
  196. package/dist/web/public/styles.2e748af7.css.gz +0 -0
  197. package/dist/web/public/terminal-ui.74920567.js +0 -3
  198. package/dist/web/public/terminal-ui.74920567.js.br +0 -0
  199. package/dist/web/public/terminal-ui.74920567.js.gz +0 -0
@@ -0,0 +1 @@
1
+ :root{--bg-dark: #09090b;--bg-card: #131316;--bg-input: #1a1a1f;--bg-hover: #1f1f26;--border: #232329;--border-light: #2e2e38;--text: #ececf0;--text-dim: #8b8b97;--text-muted: #52525e;--accent: #3b82f6;--accent-hover: #60a5fa;--green: #22c55e;--yellow: #eab308;--red: #ef4444;--header-height: 36px;--toolbar-height: 42px;--glass-bg: rgba(19, 19, 22, .85);--glass-border: rgba(255, 255, 255, .06);--subtle-shadow: 0 -1px 3px rgba(0, 0, 0, .3), 0 -4px 16px rgba(0, 0, 0, .15);--btn-radius: 6px;--transition-smooth: .2s cubic-bezier(.4, 0, .2, 1);--session-red: #ef4444;--session-orange: #f97316;--session-yellow: #eab308;--session-green: #22c55e;--session-blue: #3b82f6;--session-purple: #a855f7;--session-pink: #ec4899;--safe-area-top: env(safe-area-inset-top, 0px);--safe-area-bottom: env(safe-area-inset-bottom, 0px);--safe-area-left: env(safe-area-inset-left, 0px);--safe-area-right: env(safe-area-inset-right, 0px);--touch-target-min: 44px}*{box-sizing:border-box;margin:0;padding:0}.skip-link{position:absolute;top:-50px;left:8px;padding:8px 16px;background:var(--accent);color:#fff;text-decoration:none;border-radius:4px;z-index:10000;font-size:.875rem;transition:top .2s}.skip-link:focus{top:8px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}button:focus-visible,.btn-toolbar:focus-visible,.btn-icon:focus-visible,.btn-icon-header:focus-visible,.btn-icon-sm:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);outline:none}.xterm-helper-textarea{border:none!important;box-shadow:none!important;outline:none!important;opacity:0!important;caret-color:transparent!important}.touch-device .xterm .xterm-helper-textarea{left:0!important;top:0!important;width:1px!important;height:1px!important;z-index:-1!important;font-size:16px!important}.session-tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;z-index:1}.modal-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg-dark);color:var(--text);height:100vh;height:100dvh;height:var(--app-height, 100dvh);overflow:hidden}.app{display:flex;flex-direction:column;height:100vh;height:100dvh;height:var(--app-height, 100dvh)}.header{display:flex;align-items:flex-start;min-height:var(--header-height);padding:.35rem .75rem;background:var(--glass-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--glass-border);flex-shrink:0;position:relative;z-index:100;contain:layout style paint}.header-brand{display:flex;align-items:center;padding-right:.75rem;border-right:1px solid var(--glass-border);margin-right:.5rem;height:var(--header-height);flex-shrink:0}.logo{font-size:.85rem;font-weight:700;color:var(--accent-hover);letter-spacing:-.02em;cursor:pointer;transition:color var(--transition-smooth),text-shadow var(--transition-smooth),filter var(--transition-smooth)}.logo:hover{color:#93c5fd;text-shadow:0 0 12px rgba(96,165,250,.5),0 0 24px rgba(96,165,250,.2);filter:brightness(1.1)}.session-tabs{display:flex;align-items:flex-start;flex-wrap:nowrap;gap:4px 2px;flex:1;overflow-x:auto;overflow-y:hidden;padding:.15rem .25rem;contain:layout}.session-tabs.tabs-two-rows{flex-wrap:wrap;overflow-x:hidden;overflow-y:auto;max-height:120px}.session-tabs::-webkit-scrollbar{width:4px;height:0}.session-tabs::-webkit-scrollbar-track{background:transparent}.session-tabs::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.session-tabs::-webkit-scrollbar-thumb:hover{background:var(--border-light)}.session-tab{display:flex;align-items:center;gap:.35rem;padding:.35rem .6rem;background:transparent;border:1px solid transparent;border-radius:var(--btn-radius);color:var(--text-dim);font-size:.75rem;cursor:pointer;white-space:nowrap;transition:background var(--transition-smooth),border-color var(--transition-smooth),color var(--transition-smooth),box-shadow var(--transition-smooth)}.session-tab:hover{background:#22c55e0f;color:var(--text);box-shadow:0 0 8px 2px #22c55e2e,inset 0 0 6px 1px #22c55e0f;border-color:#22c55e2e}.session-tab:active{background:#22c55e1f;box-shadow:0 0 12px 4px #22c55e59,inset 0 0 8px 2px #22c55e26;border-color:#22c55e4d}.session-tab.active{background:#22c55e26!important;border:2px solid #00FF66!important;color:#fff!important;box-shadow:none!important;outline:none!important}.session-tab.tab-glow{animation:tab-glow .35s ease-out}@keyframes tab-glow{0%{box-shadow:0 0 #22c55e00;background:transparent}10%{box-shadow:0 0 18px 6px #22c55eb3,0 0 40px 12px #22c55e4d,inset 0 0 12px 3px #22c55e40;background:#22c55e1f}30%{box-shadow:0 0 14px 5px #22c55e80,0 0 30px 10px #22c55e33,inset 0 0 10px 2px #22c55e26;background:#22c55e14}to{box-shadow:0 0 #22c55e00;background:transparent}}.session-tab .tab-status{width:6px;height:6px;border-radius:50%;flex-shrink:0}.session-tab .tab-status.idle{background:var(--green)}.session-tab .tab-status.busy{background:var(--green);animation:pulse 1.5s infinite;will-change:opacity}.session-tab .tab-status.error{background:var(--red)}.session-tab .tab-status.ended{background:var(--text-muted);opacity:.5}.session-tab[data-ended]{opacity:.55}.session-tab[data-color=red]{border-left:3px solid var(--session-red)}.session-tab[data-color=orange]{border-left:3px solid var(--session-orange)}.session-tab[data-color=yellow]{border-left:3px solid var(--session-yellow)}.session-tab[data-color=green]{border-left:3px solid var(--session-green)}.session-tab[data-color=blue]{border-left:3px solid var(--session-blue)}.session-tab[data-color=purple]{border-left:3px solid var(--session-purple)}.session-tab[data-color=pink]{border-left:3px solid var(--session-pink)}.session-tab.active[data-color=red]{background:#ef444426;border-color:#ef444480;box-shadow:0 0 10px #ef44444d}.session-tab.active[data-color=orange]{background:#f9731626;border-color:#f9731680;box-shadow:0 0 10px #f973164d}.session-tab.active[data-color=yellow]{background:#eab30826;border-color:#eab30880;box-shadow:0 0 10px #eab3084d}.session-tab.active[data-color=green]{background:#22c55e26;border-color:#22c55e80;box-shadow:0 0 10px #22c55e4d}.session-tab.active[data-color=blue]{background:#3b82f626;border-color:#3b82f680;box-shadow:0 0 10px #3b82f64d}.session-tab.active[data-color=purple]{background:#a855f726;border-color:#a855f780;box-shadow:0 0 10px #a855f74d}.session-tab.active[data-color=pink]{background:#ec489926;border-color:#ec489980;box-shadow:0 0 10px #ec48994d}.session-tab .tab-number{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;background:#ffffff26;border:1px solid rgba(255,255,255,.35);color:#ffffffbf;font-size:.6rem;font-weight:700;flex-shrink:0;font-family:monospace}.session-tab.active .tab-number{background:#0f63!important;border-color:#00ff6680!important;color:#0f6!important}.session-tab .tab-info{display:flex;flex-direction:column;overflow:hidden;min-width:0}.session-tab .tab-name-row{display:flex;align-items:center;gap:.25rem}.session-tab .tab-name{overflow:hidden;text-overflow:ellipsis}.session-tab .tab-prefix{color:var(--text-muted)}.session-tab .tab-suffix{color:var(--text);font-weight:500}.session-tab .tab-folder{font-size:.6rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2;display:none}.tabs-show-folder .session-tab .tab-folder{display:block}.session-tab .tab-close{opacity:0;width:0;padding:0;font-size:.9rem;line-height:1;color:var(--text-muted);overflow:hidden;cursor:default;border-radius:3px;transition:opacity .05s ease-out,width .05s ease-out,padding .05s ease-out}.session-tab:hover .tab-close{opacity:1;width:auto;padding:.15rem .35rem}.session-tab .tab-close:hover{color:var(--red);background:#ffffff1a}.session-tab.new-tab{padding:.35rem .5rem;color:var(--text-muted);font-size:1rem;font-weight:300}.session-tab.new-tab:hover{color:var(--green)}.session-tab.tab-alert-action{animation:tab-blink-red 2.5s ease-in-out infinite}.session-tab.tab-alert-idle{animation:tab-blink-yellow 3.5s ease-in-out infinite}@keyframes tab-blink-red{0%,to{background:transparent;border-color:transparent}50%{background:#ef44441f;border-color:var(--red)}}@keyframes tab-blink-yellow{0%,to{background:transparent;border-color:transparent}50%{background:#eab3081a;border-color:var(--yellow)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.session-tab[draggable=true]{cursor:grab}.session-tab.dragging{opacity:.5;cursor:grabbing}.session-tab.drag-over-left{box-shadow:-2px 0 0 0 var(--accent)}.session-tab.drag-over-right{box-shadow:2px 0 0 0 var(--accent)}.header-right{display:flex;align-items:center;gap:.5rem;margin-left:auto;padding-left:.75rem;border-left:1px solid var(--glass-border)}.connection-indicator{display:flex;align-items:center;gap:.35rem;font-size:.7rem;color:var(--text-dim);font-family:SF Mono,Monaco,monospace;white-space:nowrap}.connection-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.connection-dot.offline{background:var(--red);box-shadow:0 0 6px var(--red)}.connection-dot.reconnecting{background:var(--yellow);animation:connection-pulse 1.5s ease-in-out infinite}.connection-dot.draining{background:var(--green);animation:connection-pulse .8s ease-in-out infinite}@keyframes connection-pulse{0%,to{opacity:1}50%{opacity:.3}}.tunnel-indicator{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:transparent;border:none;cursor:pointer;border-radius:var(--btn-radius);padding:0;position:relative;transition:background var(--transition-smooth)}.tunnel-indicator:hover{background:#ffffff0f}.tunnel-dot{width:9px;height:9px;border-radius:50%;background:#22c55e;box-shadow:0 0 6px #22c55e,0 0 12px #22c55e66;animation:tunnel-glow 2s ease-in-out infinite}.tunnel-indicator.connecting .tunnel-dot{background:#f59e0b;box-shadow:0 0 6px #f59e0b,0 0 12px #f59e0b66;animation:tunnel-glow-amber 1s ease-in-out infinite}@keyframes tunnel-glow{0%,to{box-shadow:0 0 6px #22c55e,0 0 12px #22c55e66}50%{box-shadow:0 0 8px #22c55e,0 0 18px #22c55e99}}@keyframes tunnel-glow-amber{0%,to{box-shadow:0 0 6px #f59e0b,0 0 12px #f59e0b66;opacity:1}50%{box-shadow:0 0 4px #f59e0b;opacity:.4}}.tunnel-panel{position:fixed;top:36px;right:12px;width:320px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 32px #00000080;z-index:1000;overflow:hidden}.tunnel-panel-header{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border)}.tunnel-panel-header h3{margin:0;font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px}.tunnel-panel-status{font-size:11px;font-weight:400;color:#22c55e}.tunnel-panel-status.offline{color:var(--text-muted)}.tunnel-panel-body{padding:10px 14px}.tunnel-panel-section{margin-bottom:12px}.tunnel-panel-section:last-child{margin-bottom:0}.tunnel-panel-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:6px}.tunnel-panel-url{font-family:SF Mono,Monaco,monospace;font-size:11px;color:var(--accent-hover);word-break:break-all;cursor:pointer;padding:6px 8px;background:var(--bg-input);border-radius:4px;transition:background .15s}.tunnel-panel-url:hover{background:var(--bg-hover)}.tunnel-panel-stat{display:flex;align-items:center;justify-content:space-between;padding:4px 0;font-size:12px;color:var(--text-dim)}.tunnel-panel-stat-value{color:var(--text);font-family:SF Mono,Monaco,monospace;font-size:11px}.tunnel-panel-session{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg-input);border-radius:4px;margin-bottom:4px;font-size:11px;color:var(--text-dim)}.tunnel-panel-session-dot{width:6px;height:6px;border-radius:50%;background:#22c55e;flex-shrink:0}.tunnel-panel-session-info{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tunnel-panel-session-method{font-size:10px;padding:1px 5px;border-radius:3px;background:var(--bg-hover);color:var(--text-muted);text-transform:uppercase;flex-shrink:0}.tunnel-panel-actions{display:flex;gap:6px;padding-top:8px;border-top:1px solid var(--border)}.tunnel-panel-btn{flex:1;padding:6px 0;font-size:12px;font-weight:500;border:1px solid var(--border);border-radius:5px;cursor:pointer;text-align:center;transition:all .15s}.tunnel-panel-btn.btn-start{background:#22c55e1a;border-color:#22c55e4d;color:#22c55e}.tunnel-panel-btn.btn-start:hover{background:#22c55e33}.tunnel-panel-btn.btn-stop{background:#ef44441a;border-color:#ef44444d;color:#ef4444}.tunnel-panel-btn.btn-stop:hover{background:#ef444433}.tunnel-panel-btn.btn-qr{background:var(--bg-input);color:var(--text-dim)}.tunnel-panel-btn.btn-qr:hover{background:var(--bg-hover);color:var(--text)}.tunnel-panel-btn.btn-revoke{background:#ef44441a;border-color:#ef44444d;color:#ef4444;font-size:11px}.tunnel-panel-btn.btn-revoke:hover{background:#ef444433}.tunnel-panel-empty{font-size:11px;color:var(--text-muted);font-style:italic;padding:4px 0}.header-tokens{font-size:.75rem;font-weight:500;color:var(--accent-hover);font-family:SF Mono,Monaco,monospace}.header-system-stats{display:flex;gap:.75rem;font-size:.65rem;font-family:SF Mono,Monaco,monospace;color:var(--text-dim);padding:0 .5rem}.stat-item{display:flex;align-items:center;gap:.35rem}.stat-label{color:var(--text-muted);font-size:.6rem;text-transform:uppercase;min-width:24px}.stat-bar{width:40px;height:5px;background:#ffffff0f;border-radius:3px;overflow:hidden}.stat-bar-fill{height:100%;border-radius:3px;transition:width .3s ease,background .3s ease}.stat-bar-cpu{background:linear-gradient(90deg,var(--green) 0%,var(--green) 100%)}.stat-bar-cpu.medium{background:linear-gradient(90deg,var(--green) 0%,var(--yellow) 100%)}.stat-bar-cpu.high{background:linear-gradient(90deg,var(--yellow) 0%,var(--red) 100%)}.stat-bar-mem{background:linear-gradient(90deg,var(--accent) 0%,var(--accent-hover) 100%)}.stat-bar-mem.medium{background:linear-gradient(90deg,var(--accent) 0%,var(--yellow) 100%)}.stat-bar-mem.high{background:linear-gradient(90deg,var(--yellow) 0%,var(--red) 100%)}.stat-value{min-width:32px;text-align:right;color:var(--text-dim)}.stat-value.high{color:var(--red);font-weight:500}.btn-icon-header{display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:transparent;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;border-radius:var(--btn-radius);transition:all var(--transition-smooth)}.btn-icon-header:hover{background:#ffffff12;color:var(--text);transform:rotate(45deg)}.btn-icon-header.btn-settings{width:30px;height:30px;margin-left:0}.btn-icon-header.btn-sm{width:20px;height:20px;font-size:.7rem;font-weight:600}.btn-icon-header.btn-sm:hover{transform:none}.header-font-controls{display:flex;align-items:center;gap:.25rem;padding:.15rem .4rem;background:#ffffff0a;border:1px solid rgba(255,255,255,.04);border-radius:var(--btn-radius)}.header-font-controls .font-size-display{font-size:.7rem;color:var(--text-muted);min-width:18px;text-align:center;font-family:SF Mono,Monaco,monospace}.session-tab .tab-gear{opacity:0;width:0;padding:0;font-size:1rem;line-height:1;color:var(--text-muted);cursor:pointer;overflow:hidden;transition:opacity .15s,width .15s,padding .15s,transform .2s}.session-tab:hover .tab-gear{opacity:1;width:auto;padding:0 .3rem}.session-tab .tab-gear:hover{color:var(--accent-hover);transform:rotate(45deg)}.session-tab .tab-mode{font-size:.6rem;padding:1px 4px;border-radius:3px;background:var(--bg-hover);color:var(--text-muted);text-transform:uppercase}.session-tab .tab-mode.shell{background:#eab30833;color:var(--yellow)}.session-tab .tab-mode.opencode{background:#10b98133;color:#10b981}.timer-banner{display:flex;align-items:center;gap:1rem;padding:.4rem 1rem;background:linear-gradient(90deg,#1e3a5fcc,#152238cc);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid rgba(59,130,246,.2);flex-shrink:0}.timer-content{display:flex;align-items:center;gap:1rem;flex:1}.timer-value{font-size:1rem;font-weight:600;font-family:SF Mono,Monaco,monospace;color:var(--accent-hover)}.timer-progress{flex:1;height:4px;background:#0000004d;border-radius:2px;max-width:200px}.timer-progress-fill{height:100%;background:linear-gradient(90deg,#3b82f6,#60a5fa);border-radius:2px;transition:width 1s linear}.timer-meta{font-size:.7rem;color:var(--text-dim)}.respawn-banner{display:flex;padding:.25rem .75rem;background:linear-gradient(90deg,#1e3a1ecc,#132513cc);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid rgba(34,197,94,.2);font-size:.7rem;flex-shrink:0}.respawn-compact-layout{display:flex;width:100%;gap:1rem}.respawn-status-col{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex-shrink:0}.respawn-status-row1{display:flex;align-items:center;gap:.5rem}.respawn-status-row2{display:flex;align-items:center;gap:.5rem;min-height:1.2em;font-size:.65rem;color:var(--text-dim)}.respawn-status-row2:empty{display:none}.respawn-countdown-timers{display:flex;gap:.3rem;flex-wrap:wrap}.respawn-countdown-timer{display:flex;align-items:center;gap:.25rem;background:#00000059;padding:.1rem .35rem;border-radius:3px;font-family:SF Mono,Monaco,monospace;font-size:.6rem}.respawn-countdown-timer .timer-name{color:var(--text-dim)}.respawn-countdown-timer .timer-value{color:var(--green);font-weight:500;min-width:2em;text-align:right}.respawn-timer-bar{width:30px;height:2px;background:#ffffff26;border-radius:1px;overflow:hidden}.respawn-timer-progress{height:100%;background:var(--green);transition:width .1s linear}.respawn-action-log{flex:1;max-height:3.2em;overflow-y:auto;font-size:.65rem;font-family:SF Mono,Monaco,monospace;color:var(--text-dim);border-left:1px solid rgba(34,197,94,.2);padding-left:.5rem}.respawn-action-log::-webkit-scrollbar{width:3px}.respawn-action-log::-webkit-scrollbar-thumb{background:#22c55e4d;border-radius:2px}.respawn-action-entry{padding:.05rem 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.respawn-action-entry .action-time{color:var(--text-muted);margin-right:.3rem}.respawn-action-entry .action-type{color:var(--green);margin-right:.3rem}.respawn-action-entry .action-detail{color:var(--text-dim)}.respawn-action-entry.action-command{color:var(--accent)}.respawn-action-entry.action-command .action-type{color:var(--accent);font-weight:600}.respawn-action-entry.action-command .action-detail{color:var(--text);font-weight:500}.respawn-indicator{color:var(--green);animation:spin 2s linear infinite;font-size:.8rem}.respawn-state{color:#fff;font-weight:600;background:#22c55e4d;padding:.1rem .4rem;border-radius:3px;font-size:.7rem}.respawn-state.respawn-blocked{background:#f443364d;color:#f44336;animation:respawn-blocked-pulse 1.5s ease-in-out infinite}@keyframes respawn-blocked-pulse{0%,to{opacity:1}50%{opacity:.6}}.respawn-cycles{color:var(--text-muted);font-family:SF Mono,Monaco,monospace;font-size:.65rem}.respawn-timer{color:var(--accent-hover);font-family:SF Mono,Monaco,monospace;font-weight:500;font-size:.65rem;padding:0 .4rem;border-left:1px solid rgba(34,197,94,.3)}.respawn-tokens{color:var(--text-dim);font-family:SF Mono,Monaco,monospace;font-size:.65rem}.detection-status{color:var(--text-dim);font-size:.65rem}.detection-ai-check{font-size:.65rem;padding:.05rem .3rem;border-radius:2px;background:#ffffff1a}.detection-ai-check.ai-checking{color:var(--accent);background:#3b82f626}.detection-ai-check.ai-idle{color:var(--green);background:#22c55e26}.detection-ai-check.ai-working{color:var(--yellow);background:#eab30826}.detection-ai-check.ai-disabled{color:var(--text-muted);background:#ffffff0d}.detection-confidence{color:var(--text-dim);font-family:SF Mono,Monaco,monospace;font-size:.6rem;padding:.05rem .25rem;background:#22c55e26;border-radius:2px}.detection-confidence.high{background:#22c55e4d;color:var(--green)}.detection-confidence.medium{background:#eab30833;color:var(--yellow)}.detection-confidence.hook-confirmed{background:#8b5cf64d;color:var(--purple, #a78bfa)}.detection-hook{font-size:.65rem;padding:.05rem .3rem;border-radius:2px;background:#8b5cf626;color:var(--purple, #a78bfa)}.detection-hook.hook-active{background:#8b5cf640;color:var(--purple, #a78bfa);font-weight:500}@keyframes pulse-hook{0%,to{opacity:1}50%{opacity:.7}}.ralph-panel{background:var(--glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--glass-border);font-size:.75rem;flex-shrink:0;overflow:hidden;position:relative;overflow-anchor:none;contain:layout style paint}.ralph-ring-mini{position:relative;width:32px;height:32px;flex-shrink:0}.ralph-ring-svg{width:100%;height:100%;transform:rotate(-90deg)}.ralph-ring-bg{fill:none;stroke:var(--bg-input);stroke-width:3}.ralph-ring-progress{fill:none;stroke:url(#ralphGradient);stroke-width:3;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset .5s ease-out}.ralph-ring-progress-mini{fill:none;stroke:url(#ralphGradientMini);stroke-width:3;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset .5s ease-out}.ralph-ring-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.4rem;font-weight:700;background:linear-gradient(135deg,#3b82f6,#22c55e);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1;text-align:center}.ralph-summary-info{flex:1;display:flex;align-items:center;gap:.75rem;min-width:0}.ralph-title{font-weight:600;color:var(--text);font-size:.8rem;white-space:nowrap}.ralph-status-badge{display:flex;align-items:center;gap:.35rem;padding:.2rem .5rem;border-radius:4px;background:var(--bg-input);font-size:.7rem;font-weight:500}.ralph-status-dot{width:6px;height:6px;border-radius:50%;background:var(--text-muted);transition:background .2s}.ralph-status-badge.active .ralph-status-dot{background:var(--accent);animation:ralph-pulse 1.5s ease-in-out infinite}.ralph-status-badge.completed .ralph-status-dot{background:var(--green)}.ralph-status-badge.tracking .ralph-status-dot{background:var(--yellow)}@keyframes ralph-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}.ralph-circuit-breaker{display:flex;align-items:center;gap:.25rem;padding:.2rem .5rem;border-radius:4px;font-size:.7rem;font-weight:600;cursor:pointer;transition:all .2s;margin-left:.5rem}.ralph-circuit-breaker.half-open{background:#ffc10733;color:#ffc107;border:1px solid rgba(255,193,7,.4)}.ralph-circuit-breaker.half-open:hover{background:#ffc1074d}.ralph-circuit-breaker.open{background:#f4433633;color:#f44336;border:1px solid rgba(244,67,54,.4);animation:circuit-breaker-pulse 1s ease-in-out infinite}.ralph-circuit-breaker.open:hover{background:#f443364d}.ralph-circuit-breaker .cb-icon{font-size:.8rem}.ralph-circuit-breaker .cb-text{font-size:.65rem;text-transform:uppercase;letter-spacing:.5px}@keyframes circuit-breaker-pulse{0%,to{opacity:1}50%{opacity:.7}}.ralph-status-block{background:var(--bg-input);border-radius:4px;padding:.5rem .75rem;margin-top:.5rem;font-size:.75rem}.ralph-status-block-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem;font-weight:600;color:var(--text-bright)}.ralph-status-block-status{padding:.1rem .4rem;border-radius:3px;font-size:.65rem;font-weight:600;text-transform:uppercase}.ralph-status-block-status.in-progress{background:#2196f333;color:#2196f3}.ralph-status-block-status.complete{background:#4caf5033;color:#4caf50}.ralph-status-block-status.blocked{background:#f4433633;color:#f44336}.ralph-status-block-stats{display:flex;gap:1rem;color:var(--text-dim)}.ralph-status-block-stats span{display:flex;align-items:center;gap:.25rem}.ralph-status-block-recommendation{margin-top:.4rem;padding-top:.4rem;border-top:1px solid var(--border);color:var(--text-muted);font-style:italic}.ralph-summary-stats{display:flex;align-items:center;gap:.75rem}.ralph-stat{display:flex;align-items:center;gap:.25rem;color:var(--text-dim);font-size:.7rem}.ralph-stat-icon{font-size:.75rem;opacity:.7}.ralph-toggle{color:var(--text-dim);font-size:.6rem;flex-shrink:0}.ralph-panel.collapsed .ralph-detail{display:none}.ralph-detail{padding:.5rem .75rem;border-top:1px solid var(--border);background:var(--bg-dark)}.ralph-detail-row{display:flex;align-items:center;gap:1rem}.ralph-ring-compact{position:relative;width:75px;height:75px;flex-shrink:0}.ralph-ring-compact .ralph-ring-percent{font-size:.95rem;font-weight:600}.ralph-ring-compact .ralph-ring-label{font-size:.55rem}.ralph-info-unified{flex:1;display:flex;align-items:flex-start;gap:.75rem;overflow:hidden;min-width:0;background:var(--bg-input);padding:.4rem .6rem;border-radius:4px}.ralph-info-labels{display:grid;grid-template-columns:auto auto;gap:.15rem .5rem;flex-shrink:0;align-items:center}.ralph-info-row{display:contents}.ralph-info-label{font-size:.5rem;white-space:nowrap;text-transform:uppercase;letter-spacing:.3px;color:var(--text-muted);text-align:right}.ralph-info-unified code{font-size:.7rem;font-weight:500;padding:0;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:transparent;color:var(--text)}.ralph-info-unified span:not(.ralph-info-label){font-size:.7rem;font-weight:500;color:var(--text)}.ralph-info-unified .ralph-tasks-count{font-size:.7rem;font-weight:500;color:var(--text)}.ralph-info-unified .ralph-tasks-grid{flex:1;display:flex;flex-wrap:wrap;gap:.2rem;padding:0;max-height:60px;overflow-y:auto;align-content:flex-start}.ralph-tasks-compact .ralph-task-card{padding:.2rem .4rem;font-size:.65rem;border-left-width:2px}.ralph-tasks-compact .ralph-task-icon{font-size:.7rem}.ralph-tasks-compact .ralph-task-content{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ralph-ring-svg-large{width:100%;height:100%;transform:rotate(-90deg)}.ralph-ring-track{fill:none;stroke:var(--bg-input);stroke-width:6}.ralph-ring-fill{fill:none;stroke:url(#ralphGradient);stroke-width:6;stroke-linecap:round;stroke-dasharray:264;stroke-dashoffset:264;transition:stroke-dashoffset .5s ease-out}.ralph-ring-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.ralph-ring-percent{font-size:1.25rem;font-weight:700;color:var(--text);line-height:1}.ralph-ring-label{font-size:.6rem;color:var(--text-dim);margin-top:.15rem}.ralph-tasks-count{color:var(--text-dim);font-weight:400}.ralph-tasks-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.5rem;padding:.5rem;max-height:200px;overflow-y:auto}.ralph-task-card{display:flex;align-items:flex-start;gap:.5rem;padding:.5rem;background:var(--bg-dark);border-radius:4px;border-left:2px solid var(--text-muted);transition:border-color .2s,background .2s;position:relative}.ralph-task-card.task-pending{border-left-color:var(--text-muted)}.ralph-task-card.task-in-progress{border-left-color:var(--accent);background:#3b82f60d}.ralph-task-card.task-completed{border-left-color:var(--green);opacity:.75}.ralph-task-icon{flex-shrink:0;width:16px;height:16px;display:flex;align-items:center;justify-content:center;font-size:.7rem;border-radius:50%}.ralph-task-card.task-pending .ralph-task-icon{color:var(--text-muted)}.ralph-task-card.task-in-progress .ralph-task-icon{color:var(--accent);animation:ralph-spin 2s linear infinite}.ralph-task-card.task-completed .ralph-task-icon{color:var(--green)}@keyframes ralph-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ralph-task-content{flex:1;font-size:.7rem;color:var(--text-dim);line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.ralph-task-card.task-completed .ralph-task-content{color:var(--text-dim)}.ralph-task-priority{font-size:.55rem;font-weight:700;padding:.1rem .25rem;border-radius:2px;flex-shrink:0;text-transform:uppercase}.ralph-task-priority.priority-p0{background:#f443364d;color:#f44336}.ralph-task-priority.priority-p1{background:#ffc1074d;color:#ffc107}.ralph-task-priority.priority-p2{background:#2196f333;color:#2196f3}.ralph-task-card.task-priority-p0{border-left-color:#f44336}.ralph-task-card.task-priority-p1:not(.task-completed){border-left-color:#ffc107}.ralph-state-empty{color:var(--text-muted);font-style:italic;padding:.5rem}.ralph-summary{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;user-select:none;transition:background .15s}.ralph-summary-content{display:flex;align-items:center;gap:.75rem;flex:1;cursor:pointer}.ralph-summary-content:hover{background:var(--bg-hover)}.ralph-controls{display:flex;gap:.25rem;flex-shrink:0}.ralph-menu-container{position:relative}.ralph-dropdown{display:none;position:absolute;top:100%;right:0;background:#16161cf2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:10px;min-width:170px;box-shadow:0 8px 32px #0006,0 2px 8px #0003;z-index:1000;padding:4px}.ralph-dropdown.show{display:block}.ralph-dropdown button{display:block;width:100%;padding:.5rem .75rem;border:none;background:transparent;color:var(--text);text-align:left;font-size:.75rem;cursor:pointer;border-radius:var(--btn-radius);transition:background var(--transition-smooth)}.ralph-dropdown button:hover{background:#ffffff12}.ralph-dropdown hr{margin:.25rem 4px;border:none;border-top:1px solid rgba(255,255,255,.06)}.ralph-panel.detached{position:fixed;top:80px;left:50px;width:600px;height:400px;min-width:350px;min-height:200px;max-width:90vw;max-height:80vh;z-index:1000;border:1px solid rgba(255,255,255,.08);border-radius:12px;box-shadow:0 16px 64px #00000080,0 4px 16px #0000004d;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);overflow:hidden;resize:both;display:flex;flex-direction:column}.ralph-panel.detached .ralph-summary{cursor:move;background:linear-gradient(180deg,var(--bg-hover) 0%,var(--bg-card) 100%);border-bottom:1px solid var(--border);border-radius:8px 8px 0 0;flex-shrink:0}.ralph-panel.detached .ralph-summary-content{cursor:move}.ralph-panel.detached .ralph-summary-content:hover{background:transparent}.ralph-panel.detached .ralph-detail{flex:1;max-height:none;overflow:auto;display:flex;flex-direction:column}.ralph-panel.detached .ralph-detail-row{flex:1;overflow:auto}.ralph-panel.detached .ralph-info-unified{flex-direction:column;flex:1;overflow:auto}.ralph-panel.detached .ralph-info-unified .ralph-tasks-grid{max-height:none;flex:1}.ralph-panel.detached.collapsed{min-height:auto;height:auto}.main{flex:1;display:flex;overflow:hidden;background:var(--bg-dark);position:relative}.terminal-wrap{flex:1;display:flex;flex-direction:column;overflow:hidden}.terminal-container{flex:1;background:#0d0d0d;overflow:hidden;position:relative;contain:layout paint;will-change:contents}.terminal-container .xterm{height:100%;padding:0}.terminal-container .xterm-viewport{background:transparent!important}.welcome-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--bg-dark);z-index:10;opacity:0;pointer-events:none;transition:opacity .3s cubic-bezier(.4,0,.2,1)}.welcome-overlay.visible{opacity:1;pointer-events:auto}.welcome-content{text-align:center;max-width:520px;padding:2rem}.welcome-title{font-size:3.5rem;font-weight:800;background:linear-gradient(135deg,#60a5fa,#93c5fd,#60a5fa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:1rem;letter-spacing:-.04em}.welcome-desc{color:var(--text-dim);font-size:.9rem;line-height:1.6;margin-bottom:.5rem}.welcome-actions{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap;margin-top:2rem;margin-bottom:1.5rem}.welcome-btn{display:flex;align-items:center;gap:.5rem;padding:.7rem 1.3rem;font-size:.85rem;font-weight:600;border-radius:10px;border:1px solid transparent;cursor:pointer;transition:all var(--transition-smooth);letter-spacing:.01em}.welcome-btn-claude{background:linear-gradient(135deg,#1a3358,#1e4fb8,#2563eb);border-color:#3b82f666;color:#e0e7ff;box-shadow:0 2px 8px #2563eb33,inset 0 1px #ffffff14}.welcome-btn-claude:hover{background:linear-gradient(135deg,#2454a8,#2d6cf0,#4b8af7);box-shadow:0 4px 20px #3b82f659,0 0 40px #3b82f626,inset 0 1px #ffffff1a;border-color:#60a5fa80;color:#fff;transform:translateY(-1px)}.welcome-btn-opencode{background:linear-gradient(135deg,#0a2e2a,#0b3d35,#0d4a40);border-color:#10b98166;color:#6ee7b7;box-shadow:0 2px 8px #10b98126,inset 0 1px #ffffff0f}.welcome-btn-opencode:hover{background:linear-gradient(135deg,#0d4a40,#116a58,#15856e);box-shadow:0 4px 20px #10b9814d,0 0 40px #10b9811a,inset 0 1px #ffffff14;border-color:#34d39980;color:#a7f3d0;transform:translateY(-1px)}.welcome-btn-tunnel{background:linear-gradient(135deg,#221538,#3b1a7a,#6d28d9);border-color:#7c3aed66;color:#ddd6fe;box-shadow:0 2px 8px #6d28d933,inset 0 1px #ffffff0f}.welcome-btn-tunnel:hover{background:linear-gradient(135deg,#4c1d95,#6d28d9,#7c3aed);box-shadow:0 4px 20px #7c3aed59,0 0 40px #7c3aed26,inset 0 1px #ffffff1a;border-color:#8b5cf680;color:#fff;transform:translateY(-1px)}.welcome-btn-tunnel.active{background:linear-gradient(135deg,#047857,#059669,#10b981);border-color:#34d39980;color:#ecfdf5;box-shadow:0 2px 8px #10b98133,inset 0 1px #ffffff14}.welcome-btn-tunnel.active:hover{background:linear-gradient(135deg,#059669,#10b981,#34d399);box-shadow:0 4px 20px #34d39959,0 0 40px #34d39926,inset 0 1px #ffffff1a;color:#fff;transform:translateY(-1px)}.welcome-btn-tunnel.connecting{background:linear-gradient(135deg,#1e1e3a,#312e81,#4338ca);border-color:#6366f166;color:#c7d2fe;cursor:wait}.tunnel-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.25);border-top-color:currentColor;border-radius:50%;animation:tunnel-spin .8s linear infinite;flex-shrink:0}@keyframes tunnel-spin{to{transform:rotate(360deg)}}.welcome-qr{display:none;flex-direction:column;align-items:center;margin-top:1.5rem;margin-bottom:.5rem;cursor:pointer;transition:transform .2s ease}.welcome-qr.visible{display:flex}.welcome-qr-inner{background:#fff;border-radius:10px;padding:12px;width:140px;height:140px;transition:width .25s ease,height .25s ease,padding .25s ease}.welcome-qr-inner svg{width:100%;height:100%}.welcome-qr.expanded .welcome-qr-inner{width:280px;height:280px;padding:16px}.welcome-qr-url{margin-top:8px;font-family:monospace;font-size:11px;color:var(--text-muted);word-break:break-all;max-width:320px;text-align:center}.history-sessions{margin-top:1.5rem;width:100%;max-width:560px}.history-title{font-size:.85rem;color:var(--text-dim);margin-bottom:.5rem;font-weight:500;text-align:left}.history-list{display:flex;flex-direction:column;gap:.35rem;max-height:240px;overflow-y:auto}.history-item{display:flex;flex-direction:column;background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:8px;transition:all var(--transition-smooth);text-align:left}.history-item:hover{border-color:#3b82f64d;background:#ffffff0f;box-shadow:0 2px 8px #0003}.history-item.expanded{border-color:#3b82f659;background:#ffffff0d}.history-item-main{display:flex;align-items:center;gap:.6rem;padding:.55rem .8rem;cursor:pointer;border-radius:8px}.history-item-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:.2rem}.history-item-title{font-size:.8rem;color:var(--text);line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.history-item-subtitle{font-size:.65rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-item-subtitle.is-case{color:#7aa7ff;font-weight:500}.history-item-meta{font-size:.7rem;color:var(--text-muted);white-space:nowrap;align-self:center}.history-item-expand{appearance:none;border:none;background:transparent;color:var(--text-dim);font-size:1.1rem;line-height:1;padding:.25rem .4rem;cursor:pointer;border-radius:6px;transition:background var(--transition-smooth),color var(--transition-smooth);flex-shrink:0}.history-item-expand:hover{background:#ffffff14;color:var(--text)}.history-item.expanded .history-item-expand{color:#7aa7ff;transform:rotate(90deg)}.history-item-detail{padding:.5rem .8rem .7rem;border-top:1px dashed rgba(255,255,255,.08);display:flex;flex-direction:column;gap:.4rem;font-size:.72rem;color:var(--text-muted)}.history-item-detail[hidden]{display:none}.history-detail-row{display:flex;gap:.5rem;align-items:flex-start;word-break:break-word}.history-detail-label{color:var(--text-dim);min-width:46px;flex-shrink:0;font-size:.65rem;text-transform:uppercase;letter-spacing:.04em;padding-top:.1rem}.history-detail-value{color:var(--text);flex:1;min-width:0;white-space:pre-wrap}.history-detail-path{font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:.68rem;color:#a8b5c9}.history-detail-meta{color:var(--text-dim);font-size:.68rem}@media(max-width:640px){.history-item-meta{font-size:.65rem}.history-item-main{gap:.45rem;padding:.6rem .7rem}}.history-show-more{width:100%;padding:.5rem;margin-top:.25rem;background:#ffffff0a;border:1px dashed rgba(255,255,255,.1);border-radius:8px;color:var(--text-muted);font-size:.75rem;cursor:pointer;transition:background var(--transition-smooth),color var(--transition-smooth)}.history-show-more:hover{background:#ffffff14;color:var(--text)}.welcome-hint{color:var(--text-muted);font-size:.8rem}.welcome-hint kbd{display:inline-block;padding:.15rem .45rem;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:5px;font-family:inherit;font-size:.75rem;color:var(--text-dim);box-shadow:0 1px 2px #00000026}.welcome-ralph-link{background:none;border:none;color:var(--text-muted);font-size:.75rem;cursor:pointer;padding:.25rem 0;margin-top:.25rem;transition:color .15s ease}.welcome-ralph-link:hover{color:var(--accent)}.toolbar{display:flex;align-items:center;justify-content:space-between;position:relative;height:var(--toolbar-height);padding:0 .75rem;background:var(--glass-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--glass-border);box-shadow:0 -1px 3px #0003,0 -4px 12px #0000001a;flex-shrink:0;contain:style}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:.5rem}.toolbar-center{position:absolute;left:50%;transform:translate(-50%)}.version-display{font-family:SF Mono,Monaco,monospace;font-size:.6rem;color:var(--text-muted);padding:.2rem .5rem;background:#ffffff0a;border:1px solid rgba(255,255,255,.04);border-radius:var(--btn-radius);cursor:default;user-select:none;opacity:.8;letter-spacing:.02em}.toolbar-group{display:flex;align-items:center;gap:0}.btn-toolbar{display:flex;align-items:center;gap:.35rem;padding:.4rem .8rem;background:#ffffff0d;border:1px solid rgba(255,255,255,.07);border-radius:var(--btn-radius);color:var(--text-dim);font-size:.75rem;cursor:pointer;transition:all var(--transition-smooth);white-space:nowrap}.btn-toolbar:hover{background:#ffffff17;color:var(--text);border-color:#ffffff1f;box-shadow:0 1px 4px #0003}.btn-toolbar:active{background:#ffffff0f;transform:translateY(.5px)}.btn-toolbar.btn-sm{padding:.3rem .55rem;font-size:.7rem}.btn-toolbar.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-toolbar.btn-primary:hover{background:var(--accent-hover)}.run-btn-group{display:flex;position:relative}.btn-toolbar.btn-run{border-radius:var(--btn-radius) 0 0 var(--btn-radius);border-right:1px solid rgba(255,255,255,.12);font-weight:600;padding:.45rem .9rem;gap:.45rem;letter-spacing:.01em}.btn-toolbar.btn-run svg{flex-shrink:0;width:12px;height:12px}.btn-toolbar.btn-run-gear{border-radius:0 var(--btn-radius) var(--btn-radius) 0;padding:.45rem;min-width:unset}.btn-toolbar.btn-run.mode-claude,.btn-toolbar.btn-run-gear.mode-claude{background:linear-gradient(135deg,#1a3358,#1e4fb8,#2563eb);border-color:#3b82f680;color:#e0e7ff;box-shadow:0 1px 2px #0003,inset 0 1px #ffffff14}.btn-toolbar.btn-run.mode-claude:hover,.btn-toolbar.btn-run-gear.mode-claude:hover{background:linear-gradient(135deg,#2454a8,#2d6cf0,#4b8af7);box-shadow:0 0 16px #3b82f666,0 2px 8px #3b82f633,inset 0 1px #ffffff1a;border-color:#60a5fa99;color:#fff}.btn-toolbar.btn-run.mode-opencode,.btn-toolbar.btn-run-gear.mode-opencode{background:linear-gradient(135deg,#0a2e2a,#0b3d35,#0d4a40);border-color:#10b98180;color:#6ee7b7;box-shadow:0 1px 2px #0003,inset 0 1px #ffffff0f}.btn-toolbar.btn-run.mode-opencode:hover,.btn-toolbar.btn-run-gear.mode-opencode:hover{background:linear-gradient(135deg,#0d4a40,#116a58,#15856e);box-shadow:0 0 12px #10b98159,0 2px 8px #10b98133,inset 0 1px #ffffff14;border-color:#34d39999;color:#a7f3d0}.run-mode-menu{display:none;position:absolute;bottom:100%;left:0;margin-bottom:6px;background:#16161cf2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:4px;z-index:1000;min-width:190px;max-width:300px;box-shadow:0 8px 32px #00000080,0 2px 8px #0000004d}.run-mode-menu.active{display:flex;flex-direction:column;gap:2px}.run-mode-option{display:flex;align-items:center;gap:8px;padding:7px 12px;background:none;border:none;border-radius:var(--btn-radius);color:var(--text);cursor:pointer;font-size:.8rem;white-space:nowrap;transition:background var(--transition-smooth)}.run-mode-option:hover{background:#ffffff12}.run-mode-option.selected{background:#ffffff14;font-weight:600}.run-mode-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.run-mode-dot.claude{background:#3b82f6}.run-mode-dot.opencode{background:#10b981}.run-mode-sep{height:1px;background:var(--border);margin:4px 0}.run-mode-header{padding:4px 10px 2px;font-size:.72em;color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.run-mode-history{max-height:200px;overflow-y:auto}.run-mode-option .hist-dir{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.run-mode-option .hist-meta{font-size:.85em;color:var(--text-muted);white-space:nowrap}.run-mode-hist-empty{padding:6px 10px;color:var(--text-muted);font-style:italic}.btn-toolbar.btn-shell{background:linear-gradient(135deg,#1a2e1a,#1e3a1e,#234023);border-color:#2d5a2d99;color:#8fbc8f;font-weight:600;letter-spacing:.01em;box-shadow:0 1px 2px #0003,inset 0 1px #ffffff0d}.btn-toolbar.btn-shell:hover{background:linear-gradient(135deg,#234023,#2d5a2d,#357035);border-color:#3d7a3db3;box-shadow:0 0 12px #228b224d,0 2px 8px #228b2226,inset 0 1px #ffffff14;color:#a8d8a8}.btn-toolbar.btn-stop{display:none;background:linear-gradient(135deg,#4a1515,#5a1a1a,#7f1d1d);border-color:#dc262680;color:#fca5a5;font-weight:600;box-shadow:0 1px 2px #0003,inset 0 1px #ffffff0d}.btn-toolbar.btn-stop:hover{background:linear-gradient(135deg,#7f1d1d,#991b1b,#b91c1c);border-color:#ef444499;box-shadow:0 0 12px #dc262659,0 2px 8px #dc262633,inset 0 1px #ffffff14;color:#fff}.btn-toolbar.btn-stop svg{flex-shrink:0;width:12px;height:12px}.btn-toolbar.btn-stop.confirming{background:linear-gradient(135deg,#6b4f00,#856200);border-color:#b8860b;color:#ffd54f;font-size:.65rem;white-space:nowrap}.btn-settings-mobile{display:none}.btn-toolbar.btn-case-mobile{display:none;background:transparent;border:1px solid rgba(255,255,255,.2);color:#9ca3af;gap:4px}.btn-toolbar.btn-case-mobile:hover{background:#ffffff1a;color:#fff}.btn-toolbar.btn-case-mobile svg{flex-shrink:0}.btn-toolbar.btn-case-mobile #mobileCaseName{max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-voice-mobile,.btn-case-settings-mobile,.case-settings-popover-mobile,.case-settings-popover-mobile.hidden{display:none}.btn-toolbar .btn-icon{display:inline-flex;align-items:center;justify-content:center}.btn-toolbar.btn-success{background:linear-gradient(135deg,#16a34a,#22c55e);border-color:#22c55e80;color:#fff;box-shadow:0 1px 2px #0003,inset 0 1px #ffffff1a}.btn-toolbar.btn-success:hover{background:linear-gradient(135deg,#15803d,#16a34a);box-shadow:0 0 10px #22c55e4d,inset 0 1px #ffffff1a}.btn-toolbar.btn-danger{color:var(--red);border-color:#ef444433}.btn-toolbar.btn-danger:hover{background:linear-gradient(135deg,#b91c1c,#ef4444);color:#fff;border-color:#ef444480;box-shadow:0 0 10px #ef444440}.btn-toolbar.btn-voice{padding:.3rem .5rem}@media(max-width:1023px){.toolbar-center .btn-toolbar.btn-voice{display:none!important}}.btn-toolbar.btn-voice:hover{color:var(--text);border-color:#3b82f666}.btn-toolbar.btn-voice.recording{background:#ef444433;border-color:#ef444499;color:#ef4444;animation:voice-pulse 1.2s ease-in-out infinite}.btn-toolbar.btn-voice.recording:hover{background:#ef44444d;border-color:#ef4444cc;color:#f87171}@keyframes voice-pulse{0%,to{box-shadow:0 0 #ef444480;background:#ef444433}50%{box-shadow:0 0 0 6px #ef444400;background:#ef444459}}@media(prefers-reduced-motion:reduce){.btn-toolbar.btn-voice.recording,.btn-voice-mobile.recording{animation:none}}.voice-preview{position:fixed;bottom:48px;left:50%;transform:translate(-50%);background:#000000e0;color:#ffffffb3;font-style:italic;font-family:var(--font-mono, monospace);padding:8px 20px;border-radius:8px;border:1px solid rgba(255,255,255,.1);font-size:.85rem;max-width:80%;max-height:3.6em;overflow:hidden;z-index:10001;pointer-events:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.voice-preview-badge{display:inline-block;font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;background:#3b82f64d;color:#60a5fa;padding:1px 5px;border-radius:3px;font-style:normal;vertical-align:middle}.voice-provider-status{font-size:.75rem;color:var(--text-dim);padding:2px 8px;border-radius:4px;background:#ffffff0d}.voice-provider-status.active{color:#4ade80;background:#4ade801a}.voice-recording-indicator{display:inline-flex;align-items:center;gap:6px;margin-right:8px;flex-shrink:0}.voice-rec-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#ef4444;animation:voice-rec-blink 1s ease-in-out infinite}@keyframes voice-rec-blink{0%,to{opacity:1}50%{opacity:.3}}.voice-level-bars{display:inline-flex;align-items:flex-end;gap:2px;height:14px}.voice-level-bar{display:inline-block;width:3px;background:#ef444440;border-radius:1px;transition:background .1s ease,height .1s ease}.voice-level-bar:nth-child(1){height:4px}.voice-level-bar:nth-child(2){height:7px}.voice-level-bar:nth-child(3){height:10px}.voice-level-bar:nth-child(4){height:13px}.voice-level-bar:nth-child(5){height:14px}.voice-level-bar.active{background:#ef4444}.voice-timer{font-size:.7rem;font-weight:600;color:#ef4444;font-variant-numeric:tabular-nums;min-width:2.5em}.voice-preview:has(.voice-recording-indicator){border-color:#ef44444d;background:#140000eb}@media(prefers-reduced-motion:reduce){.voice-rec-dot{animation:none;opacity:1}}.voice-send-active{background:#22c55e33!important;border-color:#22c55eb3!important;color:#22c55e!important;animation:voice-send-glow 1.4s ease-in-out infinite}.voice-send-active:active{transform:scale(.9);background:#22c55e66!important}@keyframes voice-send-glow{0%,to{box-shadow:0 0 4px #22c55e4d;border-color:#22c55e80!important}50%{box-shadow:0 0 12px #22c55e99;border-color:#22c55ee6!important}}.voice-send-active.voice-send-blink{animation:voice-send-flash .4s ease-out!important}@keyframes voice-send-flash{0%{background:#22c55e99!important;box-shadow:0 0 16px #22c55ecc}to{background:transparent!important;box-shadow:none;opacity:0}}@media(prefers-reduced-motion:reduce){.voice-send-active{animation:none;box-shadow:0 0 6px #22c55e66}.voice-send-active.voice-send-blink{animation:none}}.form-row input[type=password]{width:100%;padding:.5rem .75rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.8rem;font-family:inherit}.form-row input[type=password]:focus{outline:none;border-color:var(--accent)}.btn-icon-only{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:transparent;border:1px solid rgba(255,255,255,.07);border-radius:var(--btn-radius);color:var(--text-dim);font-size:.7rem;cursor:pointer;transition:all var(--transition-smooth)}.btn-icon-only:hover{background:#ffffff12;color:var(--text)}.case-select-group{display:flex;align-items:stretch;position:relative}.toolbar-select{padding:.4rem 1.5rem .4rem .6rem;background:#ffffff0d;border:1px solid rgba(255,255,255,.07);border-radius:var(--btn-radius) 0 0 var(--btn-radius);color:var(--text-dim);font-size:.75rem;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%238b8b97' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .4rem center;width:fit-content;min-width:unset;max-width:unset;transition:all var(--transition-smooth)}.toolbar-select:hover{border-color:#ffffff1f;background:#ffffff12}.toolbar-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 1px #3b82f633}.btn-case-add{display:flex;align-items:center;justify-content:center;width:28px;background:#ffffff0d;border:1px solid rgba(255,255,255,.07);border-left:none;border-radius:0;color:var(--green);font-size:1.1rem;font-weight:500;cursor:pointer;transition:all var(--transition-smooth)}.btn-case-add:hover{background:var(--green);color:#fff;border-color:var(--green);box-shadow:0 0 8px #22c55e4d}.btn-case-settings{display:flex;align-items:center;justify-content:center;width:28px;background:#ffffff0d;border:1px solid rgba(255,255,255,.07);border-left:none;border-radius:0 var(--btn-radius) var(--btn-radius) 0;color:var(--text-dim);font-size:1rem;cursor:pointer;transition:all var(--transition-smooth)}.btn-case-settings:hover{background:var(--accent);color:#fff;border-color:var(--accent)}.case-settings-popover{position:absolute;bottom:100%;right:0;margin-bottom:6px;background:#16161cf2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:.6rem .7rem;width:220px;z-index:1000;box-shadow:0 8px 32px #0006,0 2px 8px #0003}.case-settings-popover.hidden{display:none}.case-settings-popover .form-hint{margin-top:.2rem;font-size:.6rem}.case-manage-list{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto}.case-manage-item{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:6px;transition:background var(--transition-smooth)}.case-manage-item:hover{background:#ffffff0f}.case-manage-info{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.case-manage-name{font-size:.8rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.case-manage-path{font-size:.65rem;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.case-manage-actions{display:flex;gap:4px;margin-left:10px;flex-shrink:0}.case-manage-btn{display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:#ffffff0d;border:1px solid rgba(255,255,255,.08);border-radius:4px;color:var(--text-dim);font-size:.65rem;cursor:pointer;transition:all var(--transition-smooth)}.case-manage-btn:hover:not(:disabled){background:#ffffff1a;color:var(--text)}.case-manage-btn:disabled{opacity:.25;cursor:not-allowed}.case-manage-btn-delete:hover:not(:disabled){background:#ef444426;border-color:#ef44444d;color:#ef4444}.toolbar-input{padding:.4rem .5rem;background:var(--bg-input);border:1px solid var(--accent);border-radius:4px;color:var(--text);font-size:.75rem;width:350px;max-width:50vw}.tab-count-group{display:flex;align-items:center;background:#ffffff0a;border:1px solid rgba(255,255,255,.07);border-radius:var(--btn-radius);overflow:hidden;margin:0 .25rem}.tab-count-btn{display:flex;align-items:center;justify-content:center;width:22px;height:26px;background:transparent;border:none;color:var(--text-dim);font-size:.85rem;font-weight:500;cursor:pointer;transition:all var(--transition-smooth)}.tab-count-btn:hover{background:#ffffff14;color:var(--accent-hover)}.tab-count-btn:active{background:var(--accent);color:#fff}.tab-count-input{width:24px;height:26px;background:transparent;border:none;border-left:1px solid var(--border);border-right:1px solid var(--border);color:var(--text);font-size:.75rem;font-weight:600;text-align:center;font-family:SF Mono,Monaco,monospace;-moz-appearance:textfield}.tab-count-input::-webkit-inner-spin-button,.tab-count-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.tab-count-input:focus{outline:none}.toolbar-input-sm{padding:.3rem .4rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.75rem;width:40px;text-align:center}.toolbar-input-sm:focus{outline:none;border-color:var(--accent)}.toolbar-input-sm::-webkit-inner-spin-button,.toolbar-input-sm::-webkit-outer-spin-button{opacity:1;height:16px}#dirDisplay{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left}.toolbar-input:focus{outline:none}.toolbar-input.hidden{display:none}.font-size-display{font-size:.65rem;color:var(--text-muted);min-width:20px;text-align:center;font-family:SF Mono,Monaco,monospace}.btn-close{background:transparent;border:none;color:var(--text-dim);font-size:1.2rem;cursor:pointer;padding:0 .25rem;line-height:1}.btn-close:hover{color:var(--text)}.btn-icon-sm{background:transparent;border:none;color:var(--text-dim);font-size:1rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:4px}.btn-icon-sm:hover{color:var(--text);background:var(--bg-hover)}.settings-section{margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.settings-section:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.form-row{margin-bottom:.75rem}.form-row label{display:block;font-size:.7rem;color:var(--text-dim);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.03em}.form-row input[type=text],.form-row input[type=number],.form-row textarea,.form-select{width:100%;padding:.5rem .75rem;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:var(--btn-radius);color:var(--text);font-size:.8rem;font-family:inherit;transition:border-color var(--transition-smooth),box-shadow var(--transition-smooth)}.form-row input:focus,.form-row textarea:focus,.form-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #3b82f626}.form-col{flex:1}.form-col label{display:block;font-size:.7rem;color:var(--text-dim);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.03em}.input-suffix{display:flex;align-items:center}.input-suffix input{flex:1;border-radius:4px 0 0 4px;border-right:none}.input-suffix span{padding:.5rem;background:var(--bg-hover);border:1px solid var(--border);border-radius:0 4px 4px 0;color:var(--text-muted);font-size:.75rem}.form-hint{display:block;font-size:.65rem;color:var(--text-muted);margin-top:.35rem}.preset-selector{display:flex;gap:8px;align-items:center}.preset-selector select{flex:1;min-width:0;padding:.4rem .5rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.75rem}.preset-selector select:focus{outline:none;border-color:var(--accent)}.preset-selector .btn-sm{white-space:nowrap;padding:4px 8px;font-size:.7rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);cursor:pointer;transition:all .15s}.preset-selector .btn-sm:hover{background:var(--bg-hover);border-color:var(--border-light)}.form-section-header{font-size:.7rem;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;margin:1rem 0 .5rem;padding-bottom:.25rem;border-bottom:1px solid var(--border)}.form-section-header:first-child{margin-top:0}.form-row-switch{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.form-row-switch>label:first-child{margin-bottom:0;min-width:120px}.form-row-switch .form-hint{flex-basis:100%;margin-top:.25rem}.switch{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch .slider{position:absolute;cursor:pointer;inset:0;background-color:#ffffff0f;border:1px solid rgba(255,255,255,.08);transition:.2s cubic-bezier(.4,0,.2,1);border-radius:20px}.switch .slider:before{position:absolute;content:"";height:14px;width:14px;left:2px;bottom:2px;background-color:var(--text-muted);transition:.2s;border-radius:50%}.switch input:checked+.slider{background-color:var(--accent);border-color:var(--accent)}.switch input:checked+.slider:before{transform:translate(16px);background-color:#fff}.switch input:focus+.slider{box-shadow:0 0 0 2px #3b82f64d}.switch-sm{width:28px;height:16px}.switch-sm .slider:before{height:10px;width:10px;left:2px;bottom:2px}.switch-sm input:checked+.slider:before{transform:translate(12px)}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:.5rem 1rem}.settings-section-header{grid-column:1 / -1;font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding:.5rem 0 .25rem;border-bottom:1px solid var(--border);margin-top:.75rem}.settings-section-header:first-child{margin-top:0}.settings-item{display:flex;align-items:center;justify-content:space-between;padding:.45rem .7rem;background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:var(--btn-radius);font-size:.75rem;transition:background var(--transition-smooth)}.settings-item-label{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-item-multiline{align-items:center}.settings-item-text{display:flex;flex-direction:column;gap:.15rem;min-width:0}.settings-item-desc{font-size:.6rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-item-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.settings-grid-3col{grid-template-columns:1fr 1fr 1fr}.settings-item-input{width:60px;padding:.2rem .4rem;font-size:.7rem;background:var(--bg-dark);border:1px solid var(--border);border-radius:3px;color:var(--text);text-align:right}.settings-item-input:focus{outline:none;border-color:var(--accent)}.settings-status{font-size:.6rem;padding:2px 6px;border-radius:3px;background:var(--bg-hover);color:var(--text-dim)}.settings-status.granted{background:#22c55e33;color:var(--green)}.settings-status.denied{background:#ef444433;color:var(--red)}.event-type-grid{display:grid;grid-template-columns:1fr 50px 50px 50px 50px;gap:6px 8px;align-items:center;margin-top:8px;padding:8px;background:var(--bg-dark);border-radius:4px}.event-header{font-size:.65rem;text-transform:uppercase;color:var(--text-dim);text-align:center;font-weight:500}.event-header:first-child{text-align:left}.event-label{font-size:.75rem;color:var(--text)}.event-type-grid input[type=checkbox]{justify-self:center;width:14px;height:14px;cursor:pointer}.color-picker{display:flex;gap:6px;flex-wrap:wrap}.color-swatch{width:28px;height:28px;border-radius:4px;border:2px solid transparent;background:transparent;padding:2px;cursor:pointer;transition:border-color .15s,transform .1s}.color-swatch:hover{transform:scale(1.1)}.color-swatch.selected{border-color:var(--accent)}.swatch-inner{display:block;width:100%;height:100%;border-radius:2px}.form-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem;padding:.75rem;border-top:1px solid var(--border)}.modal{display:none;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;contain:layout paint}.modal.active{display:flex}.modal-backdrop{position:absolute;inset:0;background:#0009;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.modal-content{position:relative;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:12px;width:90%;max-width:400px;box-shadow:0 16px 64px #00000080,0 4px 16px #0000004d;contain:layout style paint}.modal-content.modal-sm{max-width:340px}.modal-content.modal-lg{max-width:540px;max-height:85vh;display:flex;flex-direction:column}.modal-content.modal-lg>.modal-body{overflow-y:auto;flex:1;min-height:0}.mobile-case-picker-sheet{position:fixed;bottom:0;left:0;right:0;background:#1a1a1a;border-radius:16px 16px 0 0;max-height:70vh;display:flex;flex-direction:column;z-index:1001;box-shadow:0 -4px 20px #0006}.mobile-case-picker-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid rgba(255,255,255,.1)}.mobile-case-picker-header h3{margin:0;font-size:1.1rem;font-weight:600;color:#fff}.mobile-case-picker-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:8px 0;max-height:50vh}.mobile-case-list{display:flex;flex-direction:column}.mobile-case-item{display:flex;align-items:center;gap:12px;padding:14px 20px;background:transparent;border:none;color:#e5e5e5;font-size:.95rem;text-align:left;cursor:pointer;transition:background .1s;width:100%}.mobile-case-item:hover{background:#ffffff0d}.mobile-case-item:active{background:#ffffff1a}.mobile-case-item.selected{background:#22c55e26;color:#22c55e}.mobile-case-item-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;color:#666;flex-shrink:0}.mobile-case-item.selected .mobile-case-item-icon{color:#22c55e}.mobile-case-item-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-case-item-check{width:20px;height:20px;display:flex;align-items:center;justify-content:center;color:#22c55e;opacity:0;flex-shrink:0}.mobile-case-item.selected .mobile-case-item-check{opacity:1}.mobile-case-item-delete{width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--text-dim);opacity:.4;flex-shrink:0;border-radius:4px;transition:all var(--transition-smooth)}.mobile-case-item-delete:active{opacity:1;color:#ef4444;background:#ef444426}.mobile-case-picker-footer{padding:12px 20px 16px;border-top:1px solid rgba(255,255,255,.1)}.btn-case-create-mobile{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;background:var(--bg-input);border:1px solid var(--border-light);border-radius:8px;color:var(--text);font-size:.9rem;font-weight:500;cursor:pointer;transition:background .15s}.btn-case-create-mobile:hover,.btn-case-create-mobile:active{background:var(--bg-hover)}.btn-case-create-mobile svg{width:16px;height:16px}.fix-plan-modal{max-width:600px;width:95%}.fix-plan-textarea{width:100%;height:400px;font-family:SF Mono,Monaco,Menlo,monospace;font-size:.75rem;line-height:1.4;background:var(--bg-dark);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:.75rem;resize:vertical}.fix-plan-stats{color:var(--text-muted);font-size:.75rem;margin-right:auto}#summary-tab{display:flex;flex-direction:column;max-height:calc(70vh - 120px);overflow:hidden}#summary-tab.hidden,#respawn-tab.hidden,#context-tab.hidden,#ralph-tab.hidden,#summary-tab.hidden .run-summary-filters,#summary-tab.hidden .run-summary-timeline,#summary-tab.hidden .run-summary-footer{display:none!important}#summary-tab .run-summary-filters{flex-shrink:0}#summary-tab .run-summary-timeline{flex:1;min-height:0;max-height:none}#summary-tab .run-summary-footer{flex-shrink:0}.run-summary-filters{display:flex;gap:.375rem;margin-bottom:.75rem;flex-wrap:wrap}.filter-btn{padding:.25rem .625rem;background:transparent;border:1px solid rgba(255,255,255,.08);border-radius:100px;color:var(--text-dim);cursor:pointer;font-size:.7rem;transition:all .15s}.filter-btn:hover{background:#ffffff0a;border-color:#ffffff26;color:var(--text)}.filter-btn.active{background:var(--accent);border-color:var(--accent);color:var(--bg)}.run-summary-timeline{max-height:400px;overflow-y:auto;padding-right:.25rem;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.1) transparent}.run-summary-timeline::-webkit-scrollbar{width:4px}.run-summary-timeline::-webkit-scrollbar-track{background:transparent}.run-summary-timeline::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:2px}.run-summary-timeline::-webkit-scrollbar-thumb:hover{background:#fff3}.timeline-event{display:flex;gap:.5rem;padding:.5rem .625rem;margin-bottom:.375rem;background:#ffffff05;border-radius:6px;border-left:2px solid var(--border);transition:background .15s;content-visibility:auto;contain-intrinsic-size:auto 40px}.timeline-event:hover{background:#ffffff0a}.timeline-event.event-success{border-left-color:var(--green)}.timeline-event.event-warning{border-left-color:var(--yellow)}.timeline-event.event-error{border-left-color:var(--red)}.timeline-event.event-info{border-left-color:var(--accent)}.event-icon{font-size:.9rem;flex-shrink:0;opacity:.8}.event-content{flex:1;min-width:0}.event-header{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem}.event-title{font-weight:500;font-size:.8rem;color:var(--text)}.event-time{font-size:.65rem;color:var(--text-muted);flex-shrink:0;font-family:SF Mono,Monaco,monospace}.event-details{font-size:.7rem;color:var(--text-dim);margin-top:.125rem}.run-summary-session-info{font-size:.7rem;color:var(--text-muted);font-family:SF Mono,Monaco,monospace;padding:.25rem 0}.run-summary-footer{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem;padding-top:.625rem;border-top:1px solid rgba(255,255,255,.06)}.run-summary-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.run-summary-actions .btn-toolbar{font-size:.7rem;padding:.25rem .5rem}.auto-refresh-label{display:flex;align-items:center;gap:.25rem;font-size:.7rem;color:var(--text-dim);cursor:pointer}.auto-refresh-label input[type=checkbox]{cursor:pointer;width:12px;height:12px}.run-summary-timeline .empty-message{color:var(--text-muted);font-size:.75rem;text-align:center;padding:2rem 1rem;margin:0}#runSummaryModal .modal-footer{display:flex;flex-direction:column;gap:.5rem;padding:.75rem 1rem;border-top:1px solid rgba(255,255,255,.06)}#runSummaryModal .modal-footer .run-summary-session-info{font-size:.7rem;color:var(--text-muted);font-family:SF Mono,Monaco,monospace}.modal-warning-text{color:var(--text-dim);font-size:.85rem;margin-bottom:.5rem}.close-options{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.close-option{display:flex;flex-direction:column;align-items:center;text-align:center;padding:.75rem 1rem;background:var(--bg-hover);border:1px solid var(--border);border-radius:6px;cursor:pointer;transition:all .15s;text-align:left}.close-option:hover{background:var(--bg-card);border-color:var(--accent)}.close-option-danger{border-color:var(--red);background:#ef44441a}.close-option-danger:hover{background:#ef444433;border-color:var(--red)}.close-option-title{font-weight:500;font-size:.9rem;color:var(--text)}.close-option-danger .close-option-title{color:var(--red)}.close-option-desc{font-size:.75rem;color:var(--text-muted);margin-top:.15rem}.modal-footer-cancel{display:flex;justify-content:center;padding-top:.5rem;border-top:1px solid var(--border)}.modal-session-name{font-family:SF Mono,Monaco,monospace;font-size:.8rem;color:var(--accent-hover);background:var(--bg-input);padding:.5rem .75rem;border-radius:4px;border:1px solid var(--border)}.session-respawn-section{padding-top:0;margin-top:0}.session-respawn-status{display:flex;align-items:center;gap:.4rem;font-size:.75rem;padding:.25rem .5rem;background:var(--bg-input);border-radius:4px}.session-respawn-status .respawn-status-indicator{width:6px;height:6px;border-radius:50%;background:var(--text-muted)}.session-respawn-status .respawn-status-text{color:var(--text-dim)}.session-respawn-status.active .respawn-status-indicator{background:var(--green);animation:pulse 1.5s infinite}.session-respawn-status.active .respawn-status-text{color:var(--green)}.checkbox-inline{display:flex;align-items:center;gap:.35rem;cursor:pointer;font-size:.8rem;color:var(--text-dim)}.checkbox-inline input[type=checkbox]{accent-color:var(--accent)}.checkbox-inline:hover{color:var(--text)}.input-suffix-sm{display:flex;align-items:center}.input-suffix-sm input{width:80px;padding:.35rem .5rem;font-size:.75rem}.input-suffix-sm span{padding:.35rem .4rem;font-size:.7rem}.duration-presets{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.duration-preset-btn{padding:.4rem .7rem;font-size:.75rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);cursor:pointer;transition:all .15s}.duration-preset-btn:hover{border-color:var(--border-light);color:var(--text)}.duration-preset-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.duration-custom{display:flex;align-items:center;gap:.35rem}.duration-custom-input{display:none}.duration-custom-input.visible{display:flex}.duration-custom-input input{width:60px}.respawn-header{display:flex;align-items:center;justify-content:center;gap:1rem;margin-bottom:.75rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.respawn-header .respawn-actions{margin:0;padding:0;border:none}.respawn-options-row{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:.25rem}.respawn-actions{display:flex;gap:.5rem}.modal-tabs{display:flex;gap:.5rem;padding:0 1rem .75rem;border-bottom:1px solid var(--border)}.modal-tab-btn{padding:.5rem 1rem;font-size:.8rem;background:transparent;border:1px solid var(--border);border-radius:4px;color:var(--text-dim);cursor:pointer;transition:all .15s}.modal-tab-btn:hover{background:var(--bg-input);color:var(--text)}.modal-tab-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.modal-tab-content.hidden{display:none!important}.context-settings-grid{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.context-setting{padding:.875rem;background:#ffffff05;border:1px solid var(--border);border-radius:6px}.context-setting-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.625rem}.context-setting-header .checkbox-inline span{font-weight:500}.context-setting-header .input-suffix-sm{flex-shrink:0}.context-setting-header .input-suffix-sm input{width:70px}.context-setting input[type=text]{width:100%;padding:.375rem .5rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.75rem}.context-setting input[type=text]:focus{outline:none;border-color:var(--accent)}.context-setting .form-hint{margin-top:.5rem}.ralph-limits-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:.5rem}@media(max-width:500px){.ralph-limits-grid{grid-template-columns:1fr 1fr}}.ralph-limits-grid .form-col input[type=number]{width:100%;padding:.375rem .5rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.8rem}.ralph-limits-grid .form-col .form-hint{font-size:.6rem}.ralph-config-actions{display:flex;gap:.5rem;margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.06)}.modal-header h3{font-size:.95rem;font-weight:600}.modal-header-actions{display:flex;align-items:center;gap:.25rem}.modal-close{background:transparent;border:none;color:var(--text-dim);font-size:1.5rem;cursor:pointer;line-height:1}.modal-close:hover{color:var(--text)}.modal-body{padding:1rem}.shortcuts-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;font-size:.8rem}.shortcuts-grid>div:nth-child(odd){text-align:right}.shortcuts-grid>div:nth-child(2n){color:var(--text-dim)}kbd{display:inline-block;padding:.15rem .45rem;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:5px;font-family:SF Mono,Monaco,monospace;box-shadow:0 1px 2px #0003;font-size:.7rem;color:var(--text)}.token-stats-modal{max-width:560px;max-height:85vh;overflow:hidden;display:flex;flex-direction:column}.token-stats-modal .modal-body{overflow-y:auto;padding:1rem}.stats-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1.25rem}.stat-card{background:#ffffff08;border:1px solid var(--border);padding:.75rem;border-radius:8px;text-align:center}.stat-card-label{display:block;font-size:.65rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:.25rem}.stat-card-value{display:block;font-size:1.1rem;font-weight:600;color:var(--text);font-family:SF Mono,Monaco,monospace}.stat-card-cost{display:block;font-size:.7rem;color:var(--accent-hover);margin-top:.15rem}.stats-chart-container{margin-bottom:1.25rem}.stats-chart-label,.stats-table-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:.5rem}.stats-chart{display:flex;align-items:flex-end;gap:4px;height:80px;padding:0 4px}.stats-chart .bar{flex:1;background:linear-gradient(to top,var(--accent),var(--green));border-radius:3px 3px 0 0;min-height:3px;transition:opacity .15s;position:relative}.stats-chart .bar:hover{opacity:.8}.stats-chart .bar:after{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);padding:.25rem .5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:4px;font-size:.65rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:10}.stats-chart .bar:hover:after{opacity:1}.stats-chart-days{display:flex;gap:4px;padding:0 4px;margin-top:.35rem}.stats-chart-days span{flex:1;text-align:center;font-size:.6rem;color:var(--text-muted)}.stats-table-container{max-height:200px;overflow-y:auto}.stats-table{width:100%;font-size:.75rem}.stats-table-header,.stats-table-row{display:grid;grid-template-columns:1fr 1fr 1fr .8fr;gap:.5rem;padding:.5rem .25rem;border-bottom:1px solid var(--border)}.stats-table-header{color:var(--text-muted);font-size:.65rem;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;background:var(--bg-card)}.stats-table-row:last-child{border-bottom:none}.stats-table-row .cell{font-family:SF Mono,Monaco,monospace}.stats-table-row .cell-date{color:var(--text-dim)}.stats-table-row .cell-cost{color:var(--accent-hover)}.stats-no-data{text-align:center;color:var(--text-muted);padding:2rem 1rem;font-size:.8rem}.header-tokens.clickable{cursor:pointer;transition:color .15s}.header-tokens.clickable:hover{color:var(--text)}.toast-container{position:fixed;top:calc(var(--header-height) + .5rem);right:.5rem;display:flex;flex-direction:column;gap:.5rem;z-index:10000;pointer-events:none}.toast{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;padding:.6rem 1rem;font-size:.8rem;color:var(--text);box-shadow:0 4px 12px #0006;transform:translate(100%);opacity:0;transition:all .2s ease;pointer-events:auto}.toast.show{transform:translate(0);opacity:1}.toast-success{border-color:#22c55e66}.toast-error{border-color:#ef444466}.toast-warning{border-color:#eab30866}.toast-info{border-color:#3b82f666}.btn-icon-header.btn-notifications{position:relative;width:32px;height:32px;font-size:1.1rem;margin-left:0;margin-right:2px}.btn-icon-header.btn-notifications:hover{transform:none}.notification-badge{position:absolute;top:2px;right:2px;min-width:16px;height:16px;padding:0 4px;background:var(--red);color:#fff;font-size:.6rem;font-weight:700;border-radius:8px;display:flex;align-items:center;justify-content:center;pointer-events:none;animation:notif-badge-pulse 2s ease-in-out infinite}@keyframes notif-badge-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}.notification-drawer{position:fixed;top:var(--header-height);right:0;width:340px;height:calc(100vh - var(--header-height));height:calc(100dvh - var(--header-height));background:var(--bg-card);border-left:1px solid var(--border);z-index:10001;display:flex;flex-direction:column;transform:translate(100%);transition:transform .2s ease;box-shadow:-4px 0 16px #0000004d}.notification-drawer.open{transform:translate(0)}.notif-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);flex-shrink:0}.notif-drawer-title{font-size:.85rem;font-weight:600;color:var(--text)}.notif-drawer-actions{display:flex;gap:4px}.btn-notif-action{background:none;border:1px solid var(--border);color:var(--text-dim);width:26px;height:26px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:all .15s}.btn-notif-action:hover{background:var(--bg-hover);color:var(--text);border-color:var(--border-light)}.notif-drawer-list{flex:1;overflow-y:auto;padding:6px}.notif-drawer-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:.8rem}.notif-item{padding:10px 12px;margin-bottom:4px;border-radius:6px;border-left:3px solid var(--border-light);background:var(--bg-dark);cursor:pointer;transition:background .15s;animation:notif-slide-in .2s ease;content-visibility:auto;contain-intrinsic-size:auto 60px}.notif-item:hover{background:var(--bg-hover)}.notif-item.unread{background:#3b82f60d}.notif-item-critical{border-left-color:var(--red)}.notif-item-warning{border-left-color:var(--yellow)}.notif-item-info{border-left-color:var(--accent)}.notif-item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.notif-item-title{font-size:.78rem;font-weight:600;color:var(--text)}.notif-item-count{font-size:.65rem;color:var(--text-muted);margin-left:6px}.notif-item-time{font-size:.65rem;color:var(--text-muted);white-space:nowrap}.notif-item-message{font-size:.72rem;color:var(--text-dim);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notif-item-session{display:inline-block;margin-top:4px;padding:1px 6px;background:var(--bg-hover);border:1px solid var(--border);border-radius:3px;font-size:.65rem;color:var(--text-dim)}@keyframes notif-slide-in{0%{transform:translate(20px);opacity:0}to{transform:translate(0);opacity:1}}.session-tab .tab-badge{display:flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;background:var(--yellow);border-radius:8px;font-size:.65rem;font-weight:600;color:#000;animation:pulse 1.5s infinite}.session-tab .tab-badge.completed{background:var(--green);animation:none}.session-tab .tab-subagent-badge{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:2px;height:16px;padding:0 5px;border-radius:8px;font-size:.6rem;cursor:pointer;background:var(--accent);color:#fff;margin-left:4px;transition:transform .1s,background .15s}@media(hover:hover){.session-tab .tab-subagent-badge:hover{background:var(--accent-hover);transform:scale(1.05)}}.session-tab .tab-subagent-badge .subagent-label{font-size:.55rem;font-weight:600;letter-spacing:.03em}.subagent-dropdown{display:none;position:fixed;min-width:180px;max-width:280px;background:var(--bg-card);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px #0006;z-index:10000;overflow:hidden;padding:4px 0}.subagent-dropdown.open{display:block;animation:dropdownFadeIn .1s ease-out}@keyframes dropdownFadeIn{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.subagent-dropdown.pinned{border-color:var(--accent)}.subagent-dropdown-header{display:none}.subagent-dropdown-item{display:flex;align-items:center;gap:6px;padding:6px 10px;cursor:pointer;transition:background .1s}@media(hover:hover){.subagent-dropdown-item:hover{background:var(--bg-hover)}.subagent-dropdown-item:hover .subagent-dropdown-name{color:var(--accent-hover)}.subagent-dropdown-item:hover .subagent-dropdown-close{opacity:.6}.subagent-dropdown-close:hover{opacity:1;color:var(--red)}}@media(hover:none){.subagent-dropdown-item:active{background:var(--bg-hover)}.subagent-dropdown-close{opacity:.6}}.subagent-dropdown-status{width:6px;height:6px;border-radius:50%;flex-shrink:0;background:var(--text-muted)}.subagent-dropdown-status.active{background:var(--green);box-shadow:0 0 4px var(--green)}.subagent-dropdown-status.idle{background:var(--yellow)}.subagent-dropdown-status.completed{background:var(--accent)}.subagent-dropdown-name{flex:1;font-size:.72rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.subagent-dropdown-close{font-size:.9rem;color:var(--text-muted);cursor:pointer;padding:0 2px;opacity:0;transition:opacity .1s,color .1s}.task-empty{padding:1rem;text-align:center;color:var(--text-muted);font-size:.8rem}.task-tree{font-size:.75rem}.task-node{border-left:2px solid var(--border);padding-left:.75rem;margin-left:.5rem;margin-bottom:.25rem}.task-node:first-child{border-left:none;margin-left:0;padding-left:0}.task-item{display:flex;align-items:flex-start;gap:.5rem;padding:.4rem .5rem;background:var(--bg-input);border-radius:4px;margin-bottom:.25rem}.task-status-icon{flex-shrink:0;width:14px;height:14px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.6rem}.task-status-icon.running{background:var(--yellow);animation:pulse 1.5s infinite}.task-status-icon.completed{background:var(--green);color:#fff}.task-status-icon.failed{background:var(--red);color:#fff}.task-info{flex:1;min-width:0}.task-description{color:var(--text);word-break:break-word}.task-meta{display:flex;gap:.5rem;font-size:.65rem;color:var(--text-muted);margin-top:.2rem}.task-type{color:var(--accent)}.task-children{margin-top:.25rem}.task-toggle-btn{position:relative}.task-toggle-btn .badge{position:absolute;top:-4px;right:-4px;min-width:14px;height:14px;padding:0 3px;background:var(--yellow);border-radius:7px;font-size:.6rem;font-weight:600;color:#000;display:flex;align-items:center;justify-content:center}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-light)}.process-empty{padding:1rem;text-align:center;color:var(--text-muted);font-size:.8rem}.process-item{display:flex;align-items:center;gap:.75rem;padding:.6rem .75rem;background:var(--bg-input);border-radius:4px;margin-bottom:.5rem}.process-item:hover{background:var(--bg-hover)}.process-item-clickable{cursor:pointer;transition:border-color .15s,background .15s;border:1px solid transparent}.process-item-clickable:hover{border-color:var(--accent)}.process-info{flex:1;min-width:0}.process-name{font-size:.8rem;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.process-meta{display:flex;gap:.75rem;font-size:.7rem;color:var(--text-muted);margin-top:.2rem}.process-stat{display:flex;align-items:center;gap:.25rem}.process-stat.memory{color:var(--accent-hover)}.process-stat.cpu{color:var(--green)}.process-stat.children{color:var(--yellow)}.process-actions{display:flex;gap:.25rem}.process-mode{font-size:.6rem;padding:2px 6px;border-radius:3px;background:var(--bg-hover);color:var(--text-muted);text-transform:uppercase}.process-mode.shell{background:#eab30833;color:var(--yellow)}.monitor-status-badge{font-size:.55rem;font-weight:700;padding:2px 6px;border-radius:3px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;min-width:52px;text-align:center}.monitor-status-badge.status-idle{background:#eab30833;color:var(--yellow)}.monitor-status-badge.status-working{background:#4ade8033;color:var(--green);animation:pulse-working 2s ease-in-out infinite}.monitor-status-badge.status-stopped{background:#ef444433;color:var(--red, #ef4444)}@keyframes pulse-working{0%,to{opacity:1}50%{opacity:.6}}.monitor-model-badge{font-size:.55rem;padding:1px 4px;border-radius:2px;font-weight:600;text-transform:uppercase}.monitor-model-badge.opus{background:#a855f733;color:#c084fc}.monitor-model-badge.sonnet{background:#3b82f633;color:#60a5fa}.monitor-model-badge.haiku{background:#4ade8033;color:#4ade80}.process-stat.tokens{color:var(--accent-hover)}.process-stat.cost{color:#f59e0b}.process-stat.todo-progress{color:#c084fc}.monitor-panel{position:fixed;bottom:var(--toolbar-height);right:.5rem;width:380px;max-width:calc(100vw - 1rem);max-height:80vh;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.07);border-bottom:none;border-radius:10px 10px 0 0;box-shadow:0 -8px 32px #0006,0 -2px 8px #0003;z-index:100;transform:translateY(100%);transition:transform .2s ease,width .2s ease;display:flex;flex-direction:column}.monitor-panel.open{transform:translateY(0)}.monitor-panel.detached{bottom:auto;right:auto;top:100px;left:calc(50% - 300px);width:600px;height:500px;max-height:none;border-radius:8px;border-bottom:1px solid var(--border);box-shadow:0 8px 32px #00000080,0 0 0 1px #ffffff0d;transform:none;resize:both;overflow:hidden;min-width:350px;min-height:250px}.monitor-panel.detached .monitor-panel-header{cursor:move;background:linear-gradient(180deg,var(--bg-hover) 0%,var(--bg-card) 100%);user-select:none}.monitor-panel.detached .monitor-resize-handle{display:block}.monitor-panel.detached .monitor-section-body{max-height:none}.monitor-panel-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem 1rem;border-bottom:1px solid var(--border);font-size:.85rem;font-weight:500;flex-shrink:0}.monitor-panel-title{font-weight:600;font-size:.8rem;color:var(--text)}.monitor-panel-actions{display:flex;align-items:center;gap:.5rem}.monitor-panel-body{flex:1;overflow-y:auto;padding:0}.monitor-resize-handle{display:none;position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,var(--border-light) 50%);border-radius:0 0 8px}.monitor-resize-handle:before{content:"";position:absolute;bottom:3px;right:3px;width:8px;height:8px;border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted)}.monitor-section{border-bottom:1px solid var(--border)}.monitor-section:last-child{border-bottom:none}.monitor-section-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background:var(--bg-input);font-size:.75rem;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.monitor-section-body{padding:.5rem;max-height:25vh;overflow-y:auto}.monitor-empty{padding:1rem;text-align:center;color:var(--text-muted);font-size:.8rem}.task-stats{font-size:.65rem;color:var(--text-dim);padding:.15rem .4rem;background:var(--bg-card);border-radius:8px}@media(max-width:600px){.header-brand{padding-right:.4rem;margin-right:.3rem}.header-brand .logo{font-size:.75rem}.connection-text{display:none}.toolbar-left .toolbar-group:not(:first-child){display:none}.monitor-panel{width:100%;max-width:100%;border-radius:8px 8px 0 0}}.subagents-panel{position:fixed;bottom:var(--toolbar-height);right:.5rem;width:500px;max-width:calc(100vw - 1rem);max-height:50vh;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.07);border-bottom:none;border-radius:10px 10px 0 0;z-index:91;transform:translateY(calc(100% - 36px));transition:transform .2s ease,width .2s ease;display:flex;flex-direction:column}.subagents-panel.open{transform:translateY(0);max-height:65vh}.subagents-panel.hidden{display:none}.subagents-panel.detached{bottom:auto;right:auto;top:80px;left:calc(50% - 350px);width:700px;height:500px;max-height:none;border-radius:8px;border-bottom:1px solid var(--border);box-shadow:0 8px 32px #00000080,0 0 0 1px #ffffff0d;transform:none;resize:both;overflow:hidden;min-width:400px;min-height:300px}.subagents-panel.detached .subagents-panel-header{cursor:move;background:linear-gradient(180deg,var(--bg-hover) 0%,var(--bg-card) 100%);user-select:none}.subagents-panel.detached .subagents-resize-handle{display:block}.subagents-panel-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem 1rem;border-bottom:1px solid var(--border);flex-shrink:0}.subagents-panel-title{font-weight:600;font-size:.8rem;color:var(--text);display:flex;align-items:center;gap:.5rem}.subagents-panel-actions{display:flex;align-items:center;gap:.5rem}.subagents-panel-body{flex:1;overflow-y:auto;padding:.5rem}.subagents-resize-handle{display:none;position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:se-resize}.subagents-resize-handle:after{content:"";position:absolute;bottom:3px;right:3px;width:8px;height:8px;border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted)}@media(max-width:600px){.subagents-panel{width:100%;max-width:100%;left:0;right:0;border-radius:8px 8px 0 0}}.subagent-container{display:flex;gap:.5rem;height:100%;min-height:280px}.subagent-list{flex:0 0 200px;overflow-y:auto;border-right:1px solid var(--border);padding-right:.5rem}.subagent-detail{flex:1;overflow-y:auto;padding-left:.5rem}.subagent-empty{color:var(--text-dim);font-size:.75rem;text-align:center;padding:1rem}.subagent-badge{background:var(--accent);color:#fff;font-size:.65rem;padding:.1rem .4rem;border-radius:8px;margin-left:.5rem}.subagent-item{padding:.5rem;border-radius:6px;background:var(--bg-input);margin-bottom:.4rem;cursor:pointer;transition:background .15s;content-visibility:auto;contain-intrinsic-size:auto 48px}.subagent-item:hover{background:var(--bg-card)}.subagent-item.selected{background:var(--bg-card);border:1px solid var(--accent)}.subagent-header{display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem}.subagent-icon{font-size:.9rem}.subagent-id{font-family:var(--font-mono);font-size:.75rem;color:#fff}.subagent-status{font-size:.6rem;padding:.1rem .3rem;border-radius:4px;margin-left:auto}.subagent-status.active{background:var(--success);color:#fff}.subagent-status.idle{background:var(--warning);color:#000}.subagent-status.completed{background:var(--text-muted);color:#fff}.subagent-window-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.1rem .3rem;font-size:.75rem;margin-left:auto}.subagent-window-btn:hover{color:var(--accent)}.subagent-kill-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.1rem .3rem;font-size:.7rem;opacity:.6;transition:opacity .15s,color .15s}.subagent-kill-btn:hover{color:var(--red);opacity:1}.subagent-meta{display:flex;gap:.5rem;font-size:.65rem;color:var(--text-muted)}.subagent-last-tool{color:var(--accent)}.subagent-detail-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--border)}.subagent-detail-header .subagent-id{font-size:.85rem;font-weight:600}.subagent-transcript-btn{margin-left:auto;font-size:.65rem;padding:.2rem .5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:4px;color:var(--text);cursor:pointer}.subagent-transcript-btn:hover{background:var(--bg-hover)}.subagent-detail-stats{display:flex;gap:1rem;font-size:.7rem;color:var(--text-muted);margin-bottom:.5rem}.subagent-activity-log{font-family:var(--font-mono);font-size:.7rem;max-height:150px;overflow-y:auto}.subagent-activity{display:flex;gap:.4rem;padding:.2rem 0;border-bottom:1px solid var(--border-subtle)}.subagent-activity .time{color:var(--text-muted);flex:0 0 60px}.subagent-activity .icon{flex:0 0 20px}.subagent-activity .name{color:var(--accent);flex:0 0 80px}.subagent-activity .detail{color:var(--text-dim);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.subagent-activity.tool .icon{color:var(--accent)}.subagent-activity.progress .icon{color:var(--warning)}.subagent-activity.message .icon{color:var(--text)}.subagent-model-badge{font-size:.55rem;padding:.1rem .35rem;border-radius:4px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.subagent-model-badge.haiku{background:#4ade80;color:#052e16}.subagent-model-badge.sonnet{background:#60a5fa;color:#1e3a5f}.subagent-model-badge.opus{background:#c084fc;color:#3b0764}.subagent-activity.progress.hook .icon,.activity-line.hook-line .tool-icon{color:#f59e0b}.subagent-activity.tool-result .icon{color:var(--success)}.subagent-activity.tool-result.error .icon{color:var(--red)}.activity-line.result-line .tool-icon{color:var(--success)}.activity-line.result-line.error .tool-icon{color:var(--red)}.activity-line.result-line .tool-detail{color:var(--text-dim);font-style:italic}.tool-expand-btn{background:transparent;border:1px solid var(--border);border-radius:3px;color:var(--text-muted);cursor:pointer;font-size:.6rem;padding:.1rem .3rem;margin-left:.3rem;transition:all .15s}.tool-expand-btn:hover{background:var(--bg-hover);color:var(--text)}.tool-params-expanded{background:var(--bg-dark);border-left:2px solid var(--accent);margin:.3rem 0 .3rem 2rem;padding:.4rem .6rem;border-radius:0 4px 4px 0;font-size:.65rem;max-height:150px;overflow-y:auto}.tool-params-expanded pre{margin:0;white-space:pre-wrap;word-break:break-all;color:var(--text-dim)}.subagent-window{position:fixed;width:420px;height:350px;min-width:280px;min-height:180px;max-width:90vw;max-height:80vh;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 32px #0006;z-index:1000;display:flex;flex-direction:column;overflow:hidden;resize:both;contain:layout paint}.subagent-window:after{content:"";position:absolute;bottom:4px;right:4px;width:12px;height:12px;background:linear-gradient(135deg,transparent 50%,var(--border-light) 50%,var(--border-light) 60%,transparent 60%,transparent 70%,var(--border-light) 70%,var(--border-light) 80%,transparent 80%);pointer-events:none;opacity:.6}.subagent-window-header{display:flex;align-items:center;padding:.5rem .75rem;background:var(--bg-input);border-bottom:1px solid var(--border);cursor:move}.subagent-window-title{display:flex;align-items:center;gap:.4rem;flex:1}.subagent-window-title .icon{font-size:1rem}.subagent-window-title .id{font-family:var(--font-mono);font-size:.8rem;color:#fff}.subagent-window-title .status{font-size:.6rem;padding:.1rem .3rem;border-radius:4px}.subagent-window-title .status.active{background:var(--green);color:#fff}.subagent-window-title .status.idle{background:var(--yellow);color:#000}.subagent-window-title .status.completed{background:var(--accent);color:#fff}.subagent-window-actions{display:flex;gap:.3rem}.subagent-window-actions button{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.2rem .4rem;font-size:.9rem}.subagent-window-actions button:hover{color:var(--text)}.subagent-window-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:.5rem;font-family:var(--font-mono);font-size:.75rem;background:#111;color:#c8c8c8;min-height:0;scroll-behavior:smooth}.subagent-window-body::-webkit-scrollbar{width:6px}.subagent-window-body::-webkit-scrollbar-track{background:transparent}.subagent-window-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.subagent-window-body::-webkit-scrollbar-thumb:hover{background:var(--border-light)}.subagent-window-body .activity-line{display:flex;gap:.3rem;padding:.15rem 0;align-items:baseline}.subagent-window-body .activity-line .time{color:#888;flex:0 0 auto;white-space:nowrap}.subagent-window-body .activity-line .tool-icon{flex:0 0 auto;opacity:.9}.subagent-window-body .activity-line .tool-name{color:#b0b0b0;flex:0 0 auto;white-space:nowrap}.subagent-window-body .activity-line .tool-detail{color:#d0d0d0;flex:1;overflow:hidden;text-overflow:ellipsis}.subagent-window-body .message-line{padding:.3rem 0;color:#c8c8c8}.subagent-window-body .progress-line{color:#a0a0a0;font-style:italic}.subagent-window-parent{background:var(--bg-darker);padding:4px 12px;font-size:11px;color:var(--text-muted);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:6px}.subagent-window-parent .parent-label{opacity:.7}.subagent-window-parent .parent-name{color:var(--accent);cursor:pointer;font-weight:500}.subagent-window-parent .parent-name:hover{text-decoration:underline}.subagent-window.spawning{pointer-events:none}.connection-lines-svg{position:fixed;top:0;left:0;width:100vw;height:100vh;height:100dvh;pointer-events:none;z-index:999}.connection-line{stroke:#3b82f6;stroke-width:3;stroke-dasharray:5 3;fill:none;opacity:.9;filter:drop-shadow(0 0 2px rgba(0,0,0,.8)) drop-shadow(0 0 4px rgba(59,130,246,.8)) drop-shadow(0 0 8px rgba(59,130,246,.5));transition:opacity .2s,stroke-width .2s,filter .2s}.connection-line:hover{opacity:1;stroke-width:3.5;filter:drop-shadow(0 0 2px rgba(0,0,0,.9)) drop-shadow(0 0 6px rgba(59,130,246,1)) drop-shadow(0 0 12px rgba(59,130,246,.7))}.connection-line.spawning-line{stroke-dasharray:1000;stroke-dashoffset:1000}.connection-line.wizard-connection{stroke:#60a5fa;stroke-width:3;filter:drop-shadow(0 0 2px rgba(0,0,0,.8)) drop-shadow(0 0 5px #60a5fa) drop-shadow(0 0 10px #60a5fa);stroke-dasharray:8 4;animation:wizard-pulse 1.5s ease-in-out infinite}@keyframes wizard-pulse{0%,to{opacity:.75}50%{opacity:1}}.connection-line.plan-to-subagent-line{stroke:#3b82f6;stroke-width:3;filter:drop-shadow(0 0 2px rgba(0,0,0,.8)) drop-shadow(0 0 4px rgba(59,130,246,.8)) drop-shadow(0 0 8px rgba(59,130,246,.5));stroke-dasharray:5 3;animation:plan-subagent-pulse 1.2s ease-in-out infinite}.connection-line.plan-to-subagent-line:hover{stroke-width:3.5;filter:drop-shadow(0 0 2px rgba(0,0,0,.9)) drop-shadow(0 0 6px rgba(59,130,246,1)) drop-shadow(0 0 12px rgba(59,130,246,.7))}@keyframes plan-subagent-pulse{0%,to{opacity:.8}50%{opacity:1}}.project-insights-panel{position:fixed;right:20px;top:calc(var(--header-height) + 10px);width:450px;height:350px;min-width:300px;min-height:200px;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.07);border-radius:12px;box-shadow:0 16px 64px #0006,0 4px 16px #0003;z-index:1000;display:none;flex-direction:column;overflow:hidden;resize:both}.project-insights-panel.visible{display:flex}.project-insights-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:var(--bg-input);border-bottom:1px solid var(--border);border-radius:8px 8px 0 0;flex-shrink:0}.project-insights-title{font-size:.85rem;font-weight:600;color:var(--text)}.project-insights-body{flex:1;overflow-y:auto;padding:.5rem}.project-insights-resize-handle{position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:se-resize;opacity:.5}.project-insights-resize-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:8px;height:8px;border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted)}.project-insight-item{display:flex;flex-direction:column;padding:.5rem .6rem;border-radius:4px;background:var(--bg-input);margin-bottom:.4rem}.project-insight-item:last-child{margin-bottom:0}.project-insight-command{display:flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.8rem;color:var(--text)}.project-insight-command .icon{font-size:1rem}.project-insight-command .cmd{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-insight-paths{display:flex;flex-direction:column;gap:.25rem;margin-top:.4rem;padding-left:1.4rem}.project-insight-filepath{cursor:pointer;color:var(--accent);font-family:var(--font-mono);font-size:.75rem;text-decoration:underline;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-insight-filepath:hover{color:var(--accent-hover)}.project-insight-timeout{font-size:.7rem;color:var(--text-muted);margin-left:auto}.project-insight-status{font-size:.7rem;padding:.15rem .35rem;border-radius:3px;margin-left:.3rem}.project-insight-status.running{background:var(--success);color:#fff}.project-insight-status.completed{background:var(--text-muted);color:#fff}.file-browser-panel{position:fixed;top:calc(var(--header-height) + 10px);right:20px;width:280px;height:calc(100vh - var(--header-height) - var(--toolbar-height) - 40px);height:calc(100dvh - var(--header-height) - var(--toolbar-height) - 40px);max-height:600px;min-width:200px;min-height:300px;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.07);border-radius:12px;box-shadow:0 8px 32px #0006,0 2px 8px #0003;z-index:100;display:none;flex-direction:column;overflow:hidden;resize:both}.file-browser-panel.visible{display:flex}.file-browser-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem .6rem;background:var(--bg-input);border-bottom:1px solid var(--border);flex-shrink:0;cursor:move;user-select:none}.file-browser-title{font-size:.8rem;font-weight:600;color:var(--text)}.file-browser-actions{display:flex;gap:.25rem}.file-browser-search{padding:.4rem;border-bottom:1px solid var(--border);flex-shrink:0}.file-browser-search input{width:100%;padding:.3rem .5rem;font-size:.75rem;background:var(--bg-dark);border:1px solid var(--border);border-radius:4px;color:var(--text)}.file-browser-search input:focus{outline:none;border-color:var(--accent)}.file-browser-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:.25rem 0}.file-browser-body::-webkit-scrollbar{width:6px}.file-browser-body::-webkit-scrollbar-track{background:transparent}.file-browser-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.file-browser-body::-webkit-scrollbar-thumb:hover{background:var(--border-light)}.file-browser-status{padding:.25rem .5rem;font-size:.65rem;color:var(--text-muted);border-top:1px solid var(--border);flex-shrink:0}.file-browser-empty{padding:1rem;text-align:center;color:var(--text-muted);font-size:.75rem}.file-browser-loading{padding:1rem;text-align:center;color:var(--text-dim);font-size:.75rem}.file-tree-item{display:flex;align-items:center;gap:.35rem;padding:.2rem .5rem;cursor:pointer;font-size:.75rem;white-space:nowrap;user-select:none;transition:background .1s}.file-tree-item:hover{background:var(--bg-hover)}.file-tree-item.selected{background:#3b82f626}.file-tree-item.hidden-by-filter{display:none}.file-tree-icon{width:1rem;text-align:center;flex-shrink:0;font-size:.9rem}.file-tree-expand{width:.75rem;color:var(--text-muted);font-size:.6rem;flex-shrink:0;transition:transform .15s}.file-tree-expand.expanded{transform:rotate(90deg)}.file-tree-name{flex:1;overflow:hidden;text-overflow:ellipsis;color:var(--text)}.file-tree-name.directory{color:var(--accent-hover);font-weight:500}.file-tree-size{font-size:.65rem;color:var(--text-muted);margin-left:auto;padding-left:.5rem}.file-tree-download{display:none;margin-left:auto;padding:0 4px;color:#888;text-decoration:none;font-size:12px;flex-shrink:0}.file-tree-item:hover .file-tree-download{display:inline}.file-tree-download:hover{color:#4fc3f7}.file-tree-item[data-depth="0"]{padding-left:.5rem}.file-tree-item[data-depth="1"]{padding-left:1.25rem}.file-tree-item[data-depth="2"]{padding-left:2rem}.file-tree-item[data-depth="3"]{padding-left:2.75rem}.file-tree-item[data-depth="4"]{padding-left:3.5rem}.file-tree-item[data-depth="5"]{padding-left:4.25rem}.file-tree-item[data-depth="6"]{padding-left:5rem}.file-tree-item[data-depth="7"]{padding-left:5.75rem}.file-tree-item[data-depth="8"]{padding-left:6.5rem}.file-tree-item[data-depth="9"]{padding-left:7.25rem}.file-preview-overlay{position:fixed;inset:0;background:#0009;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);z-index:2000;display:none;align-items:center;justify-content:center}.file-preview-overlay.visible{display:flex}.file-preview-window{width:80vw;max-width:900px;height:80vh;max-height:700px;background:#131316f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:12px;box-shadow:0 16px 64px #00000080,0 4px 16px #0000004d;display:flex;flex-direction:column;overflow:hidden}.file-preview-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:var(--bg-input);border-bottom:1px solid var(--border);flex-shrink:0}.file-preview-title{font-family:var(--font-mono);font-size:.85rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-preview-actions{display:flex;gap:.25rem}.file-preview-body{flex:1;overflow:auto;padding:0;background:#111}.file-preview-body pre{margin:0;padding:.75rem;font-family:var(--font-mono);font-size:.8rem;line-height:1.5;color:#d4d4d4;white-space:pre-wrap;word-break:break-all}.file-preview-body pre code{font-family:inherit}.file-preview-body img{max-width:100%;max-height:100%;object-fit:contain}.file-preview-body video{max-width:100%;max-height:100%}.file-preview-body .binary-message{padding:2rem;text-align:center;color:var(--text-muted)}.file-preview-footer{padding:.35rem .75rem;font-size:.7rem;color:var(--text-muted);border-top:1px solid var(--border);flex-shrink:0}.log-viewer-window{position:fixed;width:550px;height:400px;min-width:350px;min-height:200px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg);z-index:2000;display:flex;flex-direction:column;overflow:hidden;resize:both;contain:layout paint}.log-viewer-window-header{display:flex;align-items:center;padding:.5rem .75rem;background:var(--bg-input);border-bottom:1px solid var(--border);cursor:move}.log-viewer-window-title{display:flex;align-items:center;gap:.4rem;flex:1}.log-viewer-window-title .icon{font-size:1rem}.log-viewer-window-title .filename{font-family:var(--font-mono);font-size:.8rem;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.log-viewer-window-title .status{font-size:.6rem;padding:.1rem .3rem;border-radius:4px;margin-left:.5rem}.log-viewer-window-title .status.streaming{background:var(--success);color:#fff;animation:pulse 2s infinite}.log-viewer-window-title .status.disconnected{background:var(--text-muted);color:#fff}.log-viewer-window-title .status.error{background:var(--error);color:#fff}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.log-viewer-window-actions{display:flex;gap:.3rem}.log-viewer-window-actions button{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.2rem .4rem;font-size:.9rem}.log-viewer-window-actions button:hover{color:var(--text)}.log-viewer-window-body{flex:1;overflow-y:auto;padding:.5rem;font-family:var(--font-mono);font-size:.75rem;background:var(--bg-dark);white-space:pre-wrap;word-break:break-all;color:var(--text);line-height:1.4}.log-viewer-window-body .log-line{padding:.1rem 0;content-visibility:auto;contain-intrinsic-size:auto 20px}.log-viewer-window-body .log-error{color:var(--error)}.log-viewer-window-body .log-info{color:var(--text-muted);font-style:italic}.image-popup-window{position:fixed;width:600px;height:500px;min-width:300px;min-height:250px;max-width:90vw;max-height:90vh;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;overflow:hidden;resize:both;z-index:3000;contain:layout paint}.image-popup-header{display:flex;align-items:center;padding:.5rem .75rem;background:var(--bg-input);border-bottom:1px solid var(--border);cursor:move}.image-popup-title{display:flex;align-items:center;gap:.4rem;flex:1;min-width:0}.image-popup-title .icon{font-size:1rem;flex-shrink:0}.image-popup-title .filename{font-family:var(--font-mono);font-size:.8rem;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.image-popup-title .session-badge{font-size:.6rem;padding:.1rem .4rem;border-radius:4px;background:var(--accent);color:#fff;flex-shrink:0}.image-popup-title .size-badge{font-size:.6rem;padding:.1rem .3rem;border-radius:4px;background:var(--text-muted);color:#fff;flex-shrink:0}.image-popup-actions{display:flex;gap:.3rem;flex-shrink:0}.image-popup-actions button{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.2rem .4rem;font-size:.9rem}.image-popup-actions button:hover{color:var(--text)}.image-popup-body{flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#1a1a1a;padding:.5rem}.image-popup-body img{max-width:100%;max-height:100%;object-fit:contain;cursor:pointer;transition:transform .1s ease}.image-popup-body img:hover{transform:scale(1.02)}.image-popup-body .image-error{color:var(--error);font-size:.85rem;padding:1rem;text-align:center}.xterm-link-layer .xterm-link{text-decoration:underline;text-decoration-style:dotted;cursor:pointer}.xterm .xterm-screen .xterm-decoration-container .xterm-decoration.xterm-link-decoration{cursor:pointer}.wizard-progress{display:flex;justify-content:center;gap:1.5rem;padding:.5rem .75rem;background:var(--bg-dark);border-bottom:1px solid var(--border)}.wizard-step{display:flex;align-items:center;gap:.5rem;color:var(--text-muted);font-size:.8rem;transition:color .2s}.wizard-step.active{color:var(--accent)}.wizard-step.completed{color:var(--green)}.wizard-step-number{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:var(--bg-input);border:1px solid var(--border);border-radius:50%;font-size:.7rem;font-weight:600}.wizard-step.active .wizard-step-number{background:var(--accent);border-color:var(--accent);color:#fff}.wizard-step.completed .wizard-step-number{background:var(--green);border-color:var(--green);color:#fff}.wizard-step-label{font-weight:500}.wizard-page{min-height:180px}.wizard-page.hidden{display:none}.wizard-footer{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;border-top:1px solid var(--border);background:var(--bg-card)}.wizard-footer-right{display:flex;gap:.5rem}.modal-wizard{width:480px;max-width:95vw;max-height:70vh;display:flex;flex-direction:column}.modal-wizard.draggable{position:absolute;transform:none;cursor:default}.modal-wizard .modal-body{overflow-y:auto;flex:1;min-height:0}.modal-wizard .wizard-footer{flex-shrink:0}.wizard-page-compact{min-height:auto;padding:.5rem 0}.wizard-step-intro{text-align:center;margin-bottom:.75rem;color:var(--text-dim);font-size:.9rem}.wizard-step-intro p{margin:0}.wizard-inline-row{display:flex;gap:1rem;margin-top:.75rem}.wizard-inline-field{flex:1}.wizard-inline-field-small{flex:0 0 auto}.wizard-inline-field label{display:block;font-size:.8rem;color:var(--text-dim);margin-bottom:.25rem}.iteration-presets-compact{display:flex;gap:.25rem}.iteration-presets-compact .iteration-preset-btn{padding:.35rem .6rem;font-size:.75rem;min-width:36px}.plan-section{padding:1rem;text-align:center}.plan-actions{display:flex;gap:.5rem;justify-content:center}.existing-plan-badge{font-size:.7rem;background:var(--accent);color:#fff;padding:.1rem .4rem;border-radius:3px;margin-left:.5rem;font-weight:400}.existing-plan-card{background:var(--bg-input);border:1px solid var(--accent);border-radius:6px;padding:1rem;text-align:left}.existing-plan-header{display:flex;align-items:center;gap:.5rem;font-weight:500;margin-bottom:.75rem}.existing-plan-icon{font-size:1.2rem}.existing-plan-stats{display:flex;gap:1rem;margin-bottom:1rem;font-size:.85rem}.existing-plan-stats .stat{display:flex;align-items:center;gap:.25rem}.existing-plan-stats .stat.pending{color:var(--yellow)}.existing-plan-stats .stat.completed{color:var(--green)}.existing-plan-stats .stat.total{color:var(--text-muted)}.existing-plan-actions{display:flex;gap:.5rem}.plan-loading-state{padding:1.5rem 1rem;text-align:center}.plan-loading-content{display:flex;align-items:center;justify-content:center;gap:1rem;margin-bottom:.75rem}.plan-spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.plan-loading-text{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.plan-loading-title{font-weight:500;color:var(--text)}.plan-loading-time{font-size:.8rem;color:var(--text-muted);font-family:SF Mono,Monaco,monospace}.plan-loading-hint{color:var(--text-dim);font-size:.85rem;margin:0 0 1rem}.plan-error-msg{color:var(--red);margin-bottom:1rem}.plan-option-group{display:flex;align-items:center;gap:.5rem}.plan-option-group label{font-size:.8rem;color:var(--text-dim)}.plan-option-group select{padding:.3rem .5rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.8rem}.plan-detail-btns{display:flex;gap:.25rem}.plan-detail-btn{padding:.3rem .6rem;font-size:.75rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);cursor:pointer;transition:all .15s}.plan-detail-btn:hover{border-color:var(--border-light)}.plan-detail-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.plan-editor-header{display:flex;flex-direction:column;gap:.5rem;margin-bottom:.75rem;font-weight:500;font-size:.9rem}.plan-stats{font-weight:400;font-size:.8rem;color:var(--text-muted);margin-left:.5rem}.plan-editor-actions{display:flex;gap:.35rem;flex-wrap:wrap;align-items:center}.plan-items-list{display:flex;flex-direction:column;gap:.35rem;max-height:280px;overflow-y:auto;margin-bottom:.5rem}.plan-loading-actions{display:flex;gap:.5rem;justify-content:center}.plan-autostart-toggle{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border)}.plan-autostart-label{display:flex;align-items:center;gap:.5rem;cursor:pointer;justify-content:center}.plan-autostart-label input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}.plan-autostart-text{font-size:.85rem;color:var(--text)}.plan-autostart-label:hover .plan-autostart-text{color:var(--accent)}.existing-wizard-files-section{padding:1rem}.existing-wizard-card{background:var(--bg-dark);border:1px solid var(--accent);border-radius:8px;padding:1rem}.existing-wizard-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.existing-wizard-icon{font-size:1.2rem}.existing-wizard-title{font-weight:600;color:var(--text)}.existing-wizard-desc{font-size:.85rem;color:var(--text-dim);margin:0 0 .75rem}.existing-wizard-agents{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:1rem}.existing-wizard-agent{background:#60a5fa33;color:var(--accent);padding:.2rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.existing-wizard-actions{display:flex;gap:.5rem;justify-content:center}.plan-cancel-btn{color:var(--red)}.plan-stopped-indicator{display:flex;align-items:center;justify-content:center;gap:.5rem;margin-bottom:1rem;padding:.75rem;background:var(--surface);border-radius:6px;border:1px solid var(--border)}.plan-stopped-icon{color:var(--red);font-size:1rem}.plan-stopped-text{font-weight:500;color:var(--text)}.plan-skip-hint{font-size:.75rem;color:var(--text-muted);text-align:center;margin-top:.75rem}.plan-skip-hint strong{color:var(--text-dim)}.plan-subagent-window{position:fixed;width:280px;background:var(--bg-card);border:1px solid var(--accent);border-radius:8px;box-shadow:0 4px 20px #0006,0 0 20px #60a5fa33;overflow:hidden;animation:planSubagentSpawn .3s ease-out}@keyframes planSubagentSpawn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.plan-subagent-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:linear-gradient(135deg,#60a5fa33,#60a5fa1a);border-bottom:1px solid var(--border);cursor:grab;user-select:none}.plan-subagent-header:active{cursor:grabbing}.plan-subagent-icon{font-size:1rem}.plan-subagent-title{flex:1;font-weight:500;font-size:.8rem;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-subagent-model{font-size:.65rem;padding:.15rem .4rem;background:#7c3aed;color:#fff;border-radius:3px;text-transform:uppercase;font-weight:600}.plan-subagent-body{padding:.75rem}.plan-subagent-status{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}.plan-subagent-status.running .plan-subagent-spinner{width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}.plan-subagent-status.completed .plan-subagent-status-text{color:var(--green)}.plan-subagent-status.failed .plan-subagent-status-text{color:var(--red)}.plan-subagent-status-text{font-size:.8rem;font-weight:500}.plan-subagent-detail{font-size:.7rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-subagent-prompt-link{display:flex;align-items:center;gap:.5rem;cursor:pointer;padding:.15rem .3rem;margin:-.15rem -.3rem;border-radius:4px;transition:background .15s ease}.plan-subagent-prompt-link:hover{background:#ffffff1a}.plan-subagent-status-text.clickable{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.plan-subagent-status-text.clickable:hover{text-decoration-style:solid;color:var(--accent)}.ralph-version-info{display:flex;align-items:center;gap:.35rem;font-size:.7rem;color:var(--text-muted);margin-left:auto}.ralph-version-info .version-badge{background:var(--bg-card);padding:.1rem .25rem;border-radius:2px;font-family:SF Mono,Monaco,monospace}.ralph-version-info .rollback-btn{background:none;border:none;color:var(--accent);cursor:pointer;font-size:.65rem;padding:.1rem .25rem}.ralph-version-info .rollback-btn:hover{text-decoration:underline}.textarea-with-assist{position:relative}.textarea-with-assist textarea{width:100%;padding:.6rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.85rem;font-family:SF Mono,Monaco,Courier New,monospace;resize:vertical;min-height:80px}.textarea-with-assist textarea:focus{outline:none;border-color:var(--accent)}.iteration-presets{display:flex;gap:.35rem;flex-wrap:wrap}.iteration-preset-btn{padding:.5rem 1rem;font-size:.8rem;font-weight:500;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);cursor:pointer;transition:all .15s;min-width:50px}.iteration-preset-btn:hover{border-color:var(--border-light);color:var(--text)}.iteration-preset-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.case-select-inline{display:flex;gap:.5rem}.case-select-inline select{flex:1}.ralph-preview-section{margin-bottom:1rem}.ralph-preview-section>label{display:block;font-size:.7rem;color:var(--text-dim);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.03em}.ralph-prompt-preview{background:var(--bg-dark);border:1px solid var(--border);border-radius:4px;padding:.5rem .75rem;font-family:SF Mono,Monaco,Courier New,monospace;font-size:.75rem;color:var(--text-dim);max-height:120px;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.ralph-prompt-preview .preview-highlight{color:var(--accent);font-weight:500}.ralph-config-summary{background:var(--bg-input);border-radius:4px;padding:.75rem;margin-bottom:1rem}.config-summary-row{display:flex;justify-content:space-between;padding:.35rem 0;font-size:.8rem}.config-summary-row:not(:last-child){border-bottom:1px solid var(--border)}.config-label{color:var(--text-dim)}.config-summary-row code{background:var(--bg-dark);padding:.15rem .4rem;border-radius:3px;font-size:.75rem;color:var(--green)}.advanced-options{margin-top:1rem}.advanced-options summary{cursor:pointer;font-size:.8rem;color:var(--text-dim);padding:.5rem 0;border-top:1px solid var(--border)}.advanced-options summary:hover{color:var(--text)}.advanced-options[open] summary{margin-bottom:.75rem}.advanced-options-content{padding-left:.5rem}.btn-response-viewer-header{display:inline-flex!important}.response-viewer{display:none;position:fixed;bottom:0;left:0;right:0;max-height:85vh;background:#1a1a2e;border-top:1px solid #333;border-radius:12px 12px 0 0;z-index:5000;flex-direction:column;transform:translateY(100%);transition:transform .25s ease-out}.response-viewer.visible{display:flex;transform:translateY(0)}.response-viewer-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #333;flex-shrink:0;font-size:14px;font-weight:600;color:#e0e0e0}.response-viewer-actions{display:flex;align-items:center;gap:8px}.response-viewer-more{background:#2a2a4a;border:1px solid #444;color:#aaa;font-size:12px;padding:3px 10px;border-radius:4px;cursor:pointer}.response-viewer-more:active{background:#3a3a5a}.response-viewer-close{background:none;border:none;color:#888;font-size:22px;cursor:pointer;padding:0 4px;line-height:1}.rv-message{margin:0 0 18px;padding:14px 16px 16px;border-radius:10px;border:1px solid #252538;border-left-width:3px;background:#181826;position:relative}.rv-message:last-child{margin-bottom:6px}.rv-message:has(.rv-role-user),.rv-message.rv-msg-user{border-left-color:#7aa2ff;background:#16182a}.rv-message:has(.rv-role-assistant),.rv-message.rv-msg-assistant{border-left-color:#6ddb7f;background:#161f1a}.rv-role{display:inline-block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px;padding:2px 8px;border-radius:10px;background:#ffffff0a}.rv-role-user{color:#7aa2ff;background:#7aa2ff1f}.rv-role-assistant{color:#6ddb7f;background:#6ddb7f1f}.rv-text{word-break:break-word;line-height:1.6}.rv-text p{margin:0 0 .6em}.rv-text p:last-child{margin-bottom:0}.rv-text h1,.rv-text h2,.rv-text h3,.rv-text h4{color:#e0e0e0;margin:1em 0 .4em;line-height:1.3}.rv-text h1{font-size:1.3em}.rv-text h2{font-size:1.15em}.rv-text h3{font-size:1.05em}.rv-text code{background:#2a2a3e;padding:1px 5px;border-radius:3px;font-size:.9em}.rv-text pre{background:#1e1e2e;border:1px solid #333;border-radius:6px;padding:10px 12px;overflow-x:auto;margin:1em 0;-webkit-overflow-scrolling:touch;box-shadow:inset 0 0 0 1px #ffffff05;position:relative}.rv-text pre code,.response-viewer-body>pre code{background:none;color:#e6e6f0;padding:0;font-family:Fira Code,JetBrains Mono,SF Mono,Menlo,Monaco,monospace;font-size:12.5px;line-height:1.55;white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere;tab-size:4}.rv-text .rv-diagram-wrap,.response-viewer-body .rv-diagram-wrap{position:relative;max-width:var(--rv-content-max, 720px);margin:1em auto}.rv-text .rv-diagram-wrap>pre.rv-diagram,.response-viewer-body .rv-diagram-wrap>pre.rv-diagram{margin:0;padding-right:44px}.rv-text pre.rv-diagram code,.response-viewer-body pre.rv-diagram code{white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal}.rv-text pre.rv-diagram.rv-nowrap code,.response-viewer-body pre.rv-diagram.rv-nowrap code{white-space:pre;overflow-wrap:normal;word-break:normal}.rv-text pre.rv-diagram.rv-nowrap,.response-viewer-body pre.rv-diagram.rv-nowrap{background:linear-gradient(to left,#0f0f1a 0,#0f0f1a00 28px) right / 28px 100% no-repeat,linear-gradient(to left,#7aa2ff2e 0,#0f0f1a00 28px) right / 28px 100% no-repeat,#0f0f1a}.rv-wrap-toggle{position:absolute;top:6px;right:6px;width:28px;height:24px;padding:0;border:1px solid #2f2f45;border-radius:5px;background:#141420eb;color:#8b8b97;font-size:11px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:color .15s,border-color .15s;z-index:2}.rv-wrap-toggle:hover,.rv-wrap-toggle:active{color:#e0e0ec;border-color:#4a4a65}.rv-wrap-toggle:before{content:"\21b5";font-size:13px}.rv-diagram-wrap:has(>pre.rv-nowrap) .rv-wrap-toggle:before,.rv-diagram-wrap.rv-wrap-nowrap .rv-wrap-toggle:before{content:"\2922"}.rv-text ul,.rv-text ol,.response-viewer-body>ul,.response-viewer-body>ol{margin:.6em 0}.rv-text pre code{background:none;padding:0;font-size:.85em;line-height:1.5}.rv-text ul,.rv-text ol{margin:.4em 0;padding-left:1.4em}.rv-text li{margin-bottom:.2em}.rv-text blockquote{border-left:3px solid #444;margin:.6em 0;padding:.3em 0 .3em 12px;color:#999}.rv-text strong{color:#f0f0f0}.rv-text a{color:#5c7cfa;text-decoration:none}.rv-text a:hover,.response-viewer-body a:hover{border-bottom-color:#7aa2ff}.rv-table-wrap{margin:1em 0;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid #2a2a3d;border-radius:8px;background:#12121d}.rv-text table,.response-viewer-body>table,.rv-table-wrap>table{border-collapse:collapse;margin:0;width:100%;font-size:.92em;line-height:1.55}.rv-text th,.rv-text td,.response-viewer-body>table th,.response-viewer-body>table td,.rv-table-wrap th,.rv-table-wrap td{border-bottom:1px solid #252538;border-right:1px solid #252538;padding:8px 12px;text-align:left;vertical-align:top;white-space:normal}.rv-text th:last-child,.rv-text td:last-child,.response-viewer-body>table th:last-child,.response-viewer-body>table td:last-child,.rv-table-wrap th:last-child,.rv-table-wrap td:last-child{border-right:none}.rv-text tr:last-child td,.response-viewer-body>table tr:last-child td,.rv-table-wrap tr:last-child td{border-bottom:none}.rv-text th,.response-viewer-body>table th,.rv-table-wrap th{background:#20202e;color:#f0f0f5;font-weight:600;border-bottom:2px solid #2f2f45;white-space:nowrap}.rv-text tbody tr:nth-child(2n) td,.response-viewer-body>table tbody tr:nth-child(2n) td,.rv-table-wrap tbody tr:nth-child(2n) td{background:#ffffff06}.rv-text tbody tr:hover td,.response-viewer-body>table tbody tr:hover td,.rv-table-wrap tbody tr:hover td{background:#7aa2ff0f}.rv-text hr,.response-viewer-body>hr{border:none;border-top:1px solid #333;margin:1em 0}.response-viewer-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:16px;font-family:Fira Code,Cascadia Code,JetBrains Mono,SF Mono,Monaco,monospace;font-size:13px;line-height:1.5;color:#d4d4d4}.response-viewer-body:empty:after{content:"No response yet";color:#555;font-style:italic}.response-viewer-backdrop{display:none;position:fixed;inset:0;background:#00000080;z-index:4999}.response-viewer-backdrop.visible{display:block}#cjkInput{display:none;flex-shrink:0;width:100%;font-family:Fira Code,Cascadia Code,JetBrains Mono,SF Mono,Monaco,monospace;font-size:14px;background:#1a1a2e;color:#e0e0e0;border:1px solid #333;border-top:none;padding:6px 10px;outline:none;resize:none;line-height:1.4;box-sizing:border-box}#cjkInput:focus{border-color:#339af0;background:#111}#cjkInput::placeholder{color:#495057;font-size:12px}.orchestrator-panel{background:var(--glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--glass-border);font-size:.75rem;flex-shrink:0;overflow:hidden;position:relative;contain:layout style paint}.orchestrator-header{display:flex;align-items:center;gap:8px;padding:6px 10px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.orchestrator-title{font-weight:600;color:var(--text-primary);font-size:.8rem}.orchestrator-state-badge{display:inline-block;padding:1px 8px;border-radius:10px;color:#fff;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.orchestrator-actions{display:flex;gap:4px;margin-left:auto}.orchestrator-close-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:1rem;padding:0 4px;line-height:1}.orchestrator-close-btn:hover{color:var(--text-primary)}.orch-btn{padding:2px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-input);color:var(--text-primary);cursor:pointer;font-size:.7rem}.orch-btn:hover{background:var(--bg-hover)}.orch-btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.orch-btn-primary:hover{background:#2563eb}.orch-btn-warn{background:#f59e0b;color:#000;border-color:#f59e0b}.orch-btn-warn:hover{background:#d97706}.orch-btn-danger{background:#ef4444;color:#fff;border-color:#ef4444}.orch-btn-danger:hover{background:#dc2626}.orchestrator-body{max-height:300px;overflow-y:auto;padding:8px 10px}.orch-empty{color:var(--text-secondary);text-align:center;padding:12px}.orch-planning{display:flex;flex-direction:column;gap:8px;color:#f59e0b;padding:12px}.orch-planning>.orch-spinner{display:inline-block}.orch-progress-log{display:flex;flex-direction:column;gap:3px;font-size:.8em;color:var(--text-secondary);max-height:200px;overflow-y:auto}.orch-progress-item{padding:2px 0;line-height:1.3}.orch-progress-phase{color:#f59e0b;font-weight:600;margin-right:4px}.orch-spinner{width:14px;height:14px;border:2px solid #f59e0b33;border-top-color:#f59e0b;border-radius:50%;animation:orch-spin .8s linear infinite}@keyframes orch-spin{to{transform:rotate(360deg)}}.orch-goal{margin-bottom:6px;color:var(--text-secondary);line-height:1.3}.orch-progress-bar{position:relative;height:18px;background:var(--bg-input);border-radius:4px;overflow:hidden;margin-bottom:8px}.orch-progress-fill{position:absolute;top:0;left:0;height:100%;background:linear-gradient(90deg,#3b82f6,#22c55e);transition:width .3s ease;border-radius:4px}.orch-progress-bar span{position:relative;display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-primary);font-size:.65rem;font-weight:600;z-index:1}.orch-phases{display:flex;flex-direction:column;gap:2px}.orch-phase{border:1px solid var(--border);border-radius:4px;overflow:hidden}.orch-phase-active{border-color:#3b82f6}.orch-phase-passed{opacity:.7}.orch-phase-skipped{opacity:.5}.orch-phase-failed{border-color:#ef4444}.orch-phase-header{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--bg-secondary)}.orch-phase-icon{width:14px;text-align:center}.orch-phase-name{flex:1;color:var(--text-primary);font-weight:500}.orch-phase-tasks,.orch-phase-duration{color:var(--text-secondary);font-size:.65rem}.orch-phase-actions{display:flex;gap:2px}.orch-phase-btn{padding:1px 6px;border:1px solid var(--border);border-radius:3px;background:var(--bg-input);color:var(--text-secondary);cursor:pointer;font-size:.6rem}.orch-phase-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.orch-phase-tasks-list{padding:4px 8px 4px 26px;border-top:1px solid var(--border)}.orch-task{display:flex;align-items:flex-start;gap:4px;padding:2px 0;line-height:1.3}.orch-task-icon{width:12px;text-align:center;flex-shrink:0;margin-top:1px}.orch-task-prompt{color:var(--text-primary);word-break:break-word}.orch-task-error{color:#ef4444;font-size:.6rem;margin-left:auto}.orch-task-completed .orch-task-prompt{color:var(--text-secondary)}.orch-task-failed .orch-task-icon{color:#ef4444}.orch-verify-pass{color:#22c55e;padding:2px 8px;font-size:.65rem}.orch-verify-fail{color:#ef4444;padding:2px 8px;font-size:.65rem}.orch-stats{display:flex;flex-wrap:wrap;gap:12px;padding:6px 0;margin-top:6px;border-top:1px solid var(--border);color:var(--text-secondary);font-size:.65rem}.orch-error{color:#ef4444;padding:4px 0;margin-top:4px;font-size:.7rem}
Binary file
@@ -0,0 +1,3 @@
1
+ "use strict";Object.assign(CodemanApp.prototype,{initTerminal(){const e=parseInt(localStorage.getItem("codeman-scrollback"))||DEFAULT_SCROLLBACK;if(this.terminal=new Terminal({theme:{background:"#0d0d0d",foreground:"#e0e0e0",cursor:"#e0e0e0",cursorAccent:"#0d0d0d",selection:"rgba(255, 255, 255, 0.3)",black:"#0d0d0d",red:"#ff6b6b",green:"#51cf66",yellow:"#ffd43b",blue:"#339af0",magenta:"#cc5de8",cyan:"#22b8cf",white:"#e0e0e0",brightBlack:"#495057",brightRed:"#ff8787",brightGreen:"#69db7c",brightYellow:"#ffe066",brightBlue:"#5c7cfa",brightMagenta:"#da77f2",brightCyan:"#66d9e8",brightWhite:"#ffffff"},fontFamily:'"Fira Code", "Cascadia Code", "JetBrains Mono", "SF Mono", Monaco, monospace',fontSize:MobileDetection.getDeviceType()==="mobile"?10:14,lineHeight:1.2,cursorBlink:!1,cursorStyle:"block",scrollback:e,allowTransparency:!0,allowProposedApi:!0}),this.fitAddon=new FitAddon.FitAddon,this.terminal.loadAddon(this.fitAddon),typeof Unicode11Addon<"u")try{const t=new Unicode11Addon.Unicode11Addon;this.terminal.loadAddon(t),this.terminal.unicode.activeVersion="11"}catch{}const i=document.getElementById("terminalContainer");this.terminal.open(i),this.terminal.attachCustomKeyEventHandler(t=>{if(t.isComposing||t.keyCode===229||t.altKey&&t.key>="0"&&t.key<="9")return!1;if(t.key==="Enter"&&(t.shiftKey||t.ctrlKey)&&t.type==="keydown"){if(this.activeSessionId)if(this._localEchoEnabled){const l=this._localEchoOverlay?.pendingText||"";this._localEchoOverlay?.clear(),this._localEchoOverlay?.suppressBufferDetection(),this._flushedOffsets?.delete(this.activeSessionId),this._flushedTexts?.delete(this.activeSessionId),l&&(this._pendingInput+=l,r()),setTimeout(()=>{fetch(`/api/sessions/${this.activeSessionId}/send-key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:t.ctrlKey?"C-Enter":"S-Enter"})})},l?80:0)}else fetch(`/api/sessions/${this.activeSessionId}/send-key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:t.ctrlKey?"C-Enter":"S-Enter"})});return!1}return!0});{const t=i.querySelector(".xterm-helper-textarea");if(t&&MobileDetection.isTouchDevice()){let l=!1,h=0;t.addEventListener("compositionstart",()=>{l=!0}),t.addEventListener("compositionend",()=>{l=!1}),t.addEventListener("keydown",c=>{!c.isComposing&&c.keyCode!==229&&(h=Date.now())}),t.addEventListener("input",c=>{if(l||c.isComposing||c.inputType!=="insertText"||!c.data||Date.now()-h<50)return;const u=c.data;Promise.resolve().then(()=>{const a=t.value;!a||a.trim()===""||(this.terminal._core.coreService.triggerDataEvent(u,!0),t.value="")})})}}if(this._webglAddon=null,!(MobileDetection.getDeviceType()!=="desktop")&&!new URLSearchParams(location.search).has("nowebgl"))if(typeof WebglAddon<"u")this._initWebGL();else{const t=document.createElement("script");t.src="vendor/xterm-addon-webgl.min.js",t.onload=()=>this._initWebGL(),t.onerror=()=>console.warn("[CRASH-DIAG] Failed to load WebGL addon \u2014 using canvas renderer"),document.head.appendChild(t)}this._localEchoOverlay=new LocalEchoOverlay(this.terminal),this._cjkInput=null,typeof CjkInput<"u"&&(this._cjkInput=CjkInput.init({send:t=>{this.activeSessionId&&this._sendInputAsync(this.activeSessionId,t)}})),MobileDetection.getDeviceType()==="mobile"&&document.body.classList.contains("safari-browser")?requestAnimationFrame(()=>{this.fitAddon.fit(),requestAnimationFrame(()=>this.fitAddon.fit())}):this.fitAddon.fit(),this.registerFilePathLinkProvider(),i.addEventListener("wheel",t=>{t.preventDefault();const l=Math.round(t.deltaY/25)||(t.deltaY>0?1:-1);this.terminal.scrollLines(l)},{passive:!1});{const t=()=>this.terminal._core?._renderService?.dimensions?.css?.cell?.height||13;let l=0,h=0,c=0,u=null,a=!1;const m=y=>{const _=c?(y-c)/16.67:1;if(c=y,!a&&Math.abs(h)>.3){const v=Math.round(h/t());v!==0&&this.terminal.scrollLines(v),h*=.92,u=requestAnimationFrame(m)}else a?u=requestAnimationFrame(m):(u=null,h=0)};let p=0,g=!1;i.addEventListener("touchstart",y=>{y.touches.length===1&&(l=y.touches[0].clientY,h=0,p=0,a=!0,g=!1,c=0,u&&(cancelAnimationFrame(u),u=null))},{passive:!0}),i.addEventListener("touchmove",y=>{if(y.touches.length===1&&a){g=!0;const _=y.touches[0].clientY,v=l-_;p+=v,h=v*1.2,l=_;const b=t(),S=Math.trunc(p/b);S!==0&&(this.terminal.scrollLines(S),p-=S*b)}},{passive:!0}),i.addEventListener("touchend",()=>{a=!1,!u&&Math.abs(h)>.3&&(u=requestAnimationFrame(m)),!g&&this.terminal&&this.terminal.focus()},{passive:!0}),i.addEventListener("touchcancel",()=>{a=!1,h=0,p=0},{passive:!0})}this.showWelcome(),this._chunkedWriteGen=0,this._resizeTimeout=null,this._lastResizeDims=null;const d=40,f=10,o=()=>{this._resizeTimeout&&clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(()=>{this._resizeTimeout=null,this.fitAddon&&this.fitAddon.fit(),this.flickerFilterBuffer&&(this.flickerFilterTimeout&&(clearTimeout(this.flickerFilterTimeout),this.flickerFilterTimeout=null),this.flushFlickerBuffer());const t=typeof KeyboardHandler<"u"&&KeyboardHandler.keyboardVisible;if(this.activeSessionId&&!t){const l=this.fitAddon.proposeDimensions(),h=l?Math.max(l.cols,d):d,c=l?Math.max(l.rows,f):f;if(!this._lastResizeDims||h!==this._lastResizeDims.cols||c!==this._lastResizeDims.rows){const u=this.activeSessionId?this.sessions.get(this.activeSessionId):null;u&&u.mode!=="shell"&&!u._ended&&this.terminal&&this.isTerminalAtBottom()&&this.terminal.write("\x1B[3J\x1B[H\x1B[2J"),this._lastResizeDims={cols:h,rows:c},fetch(`/api/sessions/${this.activeSessionId}/resize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cols:h,rows:c})}).catch(()=>{})}}this.updateConnectionLines(),this._localEchoOverlay?.hasPending&&this._localEchoOverlay.rerender()},300)};window.addEventListener("resize",o),this.terminalResizeObserver&&this.terminalResizeObserver.disconnect(),this.terminalResizeObserver=new ResizeObserver(o),this.terminalResizeObserver.observe(i),this._pendingInput="",this._inputFlushTimeout=null,this._lastKeystrokeTime=0;const r=()=>{if(this._inputFlushTimeout=null,this._pendingInput&&this.activeSessionId){const t=this._pendingInput,l=this.activeSessionId;this._pendingInput="",this._sendInputAsync(l,t)}};this.terminal.onData(t=>{if(!(window.cjkActive||document.activeElement?.id==="cjkInput")&&this.activeSessionId){if(/^\x1b\[[\?>=]?[\d;]*[cnR]$/.test(t))return;if(this._localEchoEnabled){if(t==="\x7F"){if(this._localEchoOverlay?.removeChar()==="flushed"){const{count:c,text:u}=this._localEchoOverlay.getFlushed();this._flushedOffsets?.has(this.activeSessionId)&&(c===0?(this._flushedOffsets.delete(this.activeSessionId),this._flushedTexts?.delete(this.activeSessionId)):(this._flushedOffsets.set(this.activeSessionId,c),this._flushedTexts?.set(this.activeSessionId,u))),this._pendingInput+=t,r()}return}if(/^[\r\n]+$/.test(t)){const h=this._localEchoOverlay?.pendingText||"";this._localEchoOverlay?.clear(),this._localEchoOverlay?.suppressBufferDetection(),this._flushedOffsets?.delete(this.activeSessionId),this._flushedTexts?.delete(this.activeSessionId),this._inputFlushTimeout&&(clearTimeout(this._inputFlushTimeout),this._inputFlushTimeout=null),h&&(this._pendingInput+=h,r()),setTimeout(()=>{this._pendingInput+="\r",r()},80);return}if(t.length>1&&t.charCodeAt(0)>=32){this._localEchoOverlay?.appendText(t);return}if(t.charCodeAt(0)<32){if(t.length>1&&t.charCodeAt(0)===27){this._pendingInput+=t,r();return}if(this._restoringFlushedState){this._pendingInput+=t,r();return}if(t===" "){const c=this._localEchoOverlay?.pendingText||"";this._localEchoOverlay?.clear(),this._flushedOffsets?.delete(this.activeSessionId),this._flushedTexts?.delete(this.activeSessionId),c&&(this._pendingInput+=c),this._pendingInput+=t,this._inputFlushTimeout&&(clearTimeout(this._inputFlushTimeout),this._inputFlushTimeout=null);let u="";try{const m=this._localEchoOverlay?.findPrompt?.();if(m){const p=this.terminal.buffer.active,g=p.getLine(p.viewportY+m.row);g&&(u=g.translateToString(!0).slice(m.col+2).trimEnd())}}catch{}this._tabCompletionBaseText=u,r(),this._tabCompletionSessionId=this.activeSessionId,this._tabCompletionRetries=0,this._tabCompletionFallback&&clearTimeout(this._tabCompletionFallback);const a=this;this._tabCompletionFallback=setTimeout(()=>{if(a._tabCompletionFallback=null,!a._tabCompletionSessionId||a._tabCompletionSessionId!==a.activeSessionId)return;const m=a._localEchoOverlay;!m||m.pendingText||a.terminal.write("",()=>{if(!a._tabCompletionSessionId)return;m.resetBufferDetection();const p=m.detectBufferText();p&&p!==a._tabCompletionBaseText&&(a._tabCompletionSessionId=null,a._tabCompletionRetries=0,a._tabCompletionBaseText=null,m.rerender())})},300);return}const h=this._localEchoOverlay?.pendingText||"";this._localEchoOverlay?.clear(),this._localEchoOverlay?.suppressBufferDetection(),this._flushedOffsets?.delete(this.activeSessionId),this._flushedTexts?.delete(this.activeSessionId),h&&(this._pendingInput+=h),this._pendingInput+=t,this._inputFlushTimeout&&(clearTimeout(this._inputFlushTimeout),this._inputFlushTimeout=null),r();return}if(t.length===1&&t.charCodeAt(0)>=32){this._localEchoOverlay?.addChar(t);return}}if(this._pendingInput+=t,t.charCodeAt(0)<32||t.length>1){this._inputFlushTimeout&&(clearTimeout(this._inputFlushTimeout),this._inputFlushTimeout=null),r();return}const l=performance.now();l-this._lastKeystrokeTime>50?(this._inputFlushTimeout&&(clearTimeout(this._inputFlushTimeout),this._inputFlushTimeout=null),this._lastKeystrokeTime=l,r()):(this._lastKeystrokeTime=l,this._inputFlushTimeout||(this._inputFlushTimeout=setTimeout(r,0)))}})},registerFilePathLinkProvider(){const e=this;let i=-1;this.terminal.registerLinkProvider({provideLinks(s,n){s!==i&&(i=s,console.debug("[LinkProvider] Checking line:",s));const f=e.terminal.buffer.active.getLine(s-1);if(!f){n(void 0);return}const o=f.translateToString(!0);if(!o||!o.includes("/")){n(void 0);return}const r=[],t=/https?:\/\/[^\s"'<>|;&)\]\x00-\x1f]+/g,l=(p,g)=>{const y=p.replace(/[.,;:!?)]+$/,""),_=o.indexOf(y,g);_!==-1&&(r.some(v=>v.range.start.x===_+1)||r.push({text:y,range:{start:{x:_+1,y:s},end:{x:_+y.length+1,y:s}},decorations:{pointerCursor:!0,underline:!0},activate(v,b){window.open(b,"_blank","noopener,noreferrer")}}))},h=/(tail|cat|head|less|grep|watch|vim|nano)\s+(?:[^\s\/]*\s+)*(\/[^\s"'<>|;&\n\x00-\x1f]+)/g,c=/(\/(?:home|tmp|var|etc|opt)[^\s"'<>|;&\n\x00-\x1f]*\.(?:log|txt|json|md|yaml|yml|csv|xml|sh|py|ts|js))\b/g,u=/Bash\([^)]*?(\/(?:home|tmp|var|etc|opt)[^\s"'<>|;&\)\n\x00-\x1f]+)/g,a=(p,g)=>{const y=o.indexOf(p,g);y!==-1&&(r.some(_=>_.range.start.x===y+1)||r.push({text:p,range:{start:{x:y+1,y:s},end:{x:y+p.length+1,y:s}},decorations:{pointerCursor:!0,underline:!0},activate(_,v){e.openLogViewerWindow(v,e.activeSessionId)}}))};let m;for(t.lastIndex=0;(m=t.exec(o))!==null;)l(m[0],m.index);for(h.lastIndex=0;(m=h.exec(o))!==null;)a(m[2],m.index);for(c.lastIndex=0;(m=c.exec(o))!==null;)a(m[1],m.index);for(u.lastIndex=0;(m=u.exec(o))!==null;)a(m[1],m.index);r.length>0&&console.debug("[LinkProvider] Found links:",r.map(p=>p.text)),n(r.length>0?r:void 0)}}),console.log("[LinkProvider] File path link provider registered")},showWelcome(){const e=document.getElementById("welcomeOverlay");e&&(e.classList.add("visible"),this.loadTunnelStatus(),this.loadHistorySessions())},hideWelcome(){const e=document.getElementById("welcomeOverlay");e&&e.classList.remove("visible");const i=document.getElementById("welcomeQr");i&&(clearTimeout(this._welcomeQrShrinkTimer),i.classList.remove("expanded"))},async _fetchHistorySessions(){const s=(await(await fetch("/api/history/sessions")).json()).sessions||[];if(s.length===0)return[];const n=new Map;for(const f of s){const o=f.projectKey||f.workingDir;n.has(o)||n.set(o,[]),n.get(o).push(f)}const d=[];for(const[,f]of n)d.push(...f.slice(0,3));return d.sort((f,o)=>new Date(o.lastModified)-new Date(f.lastModified)),d},_resolveCaseLabel(e,i){if(!e)return"";let s=null;for(const n of i||[])if(!(!n||!n.path)){if(e===n.path)return`#${n.name}`;if(e.startsWith(n.path+"/")){const d=n.path.length;(!s||d>s.len)&&(s={name:n.name,suffix:e.slice(d),len:d})}}return s?`#${s.name}${s.suffix}`:e.split("/").pop()||e},_shortenHomePath(e){return(e||"").replace(/^\/home\/[^/]+\//,"~/").replace(/^\/Users\/[^/]+\//,"~/")},_buildHistoryItem(e,i){const s=e.sizeBytes<1024?`${e.sizeBytes}B`:e.sizeBytes<1048576?`${(e.sizeBytes/1024).toFixed(0)}K`:`${(e.sizeBytes/1048576).toFixed(1)}M`,n=new Date(e.lastModified),d=n.toLocaleDateString("en",{month:"short",day:"numeric"})+" "+n.toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit",hour12:!1}),f=this._shortenHomePath(e.workingDir),o=this._resolveCaseLabel(e.workingDir,i),r=document.createElement("div");r.className="history-item",r.title=e.workingDir;const t=document.createElement("div");t.className="history-item-main",t.addEventListener("click",()=>this.resumeHistorySession(e.sessionId,e.workingDir));const l=document.createElement("div");l.className="history-item-text";const h=document.createElement("span");h.className="history-item-title",h.textContent=e.firstPrompt||f;const c=document.createElement("span");c.className="history-item-subtitle",o.startsWith("#")&&c.classList.add("is-case"),c.textContent=o,l.append(h,c);const u=document.createElement("span");u.className="history-item-meta",u.textContent=d;const a=document.createElement("button");a.className="history-item-expand",a.type="button",a.setAttribute("aria-label","Show details"),a.setAttribute("aria-expanded","false"),a.textContent="\u22EF",t.append(l,u,a);const m=document.createElement("div");m.className="history-item-detail",m.hidden=!0;const p=document.createElement("div");p.className="history-detail-row";const g=document.createElement("span");g.className="history-detail-label",g.textContent="Prompt";const y=document.createElement("span");y.className="history-detail-value history-detail-prompt",y.textContent=e.firstPrompt||"(no prompt captured)",p.append(g,y);const _=document.createElement("div");_.className="history-detail-row";const v=document.createElement("span");v.className="history-detail-label",v.textContent="Path";const b=document.createElement("span");b.className="history-detail-value history-detail-path",b.textContent=f,_.append(v,b);const S=document.createElement("div");return S.className="history-detail-row history-detail-meta",S.textContent=`${d} \xB7 ${s} \xB7 ${e.sessionId.slice(0,8)}`,m.append(p,_,S),a.addEventListener("click",x=>{x.stopPropagation();const T=r.classList.toggle("expanded");m.hidden=!T,a.setAttribute("aria-expanded",T?"true":"false")}),r.append(t,m),r},_HISTORY_INITIAL_COUNT:4,async loadHistorySessions(){const e=document.getElementById("historySessions"),i=document.getElementById("historyList");if(!(!e||!i))try{const s=Array.isArray(this.cases)&&this.cases.length>0?Promise.resolve(this.cases):fetch("/api/cases").then(o=>o.ok?o.json():[]).catch(()=>[]),[n,d]=await Promise.all([this._fetchHistorySessions(30),s]);if(n.length===0){e.style.display="none";return}i.replaceChildren();const f=this._HISTORY_INITIAL_COUNT;for(let o=0;o<Math.min(f,n.length);o++)i.appendChild(this._buildHistoryItem(n[o],d));if(n.length>f){const o=document.createElement("button");o.className="history-show-more",o.textContent=`Show ${n.length-f} more`,o.addEventListener("click",()=>{for(let r=f;r<n.length;r++)i.insertBefore(this._buildHistoryItem(n[r],d),o);o.remove()}),i.appendChild(o)}e.style.display=""}catch(s){console.error("[loadHistorySessions]",s),e.style.display="none"}},async resumeHistorySession(e,i){document.getElementById("runModeMenu")?.classList.remove("active");try{this.terminal.clear(),this.terminal.writeln(`\x1B[1;32m Resuming conversation ${e.slice(0,8)}...\x1B[0m`);const s=i.split("/").pop()||"session";let n=1;for(const[,c]of this.sessions){const u=c.name&&c.name.match(/^w(\d+)-/);if(u){const a=parseInt(u[1]);a>=n&&(n=a+1)}}const d=`w${n}-${s}`,o=(this.cases||[]).find(c=>c.path===i)?.name||i.split("/").pop()||"",r=this.buildEnvOverrides(this.getCaseSettings(o),this.loadAppSettingsFromStorage()),l=await(await fetch("/api/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({workingDir:i,name:d,resumeSessionId:e,...Object.keys(r).length>0?{envOverrides:r}:{}})})).json();if(!l.success)throw new Error(l.error);const h=l.session.id;await fetch(`/api/sessions/${h}/interactive`,{method:"POST"}),this.terminal.writeln(`\x1B[90m Session ${d} ready\x1B[0m`),await this.selectSession(h),this.terminal.focus()}catch(s){this.terminal.writeln(`\x1B[1;31m Error: ${s.message}\x1B[0m`)}},isTerminalAtBottom(){if(!this.terminal)return!0;const e=this.terminal.buffer.active;return e.viewportY>=e.baseY-2},batchTerminalWrite(e){if(this._isLoadingBuffer){this._loadBufferQueue&&this._loadBufferQueue.push(e);return}if(this.writeFrameScheduled||(this._wasAtBottomBeforeWrite=this.isTerminalAtBottom()),(this.activeSessionId?this.sessions.get(this.activeSessionId):null)?.flickerFilterEnabled??!1){if(e.includes("\x1B[2J")||e.includes("\x1B[H\x1B[J")||e.includes("\x1B[H")&&e.includes("\x1B[?25l")){this.flickerFilterActive=!0,this.flickerFilterBuffer+=e,this.flickerFilterTimeout&&clearTimeout(this.flickerFilterTimeout),this.flickerFilterTimeout=setTimeout(()=>{this.flickerFilterTimeout=null,this.flushFlickerBuffer()},SYNC_WAIT_TIMEOUT_MS);return}if(this.flickerFilterActive){this.flickerFilterBuffer+=e;return}}this.pendingWrites.push(e),this.writeFrameScheduled||(this.writeFrameScheduled=!0,requestAnimationFrame(()=>{this.flushPendingWrites(),this.writeFrameScheduled=!1}))},flushFlickerBuffer(){this.flickerFilterBuffer&&(this.pendingWrites.push(this.flickerFilterBuffer),this.flickerFilterBuffer="",this.flickerFilterActive=!1,this.writeFrameScheduled||(this.writeFrameScheduled=!0,requestAnimationFrame(()=>{this.flushPendingWrites(),this.writeFrameScheduled=!1})))},_updateLocalEchoState(){const e=this.loadAppSettingsFromStorage(),i=this.activeSessionId?this.sessions.get(this.activeSessionId):null,n=!!((e.localEchoEnabled??MobileDetection.isTouchDevice())&&i);this._localEchoEnabled&&!n&&this._localEchoOverlay?.clear(),this._localEchoEnabled=n,this._localEchoOverlay&&i&&(i.mode==="opencode"?this._localEchoOverlay.setPrompt({type:"custom",offset:3,find:d=>{try{const f=d.buffer.active,o=f.cursorY,r=f.getLine(f.viewportY+o);if(!r)return null;const l=r.translateToString(!0).indexOf("\u2503");return l>=0?{row:o,col:l}:null}catch{return null}}}):i.mode==="shell"?(this._localEchoOverlay.clear(),this._localEchoEnabled=!1):this._localEchoOverlay.setPrompt({type:"character",char:"\u276F",offset:2}))},flushPendingWrites(){if(this.pendingWrites.length===0||!this.terminal)return;const e=performance.now(),i=this.pendingWrites.join("");this.pendingWrites=[];const s=i.length;s>16384&&_crashDiag.log(`FLUSH: ${(s/1024).toFixed(0)}KB`);const n=65536;let d=!1;s<=n?this.terminal.write(i):(this.terminal.write(i.slice(0,n)),this.pendingWrites.push(i.slice(n)),d=!0,this.writeFrameScheduled||(this.writeFrameScheduled=!0,requestAnimationFrame(()=>{this.flushPendingWrites(),this.writeFrameScheduled=!1})));const f=d?n:s,o=performance.now()-e;if((o>100||d)&&console.warn(`[CRASH-DIAG] flushPendingWrites: ${o.toFixed(0)}ms, ${(f/1024).toFixed(0)}KB written${d?", rest deferred":""} (total ${(s/1024).toFixed(0)}KB)`),this._wasAtBottomBeforeWrite&&this.terminal.scrollToBottom(),this._localEchoOverlay?.hasPending&&this._localEchoOverlay.rerender(),this._tabCompletionSessionId&&this._tabCompletionSessionId===this.activeSessionId&&this._localEchoOverlay&&!this._localEchoOverlay.pendingText){const r=this._localEchoOverlay,t=this;this.terminal.write("",()=>{if(!t._tabCompletionSessionId)return;r.resetBufferDetection();const l=r.detectBufferText();l?l===t._tabCompletionBaseText?(r.undoDetection(),t._tabCompletionRetries=(t._tabCompletionRetries||0)+1,t._tabCompletionRetries>60&&(t._tabCompletionSessionId=null,t._tabCompletionRetries=0)):(t._tabCompletionSessionId=null,t._tabCompletionRetries=0,t._tabCompletionBaseText=null,t._tabCompletionFallback&&(clearTimeout(t._tabCompletionFallback),t._tabCompletionFallback=null),r.rerender()):(t._tabCompletionRetries=(t._tabCompletionRetries||0)+1,t._tabCompletionRetries>60&&(t._tabCompletionSessionId=null,t._tabCompletionRetries=0))})}},chunkedTerminalWrite(e,i=TERMINAL_CHUNK_SIZE){const s=++this._chunkedWriteGen;return new Promise(n=>{if(!e||e.length===0){this._finishBufferLoad(),n();return}this._isLoadingBuffer=!0,this._loadBufferQueue=[];const d=e.replace(DEC_SYNC_STRIP_RE,""),f=()=>{this._chunkedWriteGen===s&&this._finishBufferLoad(),n()};if(d.length<=i){this.terminal.write(d),f();return}let o=0;const r=performance.now();let t=0;const l=()=>{if(this._chunkedWriteGen!==s){n();return}if(o>=d.length){const a=performance.now()-r;console.log(`[CRASH-DIAG] chunkedTerminalWrite complete: ${d.length} bytes in ${t} chunks, ${a.toFixed(0)}ms total`),requestAnimationFrame(f);return}const h=performance.now(),c=d.slice(o,o+i);this.terminal.write(c);const u=performance.now()-h;t++,u>50&&console.warn(`[CRASH-DIAG] chunk #${t} write took ${u.toFixed(0)}ms (${c.length} bytes at offset ${o})`),o+=i,requestAnimationFrame(l)};requestAnimationFrame(l)})},_finishBufferLoad(){this._isLoadingBuffer=!1,this._loadBufferQueue=null},clearTerminal(){this.terminal.clear()},async restoreTerminalSize(){if(!this.activeSessionId){this.showToast("No active session","warning");return}const e=this.getTerminalDimensions();if(!e){this.showToast("Could not determine terminal size","error");return}try{await this.sendResize(this.activeSessionId),await fetch(`/api/sessions/${this.activeSessionId}/input`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:"\f"})}),this.showToast(`Terminal restored to ${e.cols}x${e.rows}`,"success")}catch(i){console.error("Failed to restore terminal size:",i),this.showToast("Failed to restore terminal size","error")}},sendPendingCtrlL(e){!this.pendingCtrlL||!this.pendingCtrlL.has(e)||(this.pendingCtrlL.delete(e),e===this.activeSessionId&&this.sendResize(e).then(()=>{fetch(`/api/sessions/${e}/input`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:"\f"})})}))},async copyTerminal(){try{const e=this.terminal.buffer.active;let i="";for(let s=0;s<e.length;s++){const n=e.getLine(s);n&&(i+=n.translateToString(!0)+`
2
+ `)}await navigator.clipboard.writeText(i.replace(/\n+$/,`
3
+ `)),this.showToast("Copied to clipboard","success")}catch{this.showToast("Failed to copy","error")}},increaseFontSize(){const e=this.terminal.options.fontSize||14;this.setFontSize(Math.min(e+2,24))},decreaseFontSize(){const e=this.terminal.options.fontSize||14;this.setFontSize(Math.max(e-2,10))},setFontSize(e){this.terminal.options.fontSize=e,document.getElementById("fontSizeDisplay").textContent=e,this.fitAddon.fit(),localStorage.setItem("codeman-font-size",e),this._localEchoOverlay?.refreshFont()},loadFontSize(){const e=localStorage.getItem("codeman-font-size");if(e){const i=parseInt(e,10);i>=10&&i<=24&&(this.terminal.options.fontSize=i,document.getElementById("fontSizeDisplay").textContent=i)}},getTerminalDimensions(){const s=this.fitAddon?.proposeDimensions();return s?{cols:Math.max(s.cols,40),rows:Math.max(s.rows,10)}:null},async sendResize(e){this.fitAddon&&this.fitAddon.fit();const i=this.getTerminalDimensions();if(i){if(this._lastResizeDims={cols:i.cols,rows:i.rows},this._wsReady&&this._wsSessionId===e)try{this._ws.send(JSON.stringify({t:"z",c:i.cols,r:i.rows}));return}catch{}await fetch(`/api/sessions/${e}/resize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}},async sendInput(e){this.activeSessionId&&await fetch(`/api/sessions/${this.activeSessionId}/input`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:e,useMux:!0})})},toggleDirInput(){const e=document.querySelector("#dirDisplay").parentElement,i=document.getElementById("dirInput");i.classList.contains("hidden")&&(i.classList.remove("hidden"),e.style.display="none",i.focus())},hideDirInput(){const e=document.querySelector("#dirDisplay").parentElement,i=document.getElementById("dirInput");setTimeout(()=>{i.classList.add("hidden"),e.style.display="";const s=i.value.trim();document.getElementById("dirDisplay").textContent=s||"No directory"},100)}});
Binary file
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"hook-event-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/hook-event-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpG,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAClE,IAAI,CA+CN"}
1
+ {"version":3,"file":"hook-event-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/hook-event-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpG,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAClE,IAAI,CAuDN"}
@@ -35,6 +35,13 @@ export function registerHookEventRoutes(app, ctx) {
35
35
  ctx.startTranscriptWatcher(sessionId, transcriptPath);
36
36
  }
37
37
  }
38
+ // Sync Claude's current conversation id. Interactive PTY mode never emits
39
+ // `session_id` on stdout, so hooks are the only reliable way to learn that
40
+ // the user ran `/clear` (which spins up a new conversation jsonl).
41
+ if (data && typeof data.session_id === 'string' && data.session_id) {
42
+ const session = ctx.sessions.get(sessionId);
43
+ session?.adoptClaudeSessionId(data.session_id);
44
+ }
38
45
  // Sanitize forwarded data: only include known safe fields, limit size
39
46
  const safeData = sanitizeHookData(data);
40
47
  ctx.broadcast(`hook:${event}`, { sessionId, timestamp: Date.now(), ...safeData });
@@ -1 +1 @@
1
- {"version":3,"file":"hook-event-routes.js","sourceRoot":"","sources":["../../../src/web/routes/hook-event-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGlE,MAAM,UAAU,uBAAuB,CACrC,GAAoB,EACpB,GAAmE;IAEnE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,mBAAmB,CAAC,YAAY,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAC1E,CAAC;QAED,yDAAyD;QACzD,MAAM,UAAU,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,KAAK,KAAK,oBAAoB,EAAE,CAAC;gBACnC,yCAAyC;gBACzC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACjC,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,sDAAsD;gBACtD,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;gBACnC,gEAAgE;gBAChE,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,cAAc,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,sBAAsB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElF,0CAA0C;QAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,qBAAqB,CAAC,QAAQ,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAEpF,uBAAuB;QACvB,MAAM,cAAc,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"hook-event-routes.js","sourceRoot":"","sources":["../../../src/web/routes/hook-event-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ralph-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/ralph-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAa1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGpG,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAClE,IAAI,CA+dN"}
1
+ {"version":3,"file":"ralph-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/ralph-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAa1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGpG,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAClE,IAAI,CAmeN"}
@@ -12,7 +12,7 @@ import { RespawnController } from '../../respawn-controller.js';
12
12
  import { RalphConfigSchema, FixPlanImportSchema, RalphPromptWriteSchema, RalphLoopStartSchema } from '../schemas.js';
13
13
  import { SseEvent } from '../sse-events.js';
14
14
  import { autoConfigureRalph, CASES_DIR, SETTINGS_PATH, findSessionOrFail, parseBody } from '../route-helpers.js';
15
- import { writeHooksConfig } from '../../hooks-config.js';
15
+ import { writeHooksConfig, stripCaseEnvKeys } from '../../hooks-config.js';
16
16
  import { generateClaudeMd } from '../../templates/claude-md.js';
17
17
  import { getLifecycleLog } from '../../session-lifecycle-log.js';
18
18
  import { MAX_CONCURRENT_SESSIONS } from '../../config/map-limits.js';
@@ -219,7 +219,7 @@ export function registerRalphRoutes(app, ctx) {
219
219
  if (ctx.sessions.size >= MAX_CONCURRENT_SESSIONS) {
220
220
  return createErrorResponse(ApiErrorCode.SESSION_BUSY, `Maximum concurrent sessions (${MAX_CONCURRENT_SESSIONS}) reached.`);
221
221
  }
222
- const { caseName, taskDescription, completionPhrase, maxIterations, enableRespawn, planItems } = parseBody(RalphLoopStartSchema, req.body);
222
+ const { caseName, taskDescription, completionPhrase, maxIterations, enableRespawn, planItems, envOverrides } = parseBody(RalphLoopStartSchema, req.body);
223
223
  const casePath = join(CASES_DIR, caseName);
224
224
  // Security: Path traversal protection
225
225
  const rlResolvedPath = resolve(casePath);
@@ -243,6 +243,10 @@ export function registerRalphRoutes(app, ctx) {
243
243
  return createErrorResponse(ApiErrorCode.OPERATION_FAILED, `Failed to create case: ${getErrorMessage(err)}`);
244
244
  }
245
245
  }
246
+ // Strip stale disk entries for keys this request is actively setting.
247
+ if (envOverrides && Object.keys(envOverrides).length > 0) {
248
+ await stripCaseEnvKeys(casePath, Object.keys(envOverrides));
249
+ }
246
250
  // Create session
247
251
  const niceConfig = await ctx.getGlobalNiceConfig();
248
252
  const rlModelConfig = await ctx.getModelConfig();
@@ -256,6 +260,7 @@ export function registerRalphRoutes(app, ctx) {
256
260
  model: rlModelConfig?.defaultModel || undefined,
257
261
  claudeMode: rlClaudeModeConfig.claudeMode,
258
262
  allowedTools: rlClaudeModeConfig.allowedTools,
263
+ envOverrides,
259
264
  });
260
265
  // Configure Ralph tracker
261
266
  autoConfigureRalph(session, casePath, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"ralph-routes.js","sourceRoot":"","sources":["../../../src/web/routes/ralph-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ralph-routes.js","sourceRoot":"","sources":["../../../src/web/routes/ralph-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA4C1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8DjG,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAC/D,IAAI,CA+qCN"}
1
+ {"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA4C1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8DjG,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAC/D,IAAI,CAgyCN"}