spexcode 0.6.1 → 0.6.5

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 (480) hide show
  1. package/README.md +99 -149
  2. package/bin/spex.mjs +4 -0
  3. package/node_modules/@spexcode/spec-cli/bin/spex.mjs +76 -0
  4. package/node_modules/@spexcode/spec-cli/dist/attach.d.ts +2 -0
  5. package/node_modules/@spexcode/spec-cli/dist/attach.js +48 -0
  6. package/node_modules/@spexcode/spec-cli/dist/claude-headless.d.ts +33 -0
  7. package/node_modules/@spexcode/spec-cli/dist/claude-headless.js +307 -0
  8. package/node_modules/@spexcode/spec-cli/dist/cli.d.ts +1 -0
  9. package/node_modules/@spexcode/spec-cli/dist/cli.js +1859 -0
  10. package/node_modules/@spexcode/spec-cli/dist/client.d.ts +111 -0
  11. package/node_modules/@spexcode/spec-cli/dist/client.js +476 -0
  12. package/node_modules/@spexcode/spec-cli/dist/cockpit.d.ts +7 -0
  13. package/node_modules/@spexcode/spec-cli/dist/cockpit.js +26 -0
  14. package/node_modules/@spexcode/spec-cli/dist/codex-headless.d.ts +1 -0
  15. package/{spec-cli/src/codex-headless.ts → node_modules/@spexcode/spec-cli/dist/codex-headless.js} +3 -9
  16. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.d.ts +53 -0
  17. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.js +686 -0
  18. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.d.ts +1 -0
  19. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.js +90 -0
  20. package/node_modules/@spexcode/spec-cli/dist/contract-filter.d.ts +14 -0
  21. package/node_modules/@spexcode/spec-cli/dist/contract-filter.js +219 -0
  22. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.d.ts +6 -0
  23. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.js +50 -0
  24. package/node_modules/@spexcode/spec-cli/dist/delivery-queue.d.ts +23 -0
  25. package/node_modules/@spexcode/spec-cli/dist/delivery-queue.js +179 -0
  26. package/node_modules/@spexcode/spec-cli/dist/doctor.d.ts +9 -0
  27. package/node_modules/@spexcode/spec-cli/dist/doctor.js +547 -0
  28. package/node_modules/@spexcode/spec-cli/dist/eval-host.d.ts +1 -0
  29. package/node_modules/@spexcode/spec-cli/dist/eval-host.js +19 -0
  30. package/node_modules/@spexcode/spec-cli/dist/execution-trace.d.ts +26 -0
  31. package/node_modules/@spexcode/spec-cli/dist/execution-trace.js +475 -0
  32. package/node_modules/@spexcode/spec-cli/dist/file-write.d.ts +2 -0
  33. package/node_modules/@spexcode/spec-cli/dist/file-write.js +26 -0
  34. package/node_modules/@spexcode/spec-cli/dist/flat.d.ts +89 -0
  35. package/node_modules/@spexcode/spec-cli/dist/flat.js +1076 -0
  36. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.d.ts +56 -0
  37. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.js +168 -0
  38. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.d.ts +28 -0
  39. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.js +361 -0
  40. package/node_modules/@spexcode/spec-cli/dist/gateway.d.ts +37 -0
  41. package/node_modules/@spexcode/spec-cli/dist/gateway.js +503 -0
  42. package/node_modules/@spexcode/spec-cli/dist/graphCache.d.ts +27 -0
  43. package/node_modules/@spexcode/spec-cli/dist/graphCache.js +716 -0
  44. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.d.ts +14 -0
  45. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.js +35 -0
  46. package/node_modules/@spexcode/spec-cli/dist/graphStream.d.ts +85 -0
  47. package/node_modules/@spexcode/spec-cli/dist/graphStream.js +1195 -0
  48. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.d.ts +64 -0
  49. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.js +166 -0
  50. package/node_modules/@spexcode/spec-cli/dist/guide.d.ts +8 -0
  51. package/{spec-cli/src/guide.ts → node_modules/@spexcode/spec-cli/dist/guide.js} +115 -22
  52. package/node_modules/@spexcode/spec-cli/dist/harness-select.d.ts +18 -0
  53. package/node_modules/@spexcode/spec-cli/dist/harness-select.js +62 -0
  54. package/node_modules/@spexcode/spec-cli/dist/harness.d.ts +325 -0
  55. package/node_modules/@spexcode/spec-cli/dist/harness.js +3026 -0
  56. package/node_modules/@spexcode/spec-cli/dist/headless-controller.d.ts +9 -0
  57. package/node_modules/@spexcode/spec-cli/dist/headless-controller.js +47 -0
  58. package/node_modules/@spexcode/spec-cli/dist/help.d.ts +10 -0
  59. package/node_modules/@spexcode/spec-cli/dist/help.js +574 -0
  60. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.d.ts +18 -0
  61. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.js +122 -0
  62. package/node_modules/@spexcode/spec-cli/dist/hooks.d.ts +1 -0
  63. package/{spec-cli/src/hooks.ts → node_modules/@spexcode/spec-cli/dist/hooks.js} +15 -15
  64. package/node_modules/@spexcode/spec-cli/dist/host-resources.d.ts +97 -0
  65. package/node_modules/@spexcode/spec-cli/dist/host-resources.js +795 -0
  66. package/node_modules/@spexcode/spec-cli/dist/host.d.ts +88 -0
  67. package/node_modules/@spexcode/spec-cli/dist/host.js +663 -0
  68. package/node_modules/@spexcode/spec-cli/dist/index.d.ts +1 -0
  69. package/node_modules/@spexcode/spec-cli/dist/index.js +899 -0
  70. package/node_modules/@spexcode/spec-cli/dist/init.d.ts +1 -0
  71. package/node_modules/@spexcode/spec-cli/dist/init.js +284 -0
  72. package/node_modules/@spexcode/spec-cli/dist/issues-cli.d.ts +6 -0
  73. package/node_modules/@spexcode/spec-cli/dist/issues-cli.js +334 -0
  74. package/node_modules/@spexcode/spec-cli/dist/issues.d.ts +69 -0
  75. package/node_modules/@spexcode/spec-cli/dist/issues.js +189 -0
  76. package/node_modules/@spexcode/spec-cli/dist/lint.d.ts +34 -0
  77. package/node_modules/@spexcode/spec-cli/dist/lint.js +476 -0
  78. package/node_modules/@spexcode/spec-cli/dist/listen.d.ts +7 -0
  79. package/{spec-cli/src/listen.ts → node_modules/@spexcode/spec-cli/dist/listen.js} +13 -17
  80. package/node_modules/@spexcode/spec-cli/dist/localIssues.d.ts +65 -0
  81. package/node_modules/@spexcode/spec-cli/dist/localIssues.js +582 -0
  82. package/node_modules/@spexcode/spec-cli/dist/login-page.d.ts +5 -0
  83. package/{spec-cli/src/login-page.ts → node_modules/@spexcode/spec-cli/dist/login-page.js} +7 -7
  84. package/node_modules/@spexcode/spec-cli/dist/loop-in.d.ts +23 -0
  85. package/{spec-cli/src/loop-in.ts → node_modules/@spexcode/spec-cli/dist/loop-in.js} +35 -45
  86. package/node_modules/@spexcode/spec-cli/dist/machine-peer.d.ts +69 -0
  87. package/node_modules/@spexcode/spec-cli/dist/machine-peer.js +603 -0
  88. package/node_modules/@spexcode/spec-cli/dist/materialize.d.ts +18 -0
  89. package/node_modules/@spexcode/spec-cli/dist/materialize.js +468 -0
  90. package/node_modules/@spexcode/spec-cli/dist/mentions.d.ts +50 -0
  91. package/node_modules/@spexcode/spec-cli/dist/mentions.js +117 -0
  92. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.d.ts +4 -0
  93. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.js +208 -0
  94. package/node_modules/@spexcode/spec-cli/dist/opencode.d.ts +3 -0
  95. package/{spec-cli/src/opencode.ts → node_modules/@spexcode/spec-cli/dist/opencode.js} +9 -13
  96. package/node_modules/@spexcode/spec-cli/dist/pi-harness.d.ts +3 -0
  97. package/{spec-cli/src/pi-harness.ts → node_modules/@spexcode/spec-cli/dist/pi-harness.js} +45 -40
  98. package/node_modules/@spexcode/spec-cli/dist/pi-headless.d.ts +25 -0
  99. package/node_modules/@spexcode/spec-cli/dist/pi-headless.js +196 -0
  100. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.d.ts +21 -0
  101. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.js +146 -0
  102. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.d.ts +10 -0
  103. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.js +404 -0
  104. package/node_modules/@spexcode/spec-cli/dist/pty-helper.d.mts +1 -0
  105. package/node_modules/@spexcode/spec-cli/dist/pty-helper.mjs +101 -0
  106. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.d.mts +2 -0
  107. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.mjs +23 -0
  108. package/node_modules/@spexcode/spec-cli/dist/public-graph.d.ts +46 -0
  109. package/node_modules/@spexcode/spec-cli/dist/public-graph.js +56 -0
  110. package/node_modules/@spexcode/spec-cli/dist/ranker.d.ts +15 -0
  111. package/node_modules/@spexcode/spec-cli/dist/ranker.js +188 -0
  112. package/node_modules/@spexcode/spec-cli/dist/reaper.d.ts +6 -0
  113. package/node_modules/@spexcode/spec-cli/dist/reaper.js +81 -0
  114. package/node_modules/@spexcode/spec-cli/dist/reviews.d.ts +189 -0
  115. package/node_modules/@spexcode/spec-cli/dist/reviews.js +350 -0
  116. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.d.ts +6 -0
  117. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.js +37 -0
  118. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.d.ts +21 -0
  119. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.js +84 -0
  120. package/node_modules/@spexcode/spec-cli/dist/search.bench.d.mts +1 -0
  121. package/node_modules/@spexcode/spec-cli/dist/search.bench.mjs +75 -0
  122. package/node_modules/@spexcode/spec-cli/dist/search.d.ts +20 -0
  123. package/node_modules/@spexcode/spec-cli/dist/search.js +61 -0
  124. package/node_modules/@spexcode/spec-cli/dist/session-cursors.d.ts +14 -0
  125. package/node_modules/@spexcode/spec-cli/dist/session-cursors.js +82 -0
  126. package/node_modules/@spexcode/spec-cli/dist/session-declarations.d.ts +13 -0
  127. package/node_modules/@spexcode/spec-cli/dist/session-declarations.js +126 -0
  128. package/node_modules/@spexcode/spec-cli/dist/session-execution.d.ts +10 -0
  129. package/node_modules/@spexcode/spec-cli/dist/session-execution.js +70 -0
  130. package/node_modules/@spexcode/spec-cli/dist/session-files.d.ts +28 -0
  131. package/node_modules/@spexcode/spec-cli/dist/session-files.js +130 -0
  132. package/node_modules/@spexcode/spec-cli/dist/session-follow.d.ts +31 -0
  133. package/node_modules/@spexcode/spec-cli/dist/session-follow.js +179 -0
  134. package/node_modules/@spexcode/spec-cli/dist/session-reparent.d.ts +10 -0
  135. package/node_modules/@spexcode/spec-cli/dist/session-reparent.js +33 -0
  136. package/node_modules/@spexcode/spec-cli/dist/session-timeline.d.ts +51 -0
  137. package/node_modules/@spexcode/spec-cli/dist/session-timeline.js +233 -0
  138. package/node_modules/@spexcode/spec-cli/dist/session-web.d.ts +24 -0
  139. package/node_modules/@spexcode/spec-cli/dist/session-web.js +141 -0
  140. package/node_modules/@spexcode/spec-cli/dist/sessions.d.ts +412 -0
  141. package/node_modules/@spexcode/spec-cli/dist/sessions.js +4239 -0
  142. package/node_modules/@spexcode/spec-cli/dist/sh.d.ts +1 -0
  143. package/node_modules/@spexcode/spec-cli/dist/sh.js +3 -0
  144. package/node_modules/@spexcode/spec-cli/dist/shim-runtime.d.ts +1 -0
  145. package/{spec-cli/src/shim-runtime.ts → node_modules/@spexcode/spec-cli/dist/shim-runtime.js} +3 -4
  146. package/node_modules/@spexcode/spec-cli/dist/slash-commands.d.ts +9 -0
  147. package/node_modules/@spexcode/spec-cli/dist/slash-commands.js +307 -0
  148. package/node_modules/@spexcode/spec-cli/dist/source-files.d.ts +9 -0
  149. package/node_modules/@spexcode/spec-cli/dist/source-files.js +113 -0
  150. package/node_modules/@spexcode/spec-cli/dist/supervise.d.ts +1 -0
  151. package/node_modules/@spexcode/spec-cli/dist/supervise.js +308 -0
  152. package/node_modules/@spexcode/spec-cli/dist/tree.d.ts +25 -0
  153. package/node_modules/@spexcode/spec-cli/dist/tree.js +98 -0
  154. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.d.ts +3 -0
  155. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.js +41 -0
  156. package/node_modules/@spexcode/spec-cli/dist/uninstall.d.ts +3 -0
  157. package/node_modules/@spexcode/spec-cli/dist/uninstall.js +177 -0
  158. package/node_modules/@spexcode/spec-cli/dist/uploads.d.ts +36 -0
  159. package/node_modules/@spexcode/spec-cli/dist/uploads.js +243 -0
  160. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.d.ts +1 -0
  161. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.js +47 -0
  162. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/dispatch.sh +5 -5
  163. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/harness.sh +27 -7
  164. package/node_modules/@spexcode/spec-cli/package.json +47 -0
  165. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +8 -0
  166. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/core/comment-altitude/spec.md +9 -0
  167. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec-first.sh +1 -1
  168. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec-of-file.sh +1 -0
  169. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/core/spec.md +22 -0
  170. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/spec.md +2 -2
  171. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +31 -29
  172. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +15 -0
  173. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/forge-link/spec.md +10 -0
  174. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +13 -0
  175. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +12 -0
  176. package/node_modules/@spexcode/spec-core/dist/anchors.d.ts +94 -0
  177. package/node_modules/@spexcode/spec-core/dist/anchors.js +730 -0
  178. package/node_modules/@spexcode/spec-core/dist/git.d.ts +166 -0
  179. package/node_modules/@spexcode/spec-core/dist/git.js +2736 -0
  180. package/node_modules/@spexcode/spec-core/dist/graph-delta.d.ts +44 -0
  181. package/node_modules/@spexcode/spec-core/dist/graph-delta.js +72 -0
  182. package/node_modules/@spexcode/spec-core/dist/graph.d.ts +34 -0
  183. package/node_modules/@spexcode/spec-core/dist/graph.js +237 -0
  184. package/node_modules/@spexcode/spec-core/dist/graphDelta.d.ts +3 -0
  185. package/node_modules/@spexcode/spec-core/dist/graphDelta.js +13 -0
  186. package/node_modules/@spexcode/spec-core/dist/harness-identity.d.ts +31 -0
  187. package/node_modules/@spexcode/spec-core/dist/harness-identity.js +20 -0
  188. package/node_modules/@spexcode/spec-core/dist/identity-presets.d.ts +152 -0
  189. package/node_modules/@spexcode/spec-core/dist/identity-presets.js +132 -0
  190. package/node_modules/@spexcode/spec-core/dist/index.d.ts +45 -0
  191. package/node_modules/@spexcode/spec-core/dist/index.js +19 -0
  192. package/node_modules/@spexcode/spec-core/dist/layout.d.ts +183 -0
  193. package/node_modules/@spexcode/spec-core/dist/layout.js +548 -0
  194. package/node_modules/@spexcode/spec-core/dist/process-identity.d.ts +37 -0
  195. package/node_modules/@spexcode/spec-core/dist/process-identity.js +214 -0
  196. package/node_modules/@spexcode/spec-core/dist/project-identity.d.ts +12 -0
  197. package/node_modules/@spexcode/spec-core/dist/project-identity.js +71 -0
  198. package/node_modules/@spexcode/spec-core/dist/project-store.d.ts +3 -0
  199. package/node_modules/@spexcode/spec-core/dist/project-store.js +14 -0
  200. package/node_modules/@spexcode/spec-core/dist/resilience.d.ts +2 -0
  201. package/node_modules/@spexcode/spec-core/dist/resilience.js +40 -0
  202. package/node_modules/@spexcode/spec-core/dist/review/index.d.ts +3 -0
  203. package/node_modules/@spexcode/spec-core/dist/review/index.js +5 -0
  204. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.d.ts +77 -0
  205. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.js +308 -0
  206. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.d.ts +66 -0
  207. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.js +180 -0
  208. package/node_modules/@spexcode/spec-core/dist/review/session.d.ts +4 -0
  209. package/node_modules/@spexcode/spec-core/dist/review/session.js +8 -0
  210. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.d.ts +15 -0
  211. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.js +12 -0
  212. package/node_modules/@spexcode/spec-core/dist/root-lru.d.ts +4 -0
  213. package/{spec-cli/src/root-lru.ts → node_modules/@spexcode/spec-core/dist/root-lru.js} +26 -30
  214. package/node_modules/@spexcode/spec-core/dist/specs.d.ts +117 -0
  215. package/node_modules/@spexcode/spec-core/dist/specs.js +489 -0
  216. package/node_modules/@spexcode/spec-core/package.json +28 -0
  217. package/node_modules/@spexcode/spec-eval/dist/cache.d.ts +10 -0
  218. package/node_modules/@spexcode/spec-eval/dist/cache.js +50 -0
  219. package/node_modules/@spexcode/spec-eval/dist/cli.d.ts +22 -0
  220. package/node_modules/@spexcode/spec-eval/dist/cli.js +981 -0
  221. package/node_modules/@spexcode/spec-eval/dist/evaltab.d.ts +98 -0
  222. package/node_modules/@spexcode/spec-eval/dist/evaltab.js +176 -0
  223. package/node_modules/@spexcode/spec-eval/dist/filing.d.ts +16 -0
  224. package/node_modules/@spexcode/spec-eval/dist/filing.js +36 -0
  225. package/node_modules/@spexcode/spec-eval/dist/freshness.d.ts +48 -0
  226. package/node_modules/@spexcode/spec-eval/dist/freshness.js +799 -0
  227. package/node_modules/@spexcode/spec-eval/dist/host.d.ts +46 -0
  228. package/node_modules/@spexcode/spec-eval/dist/host.js +53 -0
  229. package/node_modules/@spexcode/spec-eval/dist/humanok.d.ts +11 -0
  230. package/node_modules/@spexcode/spec-eval/dist/humanok.js +27 -0
  231. package/node_modules/@spexcode/spec-eval/dist/index.d.ts +4 -0
  232. package/node_modules/@spexcode/spec-eval/dist/index.js +4 -0
  233. package/node_modules/@spexcode/spec-eval/dist/remarks.d.ts +31 -0
  234. package/node_modules/@spexcode/spec-eval/dist/remarks.js +1 -0
  235. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.d.ts +13 -0
  236. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.js +303 -0
  237. package/node_modules/@spexcode/spec-eval/dist/scenarios.d.ts +99 -0
  238. package/node_modules/@spexcode/spec-eval/dist/scenarios.js +650 -0
  239. package/node_modules/@spexcode/spec-eval/dist/sessioneval.d.ts +307 -0
  240. package/node_modules/@spexcode/spec-eval/dist/sessioneval.js +1883 -0
  241. package/node_modules/@spexcode/spec-eval/dist/sidecar.d.ts +55 -0
  242. package/node_modules/@spexcode/spec-eval/dist/sidecar.js +82 -0
  243. package/node_modules/@spexcode/spec-eval/dist/timeline.d.ts +25 -0
  244. package/node_modules/@spexcode/spec-eval/dist/timeline.js +65 -0
  245. package/node_modules/@spexcode/spec-eval/dist/ui-path.d.ts +1 -0
  246. package/node_modules/@spexcode/spec-eval/dist/ui-path.js +2 -0
  247. package/node_modules/@spexcode/spec-eval/package.json +36 -0
  248. package/node_modules/@spexcode/spec-forge/dist/cache.d.ts +29 -0
  249. package/node_modules/@spexcode/spec-forge/dist/cache.js +59 -0
  250. package/node_modules/@spexcode/spec-forge/dist/cli.d.ts +1 -0
  251. package/node_modules/@spexcode/spec-forge/dist/cli.js +100 -0
  252. package/node_modules/@spexcode/spec-forge/dist/drivers/github.d.ts +2 -0
  253. package/node_modules/@spexcode/spec-forge/dist/drivers/github.js +116 -0
  254. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.d.ts +7 -0
  255. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.js +144 -0
  256. package/node_modules/@spexcode/spec-forge/dist/drivers.d.ts +10 -0
  257. package/node_modules/@spexcode/spec-forge/dist/drivers.js +83 -0
  258. package/node_modules/@spexcode/spec-forge/dist/index.d.ts +4 -0
  259. package/node_modules/@spexcode/spec-forge/dist/index.js +4 -0
  260. package/node_modules/@spexcode/spec-forge/dist/links.d.ts +15 -0
  261. package/node_modules/@spexcode/spec-forge/dist/links.js +65 -0
  262. package/node_modules/@spexcode/spec-forge/dist/needs-eval.d.ts +10 -0
  263. package/node_modules/@spexcode/spec-forge/dist/needs-eval.js +20 -0
  264. package/node_modules/@spexcode/spec-forge/dist/port.d.ts +53 -0
  265. package/node_modules/@spexcode/spec-forge/dist/port.js +1 -0
  266. package/node_modules/@spexcode/spec-forge/dist/resident.d.ts +7 -0
  267. package/node_modules/@spexcode/spec-forge/dist/resident.js +43 -0
  268. package/node_modules/@spexcode/spec-forge/package.json +32 -0
  269. package/package.json +33 -19
  270. package/spec-cli/bin/spex.mjs +0 -69
  271. package/spec-cli/src/anchors.ts +0 -706
  272. package/spec-cli/src/attach.ts +0 -43
  273. package/spec-cli/src/claude-headless.ts +0 -321
  274. package/spec-cli/src/cli.ts +0 -1115
  275. package/spec-cli/src/client.ts +0 -315
  276. package/spec-cli/src/cockpit.ts +0 -43
  277. package/spec-cli/src/codex-runtime-generations.ts +0 -646
  278. package/spec-cli/src/commit-surgery.ts +0 -68
  279. package/spec-cli/src/contract-filter.ts +0 -202
  280. package/spec-cli/src/delivery-queue.ts +0 -107
  281. package/spec-cli/src/doctor.ts +0 -516
  282. package/spec-cli/src/file-write.ts +0 -22
  283. package/spec-cli/src/gateway-auth.ts +0 -181
  284. package/spec-cli/src/gateway-hub.ts +0 -356
  285. package/spec-cli/src/gateway.ts +0 -368
  286. package/spec-cli/src/git.ts +0 -2180
  287. package/spec-cli/src/graph.ts +0 -221
  288. package/spec-cli/src/graphCache.ts +0 -641
  289. package/spec-cli/src/graphDelta.ts +0 -77
  290. package/spec-cli/src/graphStream.ts +0 -1019
  291. package/spec-cli/src/harness-select.ts +0 -77
  292. package/spec-cli/src/harness.ts +0 -2747
  293. package/spec-cli/src/headless-controller.ts +0 -63
  294. package/spec-cli/src/help.ts +0 -480
  295. package/spec-cli/src/host-resources.ts +0 -707
  296. package/spec-cli/src/host.ts +0 -611
  297. package/spec-cli/src/identity-presets.d.ts +0 -13
  298. package/spec-cli/src/identity-presets.js +0 -128
  299. package/spec-cli/src/index.ts +0 -730
  300. package/spec-cli/src/init.ts +0 -258
  301. package/spec-cli/src/issues-cli.ts +0 -276
  302. package/spec-cli/src/issues.ts +0 -237
  303. package/spec-cli/src/layout.ts +0 -557
  304. package/spec-cli/src/lint.ts +0 -458
  305. package/spec-cli/src/localIssues.ts +0 -538
  306. package/spec-cli/src/materialize.ts +0 -412
  307. package/spec-cli/src/mentions.ts +0 -81
  308. package/spec-cli/src/opencode-headless.ts +0 -205
  309. package/spec-cli/src/pi-headless.ts +0 -153
  310. package/spec-cli/src/plugin-harness.ts +0 -157
  311. package/spec-cli/src/process-identity.ts +0 -207
  312. package/spec-cli/src/project-identity.ts +0 -73
  313. package/spec-cli/src/project-store.ts +0 -17
  314. package/spec-cli/src/pty-bridge.ts +0 -396
  315. package/spec-cli/src/pty-helper.mjs +0 -96
  316. package/spec-cli/src/pty-native-helper.mjs +0 -22
  317. package/spec-cli/src/ranker.ts +0 -191
  318. package/spec-cli/src/reaper.ts +0 -125
  319. package/spec-cli/src/resilience.ts +0 -41
  320. package/spec-cli/src/reviewSnapshot.ts +0 -28
  321. package/spec-cli/src/reviews.ts +0 -405
  322. package/spec-cli/src/runtime-guard.ts +0 -35
  323. package/spec-cli/src/runtime-ownership.ts +0 -88
  324. package/spec-cli/src/search.bench.mjs +0 -80
  325. package/spec-cli/src/search.ts +0 -63
  326. package/spec-cli/src/session-cursors.ts +0 -91
  327. package/spec-cli/src/session-follow.ts +0 -182
  328. package/spec-cli/src/session-timeline.ts +0 -98
  329. package/spec-cli/src/sessions.ts +0 -3403
  330. package/spec-cli/src/sh.ts +0 -3
  331. package/spec-cli/src/slash-commands.ts +0 -318
  332. package/spec-cli/src/source-files.ts +0 -104
  333. package/spec-cli/src/specs.ts +0 -498
  334. package/spec-cli/src/supervise.ts +0 -245
  335. package/spec-cli/src/tree.ts +0 -118
  336. package/spec-cli/src/tsx-bin.ts +0 -18
  337. package/spec-cli/src/uninstall.ts +0 -171
  338. package/spec-cli/src/uploads.ts +0 -253
  339. package/spec-cli/src/worktree-sources.ts +0 -42
  340. package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +0 -8
  341. package/spec-cli/templates/spec/project/.plugins/core/comment-altitude/spec.md +0 -28
  342. package/spec-cli/templates/spec/project/.plugins/core/spec.md +0 -23
  343. package/spec-cli/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +0 -32
  344. package/spec-cli/templates/spec/project/.plugins/prompts/forge-link/spec.md +0 -9
  345. package/spec-cli/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +0 -15
  346. package/spec-cli/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +0 -18
  347. package/spec-dashboard/dist/assets/App-F9uaAVcH.js +0 -2
  348. package/spec-dashboard/dist/assets/Dashboard-Ba_jhxp1.js +0 -27
  349. package/spec-dashboard/dist/assets/Dashboard-C5ap-Sga.css +0 -1
  350. package/spec-dashboard/dist/assets/EvalsPage-FixoOg_n.js +0 -2
  351. package/spec-dashboard/dist/assets/IssuesPage-CuKLFhH3.js +0 -1
  352. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  353. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  354. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  355. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  356. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  357. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  358. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  359. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  360. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  361. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  362. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  363. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  364. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  365. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  366. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  367. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  368. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  369. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  370. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  371. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  372. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  373. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  374. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  375. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  376. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  377. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  378. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  379. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  380. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  381. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  382. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  383. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  384. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  385. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  386. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  387. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  388. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  389. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  390. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  391. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  392. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  393. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  394. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  395. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  396. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  397. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  398. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  399. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  400. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  401. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  402. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  403. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  404. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  405. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  406. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  407. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  408. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  409. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  410. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  411. package/spec-dashboard/dist/assets/MobileApp-CHgEHORJ.js +0 -2
  412. package/spec-dashboard/dist/assets/Modal-CQgYymmr.js +0 -1
  413. package/spec-dashboard/dist/assets/PageScroll-hT7UTLvD.js +0 -1
  414. package/spec-dashboard/dist/assets/ProjectsPage-CtXxakF9.js +0 -1
  415. package/spec-dashboard/dist/assets/SessionInterface-6GBZ9nXN.css +0 -32
  416. package/spec-dashboard/dist/assets/SessionInterface-Bpie-9fs.js +0 -39
  417. package/spec-dashboard/dist/assets/SessionWindow-CixDi4PI.js +0 -1
  418. package/spec-dashboard/dist/assets/Settings-C2MsucfE.js +0 -1
  419. package/spec-dashboard/dist/assets/Thread-C6Go8HRh.js +0 -13
  420. package/spec-dashboard/dist/assets/bindings-BC9vqpYU.js +0 -1
  421. package/spec-dashboard/dist/assets/data-B-RQmit6.js +0 -1
  422. package/spec-dashboard/dist/assets/index-CsI8DElI.css +0 -1
  423. package/spec-dashboard/dist/assets/index-DrVao0Ep.js +0 -41
  424. package/spec-dashboard/dist/assets/launch-BBH02b1v.js +0 -276
  425. package/spec-dashboard/dist/assets/launch-Cp579UoJ.css +0 -1
  426. package/spec-dashboard/dist/assets/terminalFont-C6oGNKrf.js +0 -1
  427. package/spec-dashboard/dist/index.html +0 -29
  428. package/spec-dashboard/src/reviewFilters.js +0 -322
  429. package/spec-dashboard/src/reviewQuery.js +0 -174
  430. package/spec-dashboard/src/session.js +0 -199
  431. package/spec-eval/src/cache.ts +0 -57
  432. package/spec-eval/src/cli.ts +0 -889
  433. package/spec-eval/src/evaltab.ts +0 -262
  434. package/spec-eval/src/filing.ts +0 -39
  435. package/spec-eval/src/freshness.ts +0 -557
  436. package/spec-eval/src/humanok.ts +0 -28
  437. package/spec-eval/src/scenariofresh.ts +0 -244
  438. package/spec-eval/src/scenarios.ts +0 -672
  439. package/spec-eval/src/sessioneval.ts +0 -2226
  440. package/spec-eval/src/sidecar.ts +0 -93
  441. package/spec-eval/src/timeline.ts +0 -54
  442. package/spec-forge/src/__fixtures__/github-forge.json +0 -63
  443. package/spec-forge/src/cache.ts +0 -66
  444. package/spec-forge/src/cli.ts +0 -99
  445. package/spec-forge/src/drivers/github.ts +0 -132
  446. package/spec-forge/src/drivers/gitlab.ts +0 -153
  447. package/spec-forge/src/drivers.ts +0 -73
  448. package/spec-forge/src/links.ts +0 -72
  449. package/spec-forge/src/needs-eval.ts +0 -29
  450. package/spec-forge/src/port.ts +0 -36
  451. package/spec-forge/src/resident.ts +0 -46
  452. /package/{spec-cli → node_modules/@spexcode/spec-cli}/README.md +0 -0
  453. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-0.5.2-eef1.fixture +0 -0
  454. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-sed-v0.fixture +0 -0
  455. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/commit-msg +0 -0
  456. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-checkout +0 -0
  457. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-merge +0 -0
  458. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/pre-commit +0 -0
  459. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/prepare-commit-msg +0 -0
  460. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/reference-transaction +0 -0
  461. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/extract/spec.md +0 -0
  462. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/regroup/spec.md +0 -0
  463. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/rename/spec.md +0 -0
  464. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/spec.md +0 -0
  465. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/tidy/spec.md +0 -0
  466. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/idle.sh +0 -0
  467. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/spec.md +0 -0
  468. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/mark-active.sh +0 -0
  469. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/spec.md +0 -0
  470. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/fail.sh +0 -0
  471. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/spec.md +0 -0
  472. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec.md +0 -0
  473. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec.md +0 -0
  474. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/spec.md +0 -0
  475. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/digest.mjs +0 -0
  476. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/spec.md +0 -0
  477. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/spec.md +0 -0
  478. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/spec.md +0 -0
  479. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/spec.md +0 -0
  480. /package/{spec-cli → node_modules/@spexcode/spec-core}/templates/spexcode.json +0 -0
@@ -1 +0,0 @@
1
- import{j as n,u as p,r as h,I as j}from"./index-DrVao0Ep.js";import{V as S,s as N,J as k,_ as v,X as z}from"./Thread-C6Go8HRh.js";function g(s){let e=2166136261;for(let o=0;o<(s||"").length;o++)e^=s.charCodeAt(o),e=Math.imul(e,16777619);return e>>>0}function m(s){return g(s)%360}function H(s){const e=m(s);return{bg:`hsl(${e} 55% 42%)`,fg:`hsl(${e} 70% 92%)`}}function C(s){return`hsl(${m(s)} 65% 50%)`}const x=["◆","▲","●","■","★","✦","⬟","⬢","❖","◈","✸","⟡","✚","❂","◐","◑","⬣","▰","✶","⬤","✹","◇","⊛","✺"],b=["circle","rounded","square","hex"];function T(s){const e=g(s);return{seed:s,glyph:x[(e>>>9)%x.length],shape:b[(e>>>17)%b.length],...H(s)}}function A({seed:s,status:e,title:o,size:l=16}){const a=T(s),t={width:l,height:l};return n.jsx("span",{className:`avatar av-st-${e||"none"}`,"data-tip":o,"aria-label":o,style:t,children:n.jsx("span",{className:`av-face av-gen av-${a.shape}`,style:{...t,background:a.bg,color:a.fg,fontSize:l*.62},children:a.glyph})})}const M={merged:{color:"#859900"},active:{color:"#cb4b16"},drift:{color:"#b58900"},pending:{color:"#93a1a1"}},F={added:"+",edited:"~",deleted:"✕",moved:"→"},L=({size:s=12})=>n.jsx(j,{name:"lock",size:s});function E(s){if(!(s!=null&&s.length))return null;const e={};return s.forEach(o=>{e[o.op]=(e[o.op]||0)+1}),Object.entries(e).map(([o,l])=>`${F[o]}${l}`).join(" ")}function O({guides:s=[],expandable:e,kin:o=0}){return n.jsxs("span",{className:"sess-lead",children:[s.map((l,a)=>{const t=a===s.length-1?l?"tee":"elbow":l?"rail":"gap";return n.jsx("span",{className:`sess-rail ${t}`,"aria-hidden":"true"},a)}),e&&n.jsx("span",{className:"sess-fold pod sess-fold-slot","aria-hidden":"true",children:o})]})}function P({expanded:s,rollup:e,kin:o,onToggle:l}){const a=`${s?"Hide":"Show"} ${o} nested session${o===1?"":"s"}`;return n.jsx("button",{type:"button",tabIndex:-1,className:`sess-fold pod sess-fold-control${s?" open":""}`,style:s?{color:e,borderColor:e}:{background:e,borderColor:e},"aria-expanded":s,"aria-label":a,"data-tip":a,onMouseDown:t=>t.preventDefault(),onClick:t=>{t.stopPropagation(),l()},children:o})}function W(){const[s,e]=h.useState(()=>new Set),o=a=>e(t=>{const c=new Set(t);return c.has(a)?c.delete(a):c.add(a),c}),l=h.useCallback(a=>e(t=>{const c=a.filter(u=>u&&!t.has(u));if(!c.length)return t;const d=new Set(t);return c.forEach(u=>d.add(u)),d}),[]);return{expanded:s,toggle:o,expand:l}}function D({s,locked:e,showAvatar:o=!0,lead:l=null}){const a=p(),t=E(s.ops),c=N(s),d=a(`status.${s.status}`);return n.jsxs(n.Fragment,{children:[l,o&&n.jsx(A,{seed:s.id,status:s.status,title:`${k(s)} · ${d} — ${s.id.slice(0,8)}`}),n.jsxs("span",{className:"sess-meta",children:[n.jsx("span",{className:"sess-glyph",style:{color:z[s.status]},"data-tip":d,"aria-label":d,children:v[s.status]}),t&&n.jsx("span",{className:"sess-ops",children:t})]}),n.jsx("span",{className:"sess-id","data-tip":c,children:c}),s.archiveHazard&&n.jsx("span",{className:"sess-hazard","data-tip":s.archiveHazard,"aria-label":s.archiveHazard,children:n.jsx(j,{name:"issue-opened",size:13})}),e&&n.jsx("span",{className:"sess-lock","data-tip":a("sessionWindow.lockedTitle"),children:n.jsx(L,{})})]})}function G({item:s,baseClass:e,onToggle:o}){const l=p(),a=`${e} ${e}-${s.zone}${s.zone==="offline"?` si-zone-fold${s.folded?"":" open"}`:""}`;if(s.zone!=="offline")return n.jsx("div",{className:a,children:l(`sessionZone.${s.zone}`)});const t=l(s.folded?"sessionZone.showHistory":"sessionZone.hideHistory",{n:s.count});return n.jsxs("div",{className:a,children:[s.count>0&&n.jsx("button",{type:"button",tabIndex:-1,className:"si-zone-count","aria-expanded":!s.folded,"aria-label":t,"data-tip":t,onMouseDown:c=>c.preventDefault(),onClick:o,children:s.count}),n.jsx("span",{className:"si-zone-label",children:l(`sessionZone.${s.zone}`)})]})}function U({sessions:s,activeId:e,onPick:o,onOpenSession:l}){const a=p(),{expanded:t,toggle:c}=W(),[d,u]=h.useState(!1),w=h.useMemo(()=>S(s,r=>t.has(r),{zoneFolded:r=>r==="offline"&&!d,keepVisible:r=>r.source===e}),[s,t,d,e]);return n.jsx("div",{className:"sesswin",children:s.length===0?n.jsxs("div",{className:"sesswin-empty",children:[a("sessionWindow.emptyBefore"),n.jsx("kbd",{children:"⏎"}),a("sessionWindow.emptyAfter")]}):w.map(r=>{if(r.type==="zone")return n.jsx(G,{item:r,baseClass:"sesswin-zone",onToggle:()=>u(y=>!y)},`zone-${r.zone}`);const i=r.s,f=i.source===e,$=r.expandable||r.depth?n.jsx(O,{guides:r.guides,expandable:r.expandable,kin:r.kin}):null;return n.jsxs("div",{className:"sess-tree-row sesswin-tree-row",style:{"--sess-fold-indent":`${r.depth*14}px`},children:[n.jsx("button",{type:"button",className:f?"sess-row locked":"sess-row",style:{"--ov":C(i.id)},onClick:()=>o(i),onDoubleClick:()=>l(i.id),"data-tip":a("sessionWindow.rowTitle"),children:n.jsx(D,{s:i,locked:f,lead:$})}),r.expandable&&n.jsx(P,{expanded:r.expanded,rollup:r.rollup,kin:r.kin,onToggle:()=>c(i.id)})]},i.id)})})}export{A,P as F,F as G,L,O as R,G as S,D as a,M as b,U as c,C as l,W as u};
@@ -1 +0,0 @@
1
- import{B as x,r as o,j as e,L as N}from"./index-DrVao0Ep.js";import{A as j,k as b,a as T,i as f,r as S,s as k}from"./bindings-BC9vqpYU.js";import{P as v}from"./PageScroll-hT7UTLvD.js";import{g as E,T as y,a as C,b as A,s as F}from"./terminalFont-C6oGNKrf.js";const h="spexcode.theme",g=[{code:"minimal",label:"Minimal"},{code:"things",label:"Things"},{code:"tokyonight",label:"Tokyo Night"},{code:"catppuccin",label:"Catppuccin"},{code:"everforest",label:"Everforest"},{code:"gruvbox",label:"Gruvbox"},{code:"rosepine",label:"Rosé Pine Dawn"},{code:"dracula",label:"Dracula"}],u=new Set(g.map(s=>s.code)),p="minimal";function L(){try{const s=localStorage.getItem(h);if(u.has(s))return s}catch{}return p}function w(s){const i=u.has(s)?s:p;try{document.documentElement.setAttribute("data-theme",i)}catch{}try{localStorage.setItem(h,i)}catch{}return i}function M({t:s}){const[i,d]=o.useState(0),[c,l]=o.useState(null),r=()=>d(n=>n+1);return o.useEffect(()=>{if(!c)return;const n=a=>{if(a.preventDefault(),a.stopPropagation(),a.key==="Escape"){l(null);return}["Shift","Control","Alt","Meta"].includes(a.key)||(k(c,{keys:[a.key]}),l(null),r())};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[c]),e.jsxs("section",{className:"legend-sec",children:[e.jsx("div",{className:"legend-h",children:s("settings.secShortcuts")}),e.jsx("div",{className:"set-keys",children:j.map(n=>e.jsxs("div",{className:"set-key-row",children:[e.jsx("span",{className:"legend-desc",children:s(n.desc)}),e.jsx("button",{className:`bind-cell${c===n.id?" capturing":""}${n.rebind?"":" fixed"}${f(n.id)?" custom":""}`,disabled:!n.rebind,onClick:()=>n.rebind&&l(n.id),children:c===n.id?e.jsx("span",{className:"bind-hint",children:s("settings.bindPrompt")}):b(n.id).map((a,m)=>e.jsx("kbd",{children:T(a)},m))})]},n.id))}),e.jsxs("div",{className:"set-foot",children:[e.jsx("span",{className:"legend-desc set-hint",children:s("settings.shortcutsHint")}),e.jsx("button",{className:"set-reset",onClick:()=>{S(),l(null),r()},children:s("settings.reset")})]})]})}function D(){const{t:s,lang:i,setLang:d}=x(),[c,l]=o.useState(L),[r,n]=o.useState(E),a=t=>{w(t),l(t)},m=t=>n(F(t));return e.jsx(v,{className:"page-settings-scroll",children:e.jsxs("div",{className:"settings-body",children:[e.jsx("h1",{className:"page-title",children:s("settings.title")}),e.jsxs("section",{className:"legend-sec",children:[e.jsx("div",{className:"legend-h",children:s("settings.secLanguage")}),e.jsx("div",{className:"set-langs",children:N.map(t=>e.jsx("button",{className:t.code===i?"set-lang on":"set-lang",onClick:()=>d(t.code),"aria-pressed":t.code===i,children:t.label},t.code))})]}),e.jsxs("section",{className:"legend-sec",children:[e.jsx("div",{className:"legend-h",children:s("settings.secTheme")}),e.jsx("div",{className:"set-langs",children:g.map(t=>e.jsx("button",{className:t.code===c?"set-lang on":"set-lang",onClick:()=>a(t.code),"aria-pressed":t.code===c,children:s(t.label)},t.code))})]}),e.jsxs("section",{className:"legend-sec",children:[e.jsx("div",{className:"legend-h",children:s("settings.secTerminal")}),e.jsxs("label",{className:"set-terminal-font",children:[e.jsx("span",{children:s("settings.terminalFontSize")}),e.jsx("input",{type:"range",min:A,max:C,step:y,value:r,onChange:t=>m(t.target.value)}),e.jsxs("output",{children:[r,"px"]})]})]}),e.jsx(M,{t:s})]})})}export{D as default};
@@ -1,13 +0,0 @@
1
- import{r as g,j as n,I as R,u as A,e as de,p as Ye,t as Je,d as Le,g as T,v as Ze,w as Xe,n as Z,x as es,E as ss,s as pe}from"./index-DrVao0Ep.js";import{P as Q}from"./PageScroll-hT7UTLvD.js";import{m as ns,n as ue,o as ts}from"./data-B-RQmit6.js";const F={working:"var(--green)",parked:"var(--green)",asking:"var(--yellow)",review:"var(--yellow)",done:"var(--yellow)",error:"var(--red)",idle:"var(--muted)",starting:"var(--muted)",queued:"var(--muted)","close-pending":"var(--muted)",offline:"var(--muted)",unknown:"var(--yellow)",corrupt:"var(--red)",retired:"var(--muted)"},kn={working:"●",parked:"‖",asking:"?",review:"◑",done:"✓",error:"✕",idle:"·",starting:"◌",queued:"⋯","close-pending":"⊘",offline:"○",unknown:"⁇",corrupt:"⚠",retired:"⚑"},De=new Set(["asking","review","done","close-pending","error","corrupt"]),Y=e=>(e==null?void 0:e.liveness)==="offline"||(e==null?void 0:e.status)==="offline"?"offline":De.has(e==null?void 0:e.status)?"need":"run",me=e=>!!(e!=null&&e.archived),Sn=(e=[])=>({live:e.filter(s=>!me(s)),archived:e.filter(me)}),as=(e,s)=>{const a=s?(e||[]).find(t=>t.id===s):null;return a&&Y(a)!=="offline"?a:null},ve=e=>(e==null?void 0:e.sortKey)!=null?e.sortKey:(e==null?void 0:e.created)??0,xe=e=>{const s={need:0,run:1,offline:2};return[...e].sort((a,t)=>s[Y(a)]-s[Y(t)]||ve(t)-ve(a))},$n=e=>(e==null?void 0:e.label)||(e==null?void 0:e.name)||(e==null?void 0:e.node)||(e==null?void 0:e.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id),ls=e=>{var s;return(e==null?void 0:e.title)||(e==null?void 0:e.headline)||(e==null?void 0:e.name)||(e==null?void 0:e.activity)||(e==null?void 0:e.note)||(e==null?void 0:e.promptPreview)||(e==null?void 0:e.node)||((s=e==null?void 0:e.raw)==null?void 0:s.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id)};function rs(e){const s=new Set(e.map(l=>l==null?void 0:l.id)),a=new Map,t=[];for(const l of e){const i=l!=null&&l.parent&&l.parent!==l.id&&s.has(l.parent)?l.parent:null;if(i){const r=a.get(i)||[];r.push(l),a.set(i,r)}else t.push(l)}return{roots:t,childrenOf:a}}function En(e,s){const a=new Map(e.map(r=>[r==null?void 0:r.id,r])),t=[],l=new Set([s]);let i=a.get(s);for(;i!=null&&i.parent&&!l.has(i.parent);){const r=a.get(i.parent);if(!r)break;t.push(r.id),l.add(r.id),i=r}return t}function is(e,s){let a=!1,t=!1,l=0;const i=(r,c)=>{for(const o of s.get(r)||[])c.has(o.id)||(c.add(o.id),l++,De.has(o.status)?a=!0:F[o.status]===F.working&&(t=!0),i(o.id,c))};return i(e,new Set([e])),{color:a?F.asking:t?F.working:F.idle,count:l}}function cs(e,s,{zoneFolded:a=()=>!1,keepVisible:t=()=>!1}={}){const{roots:l,childrenOf:i}=rs(e),r=[],c=(d,w,m,v)=>{const u=i.get(d.id)||[],x=u.length>0,N=x&&!!s(d.id),S=x?is(d.id,i):null;if(r.push({type:"row",s:d,depth:w,expandable:x,expanded:N,rollup:(S==null?void 0:S.color)??null,kin:(S==null?void 0:S.count)??0,guides:v}),N){const k=xe(u).filter($=>!m.has($.id));k.forEach(($,b)=>{m.add($.id),c($,w+1,m,[...v,b<k.length-1])})}},o=(d,w)=>{let m=1;for(const v of i.get(d.id)||[])w.has(v.id)||(w.add(v.id),m+=o(v,w));return m},f=new Set;let h=null,p=null;for(const d of xe(l)){if(f.has(d.id))continue;const w=Y(d);if(w!==h&&(p={type:"zone",zone:w,count:0,folded:!!a(w)},r.push(p),h=w),p.count+=o(d,new Set([...f,d.id])),p.folded){const m=[],v=(u,x)=>{t(u)&&!f.has(u.id)&&m.push(u);for(const N of i.get(u.id)||[])x.has(N.id)||(x.add(N.id),v(N,x))};v(d,new Set([d.id]));for(const u of m)f.add(u.id),r.push({type:"row",s:u,depth:0,expandable:!1,expanded:!1,rollup:null,kin:0,guides:[]});f.add(d.id);continue}f.add(d.id),c(d,0,f,[])}return r}const Ln=e=>cs(e,()=>!0).filter(s=>s.type==="row").map(s=>s.s),X=typeof window<"u"?window.__escStack||(window.__escStack=[]):[];typeof window<"u"&&!window.__escStackBound&&(window.__escStackBound=!0,window.addEventListener("keydown",e=>{const s=window.__escStack;e.key!=="Escape"||!s||s.length===0||(e.preventDefault(),e.stopImmediatePropagation(),s[s.length-1].close())},!0));function Ae(e,s){const a=g.useRef(s);a.current=s,g.useEffect(()=>{if(!e)return;const t={close:()=>{var l;return(l=a.current)==null?void 0:l.call(a)}};return X.push(t),()=>{const l=X.indexOf(t);l>=0&&X.splice(l,1)}},[e])}const H=new Map;async function os(e){if(H.has(e))return H.get(e);const s=ns(e).then(async a=>{const t=await a.json().catch(()=>null);if(!a.ok)throw new Error((t==null?void 0:t.error)||`HTTP ${a.status}`);return t}).finally(()=>H.delete(e));return H.set(e,s),s}const Dn=e=>{const s=typeof e=="string"&&/^\d+$/.test(e)?Number(e):Number.NaN;return Number.isSafeInteger(s)&&s>0?s:1};function ds(e,s){return s<=0?[]:s<=10?Array.from({length:s},(a,t)=>t+1):e<=7?[...Array.from({length:8},(a,t)=>t+1),"gap",s-1,s]:e>=s-6||e>s?[1,2,"gap",...Array.from({length:8},(a,t)=>s-7+t)]:[1,2,"gap",e-2,e-1,e,e+1,e+2,"gap",s-1,s]}function Ie(e,s,a,{enabled:t=!0,refreshKey:l=null,pollMs:i=15e3,view:r=null}={}){const[c,o]=g.useState(null),[f,h]=g.useState(null),[p,d]=g.useState(t),w=g.useRef(0),m=g.useCallback(async({quiet:u=!1}={})=>{if(!t)return null;const x=++w.current;u||d(!0),h(null);const N=new URLSearchParams({q:String(s||""),page:String(a)});r&&N.set("view",r);try{const S=await os(`/api/${e}?${N}`);return x===w.current&&o(k=>k&&S&&k.revision===S.revision?k:S),S}catch(S){return x===w.current&&h(S instanceof Error?S.message:String(S)),null}finally{x===w.current&&d(!1)}},[e,t,a,s,r]),v=g.useRef(null);return g.useEffect(()=>{if(!t){d(!1);return}const u=`${e}\0${s}\0${a}\0${r||""}`,x=u!==v.current;v.current=u,x&&o(null),m({quiet:!x});const N=i>0?setInterval(()=>m({quiet:!0}),i):null;return()=>{N&&clearInterval(N)}},[e,s,a,r,t,m,i,l]),{data:c,error:f,loading:p,reload:m}}const je={issue:{open:{icon:"issue-opened",tone:"open",label:"reviewState.issueOpen"},closed:{icon:"issue-closed",tone:"closed",label:"reviewState.issueClosed"}},eval:{pass:{icon:"circle-check",tone:"pass",label:"score.pass"},fail:{icon:"circle-x",tone:"fail",label:"score.fail"},stalePass:{icon:"circle-check",tone:"stale",label:"score.stalePass"},staleFail:{icon:"circle-x",tone:"stale",label:"score.staleFail"},review:{icon:"clock",tone:"review",label:"reviewList.needsReview"},empty:{icon:"circle-minus",tone:"empty",label:"score.empty"},missing:{icon:"circle-dashed",tone:"empty",label:"score.missing"},legacy:{icon:"circle-minus",tone:"empty",label:"score.empty"}}},us=(e,s)=>{var t;const a=e==="issue"?s==="open"?"open":"closed":s||"empty";return((t=je[e])==null?void 0:t[a])||je.eval.empty};function fe({kind:e,state:s,showLabel:a=!1,size:t=16,className:l="",title:i}){const r=A(),c=us(e,s),o=i||r(c.label);return n.jsxs("span",{className:`review-state ${e} ${c.tone} ${l}`,"data-tip":o,"aria-label":o,children:[n.jsx("span",{className:"review-state-icon",style:{width:t,height:t},children:n.jsx(R,{name:c.icon,size:t})}),a&&n.jsx("span",{className:"review-state-label",children:o})]})}function fs(e,s){const a={...e,...s};for(const[t,l]of Object.entries(a))(l==null||l==="")&&delete a[t];return a}const hs=e=>e&&typeof e=="object"?e.hasData?e.filtered:e.dataset:e,Ce=(e,s,a)=>{const t=Array.isArray(e)?e:[];return!(s!=null&&String(s)!=="")||a==null||t.some(i=>String(i.value)==="")?t:[{value:"",label:a},...t]},ps=(e=[])=>e.reduce((s,a)=>((a.active??(a.value!=null&&String(a.value)!==""))&&(s.mobile+=1,a.mobileOnly||(s.desktop+=1)),s),{desktop:0,mobile:0}),he=(e,s,a)=>s?a==="Home"?0:a==="End"?s-1:a==="ArrowDown"||a==="ArrowRight"?e<0?0:(e+1)%s:a==="ArrowUp"||a==="ArrowLeft"?e<0?s-1:(e-1+s)%s:e:-1,ms=(e,s)=>{var t;const a=e==null?void 0:e.tagName;return a==="INPUT"||a==="TEXTAREA"||a==="SELECT"||a==="BUTTON"&&(s==="Enter"||s===" ")||s==="Enter"&&((t=e==null?void 0:e.closest)!=null&&t.call(e,"a[href]"))?!1:s==="j"||s==="k"||s==="Enter"},ee=e=>[...(e==null?void 0:e.querySelectorAll('[role="menuitemradio"]'))||[]].filter(s=>s.getClientRects().length>0),se=(e,s)=>{const a=e[s];if(a){for(const t of e)t.tabIndex=t===a?0:-1;a.focus()}};function Re(){const[e,s]=g.useState(!1),a=g.useRef(null),t=g.useRef(null),l=g.useRef(null),i=g.useRef("checked"),r=(d=!1)=>{var w;d&&((w=l.current)==null||w.focus()),s(!1)},c=(d,w="checked")=>{l.current=d,i.current=w,s(!0)},o=d=>{e?r(!1):c(d)};return Ae(e,()=>r(!0)),g.useEffect(()=>{if(!e)return;const d=w=>{var m;(m=a.current)!=null&&m.contains(w.target)||r(!1)};return window.addEventListener("pointerdown",d,!0),()=>window.removeEventListener("pointerdown",d,!0)},[e]),g.useEffect(()=>{if(!e)return;const d=requestAnimationFrame(()=>{const w=ee(t.current),m=w.findIndex(u=>u.getAttribute("aria-checked")==="true"),v=i.current==="last"?w.length-1:i.current==="first"?0:m>=0?m:0;se(w,v)});return()=>cancelAnimationFrame(d)},[e]),{open:e,ref:a,menuRef:t,close:r,toggle:o,onTriggerKeyDown:d=>{d.key!=="ArrowDown"&&d.key!=="ArrowUp"||(d.preventDefault(),d.stopPropagation(),c(d.currentTarget,d.key==="ArrowUp"?"last":"first"))},onMenuKeyDown:d=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(d.key))return;const w=ee(t.current),m=w.indexOf(document.activeElement);d.preventDefault(),d.stopPropagation(),se(w,he(m,w.length,d.key))},onItemFocus:d=>{const w=ee(t.current);se(w,w.indexOf(d.currentTarget))}}}function An({label:e,value:s="",options:a=[],onChange:t,mobile:l=!1,clearLabel:i}){const r=Re(),c=Ce(a,s,i);if(!c.length)return null;const o=c.find(p=>String(p.value)===String(s)),f=s?(o==null?void 0:o.label)||String(s):"",h=f?`${e}: ${f}`:e;return n.jsxs("div",{className:`rl-facet-wrap ${l?"mobile-stay":""}`,ref:r.ref,children:[n.jsxs("button",{type:"button",className:`rl-facet ${s?"active":""}`,"aria-label":h,"aria-haspopup":"menu","aria-expanded":r.open,onClick:p=>r.toggle(p.currentTarget),onKeyDown:r.onTriggerKeyDown,children:[n.jsx("span",{className:"rl-facet-label",children:h}),l&&n.jsx("span",{className:"rl-facet-label-mobile","aria-hidden":"true",children:f||e}),n.jsx(R,{name:"chevron-down",size:12})]}),r.open&&n.jsx("div",{className:"rl-menu",role:"menu","aria-label":e,ref:r.menuRef,onKeyDown:r.onMenuKeyDown,children:c.map(p=>n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":String(p.value)===String(s),tabIndex:-1,className:"rl-menu-item",onFocus:r.onItemFocus,onClick:()=>{r.close(!0),t(p.value)},children:[n.jsx(R,{name:String(p.value)===String(s)?"check":"blank",size:13}),n.jsx("span",{children:p.label}),p.count!=null&&n.jsx("span",{className:"rl-menu-count",children:p.count})]},String(p.value)))})]})}function vs({label:e,groups:s=[],clearLabel:a,compact:t=!1,className:l=""}){const i=A(),r=g.useId(),c=s.map(d=>({...d,options:Ce(d.options,d.value,d.clearLabel===null?null:d.clearLabel||a)})).filter(d=>d.options.length),o=c.some(d=>!d.mobileOnly),f=ps(c),h=Re();if(!c.length)return null;const p=(d,w)=>d>0&&n.jsxs("span",{className:`rl-secondary-filter-count ${w}`,children:[n.jsx("span",{"aria-hidden":"true",children:d}),n.jsx("span",{className:"sr-only",children:i("reviewList.activeFilters",{n:d})})]});return n.jsxs("div",{className:`rl-secondary-filters ${o?"":"mobile-only"} ${f.desktop?"active-desktop":""} ${f.mobile?"active-mobile":""} ${l}`,ref:h.ref,children:[t?n.jsx(de,{icon:"filter",size:16,className:"rl-secondary-filters-trigger compact",label:e,"aria-haspopup":"menu","aria-expanded":h.open,onClick:d=>h.toggle(d.currentTarget),onKeyDown:h.onTriggerKeyDown}):n.jsxs("button",{type:"button",className:"rl-secondary-filters-trigger","aria-haspopup":"menu","aria-expanded":h.open,onClick:d=>h.toggle(d.currentTarget),onKeyDown:h.onTriggerKeyDown,children:[n.jsx(R,{name:"filter",size:14}),n.jsx("span",{children:e}),p(f.desktop,"for-desktop"),p(f.mobile,"for-mobile"),n.jsx(R,{name:"chevron-down",size:12})]}),h.open&&n.jsx("div",{className:"rl-menu rl-secondary-filters-menu",role:"menu","aria-label":e,ref:h.menuRef,onKeyDown:h.onMenuKeyDown,children:c.map((d,w)=>n.jsxs("div",{role:"group","aria-labelledby":`${r}-group-${w}`,className:`rl-menu-group ${d.mobileOnly?"mobile-only":""}`,children:[n.jsx("div",{className:"rl-menu-label",id:`${r}-group-${w}`,children:d.label}),d.options.map(m=>n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":String(m.value)===String(d.value||""),tabIndex:-1,className:"rl-menu-item",onFocus:h.onItemFocus,onClick:()=>{h.close(!0),d.onChange(m.value)},children:[n.jsx(R,{name:String(m.value)===String(d.value||"")?"check":"blank",size:13}),n.jsx("span",{children:m.label}),m.count!=null&&n.jsx("span",{className:"rl-menu-count",children:m.count})]},String(m.value)))]},`${d.label}-${d.mobileOnly?"mobile":"all"}`))})]})}function In({state:e,title:s,meta:a,aside:t}){return n.jsxs("div",{className:"rl-row-grid",children:[n.jsx("div",{className:"rl-row-state",children:e}),n.jsxs("div",{className:"rl-row-body",children:[n.jsx("div",{className:"rl-row-title",children:s}),a&&n.jsx("div",{className:"rl-row-meta",children:a})]}),t&&n.jsx("div",{className:"rl-row-aside",children:t})]})}const U=e=>{const s=String(e??"").trim();return s?`${s} `:""};function xs({value:e="",onSubmit:s,placeholder:a,label:t,keys:l=[],suggest:i={}}){const[r,c]=g.useState(()=>U(e)),[o,f]=g.useState(-1),[h,p]=g.useState(-1),d=g.useRef(null),w=g.useRef(null),m=g.useId(),v=g.useRef(null),u=b=>requestAnimationFrame(()=>{const E=d.current;E&&(b&&E.focus(),E.setSelectionRange(E.value.length,E.value.length))});g.useEffect(()=>{c(U(e)),f(-1),p(-1),u(v.current!==null&&v.current!==e),v.current=e},[e]);const x=o>=0?Ye(r,o,l,i):{start:0,end:0,items:[]},N=x.items.length>0;Ae(N,()=>f(-1));const S=()=>{w.current&&d.current&&(w.current.scrollLeft=d.current.scrollLeft)};g.useEffect(S);const k=b=>{f(-1),p(-1);const E=b.trim();c(U(E)||U(e)),u(!0),s(E)},$=b=>{const E=`${r.slice(0,x.start)}${b.insert}${r.slice(x.end)}`;if(c(E),b.type==="value"){k(E);return}const I=x.start+b.insert.length;f(I),p(-1),requestAnimationFrame(()=>{var y,D;(y=d.current)==null||y.focus(),(D=d.current)==null||D.setSelectionRange(I,I)})};return n.jsxs("form",{className:"rl-query rq",role:"search",onSubmit:b=>{b.preventDefault(),k(r)},children:[n.jsxs("div",{className:"rq-wrap",children:[n.jsx("div",{className:"rq-hl","aria-hidden":"true",ref:w,children:Je(r).map((b,E)=>b.ws||b.key==null||!l.includes(b.key)?n.jsx("span",{children:b.raw},E):n.jsxs("span",{className:"rq-tok",children:[n.jsx("span",{className:"rq-tok-key",children:b.raw.slice(0,b.key.length+1)}),n.jsx("span",{className:"rq-tok-val",children:b.raw.slice(b.key.length+1)})]},E))}),n.jsx("input",{ref:d,role:"combobox","aria-expanded":N,"aria-controls":m,"aria-autocomplete":"list","aria-activedescendant":N&&h>=0?`${m}-o${h}`:void 0,value:r,spellCheck:!1,autoComplete:"off",placeholder:a,"aria-label":t,onChange:b=>{c(b.target.value),f(b.target.selectionStart??b.target.value.length),p(-1)},onScroll:S,onKeyDown:b=>{N&&(b.key==="ArrowDown"||b.key==="ArrowUp"?(b.preventDefault(),p(he(h,x.items.length,b.key))):b.key==="Enter"&&h>=0&&(b.preventDefault(),$(x.items[h])))},onBlur:()=>f(-1)})]}),N&&n.jsx("div",{className:"rl-menu rq-list",role:"listbox",id:m,"aria-label":t,children:x.items.map((b,E)=>n.jsxs("div",{id:`${m}-o${E}`,role:"option","aria-selected":E===h,className:`rq-opt ${E===h?"active":""}`,onPointerDown:I=>{I.preventDefault(),$(b)},children:[n.jsx("span",{className:"rq-opt-token",children:b.insert.trim()}),b.label&&b.label!==b.value&&n.jsx("span",{className:"rq-opt-label",children:b.label})]},b.insert))}),n.jsx("button",{type:"submit",className:"rl-query-submit","data-tip":t,"aria-label":t,children:n.jsx(R,{name:"search",size:16})})]})}function Te({value:e="",onChange:s,placeholder:a,searchLabel:t,filterLabel:l,groups:i,clearLabel:r,clearSearchLabel:c,summary:o}){const f=A(),h=n.jsxs("div",{className:"rf-compact",role:"search",children:[n.jsx("span",{className:"rf-search-icon",children:n.jsx(R,{name:"search",size:13})}),n.jsx("input",{value:e,onChange:d=>s(d.target.value),placeholder:a,"aria-label":t}),e&&n.jsx(de,{icon:"x",size:12,className:"rf-clear",label:c,onClick:()=>s("")}),n.jsx(vs,{label:l,clearLabel:r,groups:i,compact:!0,className:"rf-secondary-filters"})]});if(!o)return h;const p=f("reviewList.showing",{shown:o.shown,total:o.total});return n.jsxs("div",{className:"rf-row",children:[n.jsxs("span",{className:"rf-summary","data-tip":p,children:[n.jsx("span",{className:"sr-only",children:p}),n.jsx("span",{className:"rf-summary-full","aria-hidden":"true",children:p}),n.jsxs("span",{className:"rf-summary-compact","aria-hidden":"true",children:[o.shown,"/",o.total]})]}),h]})}function js({page:e,pageCount:s,prev:a,next:t,hrefFor:l}){const i=A();if(s<=1&&e<=1)return null;const r=(c,o,f,h="")=>c==null?n.jsx("span",{className:`rl-page-link disabled ${h}`,"aria-disabled":"true",children:o}):n.jsx("a",{className:`rl-page-link ${h}`,href:l(c),rel:f,"aria-label":f?i(`reviewList.${f}Page`):i("reviewList.page",{n:c}),children:o});return n.jsxs("nav",{className:"rl-pagination","aria-label":i("reviewList.pagination"),children:[r(a,i("reviewList.previous"),"prev","direction"),ds(e,s).map((c,o)=>c==="gap"?n.jsx("span",{className:"rl-page-gap","aria-hidden":"true",children:"…"},`gap-${o}`):n.jsx("a",{className:"rl-page-link number",href:l(c),"aria-label":i("reviewList.page",{n:c}),"aria-current":c===e?"page":void 0,children:c},c)),r(t,i("reviewList.next"),"next","direction")]})}function Cn({notice:e,leading:s,error:a,loading:t=!1,title:l,action:i,search:r,sections:c=[],sectionMode:o="tabs",facets:f,secondaryFilters:h,rows:p,empty:d,pagination:w,children:m}){const v=A(),[u,x]=g.useState(null),N=g.useId(),S=g.useRef({});S.current={rows:p,cur:u},g.useEffect(()=>{const y=D=>{if(D.metaKey||D.ctrlKey||D.altKey||!ms(D.target,D.key))return;const C=S.current.rows.filter(j=>j.href);if(!C.length)return;if(D.key==="Enter"){const j=C.find(L=>L.key===S.current.cur);j&&(D.preventDefault(),D.stopPropagation(),window.location.hash=j.href);return}D.preventDefault(),D.stopPropagation();const P=C.findIndex(j=>j.key===S.current.cur),K=P<0?D.key==="j"?0:C.length-1:Math.max(0,Math.min(C.length-1,P+(D.key==="j"?1:-1)));x(C[K].key)};return window.addEventListener("keydown",y,!0),()=>window.removeEventListener("keydown",y,!0)},[]),g.useEffect(()=>{var y;(y=document.querySelector(".lp-row.cur"))==null||y.scrollIntoView({block:"nearest"})},[u]);const k=hs(d),$=Math.max(0,c.findIndex(y=>y.active)),b=o==="tabs",E=`${N}-panel`,I=y=>`${N}-tab-${y}`;return n.jsxs(Q,{className:"lp-page",children:[e&&n.jsx("div",{className:"fv-notice",children:e}),s,n.jsxs("div",{className:"rl-content",children:[n.jsxs("div",{className:"rl-titlebar",children:[n.jsx("h1",{children:l}),i]}),r&&n.jsx(xs,{...r}),a&&n.jsx("div",{className:"fv-error lp-error",role:"alert",children:a}),n.jsxs("section",{className:"rl-list",children:[n.jsxs("header",{className:"lp-head",children:[n.jsx("div",{className:"rl-sections",role:b?"tablist":"group","aria-label":l,...b?{"aria-orientation":"horizontal"}:{},children:c.map((y,D)=>n.jsxs("button",{type:"button",role:b?"tab":void 0,"aria-selected":b?y.active:void 0,"aria-pressed":b?void 0:y.active,"aria-controls":b?E:void 0,id:b?I(D):void 0,tabIndex:b?D===$?0:-1:void 0,className:`rl-section ${y.active?"active":""}`,onClick:y.onSelect,onKeyDown:C=>{var j,L;if(!b||!["ArrowLeft","ArrowRight","Home","End"].includes(C.key))return;const P=[...C.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],K=he(P.indexOf(C.currentTarget),P.length,C.key);C.preventDefault(),C.stopPropagation(),(j=P[K])==null||j.focus(),(L=P[K])==null||L.click()},children:[n.jsx("span",{children:y.label}),n.jsx("span",{className:"rl-section-count",children:y.count}),y.countSuffix&&n.jsxs("span",{className:"rl-section-suffix","data-tip":y.countSuffix.text,children:[n.jsx("span",{className:"sr-only",children:y.countSuffix.text}),n.jsx("span",{className:"rl-section-suffix-full","aria-hidden":"true",children:y.countSuffix.text}),n.jsx("span",{className:"rl-section-suffix-compact","aria-hidden":"true",children:y.countSuffix.compact})]})]},y.key))}),n.jsxs("div",{className:"rl-facets",children:[f,h]})]}),n.jsxs("div",{className:"lp-rows",role:b?"tabpanel":"region",id:E,"aria-busy":t||void 0,"aria-labelledby":b?I($):void 0,"aria-label":b?void 0:l,children:[p.length===0&&n.jsx("div",{className:"lp-empty",children:t?v("common.loading"):k}),p.map(y=>y.href?n.jsx("a",{className:`lp-row ${y.cls||""} ${u===y.key?"cur":""}`,href:y.href,children:y.content},y.key):n.jsx("div",{className:`lp-row inert ${y.cls||""}`,children:y.content},y.key))]})]}),w&&n.jsx(js,{...w})]}),m]})}function Rn({title:e,titleMeta:s,status:a,side:t,composer:l,missing:i,failure:r,listHref:c,listLabel:o,backHref:f,backLabel:h,children:p}){return r?n.jsxs(Q,{className:"ds-page ds-missing ds-failed",role:"alert",children:[n.jsx("div",{className:"ds-missing-note",children:r}),c&&n.jsx("a",{className:"ds-backlink",href:c,children:o})]}):i?n.jsxs(Q,{className:"ds-page ds-missing",children:[n.jsx("div",{className:"ds-missing-note",children:i}),c&&n.jsx("a",{className:"ds-backlink",href:c,children:o})]}):n.jsxs(Q,{className:"ds-page",children:[n.jsxs("header",{className:"ds-head",children:[f&&n.jsx("a",{className:"ds-back",href:f,"data-tip":h,"aria-label":h,children:n.jsx(R,{name:"arrow-left",size:16})}),n.jsxs("h1",{className:"ds-title",children:[e,s&&n.jsx("span",{className:"ds-title-meta",children:s})]})]}),a&&n.jsx("div",{className:"ds-status",children:a}),n.jsxs("div",{className:"ds-cols",children:[n.jsxs("div",{className:"ds-main",children:[p,l&&n.jsx("div",{className:"ds-compose",children:l})]}),n.jsx("aside",{className:"ds-side",children:t})]})]})}function Tn({label:e,children:s}){return n.jsxs("div",{className:"ds-side-sec",children:[n.jsx("span",{className:"ds-side-label",children:e}),n.jsx("div",{className:"ds-side-body",children:s})]})}function gs({text:e,tip:s,dim:a=!1,mono:t=!1,href:l=null,external:i=!1,onClick:r=null,className:c="",lead:o=null,trail:f=null,label:h=null}){const p=`ds-val${a?" dim":""}${t?" mono":""}${l||r?" link":""}${c?` ${c}`:""}`,d=s??(typeof e=="string"?e:void 0),w=h?{"aria-label":h}:{},m=n.jsxs(n.Fragment,{children:[o,n.jsx("span",{className:"ds-val-text",children:e}),f]});return l?n.jsx("a",{className:p,href:l,"data-tip":d,...w,...i?{target:"_blank",rel:"noreferrer"}:{},children:m}):r?n.jsx("button",{type:"button",className:p,onClick:r,"data-tip":d,...w,children:m}):n.jsx("span",{className:p,"data-tip":d,children:m})}const ne=Object.freeze({RESULT:"result",BLIND:"blind",UNMEASURED:"unmeasured",DANGLING:"dangling"}),Ve=e=>{var s;return(s=e==null?void 0:e.evidence)!=null&&s.length?e.evidence:(e==null?void 0:e.blob)!=null?[{hash:e.blob,kind:e.blobKind||"image",state:e.blobState||"present"}]:[]},Vn=e=>{const s=Ve(e);return s.length?["video","image","transcript","data"].filter(a=>s.some(t=>t.kind===a)):["note"]},Fn=e=>String(e||"").length>22?`${String(e).slice(0,8)}…`:e;function Fe(e,s,a){return a.map(t=>t==="section"?e.section:e.facets[t]).filter(t=>{var l;return(t==null?void 0:t.meaningful)!==!1&&(((l=t==null?void 0:t.options)==null?void 0:l.length)>1||(t==null?void 0:t.value)!=null&&t.value!==""&&t.value!=="all")}).map(t=>({key:t.key,label:t.label,value:t.value,active:t.value!=null&&t.value!==""&&t.value!=="all",options:t.options,clearLabel:t.value==="all"?null:void 0,onChange:l=>s({[t.key]:l||null})}))}const _=e=>Le(`/api/evidence/${e}`);function ws({src:e,alt:s,onClose:a}){return g.useEffect(()=>{const t=l=>{l.key==="Escape"&&(l.preventDefault(),l.stopPropagation(),a())};return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[a]),n.jsx("div",{className:"lightbox",onClick:a,children:n.jsx("img",{src:e,alt:s})})}function ys({hash:e}){const s=A(),[a,t]=g.useState(null);return g.useEffect(()=>{let l=!0;return fetch(_(e)).then(i=>i.ok?i.text():Promise.reject(new Error("miss"))).then(i=>{l&&t(i)}).catch(()=>{l&&t("")}),()=>{l=!1}},[e]),a===null?n.jsx("pre",{className:"eval-transcript loading",children:s("nodeView.eval.loadingTranscript")}):n.jsx("pre",{className:"eval-transcript",children:a})}function bs({hash:e,collapsed:s=!1}){const a=A(),[t,l]=g.useState(null);if(g.useEffect(()=>{let r=!0;return fetch(_(e)).then(c=>c.ok?c.text():Promise.reject(new Error("miss"))).then(c=>{let o=c,f=!0;try{o=JSON.stringify(JSON.parse(c),null,2)}catch{f=!1}r&&l({text:o,valid:f})}).catch(()=>{r&&l({text:"",valid:!1})}),()=>{r=!1}},[e]),t===null)return n.jsx("pre",{className:"eval-data loading",children:a("nodeView.eval.loadingData")});const i=t.valid?a("nodeView.eval.data"):a("nodeView.eval.dataInvalid");return s?n.jsxs("details",{className:"eval-datawrap eval-datafold",children:[n.jsx("summary",{className:"eval-datahead",children:i}),n.jsx("pre",{className:"eval-data",children:t.text})]}):n.jsxs("div",{className:"eval-datawrap",children:[n.jsx("div",{className:"eval-datahead",children:i}),n.jsx("pre",{className:"eval-data",children:t.text})]})}function Ns({hash:e,alt:s}){const[a,t]=g.useState(!1);return n.jsxs(n.Fragment,{children:[n.jsx("img",{className:"an-image",src:_(e),alt:s,loading:"lazy",onClick:()=>t(!0)}),a&&n.jsx(ws,{src:_(e),alt:s,onClose:()=>t(!1)})]})}function ks({exit:e}){return n.jsx(R,{name:e?"minimize":"maximize",size:15})}function Pn({target:e,className:s=""}){const a=A(),[t,l]=g.useState(!1);g.useEffect(()=>{const r=()=>{const c=document.fullscreenElement,o=e==null?void 0:e.current;l(!!c&&!!o&&(c===o||o.contains(c)))};return document.addEventListener("fullscreenchange",r),()=>document.removeEventListener("fullscreenchange",r)},[e]);const i=()=>{var c,o;const r=e==null?void 0:e.current;r&&(document.fullscreenElement?(c=document.exitFullscreen||document.webkitExitFullscreen)==null||c.call(document):(o=r.requestFullscreen||r.webkitRequestFullscreen)==null||o.call(r))};return n.jsx("button",{type:"button",className:`an-fs ${s}`,onClick:i,"data-tip":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),"aria-label":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),children:n.jsx(ks,{exit:t})})}function Pe({e,alt:s="",collapsed:a=!1}){const t=A();return e.state==="miss"?n.jsx("div",{className:"eval-noimg",children:t("nodeView.eval.miss")}):e.kind==="transcript"?n.jsx(ys,{hash:e.hash}):e.kind==="data"?n.jsx(bs,{hash:e.hash,collapsed:a}):e.kind==="video"?n.jsx("video",{className:"eval-video",src:_(e.hash),controls:!0,preload:"metadata",playsInline:!0}):n.jsx(Ns,{hash:e.hash,alt:s})}const W=new Map;function Ss(e){const[s,a]=g.useState(()=>W.get(e)??null);return g.useEffect(()=>{if(W.has(e)){a(W.get(e));return}let t=!0;return fetch(_(e),{headers:{Range:"bytes=0-0"}}).then(l=>{const i=l.headers.get("content-type")||"",r=l.ok?{kind:i.startsWith("video/")?"video":i.startsWith("image/")?"image":i.startsWith("application/json")?"data":"transcript",state:"present"}:{kind:"image",state:"miss"};W.set(e,r),t&&a(r)}).catch(()=>{t&&a({kind:"image",state:"miss"})}),()=>{t=!1}},[e]),s}function Me({hash:e,alt:s=""}){const a=Ss(e);return a?n.jsx(Pe,{e:{hash:e,...a},alt:s}):null}function $s(e){var s,a;return((s=e==null?void 0:e.verdict)==null?void 0:s.status)==="pass"?"check":((a=e==null?void 0:e.verdict)==null?void 0:a.status)==="fail"?"cross":null}function qe(e){const s=$s(e);return s?e.fresh?s==="cross"?"fail":"pass":s==="cross"?"staleFail":"stalePass":"empty"}function Es(e,s){if(!e)return[];const a=new Map;for(const t of s||[])a.has(t.scenario)||a.set(t.scenario,t);return e.map(t=>{const l=a.get(t.name)||null;return{...t,reading:l,state:l?qe(l):"missing"}})}function Ls(e){return e.length?e.some(s=>s.state==="fail")?"fail":e.some(s=>s.state==="staleFail")?"staleFail":e.some(s=>s.state==="stalePass")?"stalePass":e.some(s=>s.state==="empty"||s.state==="missing")?"empty":"pass":null}const Ds=e=>e.fail>0?"fail":e.staleFail>0?"staleFail":e.stalePass>0?"stalePass":e.empty>0?"empty":"pass";function As({scenarios:e,evals:s,summary:a=null,href:t}){const l=A(),i=a?null:Es(e,s),r=(a==null?void 0:a.total)??i.length;if(!r)return null;const c=a?Ds(a):Ls(i),o=(a==null?void 0:a.pass)??i.filter(d=>d.state==="pass").length,f=l("score.count",{satisfied:o,total:r,outstanding:r-o}),h=n.jsxs(n.Fragment,{children:[n.jsx(R,{name:"check",size:11}),o,"/",r]});if(!t)return n.jsx("span",{className:`scenario-count ${c}`,"data-tip":f,"aria-label":f,children:h});const p=`${f} — ${l("score.openList")}`;return n.jsx("a",{className:`scenario-count ${c}`,href:t,"data-tip":p,"aria-label":p,children:h})}function G({kind:e,state:s,cls:a,n:t,label:l}){return n.jsxs("span",{className:`ovc ${a}`,"data-tip":l,children:[n.jsx(fe,{kind:e,state:s,title:l,size:11}),t]})}function Is({tags:e}){return e!=null&&e.length?n.jsx("span",{className:"tag-chips",children:e.map(s=>n.jsx("span",{className:"tag-chip",children:s},s))}):null}function Ke({state:e,title:s}){return e?n.jsx(fe,{kind:"eval",state:e,title:s,className:`score-badge ${e}`,size:14}):null}const Mn=e=>({kind:"graph-node",nodeId:e}),qn=e=>({kind:"session",sessionId:e}),Cs=e=>({kind:"issue",issueId:e}),Oe=(e,s)=>({kind:"review-list",page:e,query:s}),_e=(e,s=null)=>({kind:"eval",nodeId:e,scenario:s}),Rs=(e,s,a)=>({kind:"session-eval",sessionId:e,nodeId:s,scenario:a});function q(e){if(!e)return T("graph");if(e.kind==="graph-node")return T("graph");if(e.kind==="session")return T("sessions",e.sessionId);if(e.kind==="session-eval"){const s=e.nodeId&&e.scenario?`${e.nodeId}/${e.scenario}`:null;return T("evals",s,{q:s?`scope:${e.sessionId}`:Ze(e.sessionId)})}return e.kind==="issue"?T("issues",e.issueId):e.kind==="review-list"?T(e.page,null,e.query?{q:e.query}:null):e.kind==="eval"?e.scenario?T("evals",`${e.nodeId}/${e.scenario}`):T("evals",null,{q:Xe(e.nodeId)}):T("graph")}function Kn(e,s=null){return e==="issues"?T("issues"):s?q(Rs(s)):T("evals")}function On(e,{onFocusNode:s,onOpenSession:a}={}){if(e)if(e.kind==="graph-node")s==null||s(e.nodeId),Z("graph");else if(e.kind==="session")a?a(e.sessionId):Z("sessions",e.sessionId);else{const{page:t,param:l,query:i}=es(q(e));Z(t,l,{query:i})}}function ge({issue:e,onNavigateAddress:s}){const a=(e==null?void 0:e.store)||"local",t=(e==null?void 0:e.status)||"open",l=Cs(e.id);return n.jsxs("a",{className:"issue-card",href:q(l),"data-tip":e.concern||e.id,onClick:s?i=>{i.defaultPrevented||i.button!==0||i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),s(l))}:void 0,children:[n.jsxs("span",{className:"issue-card-top",children:[n.jsx("span",{className:"issue-num",children:e.id}),n.jsx("span",{className:`fv-store fv-store-${a==="local"?"local":"forge"}`,children:a}),n.jsx(fe,{kind:"issue",state:t,showLabel:!0,size:12,className:"issue-card-state"})]}),n.jsx("span",{className:"issue-card-title",children:e.concern})]})}const we=[{key:"spec",label:"spec"},{key:"history",label:"history"},{key:"issues",label:"issues"},{key:"eval",label:"eval"}];function Ts(e){var s;return(s=e==null?void 0:e.overlays)!=null&&s.length?[{key:"edit",label:"edit"},...we]:we}const Be=(e,s,a={})=>{let t=`${e==="issue"?"is:issue":ss}${a.q?` ${String(a.q).trim()}`:""}`.trim();const l=e==="issue"?{state:"state",author:"author",store:"store",session:"session"}:{verdict:"verdict",review:"state",freshness:"freshness",kind:"evidence",filer:"filer",session:"session"};for(const[i,r]of Object.entries(l))a[i]&&(t=pe(t,r,a[i]));return pe(t,"node",s)},Vs={state:"reviewList.facetState",verdict:"reviewList.facetVerdict",author:"reviewList.facetAuthor",store:"reviewList.facetStore",review:"reviewList.facetReview",freshness:"reviewList.facetFreshness",kind:"reviewList.facetKind",filer:"reviewList.facetFiler",session:"reviewList.facetSession"},ze=(e,s)=>{const a=t=>t&&{...t,label:s(Vs[t.key]||t.label||t.key)};return{section:a(e==null?void 0:e.section),facets:Object.fromEntries(Object.entries((e==null?void 0:e.facets)||{}).map(([t,l])=>[t,a(l)]))}},Fs={added:"+",edited:"~",deleted:"✕",moved:"→"};function z(e){const s=[],a=/`([^`]+)`|\*\*([^*]+)\*\*|\[\[([^\]]+)\]\]/g;let t=0,l,i=0;for(;l=a.exec(e);)l.index>t&&s.push(e.slice(t,l.index)),l[1]!=null?s.push(n.jsx("code",{children:l[1]},i++)):l[2]!=null?s.push(n.jsx("strong",{children:l[2]},i++)):s.push(n.jsx("span",{className:"doc-link",children:l[3]},i++)),t=a.lastIndex;return t<e.length&&s.push(e.slice(t)),s}function ye(e){const s=e.trim();return s.includes("|")&&/^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test(s)}function te(e){let s=e.trim();return s.startsWith("|")&&(s=s.slice(1)),s.endsWith("|")&&(s=s.slice(0,-1)),s.split("|").map(a=>a.trim())}function Ps(e){const s=e.startsWith(":"),a=e.endsWith(":");return s&&a?"center":a?"right":null}function J({body:e}){if(!e)return null;const s=e.replace(/^#\s+[^\n]*\n+/,"").split(`
2
- `),a=[];let t=0,l=0;for(;t<s.length;){const i=s[t].trim();if(/^```/.test(i)){const r=[];for(t++;t<s.length&&!/^```/.test(s[t].trim());)r.push(s[t++]);t++,a.push(n.jsx("pre",{className:"doc-pre",children:n.jsx("code",{children:r.join(`
3
- `)})},l++))}else if(/^#{1,6}\s+/.test(s[t]))a.push(n.jsx("h4",{className:"doc-h",children:z(s[t].replace(/^#+\s+/,""))},l++)),t++;else if(i.includes("|")&&t+1<s.length&&ye(s[t+1])){const r=te(s[t]),c=te(s[t+1]).map(Ps);t+=2;const o=[];for(;t<s.length&&s[t].includes("|")&&s[t].trim()!==""&&!/^```/.test(s[t].trim());)o.push(te(s[t])),t++;a.push(n.jsxs("table",{className:"doc-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:r.map((f,h)=>n.jsx("th",{style:c[h]?{textAlign:c[h]}:void 0,children:z(f)},h))})}),n.jsx("tbody",{children:o.map((f,h)=>n.jsx("tr",{children:r.map((p,d)=>n.jsx("td",{style:c[d]?{textAlign:c[d]}:void 0,children:z(f[d]??"")},d))},h))})]},l++))}else if(/^-\s+/.test(i)){const r=[];for(;t<s.length&&/^-\s+/.test(s[t].trim());)r.push(s[t++].trim().replace(/^-\s+/,""));a.push(n.jsx("ul",{children:r.map((c,o)=>n.jsx("li",{children:z(c)},o))},l++))}else if(i==="")t++;else{const r=[];for(;t<s.length;){const c=s[t];if(c.trim()===""||/^```/.test(c.trim())||/^#{1,6}\s+/.test(c)||/^-\s+/.test(c.trim())||c.includes("|")&&t+1<s.length&&ye(s[t+1]))break;r.push(c),t++}a.push(n.jsx("p",{children:z(r.join(" "))},l++))}}return n.jsx("div",{className:"doc-body",children:a})}function be({kind:e,title:s,owner:a,ownerLabel:t,note:l,children:i}){return n.jsxs("section",{className:`spec-part part-${e}`,children:[n.jsxs("header",{className:"part-head",children:[n.jsx("span",{className:"part-title",children:s}),n.jsx("span",{className:`part-owner owner-${a}`,children:t}),l&&n.jsx("span",{className:"part-note",children:l})]}),n.jsx("div",{className:"part-body",children:i})]})}function Ms({parts:e}){const s=A();return n.jsxs("div",{className:"spec-parts",children:[n.jsx(be,{kind:"raw",title:s("nodeView.rawTitle"),owner:"human",ownerLabel:s("nodeView.rawOwner"),note:s("nodeView.rawNote"),children:n.jsx(J,{body:e.rawSource})}),n.jsx(be,{kind:"expanded",title:s("nodeView.expandedTitle"),owner:"agent",ownerLabel:s("nodeView.expandedOwner"),note:s("nodeView.expandedNote"),children:n.jsx(J,{body:e.expandedSpec})})]})}const ae=new Map;function qs(e,s){const a=`${e}@${s??""}`,[t,l]=g.useState(()=>ae.get(a)??null);return g.useEffect(()=>{const i=ae.get(a);if(i){l(i);return}l(null);let r=!0;return fetch(ue(e,"content")).then(c=>c.ok?c.json():Promise.reject(c.status)).then(c=>{ae.set(a,c),r&&l(c)}).catch(()=>{r&&l({body:"",parts:null})}),()=>{r=!1}},[e,s,a]),t}function Ks({node:e}){var l,i;const s=A(),a=qs(e.id,e.version),t=(e.driftFiles||[]).map(r=>`${r.file}: ${s("specNode.driftAhead",{n:r.behind})}`).join(`
4
- `);return n.jsxs("div",{className:"pane-doc",children:[n.jsxs("h1",{children:["# ",e.title]}),n.jsx("blockquote",{children:e.desc}),n.jsxs("div",{className:"doc-stat",children:[n.jsxs("span",{className:`stat-status st-${e.status}`,"data-tip":s("nodeView.statusLabel"),children:[n.jsx("i",{className:"stat-dot"}),s(`status.${e.status}`)]}),n.jsxs("span",{className:"stat-chip","data-tip":s("nodeView.versionLabel"),children:["v",e.version||0]}),n.jsx(As,{summary:(l=e.reviewSummary)==null?void 0:l.evals,href:q(_e(e.id))}),e.drift>0&&n.jsxs("span",{className:"stat-chip stat-drift","data-tip":t,children:["⚠",e.drift]}),n.jsxs("span",{className:"stat-sess","data-tip":s("nodeView.lastEditedBy"),children:["✎ ",n.jsx("b",{children:e.session||s("common.none")})]})]}),((i=e.code)==null?void 0:i.length)>0?n.jsxs("div",{className:"doc-gov",children:[n.jsxs("span",{className:"doc-gov-h",children:[s("nodeView.governs")," ",n.jsx("b",{children:e.code.length})]}),n.jsx("div",{className:"doc-gov-files",children:e.code.map(r=>n.jsx("code",{className:"gov-f",children:r},r))})]}):n.jsx("div",{className:"doc-gov prose",children:n.jsx("span",{className:"doc-gov-h",children:s("nodeView.proseNode")})}),(()=>{if(a===null&&e.body==null)return n.jsx("div",{className:"pane-loading",children:n.jsx("span",{className:"spinner","aria-label":s("common.loading")})});const r=e.body??(a==null?void 0:a.body)??"",c=e.parts??(a==null?void 0:a.parts)??null;return c?n.jsx(Ms,{parts:c}):n.jsx(J,{body:r})})()]})}function Os(e,s=!0){const[a,t]=g.useState(null);return g.useEffect(()=>{if(!s)return;let l=!0;return fetch(ue(e,"history")).then(i=>i.json()).then(i=>{l&&t(i)}).catch(()=>l&&t([])),()=>{l=!1}},[e,s]),a}const le=new Map;function _s(e,s,a){const t=`${e}/${s}`,[l,i]=g.useState(()=>le.get(t)??null);return g.useEffect(()=>{const r=le.get(t);if(r){i(r);return}let c=!0;return fetch(ue(e,"diff",s)).then(o=>o.json()).then(o=>{le.set(t,o),c&&i(o)}).catch(()=>c&&i({patch:""})),()=>{c=!1}},[e,s,a,t]),l}function Bs(e){const s=[];let a=!1;for(const t of e.split(`
5
- `)){if(t.startsWith("@@")){a=!0,s.push({t:"hunk",s:t});continue}!a||t.startsWith("\\")||(t.startsWith("+")?s.push({t:"add",s:t.slice(1)}):t.startsWith("-")?s.push({t:"del",s:t.slice(1)}):s.push({t:"ctx",s:t.slice(1)}))}for(;s.length&&s[s.length-1].t==="ctx"&&s[s.length-1].s==="";)s.pop();return s}function He({diff:e}){const s=A();if(e==null)return n.jsx("figcaption",{className:"ev-note",children:s("nodeView.loadingChange")});const a=e.patch?Bs(e.patch):[];return a.length?n.jsxs(n.Fragment,{children:[n.jsx("figcaption",{className:"ev-difflabel",children:s("nodeView.diffLabel")}),n.jsx("pre",{className:"ev-diff",children:a.map((t,l)=>n.jsx("div",{className:`dl dl-${t.t}`,children:t.s||" "},l))})]}):n.jsx("figcaption",{className:"ev-note",children:s("nodeView.noChange")})}function Ue({items:e,itemKey:s,classes:a,rowClass:t,renderHeader:l,renderEvidence:i,renderAction:r,leading:c,trailing:o,resetKey:f}){const h=g.useRef(null),[p,d]=g.useState(()=>new Set([0]));g.useEffect(()=>{f!==void 0&&d(new Set([0]))},[f]);const w=g.useCallback(v=>d(u=>{const x=new Set(u);return x.has(v)?x.delete(v):x.add(v),x}),[]),m=g.useCallback(()=>d(v=>{const u=h.current;if(!u)return v;let x=-1;for(;v.has(x+1);)x++;if(x<0||x>=e.length-1)return v;const N=u.querySelector(`[data-i="${x}"]`);return!N||N.getBoundingClientRect().bottom-u.getBoundingClientRect().top>u.clientHeight+40?v:new Set(v).add(x+1)}),[e]);return g.useEffect(()=>{const v=h.current;if(!v)return;let u=v.scrollTop;const x=()=>{const S=v.scrollTop,k=S>u;u=S,k&&m()},N=S=>{S.key!=="j"&&S.key!=="ArrowDown"||v.scrollHeight-v.clientHeight-v.scrollTop>1||m()};return v.addEventListener("scroll",x,{passive:!0}),window.addEventListener("keydown",N,!0),()=>{v.removeEventListener("scroll",x),window.removeEventListener("keydown",N,!0)}},[m]),n.jsxs("div",{className:a.pane,ref:h,children:[c,e.map((v,u)=>{const x=p.has(u),N=t?t(v,u):"";return n.jsxs("div",{"data-i":u,className:`${a.row}${N?` ${N}`:""}${x?" open":""}`,children:[n.jsx("button",{className:a.head,onClick:()=>w(u),"aria-expanded":x,children:l(v,u,x)}),r==null?void 0:r(v,u),x&&n.jsx("figure",{className:a.evidence,children:i(v,u)})]},s(v,u))}),o]})}function zs({node:e,r:s,latest:a}){const t=_s(e.id,s.hash,!0);return n.jsx(He,{diff:t})}function Hs({node:e,rows:s}){const a=A();return s?s.length?n.jsx(Ue,{items:s,itemKey:t=>t.hash,classes:{pane:"pane-hist",row:"ver-row",head:"rec-toggle",evidence:"rec-evidence"},rowClass:(t,l)=>l===0?"latest":"",renderHeader:(t,l,i)=>n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"rec-head",children:[n.jsx("span",{className:"rec-caret",children:i?"▾":"▸"}),n.jsxs("span",{className:"rec-v",children:["v",s.length-l]}),n.jsx("code",{className:"rec-hash",children:t.hash.slice(0,7)}),n.jsx("span",{className:"rec-date",children:(t.date||"").slice(0,10)}),n.jsxs("span",{className:"rec-diff",children:[n.jsxs("b",{className:"rec-add",children:["+",t.additions??0]}),n.jsxs("b",{className:"rec-del",children:["−",t.deletions??0]})]})]}),n.jsx("div",{className:"rec-msg",children:t.reason}),n.jsxs("div",{className:"rec-sub",children:[a("nodeView.filesChanged",{n:t.files??0})," · ",t.session||a("common.idle")]})]}),renderEvidence:(t,l)=>n.jsx(zs,{node:e,r:t,latest:l===0})}):n.jsx("div",{className:"pane-hist empty",children:a("common.noVersions")}):n.jsx("div",{className:"pane-hist empty",children:a("nodeView.loadingHistory")})}function Us({node:e,sessions:s=[],filter:a={},onFilter:t=()=>{}}){var w,m,v,u,x;const l=A(),i=Be("issue",e.id,a),r=Ie("issues",i,1,{pollMs:0});if(r.loading)return n.jsx("div",{className:"pane-issues pane-loading",children:n.jsx("span",{className:"spinner","aria-label":l("common.loading")})});if(r.error)return n.jsx("div",{className:"pane-issues empty",children:r.error});const c=((w=r.data)==null?void 0:w.items)||[],o=(((v=(m=e.reviewSummary)==null?void 0:m.issues)==null?void 0:v.open)||0)+(((x=(u=e.reviewSummary)==null?void 0:u.issues)==null?void 0:x.closed)||0);if(!o)return n.jsx("div",{className:"pane-issues empty",children:l("nodeView.noIssues")});const f=ze(r.data,l),h=c.filter(N=>N.status==="open"),p=c.filter(N=>N.status!=="open"),d=Fe(f,t,["section","author","store","session"]);return n.jsxs("div",{className:"pane-issues",children:[o>4&&n.jsx(Te,{value:a.q||"",onChange:N=>t({q:N||null}),summary:{shown:c.length,total:r.data.total},placeholder:l("nodeView.filterIssues"),searchLabel:l("reviewList.searchIssues"),filterLabel:l("reviewList.filters"),clearLabel:l("reviewList.all"),clearSearchLabel:l("reviewList.clearSearch"),groups:d}),!c.length&&n.jsx("div",{className:"pane-filter-none",children:l("nodeView.filterNone")}),h.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"issue-group-head",children:l("nodeView.openIssues",{n:h.length})}),h.map(N=>n.jsx(ge,{issue:N},N.id))]}),p.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"issue-group-head closed",children:l("nodeView.closedIssues",{n:p.length})}),p.map(N=>n.jsx(ge,{issue:N},N.id))]}),r.data.total>c.length&&n.jsxs("a",{className:"pane-view-all",href:q(Oe("issues",i)),children:[l("reviewList.showing",{shown:c.length,total:r.data.total})," ",n.jsx(R,{name:"chevron-right",size:13})]})]})}const re=new Map;function Ws(e,s,a){const t=`${e} ${s}`,[l,i]=g.useState(()=>re.get(t)??null);return g.useEffect(()=>{if(!e||!s)return;const r=re.get(t);r&&i(r);let c=!0;return fetch(Le(`/api/edit?source=${encodeURIComponent(e)}&path=${encodeURIComponent(s)}`)).then(o=>o.json()).then(o=>{re.set(t,o),c&&i(o)}).catch(()=>c&&i(o=>o??{patch:""})),()=>{c=!1}},[e,s,a,t]),l}function Gs({node:e,ov:s}){const a=A(),t=Ws(s.source,e.path,!0);return n.jsxs("figure",{className:"edit-rev",children:[n.jsxs("figcaption",{className:"edit-by",children:[n.jsx("span",{className:`ov-mark ov-${s.op}`,children:Fs[s.op]||"•"}),n.jsx("span",{className:"edit-by-label",children:s.label}),n.jsx("span",{className:"edit-state",children:s.committed?a("nodeView.editCommitted"):a("nodeView.editDirty")})]}),n.jsx(He,{diff:t})]})}function Qs({node:e}){const s=A(),a=e.overlays||[];return a.length?n.jsx("div",{className:"pane-edit",children:a.map((t,l)=>n.jsx(Gs,{node:e,ov:t},l))}):n.jsx("div",{className:"pane-edit empty",children:s("nodeView.noEdit")})}function Ys({verdict:e}){const s=A();return e?e.status==="pass"?n.jsx("span",{className:"eval-verdict pass",children:s("nodeView.eval.pass")}):e.status==="fail"?n.jsx("span",{className:"eval-verdict fail",children:s("nodeView.eval.fail")}):n.jsx("span",{className:"eval-verdict note","data-tip":e.note,children:s("nodeView.eval.note")}):n.jsx("span",{className:"eval-verdict legacy",children:s("nodeView.eval.legacy")})}function Js({r:e}){var t;const s=A(),a=Ve(e);return n.jsxs(n.Fragment,{children:[e.expected&&n.jsxs("div",{className:"eval-expected",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.expected")})," ",e.expected]}),((t=e.verdict)==null?void 0:t.note)&&n.jsxs("div",{className:"eval-note",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.noteLabel")})," ",e.verdict.note]}),a.length>0?n.jsx("div",{className:"eval-gallery",style:{display:"flex",flexDirection:"column",gap:8},children:a.map((l,i)=>n.jsx(Pe,{e:l,alt:s("nodeView.eval.shotAlt",{scenario:e.scenario})},`${l.hash}-${i}`))}):n.jsx("figcaption",{className:"eval-noimg",children:e.blobState==="miss"?s("nodeView.eval.miss"):s("nodeView.eval.noImage")})]})}function Ne({s:e}){var a;const s=A();return n.jsxs("div",{className:"eval-row eval-declared-row",children:[n.jsxs("span",{className:"eval-top",children:[n.jsx(Ke,{state:"empty",title:s("score.missing")}),n.jsx("span",{className:"eval-scenario",children:e.name}),n.jsx(Is,{tags:e.tags}),((a=e.code)==null?void 0:a.length)>0&&n.jsx("code",{className:"eval-tracks",children:e.code.join(", ")})]}),e.expected&&n.jsxs("div",{className:"eval-expected",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.expected")})," ",e.expected]})]})}function ke({track:e}){const s=A();return n.jsxs("div",{className:"eval-row eval-dangling-row",children:[n.jsxs("span",{className:"eval-top",children:[n.jsx("span",{className:"eval-dangling-badge","data-tip":s("nodeView.eval.danglingTitle"),children:"⚠"}),n.jsx("span",{className:"eval-scenario eval-dangling-name",children:e.scenario}),n.jsx("span",{className:"eval-dangling-tag",children:s("nodeView.eval.danglingGone")})]}),n.jsx("div",{className:"eval-dangling-remarks",children:n.jsx(gn,{replies:e.remarks})})]})}function Zs({node:e,sessions:s=[],filter:a={},onFilter:t=()=>{}}){var v;const l=A(),i=Be("eval",e.id,a),r=Ie("evals",i,1,{pollMs:0,view:"timeline"});if(r.loading)return n.jsx("div",{className:"pane-eval pane-loading",children:n.jsx("span",{className:"spinner","aria-label":l("common.loading")})});if(r.error)return n.jsx("div",{className:"pane-eval empty",children:r.error});if(!((v=r.data)!=null&&v.hasEvalFile))return n.jsx("div",{className:"pane-eval empty",children:l("nodeView.eval.noScenarios")});const c=r.data.items||[],o=c.filter(u=>u.filterKind===ne.RESULT),f=c.filter(u=>u.filterKind===ne.UNMEASURED),h=c.filter(u=>u.filterKind===ne.DANGLING),p=ze(r.data,l),d=Fe(p,t,["section","review","freshness","kind","filer","session"]),w=r.data.sourceTotal>4?n.jsx(Te,{value:a.q||"",onChange:u=>t({q:u||null}),summary:{shown:c.length,total:r.data.total},placeholder:l("nodeView.filterScenarios"),searchLabel:l("reviewList.searchEvals"),filterLabel:l("reviewList.filters"),clearLabel:l("reviewList.all"),clearSearchLabel:l("reviewList.clearSearch"),groups:d},"filter"):null,m=r.data.total>c.length?n.jsxs("a",{className:"pane-view-all",href:q(Oe("evals",i)),children:[l("reviewList.showing",{shown:c.length,total:r.data.total})," ",n.jsx(R,{name:"chevron-right",size:13})]}):null;return o.length?n.jsxs(n.Fragment,{children:[n.jsx(Ue,{items:o,resetKey:`${r.data.revision}:${JSON.stringify(a)}`,leading:[w,c.length?null:n.jsx("div",{className:"pane-filter-none",children:l("nodeView.filterNone")},"none"),...f.map(u=>n.jsx(Ne,{s:u},u.name))],trailing:h.map(u=>n.jsx(ke,{track:u},u.threadId)),itemKey:(u,x)=>`${u.scenario}-${u.ts}-${x}`,classes:{pane:"pane-eval",row:"eval-row",head:"eval-head",evidence:"eval-shot"},renderAction:u=>n.jsx("a",{className:"eval-open",href:q(_e(e.id,u.scenario)),"data-tip":l("nodeView.eval.openDetail"),"aria-label":l("nodeView.eval.openDetail"),children:n.jsx(R,{name:"chevron-right",size:14})}),renderHeader:(u,x,N)=>n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"eval-top",children:[n.jsx("span",{className:"eval-caret",children:N?"▾":"▸"}),n.jsx("span",{className:"eval-scenario",children:u.scenario}),n.jsx(Ys,{verdict:u.verdict}),n.jsx(Ke,{state:qe(u),title:u.fresh?void 0:l("nodeView.eval.staleAxes",{axes:u.staleAxes.join(", ")})})]}),n.jsxs("span",{className:"eval-meta",children:[u.evaluator&&n.jsx("span",{className:"eval-evaluator",children:u.evaluator}),n.jsx("code",{className:"eval-sha",children:u.codeSha.slice(0,7)}),n.jsx("span",{className:"eval-ts",children:u.ts.replace("T"," ").slice(0,16)})]})]}),renderEvidence:u=>n.jsx(Js,{r:u})}),m]}):n.jsxs("div",{className:"pane-eval pane-eval-declared",children:[w,n.jsx("div",{className:"eval-todo-note",children:c.length?l("nodeView.eval.noReadings"):l("nodeView.filterNone")}),f.map(u=>n.jsx(Ne,{s:u},u.name)),h.map(u=>n.jsx(ke,{track:u},u.threadId)),m]})}const Xs={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"};function _n({node:e,pane:s,setPane:a,onClose:t,sessions:l=[]}){var x,N,S,k,$,b,E,I;const i=A(),[r,c]=g.useState({issues:{},eval:{}}),o=(y,D)=>c(C=>({...C,[y]:fs(C[y],D)})),f=((N=(x=e.reviewSummary)==null?void 0:x.issues)==null?void 0:N.open)||0,h=((k=(S=e.reviewSummary)==null?void 0:S.issues)==null?void 0:k.closed)||0,p=((b=($=e.reviewSummary)==null?void 0:$.evals)==null?void 0:b.pass)||0,d=((I=(E=e.reviewSummary)==null?void 0:E.evals)==null?void 0:I.fail)||0,w=(e.overlays||[]).length,m=Ts(e),v=m.some(y=>y.key===s)?s:m[0].key,u=Os(e.id,v==="history");return n.jsx("div",{className:"ov-backdrop","data-focus-overlay":!0,onMouseDown:t,children:n.jsxs("div",{className:"ov-panel",onMouseDown:y=>y.stopPropagation(),children:[n.jsxs("div",{className:"ov-head",children:[n.jsx("span",{className:"ov-title",children:e.title}),n.jsx("div",{className:"ov-tabs",children:m.map(y=>n.jsxs("button",{className:y.key===v?"ov-tab on":"ov-tab",onClick:()=>a(y.key),children:[i(Xs[y.key]),y.key==="issues"&&(f>0||h>0)&&n.jsxs("span",{className:"ov-tab-counts",children:[f>0&&n.jsx(G,{kind:"issue",state:"open",cls:"st-open",n:f,label:i("nodeView.openIssues",{n:f})}),h>0&&n.jsx(G,{kind:"issue",state:"closed",cls:"st-closed",n:h,label:i("nodeView.closedIssues",{n:h})})]}),y.key==="eval"&&(p>0||d>0)&&n.jsxs("span",{className:"ov-tab-counts",children:[p>0&&n.jsx(G,{kind:"eval",state:"pass",cls:"st-pass",n:p,label:i("nodeView.eval.passCount",{n:p})}),d>0&&n.jsx(G,{kind:"eval",state:"fail",cls:"st-fail",n:d,label:i("nodeView.eval.failCount",{n:d})})]}),y.key==="edit"&&w>0&&n.jsx("span",{className:"ov-tab-counts",children:n.jsx("span",{className:"ovc st-edit","data-tip":i("nodeView.pendingEdits",{n:w}),children:w})})]},y.key))}),n.jsx("span",{className:"ov-hint",children:i("nodeView.hint")})]}),n.jsxs("div",{className:"ov-body",children:[v==="spec"&&n.jsx("div",{className:"pane-solo",children:n.jsx(Ks,{node:e})}),v==="history"&&n.jsx(Hs,{node:e,rows:u}),v==="issues"&&n.jsx(Us,{node:e,sessions:l,filter:r.issues,onFilter:y=>o("issues",y)}),v==="eval"&&n.jsx(Zs,{node:e,sessions:l,filter:r.eval,onFilter:y=>o("eval",y)}),v==="edit"&&n.jsx(Qs,{node:e})]})]})})}const Bn=/\[\[(\.?[\p{L}\p{N}_-]+)\]\]/gu,We=e=>(e||"").replace(/^\.spec\//,"").replace(/\/spec\.md$/,"");function en(e,s,a){const t=s.toLowerCase(),l=[];for(const i of e){const r=i.id.toLowerCase(),c=We(i.path).toLowerCase();let o;if(!t)o=3;else if(r.startsWith(t))o=0;else if(r.includes(t))o=1;else if(c.includes(t))o=2;else continue;i.id===a&&(o=-1),l.push({s:i,score:o})}return l.sort((i,r)=>i.score-r.score||i.s.id.length-r.s.id.length||i.s.id.localeCompare(r.s.id)),l.slice(0,8).map(i=>i.s)}function sn(e,s){const a=s.toLowerCase(),t=r=>ls(r)||(r.id||"").slice(0,8),l=r=>{var c,o;return[r==null?void 0:r.title,r==null?void 0:r.label,(c=r==null?void 0:r.raw)==null?void 0:c.name,(o=r==null?void 0:r.raw)==null?void 0:o.title,r==null?void 0:r.activity,r==null?void 0:r.promptPreview,r==null?void 0:r.note].filter(f=>typeof f=="string"&&f.trim()).map(f=>f.toLowerCase())},i=[];for(const r of e||[]){const c=(r.id||"").toLowerCase(),o=l(r);let f;if(!a)f=3;else if(c===a||o.some(h=>h===a))f=0;else if(c.startsWith(a)||o.some(h=>h.startsWith(a)))f=1;else if(c.includes(a)||o.some(h=>h.includes(a)))f=2;else continue;i.push({s:r,score:f})}return i.sort((r,c)=>r.score-c.score||(c.s.created||0)-(r.s.created||0)),i.slice(0,8).map(r=>({id:r.s.id,label:t(r.s),sub:r.s.node||r.s.status}))}function ce(e,s){if(!s)return e;const a=e.toLowerCase().indexOf(s.toLowerCase());return a<0?e:n.jsxs(n.Fragment,{children:[e.slice(0,a),n.jsx("b",{className:"mention-hit",children:e.slice(a,a+s.length)}),e.slice(a+s.length)]})}function Ge(e,s){const a=s.toLowerCase(),t=[];for(const l of e){const i=l.name.toLowerCase();let r;if(!a)r=1;else if(i.startsWith(a))r=0;else if(i.includes(a))r=1;else continue;t.push({c:l,score:r})}return t.sort((l,i)=>l.score-i.score),t.slice(0,10).map(l=>l.c)}function zn(e,s,a){let t=s;for(;t>0&&!/\s/.test(e[t-1]);)t--;if(e[t]!=="/")return null;const l=e.slice(t+1,s),i=Ge(a,l);return i.length?{items:i,index:0,start:t,end:s,query:l}:null}const nn=e=>e&&e[0].toUpperCase()+e.slice(1),tn={user:"(user)",project:"(project)",skill:"[skill]","built-in":"built-in",ui:"[ui]",preset:"[preset]",review:"[review]"};function an({menu:e,up:s,head:a,onPick:t,onHover:l}){const i=A();return n.jsxs("ul",{className:s?"mention-menu up":"mention-menu",role:"listbox",children:[n.jsxs("li",{className:"mention-head",children:["// ",a," — ",i("session.menuHint")]}),e.items.map((r,c)=>{const o=r.ui?"ui":r.source??r.kind,f=r.ui?` sc-${r.color}`:"";return n.jsxs("li",{role:"option","aria-selected":c===e.index,className:`${c===e.index?"mention-item on":"mention-item"}${f}`,onMouseDown:h=>{h.preventDefault(),t(r)},onMouseEnter:()=>l(c),children:[n.jsxs("span",{className:r.ui?"slash-name ui":"slash-name",children:["/",ce(r.name,e.query)]}),n.jsx("span",{className:"slash-desc",children:nn(r.description??r.desc)}),n.jsx("span",{className:`slash-src src-${o}`,children:tn[o]||o})]},`${o}:${r.name}`)})]})}function ln(e,s,a,t){let l=s-1;for(;l>=0&&/[\p{L}\p{N}_.\-]/u.test(e[l]);)l--;if(l>=1&&e[l-1]==="["&&e[l]==="["){const i=e.slice(l+1,s),r=en(a,i,t);return r.length?{kind:"mention",items:r,index:0,start:l-1,end:s,query:i}:null}return null}function rn(e,s,a){let t=s-1;for(;t>=0&&/[\p{L}\p{N}_.:\-]/u.test(e[t]);)t--;if(t>=0&&e[t]==="@"&&(t===0||/\s/.test(e[t-1]))){const l=e.slice(t+1,s),i=sn(a,l);return i.length?{kind:"session",items:i,index:0,start:t,end:s,query:l}:null}return null}function cn({menu:e,up:s,fixedStyle:a,onPick:t,onHover:l}){const i=A(),r=e.kind==="session",c=e.query?r?`@${e.query}`:`[[${e.query}]]`:i(r?"session.menuSessions":"session.menuSpecNodes");return n.jsxs("ul",{className:`${s?"mention-menu up":"mention-menu"}${a?" fixed":""}`,style:a||void 0,role:"listbox",children:[n.jsxs("li",{className:"mention-head",children:["// ",c," — ",i("session.menuHint")]}),e.items.map((o,f)=>n.jsxs("li",{role:"option","aria-selected":f===e.index,className:f===e.index?"mention-item on":"mention-item",onMouseDown:h=>{h.preventDefault(),t(o)},onMouseEnter:()=>l(f),children:[!r&&n.jsx("span",{className:"mention-dot",style:{background:F[o.status]||F.offline}}),n.jsx("span",{className:"mention-id",children:r?n.jsxs(n.Fragment,{children:["@",ce(o.label,e.query)]}):ce(o.id,e.query)}),n.jsx("span",{className:"mention-path",children:r?o.sub:We(o.path)})]},o.id))]})}function on({inputRef:e,value:s,setValue:a,specs:t=[],sessions:l=[],focusId:i=null,up:r=!1,fixedAbove:c=null}){const[o,f]=g.useState(null),[h,p]=g.useState(null),d=g.useRef(null),w=k=>`${k.value}\0${k.selectionStart}`,m=k=>{var C;if(!k){f(null),p(null);return}const $=w(k);if(d.current===$){f(null),p(null);return}d.current=null;const b=k.selectionStart,E=ln(k.value,b,t,i)||rn(k.value,b,l);if(f(E),!E||!c){p(null);return}const I=k.getBoundingClientRect(),y=(C=k.closest(c))==null?void 0:C.getBoundingClientRect(),D=(y==null?void 0:y.top)??I.top;p({left:`${I.left}px`,width:`${I.width}px`,right:"auto",bottom:`${Math.max(8,window.innerHeight-D+8)}px`})},v=k=>f($=>$&&{...$,index:($.index+k+$.items.length)%$.items.length}),u=k=>{if(!k||!o)return;d.current=null;const $=s.slice(0,o.start),b=o.kind==="session"?`@${k.id} `:`[[${k.id}]] `;a($+b+s.slice(o.end)),f(null),p(null);const E=$.length+b.length;requestAnimationFrame(()=>{const I=e.current;I&&(I.focus(),I.setSelectionRange(E,E))})};return{menu:o,sync:m,onKeyDown:k=>o?k.key==="ArrowDown"?(k.preventDefault(),k.stopPropagation(),v(1),!0):k.key==="ArrowUp"?(k.preventDefault(),k.stopPropagation(),v(-1),!0):k.key==="Enter"||k.key==="Tab"?(k.preventDefault(),k.stopPropagation(),u(o.items[o.index]),!0):k.key==="Escape"?(k.preventDefault(),k.stopPropagation(),e.current&&(d.current=w(e.current)),f(null),p(null),!0):!1:!1,close:()=>{d.current=null,f(null),p(null)},menuEl:o?n.jsx(cn,{menu:o,up:r,fixedStyle:h,onPick:u,onHover:k=>f($=>$&&{...$,index:k})}):null}}function dn(e,s,a,t=null){if(!e)return;const l=e.selectionStart??e.value.length,i=e.selectionEnd??l;a(e.value.slice(0,l)+s+e.value.slice(i));const r=l+s.length;requestAnimationFrame(()=>{e.isConnected&&(e.focus(),e.setSelectionRange(r,r),t==null||t(e))})}function ie({label:e,onClick:s,disabled:a=!1,children:t}){return n.jsx("button",{type:"button",className:"fv-trigger-btn","data-tip":e,"aria-label":e,disabled:a,onMouseDown:l=>l.preventDefault(),onClick:s,children:t})}function un(e,s,a=0,t){if(!e)return;const l=t||getComputedStyle(e),i=l.boxSizing==="border-box"?(parseFloat(l.borderTopWidth)||0)+(parseFloat(l.borderBottomWidth)||0):0,r=e.placeholder;!e.value&&r&&(e.placeholder=""),e.style.height="auto";const c=e.scrollHeight+i;e.style.overflowY=c>s?"auto":"hidden",e.style.height=`${Math.min(Math.max(c,a),s)}px`,e.placeholder!==r&&(e.placeholder=r)}function fn(e){var s,a;return e.isComposing||((s=e.nativeEvent)==null?void 0:s.isComposing)||e.keyCode===229||((a=e.nativeEvent)==null?void 0:a.keyCode)===229}const hn=g.forwardRef(function({value:s,className:a="",...t},l){const i=g.useRef(null);return g.useImperativeHandle(l,()=>i.current),g.useLayoutEffect(()=>{const r=i.current;if(!r)return;const c=getComputedStyle(r);un(r,parseFloat(c.maxHeight)||1/0,parseFloat(c.minHeight)||0,c)},[s]),n.jsx("textarea",{ref:i,value:s,className:`composer-textarea ${a}`.trim(),...t})});function pn({className:e="",preview:s=null,editor:a,footer:t,...l}){return n.jsxs("div",{className:`composer-surface ${e}`.trim(),...l,children:[s,n.jsx("div",{className:"composer-editor",children:a}),n.jsx("div",{className:"composer-footer",children:t})]})}const mn=/^▶\s*(\d+):([0-5]?\d)(?:\s*·\s*([^\n]*))?/,Se=/^!\[frame\]\(\/api\/(?:evidence|yatsu\/blob)\/[0-9a-f]{64}\)\n?/,vn=/\/api\/(?:evidence|yatsu\/blob)\/([0-9a-f]{64})/g,$e=/!\[[^\]]*\]\(\/api\/(?:evidence|yatsu\/blob)\/([0-9a-f]{64})\)/g,xn=e=>{const s=Math.floor(e/1e3);return`${Math.floor(s/60)}:${String(s%60).padStart(2,"0")}`};function oe(e){var i;const s=e||"",a=s.split(`
6
- `,1)[0],t=mn.exec(a);return t?{tMs:(parseInt(t[1],10)*60+parseInt(t[2],10))*1e3,step:((i=t[3])==null?void 0:i.trim())||null,label:a.trim(),rest:s.slice(a.length).replace(/^\n/,"")}:null}const Qe=(e,s)=>`▶${xn(e)}${s?` · ${s}`:""}`,Ee=e=>[...(e||"").matchAll(vn)].map(s=>s[1]);function jn(e,s){if(!e)return null;if(e.step&&(s!=null&&s.length)){const a=s.find(t=>t.step===e.step);return a?{tMs:a.at,step:e.step,label:Qe(a.at,e.step),seekable:!0,degraded:!1}:{tMs:e.tMs,step:e.step,label:e.label,seekable:!1,degraded:!0}}return{tMs:e.tMs,step:e.step,label:e.label,seekable:!0,degraded:!1}}function Hn({originator:e,sessions:s=[],kind:a="issue",onOpenSession:t=null}){const l=A();if(!e)return null;const i=as(s,e),r=!!i,c=r?F[i.status]||F.working:F.offline,o=l(a==="eval"?"thread.originatorEval":"thread.originatorIssue",{by:e}),f=n.jsx("span",{className:"fv-originator-dot",style:{background:c},"aria-hidden":"true"});return n.jsx(gs,{text:e,tip:o,label:o,lead:f,className:`fv-originator ${r?"alive":"offline"}${r&&t?" openable":""}`,onClick:r&&t?()=>t(e):null})}function gn({replies:e,onSeek:s,selIdx:a=null,activeIdx:t=null,onSelect:l=null,events:i=null,threadId:r=null,onRemarkChange:c=null}){const o=A(),[f,h]=g.useState(null),[p,d]=g.useState(null),w=async(m,v)=>{if(!f){h(v),d(null);try{const u=await ts(m,v);u!=null&&u.ok?await(c==null?void 0:c()):d({ref:v,msg:(u==null?void 0:u.error)||`${m} failed`})}finally{h(null)}}};return e.map((m,v)=>{const u=oe(m.body),x=jn(u,i),N=u?u.rest:m.body,S=[...N.matchAll($e)].map(D=>D[1]),k=(S.length?N.replace($e,""):N).trim(),$=m.rid!==void 0,b=$?m.resolved?" remark resolved":" remark open":"",E=`fv-reply${a===v?" sel":""}${t===v?" active":""}${b}`,I=x&&x.seekable&&s?()=>l?l(v,x.tMs):s(x.tMs):null,y=$&&r?`${r}#${m.rid}`:null;return n.jsxs("div",{className:E,children:[n.jsxs("div",{className:"fv-reply-meta",children:[n.jsx("span",{className:"fv-reply-by",children:m.by}),m.at&&n.jsx("span",{className:"fv-reply-at",children:m.at}),x&&(I?n.jsx("button",{type:"button",className:"fv-anchor",onClick:I,"data-tip":"seek the clip to this moment",children:x.label}):n.jsxs("span",{className:`fv-anchor static${x.degraded?" degraded":""}`,"data-tip":x.degraded?o("thread.anchorDegraded"):void 0,children:[x.label,x.degraded?" ⚠":""]})),$&&(m.resolved?n.jsxs("span",{className:"fv-remark-state resolved","data-tip":m.resolvedBy?o("thread.resolvedBy",{by:m.resolvedBy}):o("thread.resolved"),children:["✓ ",o("thread.resolved")]}):n.jsxs("span",{className:"fv-remark-state open","data-tip":o("thread.openRemark"),children:["● ",o("thread.openRemark")]})),y&&c&&!m.resolved&&(m.by==="human"?n.jsx("button",{type:"button",className:"fv-remark-act retract",disabled:!!f,"data-tip":o("thread.retractTitle"),onClick:()=>w("retract",y),children:o("thread.retract")}):n.jsx("button",{type:"button",className:"fv-remark-act resolve",disabled:!!f,"data-tip":o("thread.resolveTitle"),onClick:()=>w("resolve",y),children:o("thread.resolve")}))]}),p&&p.ref===y&&n.jsx("div",{className:"fv-error",children:p.msg}),k&&n.jsx("div",{className:"fvd-body",children:n.jsx(J,{body:k})}),S.length>0&&n.jsx("div",{className:"fv-reply-media",children:S.map((D,C)=>n.jsx(Me,{hash:D,alt:"evidence"},`${D}-${C}`))})]},v)})}function wn(e,s,a){const t=e.lastIndexOf(`
7
- `,s-1)+1,l=/^\/(\S*)$/.exec(e.slice(t,s));if(!l)return null;const i=Ge(a,l[1]);return i.length?{items:i,index:0,start:t,end:s,query:l[1]}:null}function Un({onSend:e,specs:s=[],sessions:a=[],focusId:t=null,onDone:l,anchorNow:i=null,draft:r=null,actionsEnd:c=null,commands:o=null}){const f=A(),[h,p]=g.useState(""),[d,w]=g.useState(!1),[m,v]=g.useState(""),u=g.useRef(null),x=on({inputRef:u,value:h,setValue:p,specs:s,sessions:a,focusId:t,up:!0}),[N,S]=g.useState(null),k=j=>S(j&&(o!=null&&o.length)?wn(j.value,j.selectionStart,o):null),$=j=>{var B;if(!j||!N)return;const L=h.slice(0,N.start)+h.slice(N.end);if(S(null),j.run){p(L.trim()?L:""),j.run();return}const O=oe(L);let M="";if(O){const V=((B=Se.exec(O.rest))==null?void 0:B[0])??"";M=`${O.label}
8
- ${V}`,M.endsWith(`
9
- `)||(M+=`
10
- `)}p(M+j.prefill()),requestAnimationFrame(()=>{const V=u.current;V&&(V.focus(),V.setSelectionRange(V.value.length,V.value.length))})},b=j=>N?j.key==="ArrowDown"?(j.preventDefault(),j.stopPropagation(),S(L=>({...L,index:(L.index+1)%L.items.length})),!0):j.key==="ArrowUp"?(j.preventDefault(),j.stopPropagation(),S(L=>({...L,index:(L.index-1+L.items.length)%L.items.length})),!0):j.key==="Enter"||j.key==="Tab"?(j.preventDefault(),j.stopPropagation(),$(N.items[N.index]),!0):j.key==="Escape"?(j.preventDefault(),j.stopPropagation(),S(null),!0):!1:!1,E=Ee(h);g.useEffect(()=>{var j;if(!r){p("");return}p(r.body||""),(j=u.current)==null||j.focus()},[r==null?void 0:r.seq]);const I=async()=>{var O;const j=await(i==null?void 0:i());if(!j)return;const L=Qe(j.tMs,j.step)+(j.frame?`
11
- ![frame](/api/evidence/${j.frame})`:"");p(M=>{const B=oe(M),V=(B?B.rest:M).replace(Se,"");return V?`${L}
12
- ${V}`:`${L}
13
- `}),(O=u.current)==null||O.focus()},y=j=>dn(u.current,j,p,L=>{x.sync(L),k(L)}),D=async()=>{const j=h.trim();if(!(!j||d)){w(!0);try{const L=await e(j,Ee(j));L!=null&&L.ok?(p(""),v(""),await(l==null?void 0:l(L.outcomes||""))):v((L==null?void 0:L.error)||"reply failed")}finally{w(!1)}}},C=E.length>0?n.jsx("div",{className:"fv-frames",children:E.map(j=>n.jsx(Me,{hash:j,alt:"frame"},j))}):null,P=n.jsxs("div",{className:"fv-tawrap",children:[n.jsx(hn,{ref:u,className:"fv-textarea",rows:1,value:h,placeholder:f("session.issuesReplyPlaceholder"),disabled:d,onChange:j=>{p(j.target.value),x.sync(j.target),k(j.target)},onSelect:j=>{x.sync(j.target),k(j.target)},onBlur:()=>{x.close(),S(null)},onKeyDown:j=>{fn(j)||b(j)||x.onKeyDown(j)||j.key==="Enter"&&(j.metaKey||j.ctrlKey)&&(j.preventDefault(),D())}}),x.menuEl,N&&n.jsx(an,{menu:N,up:!0,head:N.query?`/${N.query}`:f("annotator.menuReview"),onPick:$,onHover:j=>S(L=>L&&{...L,index:j})})]}),K=n.jsxs("div",{className:"fv-actions",children:[n.jsx(ie,{label:f("thread.mentionActor"),disabled:d,onClick:()=>y("@"),children:"@"}),n.jsx(ie,{label:f("thread.mentionNode"),disabled:d,onClick:()=>y("[["),children:"[["}),(o==null?void 0:o.length)>0&&n.jsx(ie,{label:f("thread.reviewCommands"),disabled:d,onClick:()=>y("/"),children:"/"}),i&&n.jsxs("button",{type:"button",className:"fv-anchor-btn","data-tip":f("thread.anchorTitle"),onMouseDown:j=>j.preventDefault(),onClick:I,children:[n.jsx(R,{name:"clock",size:11})," ",f("thread.anchorNow")]}),m&&n.jsx("span",{className:"fv-error",children:m}),n.jsxs("div",{className:"fv-actions-end",children:[c,n.jsx(de,{icon:"send",size:14,className:"fv-send",label:f(d?"session.issuesSending":"session.issuesSend"),disabled:d||!h.trim(),onMouseDown:j=>j.preventDefault(),onClick:D})]})]});return n.jsx(pn,{className:"fv-compose",preview:C,editor:P,footer:K})}export{Is as $,fn as A,dn as B,pn as C,Rn as D,ne as E,An as F,hn as G,Ts as H,Os as I,$n as J,Ks as K,Cn as L,Bn as M,Hs as N,Hn as O,Us as P,Zs as Q,In as R,vs as S,ie as T,Qs as U,cs as V,fs as W,F as X,As as Y,Ae as Z,kn as _,fe as a,Mn as a0,Cs as a1,Ln as a2,Ke as a3,On as a4,_n as a5,Sn as a6,En as a7,an as a8,cn as a9,G as aa,ln as ab,rn as ac,zn as ad,Ge as ae,Qe as b,qe as c,Tn as d,Ve as e,gs as f,Un as g,Pn as h,Pe as i,gn as j,Vn as k,Dn as l,xn as m,Ie as n,q as o,oe as p,Kn as q,jn as r,ls as s,Rs as t,Re as u,_e as v,qn as w,J as x,Fn as y,on as z};
@@ -1 +0,0 @@
1
- const a=[{id:"nav.up",keys:["ArrowUp","k","K"],rebind:!1,desc:"legend.graph.move"},{id:"nav.down",keys:["ArrowDown","j","J"],rebind:!1,desc:"legend.graph.move"},{id:"nav.parent",keys:["ArrowLeft","h","H"],rebind:!1,desc:"legend.graph.parent"},{id:"nav.child",keys:["ArrowRight","l","L"],rebind:!1,desc:"legend.graph.child"},{id:"graph.zoomIn",keys:["+","="],rebind:!0,desc:"legend.graph.zoom"},{id:"graph.zoomOut",keys:["-","_"],rebind:!0,desc:"legend.graph.zoom"},{id:"graph.zoomReset",keys:["0"],rebind:!0,desc:"legend.graph.zoom"},{id:"graph.info",keys:["i","I","Enter"],rebind:!0,desc:"legend.graph.info"},{id:"graph.search",keys:["/"],rebind:!0,desc:"legend.graph.search"},{id:"graph.cycle",keys:["o"],rebind:!0,desc:"legend.graph.overlayCycle"},{id:"graph.cycleRev",keys:["O"],rebind:!0,desc:"legend.graph.overlayCycle"},{id:"graph.fresh",keys:["["],rebind:!0,desc:"legend.graph.fresh"},{id:"graph.evals",keys:["f"],rebind:!0,desc:"legend.graph.evals"},{id:"graph.newChild",keys:["n"],rebind:!1,desc:"legend.graph.newChild"},{id:"graph.del",keys:["d"],rebind:!1,desc:"legend.graph.del"},{id:"graph.settings",keys:[","],rebind:!0,desc:"legend.graph.settings"},{id:"graph.help",keys:["?"],rebind:!0,desc:"legend.graph.help"}],i={ArrowUp:"↑",ArrowDown:"↓",ArrowLeft:"←",ArrowRight:"→",Enter:"⏎",Escape:"esc"," ":"␣","-":"−"},l=e=>i[e]||e,s="spex.keybindings.v1",t=Object.fromEntries(a.map(e=>[e.id,e]));function g(){try{return JSON.parse(localStorage.getItem(s))||{}}catch{return{}}}let r=g();function o(e){var d;const n=r[e];return n&&n.keys||((d=t[e])==null?void 0:d.keys)||[]}function c(e){return!!r[e]}function h(e,n){return o(e).includes(n)}function p(e,n){r={...r,[e]:{...r[e],...n}},localStorage.setItem(s,JSON.stringify(r))}function y(){r={},localStorage.removeItem(s)}export{a as A,l as a,h as f,c as i,o as k,y as r,p as s};
@@ -1 +0,0 @@
1
- import{d as O}from"./index-DrVao0Ep.js";const R=1e4,v=2.5*R;function N(e,{deadMs:t=v,setTimeoutImpl:s=setTimeout,clearTimeoutImpl:n=clearTimeout}={}){let r=0;const o=()=>{r&&(n(r),r=0)};return{arm:()=>{o(),r=s(()=>{r=0,e()},t)},disarm:o}}const $=280,E=54;function J(e,t){const s={};e.forEach(o=>{var a;o.parent&&(s[a=o.parent]??(s[a]=[])).push(o.id)});const n={},r=(o,a,l)=>{n[o]={x:a*$,y:l};const i=t.has(o)?s[o]||[]:[];if(!i.length)return;const h=l-(i.length-1)/2*E;i.forEach((j,f)=>r(j,a+1,h+f*E))};return e.filter(o=>!o.parent).forEach((o,a)=>r(o.id,0,a*E)),n}const I=[150,350,600,900];async function p(e,t){const s=typeof e=="string"?O(e):e;for(let n=0;;n++)try{return await fetch(s,t)}catch(r){if(n>=I.length)throw r;await new Promise(o=>setTimeout(o,I[n]))}}let T="";const P=()=>{T=""};async function C(){const e=await p("/api/graph",{cache:"no-store",headers:T?{"If-None-Match":T}:{}});if(e.status===304)return null;if(e.status===401||e.status===403){const n=await e.json().catch(()=>null);return{authRequired:(n==null?void 0:n.reason)||"project-login"}}const t=e.headers.get("etag")||"";return{board:await e.json(),seal:()=>{T=t}}}const S=(e,...t)=>O(`/api/specs/${encodeURIComponent(e)}${t.map(s=>"/"+s).join("")}`);function x({onBoard:e,onLegacyChange:t,onStatus:s}){let n=null,r=!1,o=null,a="";const l=u=>{const{nodes:c=[],sessions:m=[],...w}=u,g=new Map([["meta",w],["nodes#order",c.map(d=>d.id)],["sess#order",m.map(d=>d.id)]]);return c.forEach(d=>g.set("node:"+d.id,d)),m.forEach(d=>g.set("sess:"+d.id,d)),g},i=u=>{const c=(m,w)=>(u.get(w)||[]).map(g=>u.get(m+g));return{...u.get("meta")||{},nodes:c("node:","nodes#order"),sessions:c("sess:","sess#order")}},h=()=>{try{n==null||n.close()}catch{}o=null,a="",y()},j=N(()=>{!n||r||(s==null||s(!1),h(),j.arm(),t==null||t())}),f=()=>j.arm(),y=()=>{if(!r){try{n=new EventSource(O("/api/graph/stream?mode=delta"))}catch{n=null;return}n.addEventListener("graph-full",u=>{f();const{to:c,graph:m}=JSON.parse(u.data);o=l(m),a=c,P(),e(m,{authoritative:!0,tag:c}),s==null||s(!0)}),n.addEventListener("graph-delta",u=>{f();const c=JSON.parse(u.data);if(!o||a!==c.from){h();return}for(const m of c.del||[])o.delete(m);for(const[m,w]of Object.entries(c.set||{}))o.set(m,w);a=c.to,P(),e(i(o),{authoritative:!1,tag:c.to}),s==null||s(!0)}),n.addEventListener("graph-changed",()=>{f(),t==null||t()}),n.addEventListener("error",()=>s==null?void 0:s(!1)),n.addEventListener("ping",f),n.addEventListener("ready",f)}};return y(),s==null||s(!1),f(),()=>{r=!0,j.disarm();try{n==null||n.close()}catch{}}}function A(e,t,s=!1){if(!(e!=null&&e.sessions))return e;const n=new Set(e.sessions.map(a=>a.id));if(s)for(const a of t.keys())n.has(a)||t.delete(a);let r=!1;const o=e.sessions.map(a=>{var f,y;const l=a.evalSummary;if(!l||!Number.isInteger(l.generation)||!l.epoch)return a;const i=t.get(a.id),h=i&&i.epoch!==l.epoch;if(!i||(h?s:l.generation>=i.generation)){const u=((f=i==null?void 0:i.projection)==null?void 0:f.phase)==="ready"&&i.projection.value?{generation:i.projection.generation,revision:i.projection.revision,value:i.projection.value}:(y=i==null?void 0:i.projection)==null?void 0:y.lastKnown,c=h&&!l.value&&!l.lastKnown&&u?{...l,lastKnown:u}:l;return t.set(a.id,{epoch:c.epoch,generation:c.generation,projection:c}),c!==l?(r=!0,{...a,evalSummary:c}):a}return r=!0,{...a,evalSummary:i.projection}});return r?{...e,sessions:o}:e}const F=e=>{var t,s;return{title:((t=e==null?void 0:e.identity)==null?void 0:t.title)||(e==null?void 0:e.project)||"",icon:((s=e==null?void 0:e.identity)==null?void 0:s.icon)||(e==null?void 0:e.projectIcon)||"spexcode"}},k=(e,...t)=>O(`/api/sessions/${encodeURIComponent(e)}${t.map(s=>"/"+s).join("")}`);async function _(e){const t=await p(k(e,"timeline"),{cache:"no-store"});return t.ok?t.json():null}async function B(e){const t=await p(k(e));return t.ok?t.json():null}async function D(e,t,{replyVia:s}={}){const n=await p(k(e,"input"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({kind:"text",text:t,...s?{replyVia:s}:{}})}),r=await n.json().catch(()=>({}));return{ok:n.ok&&(r==null?void 0:r.ok)!==!1,error:r==null?void 0:r.error}}async function G(){return(await p("/api/plugins")).json()}async function K(){return(await p("/api/plugins?surface=review")).json()}async function M(){return(await p("/api/settings")).json()}async function q(e){const t=await p(`/api/issues/${encodeURIComponent(e)}`);if(t.status===404)return!1;if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}async function X(e,t,s){return(await p(`/api/issues/${encodeURIComponent(e)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({body:t,...s!=null&&s.length?{evidence:s}:{}})})).json()}async function Y(e){return(await p(`/api/issues/${encodeURIComponent(e)}/close`,{method:"POST"})).json()}async function z(e){return(await p(`/api/issues/${encodeURIComponent(e)}/promote`,{method:"POST"})).json()}async function H(e,t){return(await p(`/api/remarks/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ref:t})})).json()}async function Q({concern:e,body:t,evidence:s,store:n}){return(await p("/api/issues",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({concern:e,body:t,store:n,...s!=null&&s.length?{evidence:s}:{}})})).json()}async function V({node:e,scenario:t,issue:s,body:n,codeSha:r,evidence:o}){return(await p("/api/remarks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({node:e,scenario:t,issue:s,body:n,...r?{codeSha:r}:{},...o!=null&&o.length?{evidence:o}:{}})})).json()}async function W(e,t){return(await p(`/api/specs/${encodeURIComponent(e)}/evals/ok`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({scenario:t})})).json()}async function Z(e){return(await p("/api/evidence",{method:"POST",headers:{"Content-Type":"image/png"},body:e})).json()}export{$ as X,E as Y,A as a,K as b,Z as c,V as d,W as e,z as f,Y as g,X as h,q as i,Q as j,J as k,C as l,p as m,S as n,H as o,F as p,N as q,M as r,x as s,_ as t,B as u,D as v,G as w};
@@ -1 +0,0 @@
1
- :root{--paper: #262626;--panel: #212121;--panel2:#363636;--line: #454545;--ink: #d1d1d1;--ink2: #ededed;--muted: #999999;--blue: #6c99bb;--green: #a8c373;--orange:#d5763f;--red: #d04255;--yellow:#e5b567;--magenta:#9e86c8;--cyan: #73bbb2;--term-bg: #212121;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--type-caption: 10px;--type-meta: 11px;--type-control: 12px;--type-body: 13px;--type-subtitle: 14px;--type-title: 16px;--type-heading: 18px;--type-icon-sm: 16px;--type-icon-lg: 24px;--type-hero: clamp(5.5px, 1.15vw, 9.5px);--type-terminal: 11px;--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--weight-black: 900;--leading-none: 1;--leading-hero: 1.06;--leading-tight: 1.25;--leading-ui: 1.4;--leading-relaxed: 1.5;--leading-body: 1.6;--line-input: 20px;--line-badge: 16px;--line-session-row: 18px;--tracking-normal: 0}:root[data-theme=things]{--paper: #ffffff;--panel: #f6f7f8;--panel2:#f0f0f0;--line: #d4d4d4;--ink: #555e68;--ink2: #252b32;--muted: #a2aab3;--blue: #2e80f2;--green: #0cb54f;--orange:#d96c00;--red: #e4374b;--yellow:#bd8e37;--magenta:#876be0;--cyan: #2db7b5;--term-bg: #0d1117}:root[data-theme=tokyonight]{--paper: #1a1b26;--panel: #16161e;--panel2:#24283b;--line: #414868;--ink: #a9b1d6;--ink2: #c0caf5;--muted: #565f89;--blue: #7aa2f7;--green: #9ece6a;--orange:#ff9e64;--red: #ff757f;--yellow:#e0af68;--magenta:#bb9af7;--cyan: #7dcfff;--term-bg: #16161e}:root[data-theme=catppuccin]{--paper: #1e1e2e;--panel: #181825;--panel2:#313244;--line: #45475a;--ink: #cdd6f4;--ink2: #b4befe;--muted: #7f849c;--blue: #89b4fa;--green: #a6e3a1;--orange:#fab387;--red: #f38ba8;--yellow:#f9e2af;--magenta:#cba6f7;--cyan: #94e2d5;--term-bg: #11111b}:root[data-theme=everforest]{--paper: #333c43;--panel: #293136;--panel2:#434f55;--line: #555f66;--ink: #d3c6aa;--ink2: #e4d9c2;--muted: #859289;--blue: #7fbbb3;--green: #a7c080;--orange:#e69875;--red: #e67e80;--yellow:#dbbc7f;--magenta:#d699b6;--cyan: #83c092;--term-bg: #293136}:root[data-theme=gruvbox]{--paper: #282828;--panel: #1d2021;--panel2:#3c3836;--line: #504945;--ink: #ebdbb2;--ink2: #fbf1c7;--muted: #928374;--blue: #83a598;--green: #b8bb26;--orange:#fe8019;--red: #fb4934;--yellow:#fabd2f;--magenta:#d3869b;--cyan: #8ec07c;--term-bg: #1d2021}:root[data-theme=rosepine]{--paper: #faf4ed;--panel: #fffaf3;--panel2:#f2e9e1;--line: #cecacd;--ink: #575279;--ink2: #46425f;--muted: #9893a5;--blue: #56949f;--green: #286983;--orange:#d7827e;--red: #b4637a;--yellow:#ea9d34;--magenta:#907aa9;--cyan: #d7827e;--term-bg: #0d1117}:root[data-theme=dracula]{--paper: #282a36;--panel: #20212b;--panel2:#44475a;--line: #44475a;--ink: #f8f8f2;--ink2: #ffffff;--muted: #6272a4;--blue: #bd93f9;--green: #50fa7b;--orange:#ffb86c;--red: #ff5555;--yellow:#f1fa8c;--magenta:#ff79c6;--cyan: #8be9fd;--term-bg: #20212b}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:var(--type-body);line-height:var(--leading-ui);letter-spacing:var(--tracking-normal);-webkit-font-smoothing:antialiased}*{scrollbar-color:var(--line) transparent;scrollbar-width:thin}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px;border:2px solid var(--panel)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}::-webkit-scrollbar-corner{background:transparent}.app{display:flex;height:100vh}.app-main{flex:1;min-width:0;display:flex;position:relative}.side-rail{flex:0 0 52px;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;background:var(--panel);border-right:1px solid var(--line)}.rail-spacer{flex:1}.rail-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:9px;cursor:pointer;color:var(--muted);text-decoration:none}.rail-btn:hover{background:var(--panel2);color:var(--ink2)}.rail-btn.on{background:color-mix(in srgb,var(--blue) 14%,transparent);color:var(--blue)}.page-pane{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:var(--paper)}.page-pane.page-graph{display:block;position:relative}.page-scroll{flex:1;min-width:0;min-height:0;box-sizing:border-box;margin:10px 14px 10px 0;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;background:var(--paper)}.page-settings-scroll{display:flex;justify-content:center}.page-detail-stack{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.settings-body{width:min(720px,94%);padding:16px 0 50px}.page-title{font-size:var(--type-heading);font-weight:var(--weight-bold);color:var(--ink2);margin:6px 2px 14px}.pane-resizer{cursor:col-resize;z-index:6;position:relative}.pane-resizer:after{content:"";position:absolute;top:0;bottom:0;left:50%;width:3px;margin-left:-1.5px;background:transparent;border-radius:2px}.pane-resizer:hover:after,body.is-resizing .pane-resizer:after{background:color-mix(in srgb,var(--blue) 55%,transparent)}.si-resizer{flex:0 0 7px;margin:0 -3.5px}body.is-resizing,body.is-resizing *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}.app.kbd-mode,.app.kbd-mode *{cursor:none!important}.app.kbd-mode .react-flow,.app.kbd-mode .react-flow *{pointer-events:none!important}.graph{position:relative;width:100%;height:100%;background:var(--paper)}.react-flow__attribution{display:none}.react-flow__edge-path{stroke-dasharray:0}.move-edge .react-flow__edge-path{stroke-linecap:round}.hud{position:absolute;top:16px;left:18px;z-index:5;display:flex;flex-direction:row;align-items:center;gap:8px;pointer-events:none}.brand{color:var(--ink2);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal)}.hud .hud-help{align-self:center}.hud-help{pointer-events:auto;align-self:flex-start;cursor:pointer;width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:var(--type-body);line-height:var(--leading-none);color:var(--blue);background:var(--paper);border:1px solid var(--line);border-radius:4px}.hud-help:hover{border-color:var(--blue);color:var(--orange)}.lock-hint{position:absolute;top:16px;left:50%;transform:translate(-50%);z-index:6;display:flex;align-items:center;gap:10px;max-width:min(48vw,520px);padding:5px 8px 5px 11px;background:var(--paper);border:1px solid var(--line);border-left:4px solid var(--ov, var(--blue));border-radius:6px;box-shadow:0 6px 22px #657b8329;font-family:var(--mono);font-size:var(--type-control);color:var(--ink)}.lock-hint-lead{font-weight:var(--weight-bold);flex:none;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lock-hint-body{color:var(--ink2);flex:1;min-width:0}.lock-hint kbd{border:1px solid var(--line);border-radius:3px;padding:0 5px;margin:0 1px;color:var(--blue);font-family:var(--mono);font-size:var(--type-meta)}.lock-hint-sep{color:var(--muted)}.lock-hint-release{flex:none;cursor:pointer;padding:1px 8px;background:var(--paper);border:1px solid var(--line);border-radius:4px;color:var(--muted);font-family:var(--mono);font-size:var(--type-meta)}.lock-hint-release:hover{border-color:var(--blue);color:var(--orange)}.graph-stats{position:absolute;bottom:14px;left:18px;z-index:5;display:flex;align-items:center;gap:5px;flex-wrap:wrap;max-width:calc(100% - 36px);padding:4px 9px;background:var(--paper);border:1px solid var(--line);border-radius:6px;box-shadow:0 4px 18px #657b831f;font-family:var(--mono);font-size:var(--type-control);color:var(--ink2)}.bstat-total{font-weight:var(--weight-bold);color:var(--ink);padding-right:1px}.bstat{display:inline-flex;align-items:center;gap:3px;padding:1px 4px;border:0;border-radius:4px;background:none;font-family:var(--mono);font-size:var(--type-control);line-height:var(--leading-ui);color:inherit;cursor:pointer}.bstat:hover:not(:disabled){background:var(--panel2);color:var(--ink)}.bstat:disabled{opacity:.38;cursor:default}.bstat-dot{width:7px;height:7px;border-radius:2px;flex:none}.bstat-drift{color:var(--yellow)}.bstat-issue{color:var(--magenta)}.bstat-sep{width:1px;align-self:stretch;margin:2px 3px;background:var(--line)}.graph-stats .score-badge{width:13px;height:13px;font-size:var(--type-caption)}.graph-stats .score-badge.empty{opacity:.6}.react-flow__node{transition:opacity .18s ease}.react-flow__node.is-far{opacity:.35}.react-flow__controls{box-shadow:none;border:1px solid var(--line);border-radius:4px;overflow:hidden}.react-flow__controls-button{background:var(--panel2);border-bottom:1px solid var(--line);color:var(--ink2)}.react-flow__controls-button:hover{background:var(--panel)}.react-flow__controls-button svg{fill:var(--ink)}.spec-node{position:relative;display:flex;flex-direction:column;justify-content:center;gap:3px;width:176px;height:50px;padding:5px 9px;background:var(--panel);border:1px solid var(--line);border-radius:4px;transition:border-color .12s}.spec-node.focused{border-color:var(--blue);outline:2px solid var(--blue);outline-offset:-1px}.spec-node.active.focused{border-color:var(--orange);outline-color:var(--orange)}.spec-node.drift.focused{border-color:var(--yellow);outline-color:var(--yellow)}.node-row1{display:flex;align-items:center;gap:7px}.node-row2{display:flex;align-items:center;gap:7px;min-height:18px}.node-dot{position:relative;width:7px;height:7px;border-radius:2px;flex:none}.pulse{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;animation:pulse 1.6s ease-out infinite}@keyframes pulse{0%{transform:scale(1);opacity:.6}to{transform:scale(2.6);opacity:0}}.node-title{font-size:var(--type-control);font-weight:var(--weight-semibold);color:var(--ink2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.node-ago{font-size:var(--type-caption);color:var(--muted);flex:none;white-space:nowrap}.node-ver{font-size:var(--type-caption);color:var(--muted);flex:none}.node-expand{position:absolute;right:-7px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:1px;font-size:var(--type-caption);font-weight:var(--weight-bold);line-height:var(--leading-none);color:var(--muted);background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:2px 4px;pointer-events:none}.spec-node.focused .node-expand{color:var(--blue);border-color:var(--blue)}.node-editors{display:flex;align-items:center;gap:3px}.av-more{font-size:var(--type-caption);font-weight:var(--weight-bold);color:var(--muted);margin-left:1px}.avatar{display:inline-flex;border-radius:50%;box-shadow:0 0 0 1.5px var(--panel)}.av-face{display:inline-flex;align-items:center;justify-content:center;line-height:var(--leading-none);font-weight:var(--weight-bold);overflow:hidden}.av-circle{border-radius:50%}.av-rounded{border-radius:5px}.av-square{border-radius:1px}.av-hex{border-radius:50%/18%;clip-path:polygon(25% 5%,75% 5%,100% 50%,75% 95%,25% 95%,0 50%)}.av-st-working{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--green)}.av-st-idle{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--muted)}.av-st-offline{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--line);opacity:.55}.react-flow .react-flow__handle{opacity:0;pointer-events:none;background:transparent;border:none;width:5px;height:5px;min-width:0;min-height:0;border-radius:1px}.side{padding:18px 18px 24px;overflow-y:auto;background:var(--panel);border-left:1px solid var(--line)}.trail{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin-bottom:16px;font-size:var(--type-meta)}.trail .sep{color:var(--muted);margin:0 3px}.crumb{background:none;border:none;padding:1px 3px;cursor:pointer;color:var(--muted);font-family:var(--mono);font-size:var(--type-meta)}.crumb:hover{color:var(--blue)}.crumb.here{color:var(--ink2);font-weight:var(--weight-bold)}.side h1{font-size:var(--type-heading);color:var(--ink2);margin:0 0 8px}.side h2{font-size:var(--type-meta);color:var(--muted);margin:24px 0 10px;font-weight:var(--weight-medium)}.side h2:first-child{margin-top:0}.stats{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:4px;overflow:hidden}.stats div{display:flex;justify-content:space-between;font-size:var(--type-control);padding:7px 10px}.stats div:nth-child(odd){background:var(--panel2)}.stats span{color:var(--muted)}.stats b{color:var(--ink2);font-weight:var(--weight-semibold)}.c-merged{color:var(--green)}.c-active{color:var(--orange)}.c-drift{color:var(--yellow)}.c-pending{color:var(--muted)}.badge{display:inline-block;font-size:var(--type-meta);padding:2px 0;border:none;background:none}.badge.merged{color:var(--green)}.badge.active{color:var(--orange)}.badge.drift{color:var(--yellow)}.badge.pending{color:var(--muted)}.desc{color:var(--ink);line-height:var(--leading-relaxed);font-size:var(--type-control);margin:12px 0 4px}.meta{margin-top:14px;display:flex;flex-direction:column;gap:0;border:1px solid var(--line);border-radius:4px;overflow:hidden}.meta div{display:flex;justify-content:space-between;font-size:var(--type-control);padding:7px 10px}.meta div:nth-child(odd){background:var(--panel2)}.meta span{color:var(--muted)}.meta b{color:var(--ink2);font-weight:var(--weight-semibold)}.peek-btn{margin-top:22px;width:100%;padding:9px;background:var(--paper);color:var(--blue);border:1px solid var(--blue);border-radius:4px;font-family:var(--mono);font-size:var(--type-body);font-weight:var(--weight-semibold);cursor:pointer}.peek-btn:hover:not(:disabled){background:var(--blue);color:var(--paper)}.peek-btn:disabled{color:var(--muted);border-color:var(--line);cursor:default}.ov-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center}.ov-panel{width:min(900px,90vw);height:min(600px,84vh);background:var(--paper);border:1px solid var(--blue);border-radius:6px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 12px 40px #657b8340}.ov-head{display:flex;align-items:center;gap:14px;padding:7px 12px;background:var(--panel2);border-bottom:1px solid var(--line)}.ov-title{font-size:var(--type-body);font-weight:var(--weight-bold);color:var(--ink2)}.ov-tabs{display:flex;gap:4px}.ov-tab{background:none;border:1px solid transparent;border-radius:4px;padding:3px 8px;cursor:pointer;color:var(--muted);font-family:var(--mono);font-size:var(--type-control)}.ov-tab:hover{color:var(--ink2)}.ov-tab.on{color:var(--ink2);border-color:var(--blue);background:var(--paper)}.ov-tab-counts{display:inline-flex;gap:3px;margin-left:5px;vertical-align:baseline}.ovc{display:inline-flex;align-items:center;gap:2px;font-family:var(--mono);font-size:var(--type-caption);font-weight:var(--weight-bold);line-height:var(--leading-relaxed);padding:0 4px;border-radius:3px;border:1px solid var(--line)}.ovc .review-state svg{width:11px;height:11px}.ovc.st-open{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.ovc.st-closed{color:var(--magenta);border-color:color-mix(in srgb,var(--magenta) 45%,transparent)}.ovc.st-pass{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.ovc.st-fail{color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,transparent)}.ovc.st-edit{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 45%,transparent)}.ov-hint{margin-left:auto;font-size:var(--type-meta);color:var(--muted)}.ov-body{flex:1;min-width:0;overflow:hidden;display:flex}.pane-doc{flex:1;padding:22px 26px;overflow:auto}.pane-doc h1{font-size:var(--type-heading);color:var(--ink2);margin:0 0 14px}.pane-doc blockquote{margin:0 0 16px;padding:8px 14px;border-left:3px solid var(--blue);background:var(--panel2);color:var(--ink);line-height:var(--leading-body);font-size:var(--type-body)}.pane-doc .doc-stat{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 16px;padding:6px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:5px}.stat-status{display:inline-flex;align-items:center;gap:5px;font-size:var(--type-meta);font-weight:var(--weight-bold);text-transform:uppercase;letter-spacing:var(--tracking-normal)}.stat-dot{width:7px;height:7px;border-radius:2px;flex:none;background:var(--muted)}.stat-status.st-merged{color:var(--green)}.stat-status.st-merged .stat-dot{background:var(--green)}.stat-status.st-active{color:var(--orange)}.stat-status.st-active .stat-dot{background:var(--orange)}.stat-status.st-drift{color:var(--yellow)}.stat-status.st-drift .stat-dot{background:var(--yellow)}.stat-status.st-pending{color:var(--muted)}.stat-status.st-pending .stat-dot{background:var(--muted)}.stat-chip{display:inline-flex;align-items:center;gap:4px;font-size:var(--type-meta);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:3px;padding:1px 6px}.stat-chip.stat-drift{color:var(--yellow);font-weight:var(--weight-bold);border-color:color-mix(in srgb,var(--yellow) 45%,transparent)}.stat-sess{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:var(--type-meta);color:var(--muted);min-width:0}.stat-sess b{color:var(--ink2);font-weight:var(--weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pane-doc .doc-gov{margin:0 0 16px}.doc-gov-h{display:block;font-size:var(--type-meta);color:var(--muted);margin-bottom:6px}.doc-gov-h b{color:var(--ink2);font-weight:var(--weight-bold)}.doc-gov-files{display:flex;flex-wrap:wrap;gap:5px}.gov-f{font-size:var(--type-meta);color:var(--blue);background:var(--panel2);border:1px solid color-mix(in srgb,var(--blue) 22%,var(--line));padding:1px 7px;border-radius:3px}.doc-gov.prose .doc-gov-h{font-style:italic}.doc-body{border-top:1px solid var(--line);padding-top:14px;font-size:var(--type-body);line-height:var(--leading-body);color:var(--ink)}.doc-body p{margin:0 0 10px}.pane-loading{display:flex;align-items:center;justify-content:center;padding:48px 0}.spinner{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--ink2);animation:si-attach-spin .7s linear infinite}.doc-body ul{margin:0 0 10px;padding-left:18px}.doc-body li{margin:2px 0}.doc-body code{font-size:var(--type-control);background:var(--panel2);color:var(--ink2);padding:0 4px;border-radius:3px}.doc-body strong{color:var(--ink2)}.doc-h{font-size:var(--type-control);color:var(--ink2);font-weight:var(--weight-bold);margin:14px 0 6px}.doc-pre{margin:0 0 10px;padding:10px 12px;background:var(--panel2);border-radius:4px;overflow-x:auto;font-size:var(--type-control);line-height:var(--leading-relaxed)}.doc-pre code{background:none;padding:0;color:var(--ink)}.doc-link{color:var(--blue)}.doc-table{width:100%;margin:0 0 12px;border-collapse:collapse;font-size:var(--type-control);display:block;overflow-x:auto}.doc-table th,.doc-table td{border:1px solid var(--line);padding:5px 9px;text-align:left;vertical-align:top}.doc-table th{background:var(--panel2);color:var(--ink2);font-weight:var(--weight-bold)}.doc-table code{white-space:nowrap}.spec-parts{display:flex;flex-direction:column;gap:14px;margin-top:14px}.spec-part{border:1px solid var(--line);border-radius:6px;border-left-width:3px;overflow:hidden}.spec-part.part-raw{border-left-color:var(--green)}.spec-part.part-expanded{border-left-color:var(--blue)}.spec-part.part-state{border-left-color:var(--orange)}.part-head{display:flex;align-items:baseline;gap:10px;padding:8px 12px;background:var(--panel2);flex-wrap:wrap}.part-title{font-size:var(--type-control);font-weight:var(--weight-bold);color:var(--ink2);text-transform:uppercase;letter-spacing:var(--tracking-normal)}.part-owner{font-size:var(--type-caption);font-weight:var(--weight-bold);padding:1px 7px;border-radius:9px;text-transform:uppercase;letter-spacing:var(--tracking-normal)}.part-owner.owner-human{background:#8599002e;color:var(--green)}.part-owner.owner-agent{background:#268bd22e;color:var(--blue)}.part-note{font-size:var(--type-meta);color:var(--muted);margin-left:auto}.part-body{padding:4px 14px 12px}.part-body .doc-body{border-top:none;padding-top:8px}.cs-sub+.cs-sub{margin-top:6px}.cs-label{font-size:var(--type-meta);font-weight:var(--weight-bold);color:var(--orange);text-transform:uppercase;letter-spacing:var(--tracking-normal);margin:12px 0 0}.ver-row{padding:10px 0;border-bottom:1px solid var(--line)}.ver-row.latest{border-left:2px solid var(--blue);padding-left:12px;margin-left:-14px}.rec-toggle{display:block;width:100%;text-align:left;background:none;border:0;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit}.rec-caret{color:var(--muted);font-size:var(--type-caption);width:9px;flex:none}.rec-head{display:flex;align-items:baseline;gap:10px;font-size:var(--type-control)}.rec-v{color:var(--ink2);font-weight:var(--weight-bold)}.rec-hash{color:var(--muted);font-size:var(--type-meta)}.rec-date{color:var(--muted)}.rec-diff{margin-left:auto;display:flex;gap:8px;font-size:var(--type-control)}.rec-add{color:var(--green)}.rec-del{color:var(--orange)}.rec-msg{color:var(--ink2);font-size:var(--type-body);margin-top:5px;word-break:break-word}.rec-sub{color:var(--muted);font-size:var(--type-meta);margin-top:3px}.rec-msg.muted{color:var(--muted)}.rec-evidence{margin:12px 0 2px;padding:14px 0 0;border-top:1px solid var(--line)}.ev-note{font-size:var(--type-meta);color:var(--muted);text-align:center;margin-top:12px}.ev-difflabel{font-size:var(--type-meta);color:var(--muted);margin-bottom:8px}.ev-diff{margin:0;font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-relaxed);background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:8px 0;overflow-x:auto}.ev-diff .dl{padding:0 12px;white-space:pre}.dl-hunk{color:var(--blue);opacity:.75}.dl-add{color:var(--green);background:#8599001a}.dl-del{color:var(--orange);background:#cb4b161a}.dl-ctx{color:var(--muted)}.pane-hist{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-hist.empty{color:var(--muted);font-size:var(--type-body)}.pane-solo{flex:1;min-width:0;display:flex}.spec-node.has-overlay{border-color:var(--ov);box-shadow:0 0 0 2px color-mix(in srgb,var(--ov) 22%,transparent)}.spec-node.has-overlay.ov-dirty{border-style:dashed}.spec-node.has-overlay.focused{outline-color:var(--ov)}.spec-node.ghost{background:transparent;border-style:dashed;opacity:.72}.spec-node.deleted .node-title{text-decoration:line-through;color:var(--muted)}.drift-badge{flex:none;font-size:var(--type-caption);font-weight:var(--weight-bold);color:var(--yellow);border:1px solid var(--yellow);border-radius:3px;padding:0 3px;line-height:var(--leading-ui)}.issue-badge{flex:none;font-size:var(--type-caption);font-weight:var(--weight-bold);color:var(--magenta);border:1px solid var(--magenta);border-radius:3px;padding:0 3px;line-height:var(--leading-ui);cursor:default}.score-badge{flex:none;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;line-height:var(--leading-none);cursor:default}.score-badge.pass{color:var(--green)}.score-badge.fail{color:var(--red)}.score-badge.stalePass,.score-badge.staleFail{color:var(--muted)}.score-badge.empty{color:var(--muted);opacity:.45}.scenario-count{flex:none;display:inline-flex;align-items:center;gap:2px;font-family:var(--mono);font-size:var(--type-caption);font-weight:var(--weight-bold);line-height:var(--leading-ui);border:1px solid currentColor;border-radius:3px;padding:0 3px;cursor:default}.scenario-count.pass{color:var(--green)}.scenario-count.fail{color:var(--red)}.scenario-count.stalePass,.scenario-count.staleFail{color:var(--muted)}.scenario-count.empty{color:var(--muted);opacity:.7}a.scenario-count{text-decoration:none;cursor:pointer}a.scenario-count:hover{background:var(--panel2)}.tag-chips{display:inline-flex;flex-wrap:wrap;gap:3px;min-width:0}.tag-chip{font-family:var(--mono);font-size:var(--type-caption);line-height:var(--leading-relaxed);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:3px;padding:0 4px;white-space:nowrap}.search-item .tag-chips{flex:none}.issue-card{display:block;max-width:100%;min-width:0;box-sizing:border-box;overflow:hidden;padding:5px 6px;border-radius:5px;text-decoration:none}.issue-card+.issue-card{margin-top:2px}.issue-card:hover{background:var(--panel2)}.issue-card-top{display:flex;align-items:center;gap:6px;min-width:0;margin-bottom:2px}.issue-num{font-size:var(--type-caption);font-weight:var(--weight-bold);color:var(--magenta);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.issue-card-state{gap:3px}.issue-card-state .review-state-label{font-size:var(--type-caption);text-transform:uppercase}.issue-card-title{display:block;font-size:var(--type-meta);line-height:var(--leading-ui);color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pane-issues{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-issues.empty{color:var(--muted);font-size:var(--type-body)}.pane-issues .issue-group-head{font-size:var(--type-caption);font-weight:var(--weight-bold);text-transform:uppercase;letter-spacing:var(--tracking-normal);color:var(--muted);margin:0 2px 6px}.pane-issues .issue-group-head.closed{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}.pane-issues .issue-card{padding:7px 8px}.pane-issues .issue-card+.issue-card{margin-top:1px}.pane-issues .issue-card-title{font-size:var(--type-control)}.pane-edit{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-edit.empty{color:var(--muted);font-size:var(--type-body)}.edit-rev{margin:0 0 18px}.edit-by{display:flex;align-items:center;gap:8px;font-size:var(--type-meta);color:var(--muted);margin-bottom:8px}.edit-by-label{font-weight:var(--weight-semibold)}.edit-state{margin-left:auto;font-family:var(--mono);font-size:var(--type-caption)}.ov-marks{display:flex;gap:3px;flex:none;margin-left:2px}.ov-mark{font-size:var(--type-meta);font-weight:var(--weight-bold);line-height:var(--leading-none);color:var(--ov, var(--blue))}.ov-mark.ov-deleted{color:var(--orange)}.react-flow__node.ov-hot{opacity:1}.react-flow__node.ov-dim{opacity:.22}.sesswin{position:absolute;top:48px;left:16px;z-index:6;width:232px;max-height:min(80vh,calc(100vh - 112px));background:var(--paper);border:1px solid var(--line);border-radius:6px;box-shadow:0 6px 22px #657b8329;overflow-y:auto;overflow-x:hidden;font-size:var(--type-control)}.sesswin-empty{padding:12px 10px;color:var(--muted);font-size:var(--type-meta);line-height:var(--leading-relaxed)}.sesswin-empty kbd{border:1px solid var(--line);border-radius:3px;padding:0 4px;color:var(--blue)}.sess-row{display:flex;flex-wrap:wrap;align-items:center;column-gap:7px;row-gap:2px;width:100%;padding:7px 9px;background:none;border:none;border-bottom:1px solid var(--line);border-left:2px solid var(--ov, transparent);cursor:pointer;text-align:left;font-family:var(--mono);font-size:var(--type-control);color:var(--ink2);-webkit-user-select:none;user-select:none;transition:background .12s,border-left-width .12s}.sess-tree-row:last-child>.sess-row{border-bottom:none}.sess-row:hover{background:var(--panel)}.sess-row.locked{background:color-mix(in srgb,var(--ov) 12%,var(--panel2));border-left-width:4px;color:var(--ink);font-weight:var(--weight-semibold)}.sess-id{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sess-lock{font-size:var(--type-caption);flex:none;line-height:var(--leading-none);filter:saturate(0)}.sess-meta{order:1;flex:0 0 100%;width:100%;min-width:0;margin-top:1px;display:flex;align-items:center;column-gap:7px;font-size:var(--type-caption);line-height:var(--leading-tight);opacity:.9;overflow:hidden}.sess-ops{color:var(--ov, var(--blue));font-weight:var(--weight-bold);flex:none}.sess-glyph{flex:none;width:12px;text-align:center;font-size:var(--type-meta);line-height:var(--leading-none)}.sess-tree-row{position:relative;--sess-fold-indent: 0px;--sess-fold-pad-x: 0px}.sess-lead{flex:none;align-self:stretch;display:inline-flex;align-items:stretch;--rail: color-mix(in srgb, var(--muted) 42%, transparent)}.sess-rail{flex:none;width:14px;position:relative;min-height:1.7em}.sess-rail.rail:before,.sess-rail.tee:before,.sess-rail.elbow:before{content:"";position:absolute;left:50%;top:0;bottom:0;border-left:1px solid var(--rail)}.sess-rail.elbow:before{bottom:50%}.sess-rail.tee:after,.sess-rail.elbow:after{content:"";position:absolute;left:50%;right:1px;top:50%;border-top:1px solid var(--rail)}.sess-fold{flex:none;display:inline-flex;align-items:center;justify-content:center;align-self:center;cursor:pointer;-webkit-user-select:none;user-select:none}.sess-fold.pod{min-width:16px;width:auto;height:14px;padding:0 4px;border-radius:999px;border:1px solid;font-family:inherit;font-size:var(--type-caption);font-weight:var(--weight-bold);line-height:var(--leading-none);color:var(--paper)}.sess-fold.pod.open{background:transparent}.sess-fold.pod:hover{filter:brightness(1.25)}.sess-fold-slot{visibility:hidden;pointer-events:none}.sess-fold-control{position:absolute;z-index:2;left:calc(var(--sess-fold-pad-x) + var(--sess-fold-indent));top:50%;transform:translateY(-50%);margin:0}.sesswin-tree-row{--sess-fold-pad-x: 9px}.sesswin .sess-row{flex-wrap:nowrap}.sesswin .sess-meta{flex:none;width:auto;min-width:0;margin-top:0;margin-left:auto}.sesswin-zone{--zh: var(--muted);display:flex;align-items:center;gap:7px;padding:8px 9px 2px;font-size:var(--type-caption);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal);text-transform:uppercase;-webkit-user-select:none;user-select:none;color:var(--zh)}.sesswin-zone:after{content:"";flex:1;height:1px;background:var(--zh);opacity:.25}.sesswin-zone-need{--zh: var(--yellow)}.sesswin-zone-run{--zh: var(--green)}.sesswin-zone-offline{--zh: var(--muted)}.sess-menu{position:fixed;z-index:60;min-width:190px;max-width:min(260px,calc(100vw - 16px));background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 8px 24px color-mix(in srgb,var(--ink) 18%,transparent);overflow:hidden;padding:4px;color:var(--ink)}.sess-menu-group{display:grid;gap:1px}.sess-menu-item{display:grid;grid-template-columns:17px minmax(0,1fr);align-items:center;gap:7px;width:100%;min-height:28px;text-align:left;background:none;border:none;border-radius:4px;padding:4px 7px;cursor:pointer;font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-tight);color:var(--ink)}.sess-menu-icon{width:17px;height:16px;display:inline-flex;align-items:center;justify-content:center;color:var(--muted)}.sess-menu-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sess-menu-item:hover,.sess-menu-item:focus{outline:none;background:var(--panel2);color:var(--ink2)}.sess-menu-item:hover .sess-menu-icon,.sess-menu-item:focus .sess-menu-icon{color:currentColor}.sess-menu-item.danger,.sess-menu-item.danger .sess-menu-icon{color:var(--orange)}.sess-menu-item.danger:hover,.sess-menu-item.danger:focus{background:color-mix(in srgb,var(--orange) 14%,var(--panel));color:var(--orange)}.sess-menu-sep{height:1px;margin:4px 6px;background:var(--line)}.sess-menu-item.sess-menu-sess .sess-glyph{width:11px;line-height:var(--leading-none)}.sess-rename-modal{width:min(360px,92vw)}.sess-rename{display:flex;flex-direction:column;gap:10px;padding:4px 2px 2px}.sess-rename>label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-family:var(--mono);font-size:var(--type-meta)}.sess-rename-input{font-family:var(--mono);font-size:var(--type-body);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:7px 9px}.sess-rename-input:focus{outline:none;border-color:var(--blue)}.sess-rename-actions{display:flex;justify-content:flex-end;gap:8px}.sess-rename-btn{background:var(--paper);border:1px solid var(--line);color:var(--ink);border-radius:4px;padding:4px 12px;cursor:pointer;font-family:var(--mono);font-size:var(--type-control)}.sess-rename-btn:hover{background:var(--panel)}.sess-rename-save{border-color:var(--blue);color:var(--blue)}.sess-rename-save:hover{background:var(--blue);color:var(--paper)}.sess-rename-save:disabled{opacity:.5;cursor:default}.sess-attach-modal{width:min(460px,94vw)}.sess-attach{display:flex;flex-direction:column;gap:8px;padding:4px 2px 2px}.sess-attach-row{display:flex;align-items:center;gap:8px}.sess-attach-label{flex:none;width:34px;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted);text-align:right}.sess-attach-cmd{flex:1;min-width:0;font-family:var(--mono);font-size:var(--type-control);color:var(--ink2);background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:7px 9px}.sess-attach-cmd:focus{outline:none;border-color:var(--blue)}.sess-attach-copy{flex:none}.sess-confirm{display:flex;flex-direction:column;gap:12px;padding:4px 2px 2px}.sess-confirm-msg{margin:0;color:var(--ink);font-size:var(--type-control);line-height:var(--leading-ui)}.sess-rename-btn.danger{border-color:var(--orange);color:var(--orange)}.sess-rename-btn.danger:hover{background:var(--orange);color:var(--paper)}.sess-rename-btn.danger:disabled{opacity:.5;cursor:default}.legend-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center}.legend{position:relative;width:min(660px,92vw);max-height:86vh;overflow-y:auto;background:var(--paper);border:1px solid var(--blue);border-radius:6px;box-shadow:0 12px 40px #657b8340;font-size:var(--type-control)}.legend-head{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:6px 9px;background:var(--panel2);border-bottom:1px solid var(--line)}.legend-title{color:var(--muted);font-size:var(--type-meta);letter-spacing:var(--tracking-normal)}.legend-close{background:none;border:none;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;line-height:var(--leading-none);padding:2px}.legend-close:hover{color:var(--orange)}.legend-body{padding:4px 10px 10px}.legend-sec{padding:8px 0;border-bottom:1px solid var(--line)}.legend-sec:last-child{border-bottom:none}.legend-h{font-size:var(--type-meta);color:var(--ink2);font-weight:var(--weight-bold);margin-bottom:6px}.legend-sub{color:var(--muted);font-weight:var(--weight-regular)}.keymap-keys{flex:none;width:132px;display:flex;flex-wrap:wrap;gap:4px}.legend kbd,.settings-body kbd{font-family:var(--mono);font-size:var(--type-meta);color:var(--blue);line-height:var(--leading-ui);border:1px solid var(--line);border-radius:3px;padding:0 4px;background:var(--paper)}.legend-row{display:flex;align-items:baseline;gap:8px;padding:3px 0}.legend-row .node-dot{position:relative;top:1px}.legend-name{color:var(--ink2);font-weight:var(--weight-semibold);flex:none;width:52px}.legend-desc{color:var(--ink);flex:1;line-height:var(--leading-ui)}.legend-glyph{color:var(--blue);font-weight:var(--weight-bold);flex:none;width:18px;text-align:center}.legend-glyph.legend-ver{font-size:var(--type-meta);color:var(--muted)}.legend .ov-mark{flex:none;width:18px;text-align:center}.legend .drift-badge{flex:none}.legend-ring{flex:none;width:22px;height:14px;border-radius:3px;background:var(--panel)}.legend-ring.ring-dashed{border:1px dashed var(--blue)}.legend-ring.ring-solid{border:1px solid var(--blue)}.legend-ring.ring-ghost{border:1px dashed var(--line);background:transparent;opacity:.72}.set-langs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.set-lang{font-family:var(--mono);font-size:var(--type-control);color:var(--ink);cursor:pointer;border:1px solid var(--line);border-radius:4px;padding:4px 12px;background:var(--paper)}.set-lang:hover{border-color:var(--blue);color:var(--blue)}.set-lang.on{border-color:var(--blue);color:var(--blue);background:var(--panel2);font-weight:var(--weight-semibold)}.set-hint{display:block;color:var(--muted);font-size:var(--type-meta);line-height:var(--leading-ui)}.set-terminal-font{display:grid;grid-template-columns:90px minmax(120px,320px) 48px;align-items:center;gap:12px;color:var(--ink);font-size:var(--type-control)}.set-terminal-font input{width:100%;accent-color:var(--blue)}.set-terminal-font output{color:var(--blue);font-family:var(--mono);text-align:right}.set-keys{display:flex;flex-direction:column;gap:2px;margin:2px 0 8px}.set-key-row{display:flex;align-items:center;gap:8px;padding:2px 0}.set-key-row .legend-desc{flex:1;font-size:var(--type-control)}.bind-cell{flex:none;min-width:92px;min-height:24px;display:flex;flex-wrap:wrap;align-items:center;gap:4px;justify-content:center;cursor:pointer;background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:2px 6px}.bind-cell:hover:not(.fixed){border-color:var(--blue)}.bind-cell.capturing{border-color:var(--blue);border-style:dashed;background:var(--panel2)}.bind-cell.custom{border-color:var(--blue)}.bind-cell.fixed{cursor:default;opacity:.6}.bind-cell kbd{border:none;padding:0 2px;background:transparent}.bind-hint{font-size:var(--type-meta);color:var(--blue)}.set-foot{display:flex;align-items:center;justify-content:space-between;gap:12px}.set-reset{flex:none;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted);cursor:pointer;border:1px solid var(--line);border-radius:4px;padding:3px 10px;background:var(--paper)}.set-reset:hover{border-color:var(--red);color:var(--red)}.search-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding-top:12vh}.search-panel{width:min(92vw,clamp(640px,50vw,1100px));max-height:72vh;display:flex;flex-direction:column;overflow:hidden;background:var(--paper);border:1px solid var(--blue);border-radius:6px;box-shadow:0 14px 44px #657b8347;font-size:var(--type-control)}.search-bar{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--panel2)}.search-icon{color:var(--muted);font-size:var(--type-icon-sm);flex:none}.search-input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ink2);font-family:var(--mono);font-size:var(--type-subtitle);line-height:var(--leading-ui)}.search-input::placeholder{color:var(--muted)}.search-results{margin:0;padding:4px;list-style:none;overflow-y:auto;overflow-x:hidden}.search-empty{padding:8px 10px;color:var(--muted)}.search-item{display:flex;align-items:baseline;gap:8px;padding:5px 8px;border-radius:3px;cursor:pointer;white-space:nowrap}.search-item.on{background:var(--panel2)}.search-item .node-dot{position:relative;top:1px}.search-kind{flex:none;font-size:var(--type-caption);line-height:var(--leading-none);letter-spacing:var(--tracking-normal);text-transform:uppercase;padding:2px 4px;border-radius:3px;border:1px solid var(--line);color:var(--muted);position:relative;top:-1px}.search-kind.k-spec{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 40%,var(--line))}.search-kind.k-session{color:var(--orange);border-color:color-mix(in srgb,var(--orange) 40%,var(--line))}.search-kind.k-issue{color:var(--green);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.search-kind.k-scenario{color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,var(--line))}.search-title{color:var(--ink2);font-weight:var(--weight-semibold);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.search-path{color:var(--muted);font-size:var(--type-meta);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.search-foot{padding:6px 12px;border-top:1px solid var(--line);background:var(--panel);color:var(--muted);font-size:var(--type-meta)}.si-page{flex:1;min-width:0;min-height:0;display:flex}.si-panel{flex:1;min-width:0;background:var(--paper);border:none;border-radius:0;overflow:clip;display:flex}.si-list{flex:0 0 204px;border-right:1px solid var(--line);background:var(--panel);max-width:calc(100% - 280px);display:flex;flex-direction:column;overflow-y:auto}.si-item{display:flex;flex-wrap:wrap;align-items:center;column-gap:7px;row-gap:2px;width:100%;padding:9px 12px;background:none;border:none;border-bottom:1px solid var(--line);border-left:2px solid var(--ov, transparent);cursor:pointer;text-align:left;font-family:var(--mono);font-size:var(--type-control);color:var(--ink2)}.si-item:hover{background:var(--panel2)}.si-item.on{background:color-mix(in srgb,var(--blue) 15%,var(--panel2));color:var(--ink2);font-weight:var(--weight-semibold);border-left-width:3px}.si-item.on:hover{background:color-mix(in srgb,var(--blue) 24%,var(--panel2))}.si-item.on:before{content:"❯";flex:none;color:var(--green);font-weight:var(--weight-bold)}.si-item{flex-wrap:nowrap;padding:5px 12px;font-size:var(--type-caption);line-height:var(--line-session-row)}.si-item .sess-rail{min-height:var(--line-session-row)}.si-item.on:before{content:none}.si-item .sess-meta{flex:none;width:auto;min-width:0;margin-top:0;margin-left:auto;opacity:1;overflow:visible}.si-item .sess-lock{color:var(--muted)}.si-item.on{display:block}.si-item.on .sess-lead{float:left;margin-right:7px}.si-item.on .sess-meta{float:right;margin:0 0 0 8px}.si-item.on .sess-id{display:block;max-height:3lh;white-space:normal;overflow:clip;overflow-wrap:anywhere}.si-tree-row{--sess-fold-pad-x: 12px}.si-item.on+.sess-fold-control{top:7px;transform:none}.si-zone{--zh: var(--muted);display:flex;align-items:center;gap:8px;padding:10px 12px 4px;font-size:var(--type-caption);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal);text-transform:uppercase;-webkit-user-select:none;user-select:none;color:var(--zh)}.si-zone:after{content:"";flex:1;height:1px;background:var(--zh);opacity:.25}.si-zone-fold{width:100%;text-align:left}.si-zone-count{flex:none;padding:0 6px;border:1px solid currentColor;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font:inherit;font-size:var(--type-caption);line-height:var(--line-badge);opacity:.8}.si-zone-count:hover{color:var(--ink);opacity:1}.si-zone-label{flex:none}.si-zone-need{--zh: var(--yellow)}.si-zone-run{--zh: var(--green)}.si-zone-offline{--zh: var(--muted)}.si-toprow{display:flex;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line)}.si-pill.shelf{color:var(--ink2);gap:5px}.si-pill.shelf:hover{color:var(--yellow)}.si-pill.shelf.on{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 16%,var(--panel2));border-color:var(--yellow)}.si-empty{padding:18px 12px;text-align:center;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted)}.si-selbar{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line)}.si-selcount{flex:1;font-family:var(--mono);font-size:var(--type-meta);color:var(--ink2)}.si-selbar .sess-rename-btn{padding:4px 10px;font-size:var(--type-meta)}.si-check{flex:none;width:13px;height:13px;border:1.5px solid var(--muted);border-radius:3px;box-sizing:border-box}.si-check.on{border-color:var(--blue);background:var(--blue);position:relative}.si-check.on:after{content:"";position:absolute;left:3.5px;top:1px;width:3px;height:6px;border:solid var(--paper);border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}.si-item:has(>.si-check)+.sess-fold-control{margin-left:20px}.si-item.picked{background:color-mix(in srgb,var(--blue) 12%,var(--panel2))}.si-item.picked:hover{background:color-mix(in srgb,var(--blue) 20%,var(--panel2))}.si-pill{flex:1;display:flex;align-items:center;justify-content:center;padding:7px 0;background:none;border:1px solid var(--line);border-radius:5px;cursor:pointer;font-family:var(--mono);line-height:var(--leading-none)}.si-pill-glyph{font-size:var(--type-icon-sm);display:flex}.si-pill.new{color:var(--blue)}.si-pill:hover{background:var(--panel2);border-color:currentColor}.si-pill.new.on{background:color-mix(in srgb,var(--blue) 16%,var(--panel2));border-color:var(--blue)}.si-pill.search{color:var(--ink2)}.si-pill.search:hover{color:var(--blue)}.si-pill.forum{color:var(--ink2)}.si-pill.forum:hover{color:var(--blue)}.si-pill.forum.on{color:var(--blue);background:color-mix(in srgb,var(--blue) 16%,var(--panel2));border-color:var(--blue)}.lp-page{display:flex;flex-direction:column;background:var(--paper)}.rl-content{width:min(1136px,calc(100% - 32px));min-width:0;margin:0 auto;padding:16px 0 24px}.rl-titlebar{height:32px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.rl-titlebar h1{min-width:0;margin:0;color:var(--ink);font-size:var(--type-title);font-weight:var(--weight-bold);line-height:var(--leading-ui)}.rl-new{margin-left:auto;height:32px;display:inline-flex;align-items:center;gap:6px;padding:0 12px;color:var(--paper);background:var(--green);border:1px solid color-mix(in srgb,var(--green) 75%,var(--line));border-radius:6px;font-family:var(--mono);font-size:var(--type-control);font-weight:var(--weight-semibold);text-decoration:none;cursor:pointer}.rl-new:hover{background:color-mix(in srgb,var(--green) 82%,var(--ink))}.rl-query{height:32px;position:relative;display:flex;align-items:stretch;margin-bottom:16px;background:var(--paper);border:1px solid var(--line);border-radius:6px}.rl-query:focus-within{border-color:var(--blue);box-shadow:0 0 0 2px color-mix(in srgb,var(--blue) 15%,transparent)}.rq-wrap{position:relative;flex:1;min-width:0}.rl-query input{width:100%;height:100%;position:relative;padding:0 12px;color:transparent;caret-color:var(--ink);background:transparent;border:0;outline:0;font-family:var(--mono);font-size:var(--type-control)}.rl-query input::placeholder{color:var(--muted)}.rl-query input::selection{color:transparent;background:color-mix(in srgb,var(--blue) 28%,transparent)}.rq-hl{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;padding:0 12px;overflow:hidden;color:var(--ink);font-family:var(--mono);font-size:var(--type-control);white-space:pre;pointer-events:none}.rq-hl>span{flex:none;white-space:pre}.rq-tok-key{color:var(--muted)}.rq-tok-val{color:var(--blue)}.rl-menu.rq-list{left:0;right:36px;width:auto}.rq-opt{min-height:32px;display:flex;align-items:center;gap:8px;padding:5px 9px;border-radius:4px;color:var(--ink2);font-family:var(--mono);font-size:var(--type-control);cursor:pointer}.rq-opt.active,.rq-opt:hover{color:var(--ink);background:var(--panel2)}.rq-opt-token{color:var(--blue)}.rq-opt-label{min-width:0;overflow:hidden;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}.rl-query-submit{width:36px;flex:none;display:grid;place-items:center;color:var(--muted);background:var(--panel2);border:0;border-left:1px solid var(--line);border-radius:0 5px 5px 0;cursor:pointer}.rl-query-submit:hover{color:var(--ink)}.rl-list{position:relative;min-width:0;background:var(--paper);border:1px solid var(--line);border-radius:6px}.lp-head{position:sticky;top:0;z-index:5;height:48px;box-sizing:border-box;display:flex;align-items:center;padding:0 8px;background:var(--panel2);border-bottom:1px solid var(--line);border-radius:6px 6px 0 0}.rl-sections,.rl-facets{display:flex;align-items:center;min-width:0}.rl-sections{align-self:stretch;flex:none}.rl-section{align-self:stretch;display:inline-flex;align-items:center;gap:7px;padding:0 9px;color:var(--ink2);background:transparent;border:0;font-family:var(--mono);font-size:var(--type-control);cursor:pointer}.rl-section.active{color:var(--ink);font-weight:var(--weight-bold)}.rl-section:hover{color:var(--ink)}.rl-section-count,.rl-menu-count{display:inline-flex;min-width:18px;height:18px;box-sizing:border-box;align-items:center;justify-content:center;padding:0 5px;color:var(--ink2);background:color-mix(in srgb,var(--line) 65%,transparent);border-radius:9px;font-size:var(--type-caption)}.rl-section-suffix{margin-left:-2px;color:var(--ink2);opacity:.72;font-size:var(--type-caption);white-space:nowrap}.rl-section-suffix-compact{display:none}.rl-facets{margin-left:auto;justify-content:flex-end}.rl-facet-wrap,.rl-secondary-filters{position:relative;flex:none}.rl-facet{max-width:190px;height:32px;display:inline-flex;align-items:center;gap:6px;padding:0 10px;color:var(--muted);background:transparent;border:0;font-family:var(--mono);font-size:var(--type-control);cursor:pointer}.rl-facet span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rl-facet-label-mobile{display:none}.rl-facet:hover,.rl-facet.active{color:var(--ink)}.rl-secondary-filters-trigger{width:auto;height:32px;display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:0 6px;color:var(--muted);background:transparent;border:0;border-radius:5px;cursor:pointer;font-family:var(--mono);font-size:var(--type-control);white-space:nowrap}.rl-secondary-filters-trigger.compact{width:32px;padding:0}.rl-secondary-filter-count{display:inline-flex;min-width:16px;height:16px;box-sizing:border-box;align-items:center;justify-content:center;padding:0 4px;color:var(--ink2);background:color-mix(in srgb,var(--line) 65%,transparent);border-radius:8px;font-size:var(--type-caption)}.rl-secondary-filter-count.for-mobile{display:none}.rl-secondary-filters-trigger:hover,.rl-secondary-filters.active-desktop .rl-secondary-filters-trigger{color:var(--ink);background:color-mix(in srgb,var(--line) 45%,transparent)}.rl-section:focus-visible,.rl-facet:focus-visible,.rl-secondary-filters-trigger:focus-visible,.rl-menu-item:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}.rl-secondary-filters.mobile-only,.rl-menu-group.mobile-only{display:none}.rl-menu{position:absolute;top:calc(100% + 4px);right:0;z-index:20;width:230px;max-height:min(420px,70vh);overflow-y:auto;padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 10px 30px color-mix(in srgb,var(--ink) 20%,transparent)}.rl-menu-item{width:100%;min-width:0;min-height:32px;display:grid;grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:7px;padding:5px 7px;color:var(--ink2);background:transparent;border:0;border-radius:4px;text-align:left;font-family:var(--mono);font-size:var(--type-control);cursor:pointer}.rl-menu-item:hover{color:var(--ink);background:var(--panel2)}.rl-menu-item>span:nth-child(2){overflow-wrap:anywhere}.rl-menu-item[aria-checked=true]{color:var(--ink);font-weight:var(--weight-semibold)}.rl-menu-label{padding:5px 7px 3px;color:var(--muted);font-size:var(--type-caption);font-weight:var(--weight-bold);text-transform:uppercase}.rl-menu-group+.rl-menu-group{margin-top:5px;padding-top:5px;border-top:1px solid var(--line)}.lp-rows{display:flex;flex-direction:column}.lp-empty{min-height:170px;display:grid;place-items:center;padding:24px;color:var(--muted);font-family:var(--mono);font-size:var(--type-control);text-align:center}.lp-error{margin:0 0 10px}.rl-pagination{max-width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px;margin:16px auto 0}.rl-page-link,.rl-page-gap{min-width:32px;height:32px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:0 7px;color:var(--ink2);border:1px solid transparent;border-radius:6px;font-family:var(--mono);font-size:var(--type-control);text-decoration:none}.rl-page-link.direction{min-width:auto;padding-inline:12px}.rl-page-link:hover{color:var(--ink);background:var(--panel2);border-color:var(--line)}.rl-page-link[aria-current=page]{color:var(--ink);background:color-mix(in srgb,var(--blue) 14%,var(--panel2));border-color:color-mix(in srgb,var(--blue) 45%,var(--line));font-weight:var(--weight-bold)}.rl-page-link.disabled{color:var(--muted);cursor:default;opacity:.65}.rl-page-link:focus-visible{outline:2px solid var(--blue);outline-offset:1px}.pane-view-all{min-height:32px;display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:4px 10px;color:var(--blue);font-family:var(--mono);font-size:var(--type-meta);text-decoration:none}.pane-view-all:hover{text-decoration:underline}.pane-view-all:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}.lp-row{display:block;width:100%;min-width:0;min-height:64px;box-sizing:border-box;text-align:left;text-decoration:none;color:var(--ink2);background:none;border:0;border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent);cursor:pointer}.lp-row:last-child{border-bottom:0;border-radius:0 0 6px 6px}.lp-row:hover{background:var(--panel2)}.lp-row.cur{background:color-mix(in srgb,var(--blue) 12%,var(--paper));box-shadow:inset 2px 0 0 var(--blue)}.lp-row.inert{cursor:default}.lp-row.inert:hover{background:none}.rl-row-grid{min-height:64px;box-sizing:border-box;display:grid;grid-template-columns:16px minmax(0,1fr) auto;align-items:start;column-gap:10px;padding:10px 16px}.rl-row-state{width:16px;height:16px;margin-top:2px;display:grid;place-items:center}.rl-row-body{min-width:0}.rl-row-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:var(--type-subtitle);font-weight:var(--weight-semibold);line-height:var(--leading-ui)}.rl-row-meta{min-width:0;display:flex;align-items:center;gap:4px 8px;margin-top:3px;color:var(--muted);font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-ui)}.rl-row-meta>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rl-row-aside{align-self:center;display:flex;align-items:center;justify-content:flex-end;gap:7px;padding-left:12px;color:var(--muted);font-family:var(--mono);font-size:var(--type-meta)}.rl-tag{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:1px 6px;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:9px}.rl-tag.in-session{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 35%,var(--line))}.rl-tag.node{color:var(--ink2)}.rl-comments{display:inline-flex;align-items:center;gap:4px}.review-state{flex:none;display:inline-flex;align-items:center;gap:5px;line-height:var(--leading-none)}.review-state-icon{flex:none;display:grid;place-items:center;line-height:var(--leading-none)}.review-state svg{display:block}.review-state.open,.review-state.pass{color:var(--green)}.review-state.closed{color:var(--magenta)}.review-state.fail{color:var(--red)}.review-state.review{color:var(--yellow)}.review-state.stale,.review-state.empty{color:var(--muted)}.review-state-label{font-family:var(--mono);font-size:var(--type-control);font-weight:var(--weight-semibold);line-height:var(--leading-ui)}.ds-page{background:var(--paper);padding:14px 18px 0}.ds-head{max-width:1180px;display:flex;align-items:flex-start;gap:10px;font-size:var(--type-title);line-height:var(--leading-ui)}.ds-back{--ds-back-size: 28px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ds-back-size);height:var(--ds-back-size);margin-top:calc((1lh - var(--ds-back-size)) / 2);color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:6px;text-decoration:none}.ds-back:hover{color:var(--ink);background:var(--panel)}.ds-back:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}.ds-title{margin:0 0 6px;font-size:var(--type-title);font-weight:var(--weight-bold);color:var(--ink);line-height:var(--leading-ui);overflow-wrap:anywhere;min-width:0}.ds-title-meta{margin-left:10px;font-size:var(--type-meta);font-weight:var(--weight-regular);color:var(--muted)}.ds-status{display:flex;align-items:center;gap:10px;flex-wrap:wrap;max-width:1180px;padding-bottom:10px;border-bottom:1px solid var(--line)}.ds-status-pill{display:inline-flex;align-items:center;gap:5px}.ds-cols{display:grid;grid-template-columns:minmax(0,1fr) 232px;gap:22px;max-width:1180px;align-items:start}.ds-main{min-width:0;display:flex;flex-direction:column;gap:10px;padding:12px 0 0}.ds-compose{position:sticky;bottom:0;z-index:2;background:var(--paper);padding:6px 0 12px;border-top:1px solid var(--line)}.ds-compose .fv-compose{margin-top:0}.ds-side{position:sticky;top:0;max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:14px;padding:14px 0 20px}.ds-side-sec{display:flex;flex-direction:column;gap:5px;padding-bottom:12px;border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent)}.ds-side-label{font-size:var(--type-caption);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal);text-transform:uppercase;color:var(--muted)}.ds-side-body{display:flex;flex-direction:column;align-items:flex-start;gap:4px;font-size:var(--type-meta);color:var(--ink2)}.ds-val{display:flex;align-items:center;gap:5px;max-width:100%;min-width:0;font:inherit;font-size:var(--type-meta);color:var(--ink2);background:none;border:0;padding:0;text-align:left;text-decoration:none}.ds-val-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-val.dim{color:var(--muted)}.ds-val.mono .ds-val-text{font-family:var(--mono)}.ds-val.link{cursor:pointer;color:var(--blue)}.ds-val.link:hover .ds-val-text{text-decoration:underline}.ds-val.link:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px}.ds-queue-group{align-self:stretch;min-width:0;display:flex;flex-direction:column;gap:4px}.ds-queue-group+.ds-queue-group{margin-top:5px}.ds-queue-group-label{font-size:var(--type-caption);color:var(--muted)}.ds-queue-row{display:flex;align-items:center;gap:6px;max-width:100%;font-size:var(--type-meta);color:var(--ink2);text-decoration:none}.ds-queue-row:hover .ds-queue-scenario{text-decoration:underline}.ds-queue-row .review-state{flex:0 0 auto;display:inline-flex}.ds-queue-scenario{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-queue-node{flex:0 4 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.ds-missing{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}.ds-missing-note{color:var(--muted);font-family:var(--mono);font-size:var(--type-control)}.ds-failed .ds-missing-note{color:var(--red)}.ds-backlink{color:var(--blue);font-size:var(--type-control);text-decoration:none}.ds-backlink:hover{text-decoration:underline}@media (max-width: 760px){.page-scroll{margin:10px 0;scrollbar-gutter:auto}.rl-content{width:calc(100% - 32px);padding-top:16px}.rl-titlebar{margin-bottom:8px}.rl-query{margin-bottom:16px}.lp-head{height:auto;min-height:49px;padding:0 7px;flex-wrap:wrap;align-content:center;row-gap:2px}.rl-sections{align-self:auto}.rl-facets{flex:1 1 auto;justify-content:flex-end}.rl-section{gap:2px;padding:0;align-self:auto;min-height:44px}.rl-section .review-state{gap:3px}.rl-section .review-state-label{font-size:var(--type-meta)}.rl-section-suffix-full{display:none}.rl-section-suffix-compact{display:inline}.rl-facets{flex:none}.rl-facet-wrap:not(.mobile-stay){display:none}.rl-facet{max-width:112px;padding:0 7px}.rl-facet-wrap.mobile-stay .rl-facet{max-width:64px;gap:3px;padding:0 3px;font-size:var(--type-meta)}.rl-facet-wrap.mobile-stay .rl-facet-label{display:none}.rl-facet-wrap.mobile-stay .rl-facet-label-mobile{display:block}.rl-secondary-filters-trigger:not(.compact){gap:3px;padding:0 4px}.rl-secondary-filters.mobile-only,.rl-menu-group.mobile-only{display:block}.rl-secondary-filter-count.for-desktop{display:none}.rl-secondary-filter-count.for-mobile{display:inline-flex}.rl-secondary-filters.active-mobile .rl-secondary-filters-trigger{color:var(--ink);background:color-mix(in srgb,var(--line) 45%,transparent)}.rl-row-grid{min-height:112px;grid-template-columns:16px minmax(0,1fr);padding:14px 16px}.rl-row-title{display:-webkit-box;overflow:hidden;text-overflow:clip;white-space:normal;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:3}.rl-row-meta{flex-wrap:nowrap;margin-top:5px}.rl-row-meta>span{max-width:100%}.rl-row-aside{grid-column:2;align-self:start;justify-content:flex-start;flex-wrap:wrap;gap:5px;margin-top:6px;padding-left:0}.rl-menu{max-width:calc(100vw - 34px)}.ds-cols{display:flex;flex-direction:column;gap:0}.ds-side{position:static;max-height:none;overflow-y:visible;order:-1;padding:10px 0 0}.ds-side-sec{padding-bottom:8px}}.fv-note{margin:auto;padding:24px;color:var(--muted);font-family:var(--mono);font-size:var(--type-control);text-align:center}.fv-store{font-family:var(--mono);font-size:var(--type-caption);letter-spacing:var(--tracking-normal);text-transform:uppercase;color:var(--muted)}.fv-store-local{color:color-mix(in srgb,var(--blue) 65%,var(--muted))}.fv-originator{border-radius:4px;padding:1px 3px}.fv-originator .ds-val-text{color:var(--ink2);font-family:var(--mono)}.fv-originator-dot{width:7px;height:7px;border-radius:50%;flex:none}.fv-originator.openable{background:color-mix(in srgb,var(--green) 8%,transparent)}.fv-originator.openable:hover{background:color-mix(in srgb,var(--green) 16%,transparent)}.fv-originator.openable:focus-visible{outline:2px solid var(--green);outline-offset:2px}.fv-originator.offline{opacity:.7}.fv-close-issue{flex:none;font-family:var(--mono);font-size:var(--type-meta);color:var(--orange);background:var(--paper);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));padding:4px 12px;border-radius:4px;cursor:pointer}.fv-close-issue:hover{background:var(--orange);color:var(--paper);border-color:var(--orange)}.fv-close-issue:disabled{opacity:.5;cursor:default}.fv-close-issue.fv-life-promote{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 35%,var(--line))}.fv-close-issue.fv-life-promote:hover{background:var(--blue);color:var(--paper);border-color:var(--blue)}.fvd-body{font-size:var(--type-body)}.fv-reply{margin-top:10px;padding-left:12px;border-left:2px solid var(--line);border-radius:0 4px 4px 0;transition:background .15s,border-color .15s}.fv-reply.active{border-left-color:var(--green);background:color-mix(in srgb,var(--green) 7%,transparent)}.fv-reply.sel{border-left-color:var(--orange);background:color-mix(in srgb,var(--orange) 9%,transparent)}.fv-reply.remark.open{border-left-color:var(--orange);border-left-width:3px}.fv-reply.remark.resolved{opacity:.62;border-left-color:color-mix(in srgb,var(--green) 45%,var(--line))}.fv-remark-state{font-family:var(--mono);font-size:var(--type-caption);padding:0 5px;border-radius:3px;margin-left:auto}.fv-remark-state.open{color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);font-weight:var(--weight-semibold)}.fv-remark-state.resolved{color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent)}.fv-remark-act{font-family:var(--mono);font-size:var(--type-caption);padding:0 6px;border-radius:3px;cursor:pointer;line-height:var(--leading-body);background:var(--paper)}.fv-remark-act.resolve{color:var(--green);border:1px solid color-mix(in srgb,var(--green) 40%,var(--line))}.fv-remark-act.resolve:hover{background:var(--green);color:var(--paper);border-color:var(--green)}.fv-remark-act.retract{color:var(--muted);border:1px solid var(--line)}.fv-remark-act.retract:hover{background:var(--orange);color:var(--paper);border-color:var(--orange)}.fv-remark-act:disabled{opacity:.5;cursor:default}.fv-reply-meta{display:flex;align-items:center;gap:8px;margin-bottom:3px;font-family:var(--mono);font-size:var(--type-meta)}.fv-reply-by{color:var(--blue);font-weight:var(--weight-semibold)}.fv-reply-at{color:var(--muted)}.fv-anchor{font-family:var(--mono);font-size:var(--type-meta);color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));border-radius:3px;padding:1px 6px;cursor:pointer}.fv-anchor:hover{background:var(--orange);color:var(--paper)}.fv-anchor.static{cursor:default}.fv-anchor.static:hover{background:color-mix(in srgb,var(--orange) 12%,transparent);color:var(--orange)}.fv-anchor.static.degraded{color:var(--muted);background:transparent;border-style:dashed;border-color:color-mix(in srgb,var(--muted) 45%,var(--line))}.fv-anchor.static.degraded:hover{color:var(--muted);background:transparent}.fv-reply-media{display:flex;flex-direction:column;align-items:flex-start;gap:6px;margin-top:6px}.fv-frames{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}.fv-frames .an-image,.fv-frames .eval-video{height:48px;width:auto;max-width:none}.fv-anchor-btn{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:var(--type-meta);color:var(--orange);background:var(--panel2);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));border-radius:4px;padding:3px 10px;cursor:pointer}.fv-anchor-btn:hover{background:var(--orange);color:var(--paper)}.fv-new-page{display:flex;flex-direction:column;gap:16px}.fv-field{display:flex;flex-direction:column;gap:6px;min-width:0}.fv-field-head{display:flex;align-items:center;gap:12px}.fv-field-label{font-family:var(--mono);font-size:var(--type-caption);letter-spacing:var(--tracking-normal);text-transform:uppercase;color:var(--muted)}.fv-new-title{height:34px}.fv-tabs{margin-left:auto;display:inline-flex;gap:2px;padding:2px;background:var(--panel2);border:1px solid var(--line);border-radius:6px}.fv-tab{font-family:var(--mono);font-size:var(--type-meta);color:var(--muted);background:transparent;border:none;border-radius:4px;padding:2px 10px;cursor:pointer}.fv-tab.on{color:var(--ink);background:var(--paper)}.fv-new-compose .fv-textarea{border:none;border-radius:0;background:transparent;padding:2px 2px 4px;resize:none;line-height:var(--leading-relaxed);min-height:128px;max-height:52vh}.fv-new-preview{min-height:128px;font-size:var(--type-body)}.fv-new-hint{font-family:var(--mono);font-size:var(--type-meta);color:var(--muted)}.fv-new-actions{display:flex;align-items:center;gap:8px}.fv-new-actions .fv-cancel{display:inline-flex;align-items:center;text-decoration:none}.fv-notice{padding:6px 16px;font-family:var(--mono);font-size:var(--type-meta);color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--paper));border-bottom:1px solid var(--line)}.fv-error{margin:4px 0 8px;font-family:var(--mono);font-size:var(--type-meta);color:var(--red)}.fv-actions .fv-error{margin:0}.composer-surface{border:1px solid var(--line);border-radius:6px;background:var(--paper);padding:8px 10px 6px}.composer-surface:focus-within{border-color:color-mix(in srgb,var(--blue) 45%,var(--line))}.composer-editor,.composer-footer{min-width:0}.composer-textarea{display:block;width:100%;box-sizing:border-box}.fv-compose{margin-top:12px}.fv-compose .fv-textarea{border:none;border-radius:0;background:transparent;padding:2px 2px 4px;resize:none;line-height:var(--leading-relaxed);min-height:42px;max-height:38vh}.fv-store-pick{display:flex;align-items:center;gap:8px;align-self:flex-start;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted)}.fv-store-pick select{font-family:var(--mono);font-size:var(--type-meta);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:3px 7px}.fv-input,.fv-textarea{width:100%;box-sizing:border-box;font-family:var(--mono);font-size:var(--type-control);color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:6px 8px;resize:vertical}.fv-input:focus,.fv-textarea:focus{outline:none;border-color:var(--blue)}.fv-tawrap{position:relative}.fv-tawrap .fv-textarea{display:block}.fv-compose .mention-menu.up{bottom:calc(100% + 13px)}.fv-actions{display:flex;align-items:center;gap:8px;margin-top:4px}.fv-trigger-btn{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;padding:0;font-family:var(--mono);font-size:var(--type-control);line-height:var(--leading-none);color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:6px;cursor:pointer}.fv-trigger-btn:hover{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 45%,var(--line))}.fv-actions-end{margin-left:auto;display:inline-flex;align-items:center;gap:8px}.fv-cancel{margin-left:auto;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted);background:var(--paper);border:1px solid var(--line);padding:4px 12px;border-radius:4px;cursor:pointer}.fv-cancel:hover{color:var(--orange);border-color:var(--orange)}.fv-cancel:disabled{opacity:.5;cursor:default}.fv-post{font-family:var(--mono);font-size:var(--type-meta);color:var(--paper);background:var(--blue);border:1px solid var(--blue);padding:4px 14px;border-radius:4px;cursor:pointer}.fv-post:disabled{opacity:.5;cursor:default}.fv-send{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;padding:0;color:var(--paper);background:var(--blue);border:1px solid var(--blue);border-radius:50%;cursor:pointer}.fv-send:disabled{opacity:.45;cursor:default}.si-content{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;background:var(--paper)}.si-content.is-new{align-items:center;justify-content:center}.si-new-center{width:min(560px,86%);display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:12vh;animation:si-rise .18s ease}.si-hero{margin:0 0 2px;font-family:var(--mono);font-size:var(--type-hero);line-height:var(--leading-hero);white-space:pre;-webkit-user-select:none;user-select:none;background:linear-gradient(180deg,var(--blue),var(--magenta));-webkit-background-clip:text;background-clip:text;color:transparent}.si-ask-gap{height:21px}.si-inputwrap{position:relative;width:100%;display:flex;border:1px solid var(--blue);border-radius:6px;background:var(--panel);padding:10px 12px;transition:height .12s ease}.mention-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:5;margin:0;padding:4px;list-style:none;max-height:248px;overflow-y:auto;background:var(--paper);border:1px solid var(--blue);border-radius:4px;box-shadow:0 6px 18px #07364229;animation:si-rise .12s ease}.mention-menu.up{top:auto;bottom:calc(100% + 4px)}.mention-menu.fixed{position:fixed;top:auto;z-index:70}.mention-head{padding:3px 8px 5px;font-size:var(--type-meta);color:var(--muted);letter-spacing:var(--tracking-normal);border-bottom:1px solid var(--line);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-item{display:flex;align-items:baseline;gap:8px;padding:4px 8px;border-radius:3px;cursor:pointer;font-size:var(--type-control);white-space:nowrap}.mention-item.on{background:var(--panel2)}.mention-dot{width:6px;height:6px;border-radius:50%;flex:none;align-self:center}.mention-id{color:var(--blue);flex:none}.mention-id .mention-hit{font-weight:var(--weight-bold)}.mention-path{color:var(--muted);font-size:var(--type-meta);min-width:0;overflow:hidden;text-overflow:ellipsis}.slash-name{color:var(--blue);flex:none}.slash-name .mention-hit{font-weight:var(--weight-bold)}.slash-desc{color:var(--muted);font-size:var(--type-meta);min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis}.slash-src{color:var(--muted);font-size:var(--type-meta);flex:none;opacity:.7}.slash-src.src-user{color:var(--green);opacity:.85}.slash-src.src-project{color:var(--cyan);opacity:.85}.slash-src.src-skill{color:var(--magenta);opacity:.85}.slash-name.ui{color:var(--sc);font-weight:var(--weight-bold)}.slash-src.src-ui{color:var(--sc);opacity:.9}.slash-src.src-mutating{color:var(--yellow);opacity:.85}.slash-src.src-report{color:var(--cyan);opacity:.85}.si-input{flex:1;min-width:0;resize:none;background:transparent;border:none;outline:none;color:var(--ink2);font-family:var(--mono);font-size:var(--type-body);line-height:var(--leading-relaxed);max-height:180px;overflow-y:hidden;transition:height .12s ease}.si-input::placeholder{color:var(--muted)}.si-hint{font-size:var(--type-meta);color:var(--muted)}.si-hint code{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.si-agent-glyph{width:16px;height:16px;display:block;fill:currentColor}.si-launcher-picker{display:inline-flex;align-items:center}.si-launcher-harness{display:inline-flex;align-items:center;color:var(--ink2);flex:none}.si-launcher-btn{display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 12px;cursor:pointer;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px;font-size:var(--type-control);transition:border-color .12s ease,box-shadow .12s ease}.si-launcher-btn:hover,.si-launcher-btn.on{border-color:var(--blue)}.si-launcher-btn.on{box-shadow:0 0 0 3px color-mix(in srgb,var(--blue) 15%,transparent)}.si-launcher-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:29;background:#0000002e;animation:si-launcher-fade-in .14s ease}@keyframes si-launcher-fade-in{0%{opacity:0}to{opacity:1}}.si-launcher-pop{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:30;width:max-content;min-width:340px;max-width:min(720px,calc(100vw - 64px));max-height:min(70vh,640px);overflow-y:auto;padding:8px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 64px #00000047;animation:si-launcher-pop-in .16s ease}@keyframes si-launcher-pop-in{0%{opacity:0;transform:translate(-50%,-50%) scale(.94)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.si-launcher-row{display:flex;flex-direction:column;border-radius:8px;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;font:inherit;text-align:left;cursor:pointer;padding:0}.si-launcher-row.on{background:color-mix(in srgb,var(--blue) 10%,transparent)}.si-launcher-row-main{display:flex;align-items:center;gap:9px;min-width:0;padding:8px 10px 2px;color:var(--ink);font-size:var(--type-control)}.si-launcher-row:not(.on):not(.off):hover{background:color-mix(in srgb,var(--ink) 6%,transparent)}.si-launcher-row.off{opacity:.45;cursor:not-allowed}.si-launcher-row-main:last-child{padding-bottom:8px}.si-launcher-row .si-launcher-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-launcher-check{color:var(--blue);flex:none;margin-left:auto}.si-launcher-cmd{display:block;margin:0 10px 8px 35px;min-width:0;font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-relaxed);color:var(--ink2);white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere;opacity:.75}.si-session-wrap{container-type:inline-size}.si-tabbar{flex:none;min-width:0;height:32px;box-sizing:border-box;display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:stretch;overflow:hidden;background:color-mix(in srgb,var(--panel) 94%,var(--ink) 6%);border-bottom:1px solid var(--line)}.si-surface{display:flex;align-items:stretch;min-width:0;border-right:1px solid var(--line)}.si-tabs{min-width:0;display:flex;align-items:stretch}.si-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:0;height:32px;display:inline-flex;align-items:center;gap:6px;background:transparent;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;padding:0 9px;cursor:default;color:var(--muted);font-family:var(--mono);font-size:var(--type-control);text-decoration:none;white-space:nowrap}.si-tab.on{color:var(--ink);border-bottom-color:var(--blue);background:color-mix(in srgb,var(--blue) 5%,transparent)}.si-tab svg{flex:none}.si-eval-door{min-width:0;display:inline-flex;align-items:center;gap:5px;padding:0 7px;border-right:1px solid var(--line);color:var(--ink2);text-decoration:none;white-space:nowrap;font-family:var(--mono);font-size:var(--type-meta)}.si-eval-door:hover{color:var(--cyan);background:color-mix(in srgb,var(--cyan) 7%,transparent)}.si-eval-door:focus-visible{outline:2px solid var(--cyan);outline-offset:-2px}.si-eval-door>svg{flex:none;color:var(--cyan)}.si-eval-label{color:var(--ink);font-size:var(--type-control)}.si-eval-arrow{opacity:.55}.si-eval-stats{display:inline-flex;align-items:center;gap:4px}.si-eval-wait{display:inline-flex;align-items:center;gap:2px;color:var(--muted);font-family:var(--mono);font-size:var(--type-caption);font-weight:var(--weight-bold)}.si-eval-stats .ovc{gap:2px;padding:0;border:0;background:transparent}.si-eval-stats .ovc.st-empty{color:var(--muted)}.si-eval-spinner{animation:si-attach-spin .8s linear infinite}.si-eval-phase{flex:0 0 auto;color:var(--muted)}.si-actions{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:3px;padding:0 4px}@container (max-width: 720px){.si-eval-door{padding-inline:6px}}@container (max-width: 540px){.si-eval-label,.si-eval-stats .secondary{display:none}.si-eval-door{gap:4px;padding-inline:6px}.si-actions{gap:2px;padding-inline:4px}}@container (max-width: 390px){.si-tab-label,.si-eval-arrow{display:none}.si-tab{width:34px;padding-inline:10px}.si-eval-door{padding-inline:5px}}.si-term-body{container-type:size;flex:1;min-height:0;overflow:clip;padding:6px 10px 4px;background:var(--term-bg)}.si-term-body.is-conversation{padding:0;background:var(--paper)}.si-line{font-size:var(--type-control);line-height:var(--leading-body);color:var(--ink2);white-space:pre-wrap;word-break:break-word}.si-line.muted{color:var(--muted)}.si-op{color:var(--blue);font-weight:var(--weight-bold)}.si-command-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;pointer-events:none}.si-command-dismiss{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;border:0;background:#0000000f;pointer-events:auto;cursor:default}.si-command-box{position:absolute;left:50%;bottom:22%;z-index:1;transform:translate(-50%);width:min(680px,calc(100% - 32px));max-height:min(38cqh,340px);box-sizing:border-box;padding:8px 10px 7px;border-color:color-mix(in srgb,var(--blue) 55%,var(--line));background:color-mix(in srgb,var(--panel) 96%,transparent);box-shadow:0 8px 24px #00000057;pointer-events:auto}.si-command-box.err{border-color:var(--orange)}.si-command-box.dragover{border-color:var(--green)}.si-command-input{min-height:24px;max-height:min(28cqh,240px);padding:2px 2px 5px;resize:none;border:0;outline:0;background:transparent;color:var(--ink2);font-family:var(--mono);font-size:var(--type-control);line-height:var(--line-input)}.si-command-input::placeholder{color:var(--muted)}.si-command-box .mention-menu.up{bottom:calc(100% + 10px)}.si-command-tools{min-width:0;display:flex;align-items:center;gap:6px;padding-top:5px;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}.si-command-title{display:inline-flex;align-items:center;gap:5px;flex:none;margin-right:2px;color:var(--blue);font-family:var(--mono);font-size:var(--type-caption);font-weight:var(--weight-semibold)}.si-command-tool,.si-command-send{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;padding:0;border-radius:6px;cursor:pointer}.si-command-tool{color:var(--muted);background:var(--panel2);border:1px solid var(--line)}.si-command-tool:hover{color:var(--blue);border-color:var(--blue)}.si-command-send{margin-left:auto;color:var(--paper);background:var(--blue);border:1px solid var(--blue)}.si-command-tool:disabled,.si-command-send:disabled{opacity:.45;cursor:default}.si-action-outcome{flex:0 1 auto;min-width:0;max-width:300px;padding:2px 6px;border:1px solid var(--line);border-radius:4px;background:var(--panel2);color:var(--muted);font-size:var(--type-meta);line-height:var(--leading-relaxed);overflow-wrap:anywhere}.si-action-outcome.pending,.si-action-outcome.sending{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 55%,var(--line))}.si-action-outcome.delivered{color:var(--green);border-color:color-mix(in srgb,var(--green) 55%,var(--line))}.si-action-outcome.failed{color:var(--red);border-color:color-mix(in srgb,var(--red) 55%,var(--line))}.si-command-tools .si-action-outcome{margin-left:auto}.si-action-outcome-float{position:absolute;top:12px;right:12px;z-index:2;max-width:min(360px,calc(100% - 24px));pointer-events:none}.si-attach{flex:none;align-self:flex-end;display:inline-flex;align-items:center;background:transparent;border:none;cursor:pointer;color:var(--muted);line-height:var(--leading-relaxed);padding:0 2px}.si-attach:hover:not(:disabled){color:var(--blue)}.si-attach:disabled{opacity:.5;cursor:default}.si-attach-busy{animation:si-attach-spin .8s linear infinite}@keyframes si-attach-spin{to{transform:rotate(360deg)}}@keyframes si-attach-complete-out{0%,78%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-2px);pointer-events:none}}.si-inputwrap.dragover{border-color:var(--green)}.si-attach-queue{display:grid;gap:4px;min-width:0}.si-attach-queue.new{width:100%;margin-top:6px}.si-attach-queue.command{padding:5px 0 1px;border-top:1px solid color-mix(in srgb,var(--line) 65%,transparent)}.si-attach-row{display:grid;grid-template-columns:minmax(72px,1fr) minmax(76px,1.2fr) minmax(0,auto) auto;align-items:center;gap:6px;min-width:0;min-height:23px;font-size:var(--type-meta);color:var(--muted)}.si-attach-row.complete{animation:si-attach-complete-out 1.4s ease forwards}.si-attach-name{display:flex;align-items:center;gap:4px;min-width:0;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-attach-progress{width:100%;height:5px;accent-color:var(--blue)}.si-attach-status{min-width:0;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-attach-row.complete .si-attach-status{color:var(--green)}.si-attach-row.failed .si-attach-status{color:var(--red)}.si-attach-row.cancelled .si-attach-status{color:var(--orange)}.si-attach-action{width:22px;height:22px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);border:0;background:transparent;border-radius:4px;cursor:pointer}.si-attach-action:hover:not(:disabled){color:var(--blue);background:var(--panel2)}.si-attach-action:disabled{opacity:.45;cursor:default}@media (max-width: 620px){.si-attach-row{grid-template-columns:minmax(74px,1fr) minmax(64px,1fr) auto auto;gap:4px}.si-attach-status{display:none}}@keyframes si-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.st-wrap{position:relative;width:100%;height:100%}.st-host{width:100%;height:100%;overflow:clip}.st-copyhint{position:absolute;right:8px;bottom:7px;pointer-events:none;z-index:2;font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-tight);letter-spacing:var(--tracking-normal);color:#cfe8e8;opacity:.85;background:#073642eb;border:1px solid rgba(131,148,150,.35);padding:3px 8px;border-radius:5px;transition:opacity .15s ease,color .15s ease,background .15s ease,border-color .15s ease}.st-wrap:hover .st-copyhint{opacity:1}.st-copyhint.copied{opacity:1;color:#fdf6e3;background:#859900f2;border-color:#859900f2}.st-copyhint.reconnecting{opacity:1;color:#fdf6e3;background:#cb4b16f2;border-color:#cb4b16f2;animation:st-recon-pulse 1.1s ease-in-out infinite}@keyframes st-recon-pulse{0%,to{opacity:1}50%{opacity:.55}}.st-host .xterm{width:auto!important;height:auto!important;background:var(--term-bg)!important}.st-host .xterm-screen{background:var(--term-bg)!important}.st-host .xterm-viewport{overflow:hidden!important;background:var(--term-bg)!important}.si-act{background:var(--paper);border:1px solid var(--line);color:var(--ink2);border-radius:4px;padding:1px 9px;cursor:pointer;font-family:var(--mono);font-size:var(--type-meta)}.si-act:hover,.si-act.go{border-color:var(--blue);color:var(--blue)}.si-act.go:hover{background:var(--blue);color:var(--paper)}.si-act.big{padding:8px 18px;font-size:var(--type-body);margin-top:8px}.sc-red{--sc: var(--red)}.sc-blue{--sc: var(--blue)}.sc-green{--sc: var(--green)}.sc-yellow{--sc: var(--yellow)}.sc-cyan{--sc: var(--cyan)}.sc-muted{--sc: var(--muted)}.si-tool{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:24px;height:24px;flex:0 0 24px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--sc) 72%,var(--line));border-radius:4px;background:color-mix(in srgb,var(--sc) 8%,transparent);color:var(--sc);cursor:pointer}.si-tool:hover{background:color-mix(in srgb,var(--sc) 16%,transparent);border-color:var(--sc)}.si-tool:focus-visible{outline:2px solid var(--sc);outline-offset:1px}.si-tool:disabled{cursor:not-allowed;opacity:.68}.si-tool:disabled:hover{background:color-mix(in srgb,var(--sc) 8%,transparent);border-color:color-mix(in srgb,var(--sc) 72%,var(--line))}.si-tool.command.on{background:var(--sc);color:var(--paper);border-color:var(--sc)}.si-offline{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:24px}.si-offline-msg{font-size:var(--type-title);color:var(--ink2)}.si-offline-sub{font-size:var(--type-control);color:var(--muted);max-width:460px;line-height:var(--leading-body)}.si-offline-sub code{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.si-offline-err{margin-top:10px;font-size:var(--type-control);color:var(--yellow);max-width:460px;line-height:var(--leading-relaxed);border:1px solid var(--yellow);border-radius:4px;padding:8px 10px;background:var(--panel2)}.si-offline>.si-action-outcome{margin-top:10px;max-width:460px;font-size:var(--type-control);padding:8px 10px}.si-shelf-card .si-shelf-mark{color:var(--yellow);display:flex;margin-bottom:2px}.si-shelf-acts{display:flex;gap:8px;align-items:center;margin-top:4px}.m-app{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font-family:var(--mono);-webkit-tap-highlight-color:transparent}.m-main{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;overscroll-behavior:contain;padding-top:env(safe-area-inset-top,0)}.m-app .m-timeline,.m-app .m-children,.m-app .m-sesslist,.m-app .m-sessdetail,.m-app .m-pane-host .pane-doc,.m-app .m-pane-host .pane-hist,.m-app .m-pane-host .pane-issues,.m-app .m-pane-host .pane-eval,.m-app .m-pane-host .pane-edit{overflow-x:hidden}.m-app pre,.m-app code,.m-app .diff-line,.m-app .hist-diff pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-width:100%}.m-app .ev-diff{overflow-x:hidden}.m-app .ev-diff .dl{white-space:pre-wrap;overflow-wrap:anywhere}.m-app .m-ev-from{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-app img,.m-app video{max-width:100%;height:auto}.m-specs{flex:1;min-height:0;display:flex;flex-direction:column}.m-crumbs{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:7px 10px;border-bottom:1px solid var(--line);background:var(--paper)}.m-crumb{display:inline-flex;align-items:center;gap:2px}.m-crumb-sep{color:var(--muted)}.m-crumb-btn{background:none;border:none;padding:2px 3px;font-family:var(--mono);font-size:var(--type-control);color:var(--muted);cursor:pointer}.m-crumb-btn.cur{color:var(--ink2);font-weight:var(--weight-bold)}.m-node{flex:1;min-height:0;display:flex;flex-direction:column}.m-node-head{flex:none;display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;padding:12px 14px 8px}.m-dot{flex:none;width:9px;height:9px;border-radius:50%}.m-node-title{font-size:var(--type-title);font-weight:var(--weight-bold);color:var(--ink2)}.m-node-ver{font-size:var(--type-control);color:var(--muted)}.m-node-status{font-size:var(--type-meta);color:var(--ink);padding:1px 6px;border:1px solid var(--line);border-radius:999px}.m-node-faces{display:inline-flex;gap:2px}.m-node-desc{flex:none;padding:0 14px 10px;color:var(--ink);font-size:var(--type-body);line-height:var(--leading-relaxed)}.m-tabs{flex:none;display:flex;flex-wrap:wrap;gap:6px;padding:0 10px 8px;border-bottom:1px solid var(--line)}.m-tab{flex:none;padding:6px 12px;min-height:32px;cursor:pointer;font-family:var(--mono);font-size:var(--type-control);color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px}.m-tab.on{color:var(--paper);background:var(--blue);border-color:var(--blue)}.m-pane-host{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.m-pane-host>*{flex:1;min-height:0}.m-pane-host.fixed .pane-hist{height:100%}.m-pane-host .pane-doc{overflow:auto;-webkit-overflow-scrolling:touch;padding:14px}.m-pane-host .pane-doc>h1,.m-pane-host .pane-doc>blockquote{display:none}.m-pane-host .pane-issues,.m-pane-host .pane-edit{-webkit-overflow-scrolling:touch}.m-children{overflow:auto;-webkit-overflow-scrolling:touch}.m-row{display:flex;align-items:center;gap:9px;width:100%;min-height:52px;padding:10px 14px;text-align:left;cursor:pointer;background:var(--paper);border:none;border-bottom:1px solid var(--line);font-family:var(--mono);color:var(--ink)}.m-row:active{background:var(--panel)}.m-row[disabled]{opacity:.5}.m-row-title{flex:1;min-width:0;font-size:var(--type-subtitle);color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-row-faces{flex:none;display:inline-flex;gap:2px}.m-row-ver{flex:none;font-size:var(--type-meta);color:var(--muted)}.m-row-kids{flex:none;font-size:var(--type-meta);color:var(--blue)}.m-row-chev{flex:none;color:var(--muted);font-size:var(--type-icon-sm)}.m-tabbar{flex:none;display:flex;border-top:1px solid var(--line);background:var(--panel);padding-bottom:env(safe-area-inset-bottom,0)}.m-tabbar-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;height:52px;cursor:pointer;background:none;border:none;font-family:var(--mono);font-size:var(--type-body);color:var(--muted)}.m-tabbar-btn.on{color:var(--blue);font-weight:var(--weight-bold);box-shadow:inset 0 2px 0 var(--blue)}.m-tabbar-ico{font-size:var(--type-body)}.m-tabbar-badge{min-width:16px;padding:0 4px;border-radius:999px;background:var(--orange);color:var(--paper);font-size:var(--type-caption);line-height:var(--line-badge);text-align:center}.m-sesslist{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.m-sess-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;width:100%;padding:12px 14px;text-align:left;cursor:pointer;font-size:var(--type-subtitle);color:var(--ink2);background:var(--paper);border:none;border-bottom:1px solid var(--line);font-family:var(--mono)}.m-sess-row:active{background:var(--panel)}.m-sess-row .sess-id{flex:1;min-width:0;font-weight:var(--weight-bold);color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-sess-row .sess-meta{flex:none;width:auto;min-width:0;margin-top:0;margin-left:auto;font-size:var(--type-control)}.m-sess-row .sess-glyph{font-size:var(--type-body);width:14px}.m-sess-row .sess-ops{color:var(--muted)}.m-sess-tree-row{--sess-fold-pad-x: 14px}.m-sess-row .sess-fold-slot,.m-sess-tree-row .sess-fold-control{min-width:24px;height:24px}.m-zone{display:flex;align-items:center;gap:8px;padding:10px 14px 4px;font-size:var(--type-caption);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal);color:var(--muted);text-transform:uppercase}.m-zone .si-zone-count{min-width:24px;min-height:24px}.m-sessdetail{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.m-sessdetail.chat{display:flex;flex-direction:column;overflow:hidden}.m-sess-card{flex:none;display:flex;align-items:center;gap:10px;padding:12px 14px 12px 6px;border-bottom:1px solid var(--line)}.m-sess-back{flex:none;width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-size:var(--type-icon-lg);line-height:var(--leading-none);color:var(--blue);background:none;border:none;cursor:pointer}.m-sess-meta{display:flex;flex-direction:column;gap:2px;min-width:0}.m-sess-name{font-size:var(--type-title);font-weight:var(--weight-bold);color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-sess-status{font-size:var(--type-control);color:var(--muted)}.m-sess-id8{color:var(--muted)}.m-sess-evalbtn{flex:none;margin-left:auto;padding:6px 13px;font-size:var(--type-control);font-family:var(--mono);color:var(--ink2);background:var(--panel);border:1px solid var(--line);border-radius:15px;cursor:pointer;text-decoration:none}.m-review{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.tl-chat{display:flex;flex-direction:column;flex:1;min-height:0}.si-term-layer .tl-chat{height:100%;background:var(--paper)}.m-timeline{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;padding:10px 14px;user-select:text;-webkit-user-select:text}::highlight(timeline-sel){background-color:#264f78;color:#f0f6fc}.m-day{text-align:center;margin:10px 0 6px;font-size:var(--type-caption);letter-spacing:var(--tracking-normal);color:var(--muted);text-transform:uppercase}.m-ev{margin:8px 0}.m-ev-head{display:flex;align-items:baseline;gap:7px;font-family:var(--mono);font-size:var(--type-control)}.m-ev-glyph{flex:none}.m-ev-word{font-weight:var(--weight-bold)}.m-ev-time{margin-left:auto;flex:none;font-size:var(--type-caption);color:var(--muted)}.m-ev-note{margin:4px 0 0 14px;padding:8px 10px;font-size:var(--type-body);line-height:var(--leading-relaxed);color:var(--ink2);overflow-wrap:anywhere;background:var(--panel);border-left:2px solid var(--line);border-radius:0 6px 6px 0}.m-copy-note{display:block;margin-top:8px;padding:3px 7px;color:var(--blue);background:transparent;border:1px solid var(--line);border-radius:4px;font:inherit;cursor:pointer}.m-ev-sent .m-ev-from{font-weight:var(--weight-bold);color:var(--blue)}.m-ev-text{margin:4px 0 0 14px;padding:8px 10px;font-size:var(--type-body);line-height:var(--leading-relaxed);color:var(--ink);overflow-wrap:anywhere;background:color-mix(in srgb,var(--blue) 7%,var(--paper));border-left:2px solid color-mix(in srgb,var(--blue) 45%,var(--line));border-radius:0 6px 6px 0}.m-ev-prompt summary{font-family:var(--mono);font-size:var(--type-control);color:var(--muted);cursor:pointer}.rich-text{min-width:0;max-width:100%;overflow-x:auto;white-space:normal;overflow-wrap:anywhere}.rich-text>:first-child{margin-top:0}.rich-text>:last-child{margin-bottom:0}.rich-text p{margin:.42em 0}.rich-text h1,.rich-text h2,.rich-text h3,.rich-text h4,.rich-text h5,.rich-text h6{margin:.7em 0 .3em;color:var(--ink2);font-size:var(--type-subtitle);line-height:var(--leading-tight);letter-spacing:var(--tracking-normal)}.rich-text h1{font-size:var(--type-title)}.rich-text ul,.rich-text ol{margin:.42em 0;padding-left:1.7em}.rich-text li+li{margin-top:.18em}.rich-text blockquote{margin:.5em 0;padding-left:.8em;color:var(--muted);border-left:2px solid var(--blue)}.rich-text a{color:var(--blue);text-decoration:underline;text-underline-offset:2px}.rich-text img{display:block;max-width:100%;height:auto;margin:.55em 0;border-radius:4px}.rich-text code{padding:.08em .3em;font-family:var(--mono);font-size:var(--type-control);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:3px}.rich-text pre{max-width:100%;margin:.55em 0;padding:8px 10px;overflow-x:auto;color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:4px}.rich-text pre code{padding:0;white-space:pre;background:transparent;border:0}.rich-text table{display:block;max-width:100%;margin:.55em 0;overflow-x:auto;border-collapse:collapse}.rich-text th,.rich-text td{padding:4px 7px;white-space:nowrap;text-align:left;border:1px solid var(--line)}.rich-text th{color:var(--ink2);background:var(--paper)}.rich-text hr{margin:.65em 0;border:0;border-top:1px solid var(--line)}.rich-text .katex-block{max-width:100%;margin:.6em 0;padding:2px 0;overflow-x:auto;overflow-y:hidden}.rich-text .katex-block .katex-display{margin:0}.rich-text .katex-error{color:var(--red);white-space:pre-wrap}.m-offline,.m-senderr,.m-copy-status{flex:none;padding:6px 14px;font-size:var(--type-control)}.m-offline{color:var(--muted);background:var(--panel);border-top:1px solid var(--line)}.m-senderr{color:var(--red)}.m-copy-status{color:var(--muted)}.m-copy-status.failed{color:var(--red)}.m-composer{flex:none;padding:8px 14px 10px;border-top:1px solid var(--line);background:var(--panel)}.m-composer-line{display:flex;align-items:stretch;gap:8px}.m-input{flex:1;min-width:0;min-height:38px;max-height:min(28cqh,240px);resize:none;padding:9px 10px;font-family:var(--mono);font-size:var(--type-subtitle);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:8px;outline:none}.m-input:focus{border-color:var(--blue)}.m-send{flex:none;height:38px;padding:0 16px;font-family:var(--mono);font-size:var(--type-body);font-weight:var(--weight-bold);color:var(--paper);background:var(--blue);border:none;border-radius:8px;cursor:pointer}.m-send:disabled{opacity:.45;cursor:default}.m-empty{padding:18px 14px;color:var(--muted);font-size:var(--type-body)}.m-empty.big{flex:1;display:flex;align-items:center;justify-content:center;text-align:center}.m-new-btn{display:flex;align-items:center;gap:8px;width:100%;padding:12px 14px;font-family:var(--mono);font-size:var(--type-subtitle);font-weight:var(--weight-bold);color:var(--blue);text-align:left;background:var(--paper);border:none;border-bottom:1px solid var(--line);cursor:pointer}.m-new-btn:active{background:var(--panel)}.m-new-btn-plus{flex:none;font-size:var(--type-icon-sm);line-height:var(--leading-none)}.m-new-body{display:flex;flex-direction:column;gap:12px;padding:14px}.m-new-input{flex:none;min-height:120px}.m-new-launcher{display:flex;align-items:center;gap:10px;font-size:var(--type-body);color:var(--muted)}.m-new-launcher-select{flex:1;min-width:0;padding:8px 10px;font-family:var(--mono);font-size:var(--type-subtitle);color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:8px}.m-new .m-senderr{padding:0}.m-new-go{height:42px}.pane-eval{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-eval.empty{color:var(--muted);font-size:var(--type-body)}.eval-todo-note{color:var(--muted);font-size:var(--type-body);margin:0 0 14px}.eval-declared-row .eval-expected{padding-left:23px;margin:4px 0 0}.eval-tracks{color:var(--muted);font-family:var(--mono);font-size:var(--type-caption);opacity:.85}.eval-dangling-badge{color:var(--orange);margin-right:6px}.eval-dangling-name{text-decoration:line-through;color:var(--muted)}.eval-dangling-tag{font-family:var(--mono);font-size:var(--type-caption);color:var(--orange);margin-left:8px;border:1px dashed color-mix(in srgb,var(--orange) 45%,var(--line));border-radius:3px;padding:0 5px}.eval-dangling-remarks{padding-left:23px;margin:6px 0 0}.eval-row{position:relative;border-bottom:1px solid var(--line);padding:10px 0}.eval-row:last-child{border-bottom:0}.eval-head{display:flex;flex-direction:column;gap:4px;width:100%;box-sizing:border-box;padding:0 26px 0 0;text-align:left;background:none;border:0;margin:0;font:inherit;color:inherit;cursor:pointer}.eval-open{position:absolute;top:10px;right:2px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:4px;color:var(--muted)}.eval-open:hover{color:var(--ink2);background:var(--panel2)}.eval-top{display:flex;align-items:center;gap:8px}.eval-caret{flex:none;color:var(--muted);font-size:var(--type-meta)}.eval-scenario{font-size:var(--type-body);font-weight:var(--weight-semibold);color:var(--ink2)}.eval-meta{display:flex;align-items:center;gap:10px;font-size:var(--type-meta);color:var(--muted)}.eval-sha{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.eval-verdict{flex:none;font-size:var(--type-caption);font-weight:var(--weight-bold);border-radius:3px;padding:0 4px;line-height:var(--leading-relaxed)}.eval-verdict.pass{color:var(--green);border:1px solid var(--green)}.eval-verdict.fail{color:var(--orange);border:1px solid var(--orange)}.eval-verdict.note{color:var(--blue);border:1px solid var(--blue);cursor:help}.eval-verdict.legacy{color:var(--muted);border:1px solid var(--line)}.eval-shot{margin:8px 0 2px;padding-left:19px}.eval-shot img{display:block;max-width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:4px}.eval-video{display:block;inline-size:auto;block-size:auto;max-inline-size:100%;background:var(--panel2);border:1px solid var(--line);border-radius:4px}.eval-noimg{font-size:var(--type-meta);color:var(--muted)}.eval-expected,.eval-note{font-size:var(--type-control);color:var(--ink2);margin:0 0 6px}.eval-expected-label{color:var(--muted);font-weight:var(--weight-semibold)}.eval-transcript{font-family:var(--mono);font-size:var(--type-meta);color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:8px 10px;margin:0;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}.eval-transcript.loading{color:var(--muted)}.eval-datawrap{border:1px solid var(--line);border-left:3px solid var(--acc, #6b46c1);border-radius:4px;overflow:hidden}.eval-datahead{font-family:var(--mono);font-size:var(--type-caption);letter-spacing:var(--tracking-normal);text-transform:uppercase;color:var(--muted);background:var(--panel);padding:4px 10px;border-bottom:1px solid var(--line)}.eval-data{font-family:var(--mono);font-size:var(--type-meta);color:var(--ink2);background:var(--panel2);padding:8px 10px;margin:0;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}.eval-data.loading{color:var(--muted)}.eval-datafold>summary.eval-datahead{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}.eval-datafold>summary.eval-datahead::-webkit-details-marker{display:none}.eval-datafold>summary.eval-datahead:before{content:"▸ ";color:var(--muted)}.eval-datafold[open]>summary.eval-datahead:before{content:"▾ "}.eval-datafold:not([open])>summary.eval-datahead{border-bottom:none}.ef-node{flex:0 1 auto;max-width:58px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--type-meta);opacity:.9}.lp-row .ef-node{max-width:180px}.ef-okd{flex:none;width:17px;height:17px;display:inline-flex;align-items:center;justify-content:center;color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent);border:1px solid color-mix(in srgb,var(--green) 42%,var(--line));border-radius:50%}.an-thread{display:flex;flex-direction:column;padding:4px 0 8px}.an-thread .an-comments-head{padding:10px 0 6px;border-bottom:1px solid var(--line)}.an-thread .fv-reply{margin-top:10px}.an-meta{font-size:var(--type-meta);color:var(--muted)}.an-image{display:block;inline-size:auto;block-size:auto;max-inline-size:100%;border:1px solid var(--line);border-radius:6px;background:var(--panel2);cursor:zoom-in}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:#000000d1;cursor:zoom-out}.lightbox img{max-width:96vw;max-height:96vh;object-fit:contain;border-radius:4px;box-shadow:0 8px 48px #0009}.an-prior-note{color:var(--muted)}.an-stale{color:var(--muted);font-family:var(--mono);font-size:var(--type-meta)}.an-stale b{color:var(--ink2);font-weight:var(--weight-bold)}.an-stale-files{opacity:.85}.an-title{font-weight:var(--weight-bold);font-size:var(--type-subtitle);color:var(--ink)}.an-node{font-size:var(--type-meta);color:var(--muted)}.an-expected{font-size:var(--type-control);color:var(--ink2);padding:8px 0 0}.an-comments-head{font-size:var(--type-caption);font-weight:var(--weight-bold);letter-spacing:var(--tracking-normal);text-transform:uppercase;color:var(--ink2)}.an-gallery{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin:12px 0 0}.an-player{inline-size:fit-content;min-inline-size:min(360px,100%);max-inline-size:100%}.an-stage{position:relative;inline-size:fit-content;max-inline-size:100%;margin:12px 0 0;cursor:crosshair}.an-video{display:block;inline-size:auto;block-size:auto;max-inline-size:100%;background:#000;border:1px solid var(--line);border-radius:6px 6px 0 0}.an-rect{position:absolute;border:2px solid var(--orange);border-radius:3px;background:#ff963c1f;pointer-events:none}.an-rect.live{border-style:dashed}.an-bigplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;background:#080c1280;border:1px solid rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;font-size:var(--type-icon-lg);color:#fff;pointer-events:none;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.an-bar{display:flex;align-items:center;gap:10px;padding:6px 8px;background:var(--panel2);border:1px solid var(--line);border-top:none;border-radius:0 0 6px 6px}.an-play{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:26px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:5px;cursor:pointer}.an-play:hover{border-color:var(--blue)}.an-fs{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:26px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:5px;cursor:pointer}.an-fs:hover{border-color:var(--blue)}.an-player:fullscreen{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000}.an-player:fullscreen .an-stage{margin:0;max-width:100vw;max-height:calc(100vh - 38px)}.an-player:fullscreen .an-video{width:auto;max-width:100vw;max-height:calc(100vh - 38px);border:none;border-radius:0}.an-player:fullscreen .an-bar{width:min(100vw,1100px);border-radius:0}.an-player:-webkit-full-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000}.an-player:-webkit-full-screen .an-stage{margin:0;max-width:100vw;max-height:calc(100vh - 38px)}.an-player:-webkit-full-screen .an-video{width:auto;max-width:100vw;max-height:calc(100vh - 38px);border:none;border-radius:0}.an-player:-webkit-full-screen .an-bar{width:min(100vw,1100px);border-radius:0}.an-time{flex:0 0 auto;font-family:var(--mono);font-size:var(--type-meta);color:var(--muted);font-variant-numeric:tabular-nums}.an-curstep{flex:0 0 auto;font-size:var(--type-meta);color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent);border:1px solid color-mix(in srgb,var(--green) 35%,var(--line));border-radius:3px;padding:1px 7px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.an-seek{flex:1 1 auto;position:relative;height:18px;display:flex;align-items:center;cursor:pointer}.an-seek-trk{position:absolute;left:0;right:0;height:5px;background:var(--line);border-radius:5px}.an-seek-play{position:absolute;left:0;height:5px;background:var(--blue);border-radius:5px;transition:width .12s linear}.an-knob{position:absolute;width:12px;height:12px;background:var(--ink);border:2px solid var(--paper);border-radius:50%;transform:translate(-50%);box-shadow:0 1px 4px #0006;transition:left .12s linear}.an-band{position:absolute;top:2px;width:2px;height:14px;background:color-mix(in srgb,var(--green) 45%,transparent);transform:translate(-50%);pointer-events:none}.an-mk{position:absolute;top:-1px;width:10px;height:20px;padding:0;transform:translate(-50%);background:none;border:none;cursor:pointer}.an-mk:after{content:"";display:block;margin:0 auto;width:3px;height:20px;border-radius:2px;background:var(--orange);box-shadow:0 0 0 1px var(--paper);transition:transform .12s,background .12s}.an-mk:hover:after{transform:scaleX(1.8)}.an-mk.active:after{background:var(--green)}.an-mk.on:after{transform:scaleX(2);background:var(--orange);box-shadow:0 0 0 1px var(--paper),0 0 8px color-mix(in srgb,var(--orange) 60%,transparent)}.an-seek-hov{position:absolute;bottom:22px;transform:translate(-50%);background:var(--panel);border:1px solid var(--line);color:var(--ink);font-family:var(--mono);font-size:var(--type-meta);padding:1px 6px;border-radius:4px;pointer-events:none;white-space:nowrap}.an-ruler{display:flex;flex-wrap:wrap;gap:4px;padding:8px 0 0}.an-step{font:inherit;font-size:var(--type-meta);color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:2px 8px;cursor:pointer}.an-step.on{border-color:var(--green);color:var(--ink)}.an-hint{color:var(--muted);font-size:var(--type-meta);padding:8px 0 0}.an-flash{font-size:var(--type-control);color:var(--green);padding:4px 0 0}.an-verdict-badge{font-weight:var(--weight-bold)}.an-okd{display:inline-flex;align-items:center;gap:4px;font-size:var(--type-meta);color:var(--green);white-space:nowrap}.an-ab{display:flex;align-items:center;flex-wrap:nowrap;gap:8px;margin-left:auto}.an-ab-nav{display:inline-flex;align-items:center;justify-content:center;line-height:var(--leading-none);color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:2px 6px;cursor:pointer}.an-ab-nav:disabled{opacity:.35;cursor:default}.an-ab-track{display:flex;flex-wrap:nowrap;gap:3px;align-items:center}.an-ab-pip{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:var(--panel2);border:1px solid var(--line);border-radius:4px;cursor:pointer;color:var(--muted)}.an-ab-pip.on{outline:2px solid var(--blue);outline-offset:0;border-color:var(--blue)}.an-ab-pos{font-size:var(--type-meta);color:var(--muted);margin-left:2px;white-space:nowrap}.an-ab-more{position:relative;flex:none}.an-ab-morebtn{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;cursor:pointer}.an-ab-morebtn:hover{color:var(--ink);border-color:var(--blue)}.an-ab-morebtn:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}.an-ab-menu{max-height:min(300px,60vh)}.an-ab-menuitem{grid-template-columns:16px auto minmax(0,1fr)}.an-ab-menupos{font-variant-numeric:tabular-nums}.an-ab-menudate{color:var(--muted);font-size:var(--type-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 760px){.an-ab-pos{display:none}}.se-gates{position:sticky;top:0;z-index:4;flex:0 0 40px;height:40px;display:flex;align-items:center;align-content:center;gap:8px;flex-wrap:wrap;padding:4px 14px;box-sizing:border-box;border-bottom:1px solid var(--line);background:var(--panel2)}.se-gates~.rl-content .lp-head{top:40px}.se-gate{font-family:var(--mono);font-size:var(--type-meta);border:1px solid var(--line);border-radius:3px;padding:1px 7px;color:var(--muted)}.se-gate.ok{color:var(--green);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.se-gate.bad{color:var(--red);border-color:color-mix(in srgb,var(--red) 40%,var(--line))}.se-acts{margin-left:auto;display:inline-flex;align-items:center;gap:2px}.se-export{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;box-sizing:border-box;border-radius:5px;color:var(--blue);text-decoration:none}.se-export:hover{color:color-mix(in srgb,var(--blue) 72%,var(--ink))}.se-door{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;box-sizing:border-box;border:1px solid var(--line);border-radius:5px;color:var(--ink2);background:var(--paper);text-decoration:none}.se-door:hover{color:var(--blue);border-color:var(--blue);background:color-mix(in srgb,var(--line) 45%,var(--paper))}.se-door:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}@media (max-width: 760px){.se-gates{flex-basis:80px;height:80px}.se-gates~.rl-content .lp-head{top:80px}}.loading{display:flex;align-items:center;justify-content:center;gap:10px;height:100%;flex:1;color:var(--muted);font-family:var(--mono);font-size:var(--type-body)}.loading.load-error{color:var(--red)}.load-retry{font-family:var(--mono);font-size:var(--type-control);color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:3px 10px;cursor:pointer}.load-retry:hover{border-color:var(--muted)}.rf-compact{position:sticky;top:-16px;z-index:6;width:min(260px,100%);height:28px;box-sizing:border-box;margin:-8px 0 8px auto;display:flex;align-items:center;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:5px}.rf-row{position:sticky;top:-16px;z-index:6;display:flex;align-items:center;gap:10px;margin:-8px 0 8px;background:var(--paper)}.rf-row .rf-compact{position:static;margin:0 0 0 auto}.rf-summary{flex:none;color:var(--muted);font-family:var(--mono);font-size:var(--type-caption)}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.rf-summary-compact{display:none}@media (max-width: 640px){.rf-summary-full{display:none}.rf-summary-compact{display:inline}}.rf-compact:focus-within{border-color:var(--blue);box-shadow:0 0 0 2px color-mix(in srgb,var(--blue) 13%,transparent)}.rf-search-icon{width:27px;flex:none;display:grid;place-items:center}.rf-compact input{min-width:0;flex:1;height:26px;padding:0;color:var(--ink2);background:transparent;border:0;outline:0;font-family:var(--mono);font-size:var(--type-meta)}.rf-compact input::placeholder{color:var(--muted)}.rf-clear,.rf-compact .rl-secondary-filters-trigger{width:27px;height:26px;flex:none;display:grid;place-items:center;padding:0;color:var(--muted);background:transparent;border:0;border-radius:4px;cursor:pointer}.rf-clear:hover,.rf-compact .rl-secondary-filters-trigger:hover,.rf-compact .rl-secondary-filters.active-desktop .rl-secondary-filters-trigger{color:var(--ink);background:color-mix(in srgb,var(--line) 45%,transparent)}.rf-clear:focus-visible,.rf-compact .rl-secondary-filters-trigger:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}@media (max-width: 760px){.rf-compact .rl-menu{max-height:min(270px,32vh)}}.pane-filter-none{color:var(--muted);font-family:var(--mono);font-size:var(--type-meta);padding:6px 2px}.ui-tip{position:fixed;z-index:100;pointer-events:none;background:var(--panel2);color:var(--ink2);border:1px solid var(--line);border-radius:6px;padding:4px 9px;font-family:var(--mono);font-size:var(--type-meta);line-height:var(--leading-relaxed);max-width:320px;white-space:pre-line;overflow-wrap:break-word;box-shadow:0 4px 16px #00000038;opacity:0;transition:opacity .14s ease,transform .14s ease}.ui-tip[data-place=top]{transform:translateY(3px)}.ui-tip[data-place=bottom]{transform:translateY(-3px)}.ui-tip.show{opacity:1;transform:translateY(0)}.ui-tip-arrow{position:absolute;width:8px;height:8px;background:var(--panel2);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.ui-tip[data-place=top] .ui-tip-arrow{bottom:-4.5px;transform:rotate(45deg)}.ui-tip[data-place=bottom] .ui-tip-arrow{top:-4.5px;transform:rotate(225deg)}.cred-wrap{flex:1;min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--paper);padding:24px;box-sizing:border-box}.page-pane .cred-wrap{min-height:0}.cred-card{width:320px;max-width:100%;box-sizing:border-box;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:22px 24px 24px;display:flex;flex-direction:column;gap:10px;font-family:var(--mono)}.cred-brand{color:var(--muted);font-size:var(--type-control);letter-spacing:var(--tracking-normal)}.cred-title{display:flex;align-items:center;gap:7px;color:var(--ink2);font-size:var(--type-subtitle);font-weight:var(--weight-bold);overflow-wrap:anywhere}.cred-lock{color:var(--muted);flex:none}.cred-sub{margin:0;color:var(--muted);font-size:var(--type-meta);line-height:var(--leading-relaxed)}.cred-err{color:var(--red);font-size:var(--type-meta)}.cred-input{font-family:var(--mono);font-size:var(--type-body);color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:7px 9px}.cred-input:focus{outline:none;border-color:var(--blue)}.cred-submit{font-family:var(--mono);font-size:var(--type-control);font-weight:var(--weight-semibold);cursor:pointer;color:var(--blue);background:color-mix(in srgb,var(--blue) 12%,transparent);border:1px solid var(--blue);border-radius:4px;padding:6px 12px}.cred-submit:hover:not(:disabled){background:color-mix(in srgb,var(--blue) 22%,transparent)}.cred-submit:disabled{opacity:.5;cursor:default}.page-projects{height:100dvh;min-height:0;box-sizing:border-box}.page-projects-scroll{width:auto}.proj-body{width:100%;max-width:760px;margin:0 auto;padding:18px 20px 40px;box-sizing:border-box;font-family:var(--mono)}.proj-brand{margin-bottom:14px;display:flex;align-items:center;gap:9px}.proj-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.proj-count{color:var(--muted);font-size:var(--type-meta);flex:1}.proj-empty{color:var(--muted);font-size:var(--type-body);line-height:var(--leading-body);border:1px dashed var(--line);border-radius:6px;padding:14px 16px}.proj-empty p{margin:0}.proj-err{color:var(--red);font-size:var(--type-meta);margin-top:4px}.proj-dim{color:var(--muted);font-size:var(--type-meta)}.proj-act{display:inline-flex;align-items:center;gap:5px;text-decoration:none;box-sizing:border-box;font-family:var(--mono);font-size:var(--type-meta);color:var(--ink);cursor:pointer;white-space:nowrap;border:1px solid var(--line);border-radius:4px;padding:3px 9px;background:var(--paper)}.proj-act:hover:not(:disabled){border-color:var(--blue);color:var(--blue)}.proj-act.on{border-color:var(--blue);color:var(--blue);background:var(--panel2)}.proj-act.primary{color:var(--blue);border-color:var(--blue);background:color-mix(in srgb,var(--blue) 10%,transparent);font-weight:var(--weight-semibold)}.proj-act.primary:hover:not(:disabled){background:color-mix(in srgb,var(--blue) 20%,transparent)}.proj-act:disabled{opacity:.5;cursor:default}.proj-act.icon{padding:3px 6px}.proj-add-path{flex:1;min-width:0;font-family:var(--mono);font-size:var(--type-control);color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:5px 8px}.proj-add-path:focus{outline:none;border-color:var(--blue)}.proj-hint{color:var(--muted);font-size:var(--type-meta);line-height:var(--leading-relaxed);border:1px dashed var(--line);border-radius:6px;padding:8px 12px;margin-bottom:10px}.proj-admin-pw{border:1px solid var(--line);border-radius:6px;background:var(--panel);padding:4px 12px 10px;margin-bottom:12px}.proj-admin-pw .proj-drawer{border-top:none;margin-top:0;padding-top:6px}.identity-control{display:flex;flex-direction:column;align-items:flex-start;width:fit-content;max-width:100%}.identity-disclosure{display:inline-flex;align-items:center;gap:4px}.identity-disclosure>svg,.identity-disclosure>img{flex:none}.identity-iconify{display:inline-block;flex:none;background:currentColor;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.identity-edit{align-self:center}.identity-picker{width:min(420px,calc(100vw - 48px));max-width:100%;min-width:0;margin:6px 0 0;padding:0;border:0}.identity-picker legend{margin:0 0 6px;color:var(--muted);font-size:var(--type-meta)}.identity-search{display:flex;align-items:center;gap:6px;margin-bottom:6px;padding:5px 7px;border:1px solid var(--line);border-radius:4px;background:var(--paper);color:var(--muted)}.identity-search:focus-within{border-color:var(--blue);color:var(--blue)}.identity-search input{width:100%;min-width:0;border:0;outline:0;padding:0;background:transparent;color:var(--ink);font-family:var(--mono);font-size:var(--type-control)}.identity-sources{display:flex;gap:4px;margin-bottom:6px;overflow-x:auto;scrollbar-width:thin}.identity-source{flex:none;border:0;border-bottom:2px solid transparent;padding:3px 4px;background:transparent;color:var(--muted);cursor:pointer;font-family:var(--mono);font-size:var(--type-caption)}.identity-source:hover,.identity-source.on{color:var(--blue);border-bottom-color:var(--blue)}.identity-options{display:grid;grid-template-columns:repeat(4,minmax(72px,1fr));gap:6px;max-height:220px;overflow-y:auto;padding:2px}.identity-choice{position:relative;min-width:0;min-height:58px;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1px solid var(--line);border-radius:6px;background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:var(--type-caption);overflow-wrap:anywhere;text-align:center}.identity-choice:hover{border-color:var(--blue);color:var(--ink2)}.identity-choice:has(input:checked){border-color:var(--blue);background:var(--panel2);color:var(--blue);font-weight:var(--weight-semibold)}.identity-choice:has(input:focus-visible){outline:2px solid var(--blue);outline-offset:2px}.identity-choice input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.identity-choice-name{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.identity-choice-source{width:100%;color:var(--muted);font-size:var(--type-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.identity-search-status{min-height:16px;margin-top:5px;color:var(--muted);font-size:var(--type-caption)}.identity-search-status.error{color:var(--red)}.identity-picker:disabled .identity-choice{opacity:.55;cursor:default}.proj-page-details{display:flex;justify-content:flex-end;margin-top:18px;padding-top:10px;border-top:1px solid var(--line)}.proj-gateway-identity{display:flex;flex-direction:column;align-items:flex-end}.proj-gateway-identity .identity-control{align-items:flex-end}.proj-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.proj-pagination{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:12px}.proj-page-label{color:var(--muted);font-size:var(--type-meta);min-width:88px;text-align:center}.proj-row{border:1px solid var(--line);border-radius:6px;background:var(--panel);padding:7px 10px}.proj-row.current{border-color:color-mix(in srgb,var(--blue) 55%,var(--line))}.proj-row-main{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.proj-row-main>svg{flex:none}.proj-health{flex:none;width:8px;height:8px;border-radius:50%;background:var(--muted)}.proj-health.h-probing{background:var(--muted);opacity:.45}.proj-health.h-running{background:var(--green)}.proj-health.h-stopped{background:var(--muted)}.proj-health.h-unreachable{background:var(--red)}.proj-name{color:var(--ink2);font-size:var(--type-body);font-weight:var(--weight-semibold);overflow-wrap:anywhere}.proj-locked{color:var(--muted);flex:none}.proj-tag{flex:none;font-size:var(--type-caption);color:var(--blue);border:1px solid color-mix(in srgb,var(--blue) 45%,transparent);border-radius:3px;padding:0 5px}.proj-path{flex:1 1 120px;min-width:0;color:var(--muted);font-size:var(--type-meta);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-actions{display:flex;align-items:center;gap:5px;margin-left:auto;flex-wrap:wrap}.proj-drawer{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;border-top:1px dashed var(--line);margin-top:7px;padding-top:8px}.proj-pw .proj-add-path{flex:1 1 160px}.proj-add-modal{width:min(720px,94vw);overflow:hidden}.proj-add-modal .legend-body{padding:0}.proj-add-flow{display:grid;grid-template-rows:auto minmax(180px,38vh) auto auto auto;min-width:0}.proj-add-pathbar{display:flex;align-items:center;gap:6px;padding:10px;border-bottom:1px solid var(--line)}.proj-add-pathbar .proj-add-path{min-width:0}.proj-home-btn{width:28px;justify-content:center;font-size:var(--type-body)}.proj-folder-list{min-height:180px;overflow-y:auto;background:var(--paper)}.proj-folder-row{display:grid;grid-template-columns:16px minmax(0,1fr) auto auto;align-items:center;gap:7px;width:100%;min-height:32px;padding:5px 12px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink);text-align:left;cursor:pointer;font-family:var(--mono);font-size:var(--type-control)}.proj-folder-row:hover,.proj-folder-row:focus-visible{outline:none;background:var(--panel2);color:var(--ink2)}.proj-folder-row:disabled{opacity:.55;cursor:default}.proj-folder-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-folder-tag{border:1px solid var(--line);border-radius:3px;padding:0 5px;color:var(--muted);font-size:var(--type-caption)}.proj-folder-tag.spex{border-color:color-mix(in srgb,var(--green) 45%,var(--line));color:var(--green)}.proj-folder-empty{display:grid;min-height:100%;place-items:center;padding:24px;color:var(--muted);font-size:var(--type-meta)}.proj-add-options{display:grid;gap:8px;padding:10px 12px;border-top:1px solid var(--line);background:var(--panel)}.proj-add-selected{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2);font-size:var(--type-meta)}.proj-add-state,.proj-add-check{display:flex;align-items:center;gap:7px;min-width:0;color:var(--ink);font-size:var(--type-control)}.proj-add-state code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.proj-add-check{width:fit-content;cursor:pointer}.proj-add-check input,.proj-add-harness input{accent-color:var(--blue)}.proj-add-harnesses{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0;margin:0;padding:0;border:0}.proj-add-harnesses legend{float:left;margin-right:4px;color:var(--muted);font-size:var(--type-meta)}.proj-add-harness{position:relative;cursor:pointer}.proj-add-harness input{position:absolute;width:1px;height:1px;opacity:0}.proj-add-harness span{display:inline-flex;align-items:center;min-height:25px;padding:2px 8px;box-sizing:border-box;border:1px solid var(--line);border-radius:4px;background:var(--paper);color:var(--ink);font-size:var(--type-meta)}.proj-add-harness input:checked+span{border-color:var(--blue);color:var(--blue);background:var(--panel2)}.proj-add-harness input:focus-visible+span{outline:2px solid var(--blue);outline-offset:2px}.proj-add-result{padding:0 12px 10px;background:var(--panel)}.proj-add-result .proj-log{max-height:150px}.proj-add-actions{display:flex;justify-content:flex-end;gap:8px;padding:9px 12px;border-top:1px solid var(--line);background:var(--panel2)}.proj-full{flex-basis:100%}.proj-setup,.proj-config{flex-direction:column;align-items:stretch;gap:6px}.proj-setup-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.proj-config-head{min-height:22px;display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--ink2);font-size:var(--type-meta)}.proj-config-editor{box-sizing:border-box;width:100%;height:clamp(300px,50vh,560px);min-height:240px;max-height:70vh;resize:vertical;margin:0;padding:9px 10px;border:1px solid var(--line);border-radius:4px;outline:none;background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:var(--type-control);line-height:var(--leading-relaxed);-moz-tab-size:2;tab-size:2}.proj-config-editor:focus{border-color:var(--blue)}.proj-config-editor.invalid{border-color:var(--red)}.proj-op-status{font-size:var(--type-meta)}.proj-op-status.ok{color:var(--green)}.proj-op-status.fail{color:var(--red)}.proj-log{margin:4px 0 0;padding:8px 10px;max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:4px;background:var(--panel2);color:var(--muted);font-family:var(--mono);font-size:var(--type-caption);line-height:var(--leading-relaxed);white-space:pre-wrap;overflow-wrap:anywhere}.proj-chip-wrap{position:relative}.rail-btn.proj-chip{padding:4px;color:var(--ink2);overflow:hidden;border:1px solid var(--line);border-radius:6px;background:var(--panel2)}.rail-btn.proj-chip:hover,.rail-btn.proj-chip.on{border-color:var(--blue);color:var(--blue)}.proj-menu{position:absolute;left:calc(100% + 6px);top:0;z-index:60;min-width:180px;max-width:280px;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:4px;box-shadow:0 6px 24px #00000059;display:flex;flex-direction:column;gap:1px;font-family:var(--mono)}.proj-menu-item{display:flex;align-items:center;gap:7px;text-decoration:none;cursor:pointer;color:var(--ink);font-size:var(--type-control);border-radius:4px;padding:5px 8px}.proj-menu-item:hover{background:var(--panel2);color:var(--ink2)}.proj-menu-item.current{color:var(--blue)}.proj-menu-item.offline{color:var(--muted);cursor:default}.proj-menu-item.offline:hover{background:transparent;color:var(--muted)}.proj-menu-item.offline .proj-menu-mark{opacity:.55}.proj-menu-item.all{border-top:1px solid var(--line);border-radius:0 0 4px 4px;margin-top:2px;padding-top:7px;color:var(--muted)}.proj-menu-item.all:hover{color:var(--ink2)}.proj-menu-mark{display:block;flex:0 0 16px;width:16px;height:16px}.proj-menu-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-menu-status{flex:none;font-size:var(--type-caption);color:var(--muted)}.proj-menu-status.online{color:var(--green)}.proj-menu-status.offline{color:var(--muted)}@media (max-width: 640px){.proj-body{padding:14px 12px 32px}.identity-picker{width:min(100%,calc(100vw - 46px))}.identity-options{grid-template-columns:repeat(4,minmax(0,1fr))}.identity-choice{min-height:54px;font-size:var(--type-caption)}.proj-config-editor{height:clamp(300px,62dvh,540px);min-height:300px;max-height:calc(100dvh - 200px)}.proj-add-modal{width:min(96vw,720px);max-height:92dvh}.proj-add-flow{grid-template-rows:auto minmax(170px,34dvh) auto auto auto}.proj-add-pathbar{display:grid;grid-template-columns:28px 28px minmax(0,1fr) auto;padding:8px}.proj-folder-row{padding-inline:9px}.proj-row-main{row-gap:6px}.proj-path{flex-basis:100%;order:5}.proj-actions{margin-left:0;order:6}}