openlanes 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. checksums.yaml +4 -4
  2. data/Brewfile +42 -0
  3. data/agents/bb8-resolver.md +49 -0
  4. data/agents/c3po-operator.md +4 -0
  5. data/agents/chewie-verifier.md +85 -0
  6. data/agents/hansolo-reviewer.md +20 -15
  7. data/agents/lando-broker.md +81 -19
  8. data/agents/leah-researcher.md +6 -6
  9. data/agents/luke-backend.md +41 -20
  10. data/agents/{palpatine-planner.md → luthen-rael-planner.md} +15 -13
  11. data/agents/palpatine-risk-assessor.md +112 -0
  12. data/agents/r2d2-mechanic.md +5 -1
  13. data/agents/rey-frontend.md +38 -19
  14. data/agents/yoda-writer.md +7 -7
  15. data/evals/cases/chewie-verifier/verify-medium/fail/plan/plan.md +7 -0
  16. data/evals/cases/chewie-verifier/verify-medium/fail/plan/pull-requests.md +10 -0
  17. data/evals/cases/chewie-verifier/verify-medium/fail/plan/spec.md +5 -0
  18. data/evals/cases/chewie-verifier/verify-medium/fail/plan/verification/1/final.png +0 -0
  19. data/evals/cases/chewie-verifier/verify-medium/fail/plan/verification/1/report.md +7 -0
  20. data/evals/cases/chewie-verifier/verify-medium/fail/repo/bin/greet +1 -0
  21. data/evals/cases/chewie-verifier/verify-medium/fail/run.json +1 -0
  22. data/evals/cases/chewie-verifier/verify-medium/pass/plan/plan.md +7 -0
  23. data/evals/cases/chewie-verifier/verify-medium/pass/plan/pull-requests.md +10 -0
  24. data/evals/cases/chewie-verifier/verify-medium/pass/plan/spec.md +5 -0
  25. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/final.png +0 -0
  26. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/report.md +14 -0
  27. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/step-01.png +0 -0
  28. data/evals/cases/chewie-verifier/verify-medium/pass/repo/bin/greet +1 -0
  29. data/evals/cases/chewie-verifier/verify-medium/pass/run.json +1 -0
  30. data/evals/cases/chewie-verifier/verify-medium.yml +48 -0
  31. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/implementation-plan.md +5 -0
  32. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/plan.md +3 -0
  33. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/pull-requests.md +12 -0
  34. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/spec.md +5 -0
  35. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/repo/lib/cart.rb +10 -0
  36. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/repo/spec/cart_spec.rb +9 -0
  37. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/run.json +1 -0
  38. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/implementation-plan.md +5 -0
  39. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/plan.md +3 -0
  40. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/pull-requests.md +15 -0
  41. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/spec.md +5 -0
  42. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/repo/lib/cart.rb +10 -0
  43. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/repo/spec/cart_spec.rb +9 -0
  44. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/run.json +1 -0
  45. data/evals/cases/hansolo-reviewer/coverage-minimum.yml +76 -0
  46. data/evals/cases/luthen-rael-planner/plan-deep/fail/plan/plan.md +8 -0
  47. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan.md +2 -2
  48. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep.yml +1 -1
  49. data/evals/cases/luthen-rael-planner/plan-fast/fail/plan/plan.md +12 -0
  50. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan.md +2 -2
  51. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast.yml +1 -1
  52. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/plan.md +20 -0
  53. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/pull-requests.md +5 -0
  54. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/spec.md +5 -0
  55. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/repo/db/migrate/20261020120000_drop_legacy_email.rb +5 -0
  56. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/run.json +1 -0
  57. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/plan.md +25 -0
  58. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/pull-requests.md +5 -0
  59. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/spec.md +5 -0
  60. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/repo/db/migrate/20261020120000_drop_legacy_email.rb +5 -0
  61. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/run.json +1 -0
  62. data/evals/cases/palpatine-risk-assessor/risk-medium.yml +47 -0
  63. data/evals/cases/yoda-writer/spec-medium/pass/plan/spec.md +1 -1
  64. data/lib/openlanes/adapters/base.rb +18 -4
  65. data/lib/openlanes/adapters/capabilities.rb +29 -0
  66. data/lib/openlanes/adapters/claude.rb +14 -11
  67. data/lib/openlanes/adapters/codex.rb +9 -0
  68. data/lib/openlanes/adapters/pi.rb +10 -0
  69. data/lib/openlanes/adapters/stream.rb +145 -1
  70. data/lib/openlanes/adapters.rb +7 -0
  71. data/lib/openlanes/agents/agent.rb +4 -3
  72. data/lib/openlanes/agents/roster.rb +14 -2
  73. data/lib/openlanes/agents/routing.rb +43 -3
  74. data/lib/openlanes/apps/definition.rb +152 -0
  75. data/lib/openlanes/apps/framing.rb +114 -0
  76. data/lib/openlanes/apps/listing.rb +60 -0
  77. data/lib/openlanes/apps/ports.rb +168 -0
  78. data/lib/openlanes/apps/probe.rb +63 -0
  79. data/lib/openlanes/apps/process_spec.rb +39 -0
  80. data/lib/openlanes/apps/runner.rb +174 -0
  81. data/lib/openlanes/apps/status.rb +62 -0
  82. data/lib/openlanes/apps/supervisor.rb +277 -0
  83. data/lib/openlanes/apps/watcher.rb +50 -0
  84. data/lib/openlanes/apps.rb +41 -0
  85. data/lib/openlanes/cli/api/api.rb +10 -0
  86. data/lib/openlanes/cli/api/subcommands/docs.rb +63 -0
  87. data/lib/openlanes/cli/app/app.rb +31 -0
  88. data/lib/openlanes/cli/app/subcommands/start.rb +114 -0
  89. data/lib/openlanes/cli/app/subcommands/status.rb +38 -0
  90. data/lib/openlanes/cli/app/subcommands/stop.rb +44 -0
  91. data/lib/openlanes/cli/base.rb +89 -16
  92. data/lib/openlanes/cli/coverage/coverage.rb +68 -0
  93. data/lib/openlanes/cli/create/create.rb +11 -265
  94. data/lib/openlanes/cli/eval/eval.rb +4 -1
  95. data/lib/openlanes/cli/init/init.rb +39 -2
  96. data/lib/openlanes/cli/linear/subcommands/import.rb +1 -1
  97. data/lib/openlanes/cli/linear/subcommands/projects.rb +1 -1
  98. data/lib/openlanes/cli/list_plans/list_plans.rb +8 -2
  99. data/lib/openlanes/cli/mail/subcommands/ack.rb +52 -0
  100. data/lib/openlanes/cli/mail/subcommands/render.rb +31 -0
  101. data/lib/openlanes/cli/mail/subcommands/send.rb +26 -0
  102. data/lib/openlanes/cli/resync/subcommands/dirs.rb +53 -12
  103. data/lib/openlanes/cli/resync/subcommands/prs.rb +8 -69
  104. data/lib/openlanes/cli/review/review.rb +72 -0
  105. data/lib/openlanes/cli/run/run.rb +22 -486
  106. data/lib/openlanes/cli/setup/setup.rb +51 -0
  107. data/lib/openlanes/cli/start/start.rb +7 -51
  108. data/lib/openlanes/cli/state/state.rb +1 -1
  109. data/lib/openlanes/cli/state/subcommands/resume.rb +61 -0
  110. data/lib/openlanes/cli/state/subcommands/sign.rb +1 -1
  111. data/lib/openlanes/cli/unblock/unblock.rb +11 -205
  112. data/lib/openlanes/cli/web/web.rb +84 -8
  113. data/lib/openlanes/cli/worktree/worktree.rb +1 -1
  114. data/lib/openlanes/cli/worktree/worktree_prune.rb +77 -0
  115. data/lib/openlanes/cli.rb +37 -2
  116. data/lib/openlanes/coverage/cobertura.rb +49 -0
  117. data/lib/openlanes/coverage/config.rb +194 -0
  118. data/lib/openlanes/coverage/istanbul.rb +31 -0
  119. data/lib/openlanes/coverage/lcov.rb +38 -0
  120. data/lib/openlanes/coverage/report.rb +71 -0
  121. data/lib/openlanes/coverage/simplecov.rb +70 -0
  122. data/lib/openlanes/coverage.rb +33 -0
  123. data/lib/openlanes/engine/agent_locks.rb +231 -0
  124. data/lib/openlanes/engine/arbitration.rb +25 -0
  125. data/lib/openlanes/engine/board.rb +36 -5
  126. data/lib/openlanes/engine/conversions.rb +160 -0
  127. data/lib/openlanes/engine/coverage_gate.rb +217 -0
  128. data/lib/openlanes/engine/dispatcher.rb +1175 -117
  129. data/lib/openlanes/engine/event_journal/replay.rb +96 -0
  130. data/lib/openlanes/engine/event_journal.rb +148 -0
  131. data/lib/openlanes/engine/extensions.rb +271 -0
  132. data/lib/openlanes/engine/merging.rb +459 -0
  133. data/lib/openlanes/engine/narrator.rb +6 -6
  134. data/lib/openlanes/engine/plan_locks.rb +114 -0
  135. data/lib/openlanes/engine/pr_outcomes.rb +161 -0
  136. data/lib/openlanes/engine/pr_watch.rb +83 -0
  137. data/lib/openlanes/engine/progress_log.rb +12 -120
  138. data/lib/openlanes/engine/quality_question.rb +125 -0
  139. data/lib/openlanes/engine/rebase.rb +200 -0
  140. data/lib/openlanes/engine/run_workflow.rb +776 -0
  141. data/lib/openlanes/engine/runner.rb +186 -15
  142. data/lib/openlanes/engine/start_workflow.rb +77 -0
  143. data/lib/openlanes/engine/state_file.rb +101 -34
  144. data/lib/openlanes/engine/tally.rb +1 -1
  145. data/lib/openlanes/engine/verification/app_session.rb +104 -0
  146. data/lib/openlanes/engine/verification/driver.rb +314 -0
  147. data/lib/openlanes/engine/verification/outcome.rb +516 -0
  148. data/lib/openlanes/engine/verification/report.rb +95 -0
  149. data/lib/openlanes/engine/verification/round.rb +100 -0
  150. data/lib/openlanes/engine/verification/screenshots.rb +120 -0
  151. data/lib/openlanes/engine/verification.rb +57 -0
  152. data/lib/openlanes/engine.rb +30 -1
  153. data/lib/openlanes/execution/boundary.rb +212 -0
  154. data/lib/openlanes/execution/child.rb +4 -2
  155. data/lib/openlanes/execution/clock.rb +36 -6
  156. data/lib/openlanes/execution/control.rb +32 -0
  157. data/lib/openlanes/execution/executor.rb +114 -35
  158. data/lib/openlanes/execution/process_start.rb +63 -0
  159. data/lib/openlanes/execution/prompt.rb +223 -34
  160. data/lib/openlanes/execution/transcript.rb +159 -8
  161. data/lib/openlanes/execution.rb +21 -0
  162. data/lib/openlanes/lifecycle/adoption.rb +25 -8
  163. data/lib/openlanes/lifecycle/aging.rb +166 -0
  164. data/lib/openlanes/lifecycle/allocator.rb +216 -0
  165. data/lib/openlanes/lifecycle/brief.rb +32 -2
  166. data/lib/openlanes/lifecycle/completion.rb +12 -6
  167. data/lib/openlanes/lifecycle/create_workflow.rb +272 -0
  168. data/lib/openlanes/lifecycle/creator.rb +17 -13
  169. data/lib/openlanes/lifecycle/lanes.rb +1 -1
  170. data/lib/openlanes/lifecycle/resync.rb +170 -42
  171. data/lib/openlanes/lifecycle/unblock_workflow.rb +234 -0
  172. data/lib/openlanes/lifecycle/unblocker.rb +76 -2
  173. data/lib/openlanes/lifecycle.rb +37 -1
  174. data/lib/openlanes/linear/mapping.rb +4 -1
  175. data/lib/openlanes/linear/unit.rb +1 -1
  176. data/lib/openlanes/live/chat.rb +60 -11
  177. data/lib/openlanes/live/choice_converter.rb +166 -0
  178. data/lib/openlanes/live/choice_judge.rb +109 -0
  179. data/lib/openlanes/live/claims.rb +9 -1
  180. data/lib/openlanes/live/command.rb +13 -10
  181. data/lib/openlanes/live/commands.rb +217 -30
  182. data/lib/openlanes/live/copilot/slash.rb +82 -0
  183. data/lib/openlanes/live/copilot.rb +38 -4
  184. data/lib/openlanes/live/event_bus/base.rb +52 -0
  185. data/lib/openlanes/live/event_bus/memory_bus.rb +14 -0
  186. data/lib/openlanes/live/event_bus/redis_bus.rb +10 -0
  187. data/lib/openlanes/live/event_bus/transaction.rb +27 -0
  188. data/lib/openlanes/live/event_bus.rb +29 -0
  189. data/lib/openlanes/live/interviewer.rb +146 -0
  190. data/lib/openlanes/live/keys.rb +56 -0
  191. data/lib/openlanes/live/mail.rb +143 -0
  192. data/lib/openlanes/live/memory_store.rb +12 -1
  193. data/lib/openlanes/live/news.rb +61 -0
  194. data/lib/openlanes/live/node.rb +20 -0
  195. data/lib/openlanes/live/outage.rb +225 -0
  196. data/lib/openlanes/live/outage_report.rb +89 -0
  197. data/lib/openlanes/live/publisher.rb +42 -2
  198. data/lib/openlanes/live/run_record.rb +39 -1
  199. data/lib/openlanes/live/run_state.rb +19 -2
  200. data/lib/openlanes/live/session.rb +31 -3
  201. data/lib/openlanes/live/snapshot.rb +103 -42
  202. data/lib/openlanes/live/stations.rb +4 -4
  203. data/lib/openlanes/live/store.rb +18 -1
  204. data/lib/openlanes/live/subscriber.rb +22 -2
  205. data/lib/openlanes/live.rb +66 -1
  206. data/lib/openlanes/plans/blocked_file.rb +117 -0
  207. data/lib/openlanes/plans/choices.rb +228 -0
  208. data/lib/openlanes/plans/dependencies.rb +304 -0
  209. data/lib/openlanes/plans/feature.rb +75 -16
  210. data/lib/openlanes/plans/journal.rb +169 -0
  211. data/lib/openlanes/plans/last_known_state.rb +82 -0
  212. data/lib/openlanes/plans/lock.rb +171 -0
  213. data/lib/openlanes/plans/mailbox.rb +145 -4
  214. data/lib/openlanes/plans/plan_state.rb +590 -9
  215. data/lib/openlanes/plans/pull_request_machine.rb +163 -0
  216. data/lib/openlanes/plans/review_label.rb +139 -0
  217. data/lib/openlanes/plans/spec.rb +239 -3
  218. data/lib/openlanes/plans/state_machine.rb +63 -30
  219. data/lib/openlanes/plans/status.rb +60 -11
  220. data/lib/openlanes/plans/subject.rb +4 -0
  221. data/lib/openlanes/plans/tree.rb +101 -10
  222. data/lib/openlanes/plans/verdict.rb +124 -0
  223. data/lib/openlanes/plans.rb +19 -0
  224. data/lib/openlanes/presentation/api_docs.rb +76 -0
  225. data/lib/openlanes/presentation/documentation.rb +105 -12
  226. data/lib/openlanes/presentation/pr_changes.rb +90 -0
  227. data/lib/openlanes/presentation/reporter.rb +64 -5
  228. data/lib/openlanes/presentation.rb +20 -1
  229. data/lib/openlanes/setup/check.rb +16 -0
  230. data/lib/openlanes/setup/machine.rb +179 -0
  231. data/lib/openlanes/setup.rb +34 -0
  232. data/lib/openlanes/support/clock.rb +57 -0
  233. data/lib/openlanes/support/config.rb +318 -6
  234. data/lib/openlanes/support/log.rb +206 -0
  235. data/lib/openlanes/support/refusal.rb +15 -0
  236. data/lib/openlanes/support/runtime.rb +61 -0
  237. data/lib/openlanes/support/spawner.rb +51 -0
  238. data/lib/openlanes/support/ui.rb +39 -24
  239. data/lib/openlanes/vcs/ci_gate.rb +31 -0
  240. data/lib/openlanes/vcs/github.rb +362 -12
  241. data/lib/openlanes/vcs/label_migration.rb +132 -0
  242. data/lib/openlanes/vcs/label_sync.rb +75 -0
  243. data/lib/openlanes/vcs/publisher.rb +226 -8
  244. data/lib/openlanes/vcs/refresh.rb +337 -0
  245. data/lib/openlanes/vcs/rename_date.rb +83 -0
  246. data/lib/openlanes/vcs/review.rb +66 -0
  247. data/lib/openlanes/vcs/worktree.rb +167 -6
  248. data/lib/openlanes/vcs.rb +18 -0
  249. data/lib/openlanes/version.rb +1 -1
  250. data/lib/openlanes/web/admin_auth.rb +104 -0
  251. data/lib/openlanes/web/app.rb +115 -16
  252. data/lib/openlanes/web/context.rb +15 -9
  253. data/lib/openlanes/web/demo.rb +29 -14
  254. data/lib/openlanes/web/demo_board.rb +63 -5
  255. data/lib/openlanes/web/events.rb +86 -7
  256. data/lib/openlanes/web/launcher.rb +69 -7
  257. data/lib/openlanes/web/listen.rb +133 -0
  258. data/lib/openlanes/web/plan_files.rb +136 -0
  259. data/lib/openlanes/web/request_log.rb +108 -0
  260. data/lib/openlanes/web/server.rb +29 -10
  261. data/lib/openlanes/web.rb +6 -4
  262. data/lib/openlanes.rb +45 -7
  263. data/openlanes.gemspec +9 -4
  264. data/schemas/journal-event.schema.json +72 -0
  265. data/schemas/plan-state.schema.json +163 -2
  266. data/skills/openlanes/SKILL.md +2 -2
  267. data/skills/openlanes-documents/SKILL.md +4 -4
  268. data/skills/openlanes-documents/references/blocked-template.md +2 -2
  269. data/skills/openlanes-documents/references/closing-templates.md +1 -1
  270. data/skills/openlanes-documents/references/plan-template.md +12 -4
  271. data/skills/openlanes-documents/references/retroactive-spec.md +1 -1
  272. data/skills/openlanes-run/SKILL.md +5 -5
  273. data/skills/openlanes-spec/SKILL.md +1 -1
  274. data/skills/openlanes-status/SKILL.md +1 -1
  275. data/web/dist/assets/{index-BFPI-zXI.js → index-690ayLS4.js} +2 -2
  276. data/web/dist/assets/index-6ZmW4slI.js +199 -0
  277. data/web/dist/assets/{index-bpsFIpXE.js → index-B5KzlXp1.js} +2 -2
  278. data/web/dist/assets/{index-DtA46i32.js → index-BAo_v9bU.js} +2 -2
  279. data/web/dist/assets/{index-CnJfB0l2.js → index-BDm7g-xG.js} +2 -2
  280. data/web/dist/assets/{index-DXgeajd6.js → index-BFH9bC7v.js} +2 -2
  281. data/web/dist/assets/{index-DH0gDlee.js → index-BVHPV7z4.js} +2 -2
  282. data/web/dist/assets/{index-DaSjQ-H4.js → index-B_CPqjnA.js} +2 -2
  283. data/web/dist/assets/{index-Dbxvk-EC.js → index-BhwBH5ct.js} +2 -2
  284. data/web/dist/assets/{index-6MZkmh3k.js → index-Bq5AdwEt.js} +2 -2
  285. data/web/dist/assets/{index-B5CKJPm-.js → index-CAW6ClM2.js} +2 -2
  286. data/web/dist/assets/index-Cp86u27u.css +1 -0
  287. data/web/dist/assets/{index-CnvkZu5Y.js → index-Culm4pMO.js} +2 -2
  288. data/web/dist/assets/{index-IqD8mBos.js → index-DElDJfp1.js} +2 -2
  289. data/web/dist/assets/{index-C3zc4gFe.js → index-Dja7osNW.js} +2 -2
  290. data/web/dist/assets/{index-C2jwoWVV.js → index-DjhU3FzU.js} +2 -2
  291. data/web/dist/assets/{index-pvJi-JJO.js → index-Dutbxj4o.js} +2 -2
  292. data/web/dist/assets/{index-BF6QYroq.js → index-RkDhPMDt.js} +2 -2
  293. data/web/dist/assets/{index-DbueqOK5.js → index-_mptZjlC.js} +2 -2
  294. data/web/dist/index.html +2 -2
  295. data/web/src/api/fixtures/board.json +203 -28
  296. metadata +1053 -889
  297. data/bin/factory-e2e +0 -157
  298. data/bin/plan-number +0 -164
  299. data/bin/setup +0 -26
  300. data/evals/cases/palpatine-planner/plan-deep/fail/plan/plan.md +0 -8
  301. data/evals/cases/palpatine-planner/plan-fast/fail/plan/plan.md +0 -12
  302. data/web/dist/assets/index-BYJCWlk0.js +0 -198
  303. data/web/dist/assets/index-CjInBi5X.css +0 -1
  304. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/plan/plan-backend.md +0 -0
  305. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/plan/spec.md +0 -0
  306. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/run.json +0 -0
  307. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan-backend.md +0 -0
  308. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan-frontend.md +0 -0
  309. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/spec.md +0 -0
  310. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/run.json +0 -0
  311. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/plan-backend.md +0 -0
  312. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/plan-frontend.md +0 -0
  313. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/spec.md +0 -0
  314. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/run.json +0 -0
  315. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan-backend.md +0 -0
  316. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan-frontend.md +0 -0
  317. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/spec.md +0 -0
  318. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/run.json +0 -0
  319. /data/exe/{depot → ol} +0 -0
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#d5c4a1;background:#282828}.hljs::selection{color:#d5c4a1;background-color:#504945}.hljs ::selection{color:#d5c4a1;background-color:#504945}.hljs-comment{color:#665c54}.hljs-tag{color:#bdae93}.hljs-subst,.hljs-punctuation,.hljs-operator{color:#d5c4a1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-variable,.hljs-template-variable,.hljs-selector-tag,.hljs-name,.hljs-deletion{color:#fb4934}.hljs-symbol,.hljs-number,.hljs-link,.hljs-attr,.hljs-variable.constant_,.hljs-literal{color:#fe8019}.hljs-title,.hljs-class .hljs-title,.hljs-title.class_{color:#fabd2f}.hljs-strong{color:#fabd2f;font-weight:700}.hljs-code,.hljs-addition,.hljs-title.class_.inherited__,.hljs-string{color:#b8bb26}.hljs-built_in,.hljs-doctag,.hljs-quote,.hljs-keyword.hljs-atrule,.hljs-regexp{color:#8ec07c}.hljs-function .hljs-title,.hljs-attribute,.ruby .hljs-property,.hljs-title.function_,.hljs-section{color:#83a598}.hljs-type,.hljs-template-tag,.diff .hljs-meta,.hljs-keyword{color:#d3869b}.hljs-emphasis{color:#d3869b;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#d65d0e}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.static{position:static}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.table{display:table}.grow{flex-grow:1}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-cyrillic-ext-400-normal-AKUz2ZI5.woff2)format("woff2"),url(/assets/overpass-cyrillic-ext-400-normal-C2ZjKngx.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-cyrillic-400-normal-tXDxWGRy.woff2)format("woff2"),url(/assets/overpass-cyrillic-400-normal-CZsFKZCk.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-vietnamese-400-normal-BKRCEiXy.woff2)format("woff2"),url(/assets/overpass-vietnamese-400-normal-CCWAWVG7.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-latin-ext-400-normal-BIkXRwl6.woff2)format("woff2"),url(/assets/overpass-latin-ext-400-normal-DUq_h-_z.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-latin-400-normal-BpeLJ0bs.woff2)format("woff2"),url(/assets/overpass-latin-400-normal-c_C8zulu.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/overpass-cyrillic-ext-600-normal-CW4Fknsm.woff2)format("woff2"),url(/assets/overpass-cyrillic-ext-600-normal-Zx-mtRSD.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/overpass-cyrillic-600-normal-B-hc8bdn.woff2)format("woff2"),url(/assets/overpass-cyrillic-600-normal-CXB2Mrig.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/overpass-vietnamese-600-normal-CjS-4vQf.woff2)format("woff2"),url(/assets/overpass-vietnamese-600-normal-DlMMlPfM.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/overpass-latin-ext-600-normal-Cyj4Nio0.woff2)format("woff2"),url(/assets/overpass-latin-ext-600-normal-DQKKMGzp.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/overpass-latin-600-normal-25RhTNCi.woff2)format("woff2"),url(/assets/overpass-latin-600-normal-DhYQrzaY.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/overpass-cyrillic-ext-800-normal-CIth-cA7.woff2)format("woff2"),url(/assets/overpass-cyrillic-ext-800-normal-hx3cL3ZN.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/overpass-cyrillic-800-normal-CP6RWG8X.woff2)format("woff2"),url(/assets/overpass-cyrillic-800-normal-PJW4A9xW.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/overpass-vietnamese-800-normal-BB8K9-Vo.woff2)format("woff2"),url(/assets/overpass-vietnamese-800-normal-DZUygvj_.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/overpass-latin-ext-800-normal-DZ60AB77.woff2)format("woff2"),url(/assets/overpass-latin-ext-800-normal-D6WKWGNs.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Overpass;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/overpass-latin-800-normal-Bzx_XP5l.woff2)format("woff2"),url(/assets/overpass-latin-800-normal-D6-q4f0l.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Overpass Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-mono-cyrillic-ext-400-normal-Dgejvo4A.woff2)format("woff2"),url(/assets/overpass-mono-cyrillic-ext-400-normal-DgxwtUZy.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-mono-cyrillic-400-normal-B144qALP.woff2)format("woff2"),url(/assets/overpass-mono-cyrillic-400-normal-XK9_jwT8.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-mono-vietnamese-400-normal-jmOeL0rj.woff2)format("woff2"),url(/assets/overpass-mono-vietnamese-400-normal-DrLp_cHj.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-mono-latin-ext-400-normal-DBdJzBs_.woff2)format("woff2"),url(/assets/overpass-mono-latin-ext-400-normal-5YIw-E8g.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Overpass Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/overpass-mono-latin-400-normal-VINZG6Js.woff2)format("woff2"),url(/assets/overpass-mono-latin-400-normal-DqAOLzCO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-condensed-vietnamese-600-normal-A5AYRdjN.woff2)format("woff2"),url(/assets/barlow-condensed-vietnamese-600-normal-CNlPk46_.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-condensed-latin-ext-600-normal-18ESti3H.woff2)format("woff2"),url(/assets/barlow-condensed-latin-ext-600-normal-Clv9cIcR.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-condensed-latin-600-normal-DepVgxBB.woff2)format("woff2"),url(/assets/barlow-condensed-latin-600-normal-BFJEwTuo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--enamel:#e9edf1;--plate:#fff;--ink:#13233f;--ink-soft:#45556e;--hairline:#d3dae3;--road:#b9c3d0;--lane-full:#1f5fd1;--lane-plan:#c98700;--lane-quick:#1e8c3a;--alarm:#d1343b;--go:#1e9e5a;--merged:#8250df;--highlight:#d35728;--on-highlight:#fff;--logo-plate:#d9420b;--copilot-head:#88b6ffe3;--copilot-body:#bad6bf;--inv-plate:#1b2539;--inv-enamel:#111a2b;--inv-ink:#e4eaf3;--inv-ink-soft:#9aa7bc;--inv-hairline:#2d3b57;--inv-alarm:#f06a6f;--inv-go:#45d08a;--inv-focus:#8db2ff;--inv-scheme:dark;--groove:#000}@supports (color:color-mix(in lab,red,red)){:root{--groove:color-mix(in srgb, #000 10%, var(--plate))}}:root{--groove-shade:#00000047;--groove-light:#ffffffd9;--wash:18%;--lane-full-bg:#1f5fd1}@supports (color:color-mix(in lab,red,red)){:root{--lane-full-bg:color-mix(in srgb, #1f5fd1 var(--wash), var(--plate))}}:root{--lane-plan-bg:#f2c200}@supports (color:color-mix(in lab,red,red)){:root{--lane-plan-bg:color-mix(in srgb, #f2c200 var(--wash), var(--plate))}}:root{--lane-quick-bg:#1fa347}@supports (color:color-mix(in lab,red,red)){:root{--lane-quick-bg:color-mix(in srgb, #1fa347 var(--wash), var(--plate))}}:root{--label-progress:#fff3b0;--label-approved:#0b6e2e;--focus:#1f5fd1;--colw:128px;--gutter:236px;--radius-car:6px;--radius-plate:10px;--sans:"Overpass", system-ui, sans-serif;--mono:"Overpass Mono", ui-monospace, monospace;--condensed:"Barlow Condensed", "Arial Narrow", sans-serif;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--enamel:#0e1522;--plate:#151e2f;--ink:#e4eaf3;--ink-soft:#8d9ab0;--hairline:#26324a;--road:#3a4864;--lane-full:#5b8df0;--lane-plan:#f0b43c;--lane-quick:#4cc76a;--alarm:#f06a6f;--go:#45d08a;--merged:#a371f7;--groove:#000}@supports (color:color-mix(in lab,red,red)){:root:not([data-theme=light]){--groove:color-mix(in srgb, #000 45%, var(--plate))}}:root:not([data-theme=light]){--groove-shade:#000000b3;--groove-light:#ffffff12;--wash:9%;--inv-plate:#edf1f6;--inv-enamel:#dfe6ef;--inv-ink:#13233f;--inv-ink-soft:#55657d;--inv-hairline:#c6d0dd;--inv-alarm:#c42f36;--inv-go:#1e8c4e;--inv-focus:#1f5fd1;--inv-scheme:light;--label-progress:#5a4d12;--label-approved:#3faf6a;--focus:#8db2ff;color-scheme:dark}}:root[data-theme=dark]{--enamel:#0e1522;--plate:#151e2f;--ink:#e4eaf3;--ink-soft:#8d9ab0;--hairline:#26324a;--road:#3a4864;--lane-full:#5b8df0;--lane-plan:#f0b43c;--lane-quick:#4cc76a;--alarm:#f06a6f;--go:#45d08a;--merged:#a371f7;--groove:#000}@supports (color:color-mix(in lab,red,red)){:root[data-theme=dark]{--groove:color-mix(in srgb, #000 45%, var(--plate))}}:root[data-theme=dark]{--groove-shade:#000000b3;--groove-light:#ffffff12;--wash:9%;--inv-plate:#edf1f6;--inv-enamel:#dfe6ef;--inv-ink:#13233f;--inv-ink-soft:#55657d;--inv-hairline:#c6d0dd;--inv-alarm:#c42f36;--inv-go:#1e8c4e;--inv-focus:#1f5fd1;--inv-scheme:light;--label-progress:#5a4d12;--label-approved:#3faf6a;--focus:#8db2ff;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--enamel);color:var(--ink);font:400 15px/1.45 var(--sans);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;padding-bottom:var(--statusbar-h)}:root{--statusbar-h:60px}@media(prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}.board{background:var(--plate);border:1px solid var(--hairline);border-radius:var(--radius-plate);overflow-x:auto;container-type:inline-size}.board[hidden]{display:none}.board-inner{--stations: 7;--colw: max(128px, (100cqw - var(--gutter) - 24px) / var(--stations))}.board-inner{min-width:calc(var(--gutter) + var(--stations) * var(--colw) + 24px);padding:8px 0 12px}.stations{display:grid;grid-template-columns:var(--gutter) repeat(var(--stations),var(--colw));padding:10px 0 6px;position:sticky;top:0}.station-name{text-align:center;font-weight:800;font-size:13px;letter-spacing:-.01em;line-height:1.15}.station-agent{display:block;font-weight:400;color:var(--ink-soft);font-size:12px;margin-top:2px}.plan{position:relative;display:grid;grid-template-columns:var(--gutter) auto;padding:18px 0 20px;background:var(--lane-bg)}.plan:before{content:"";position:absolute;z-index:1;left:10px;right:10px;top:-3px;height:6px;border-radius:3px;background:var(--groove);pointer-events:none;box-shadow:inset 0 2px 3px var(--groove-shade),inset 0 -1px 0 var(--groove-light),0 1px 0 var(--groove-light)}.plan.is-retiring{overflow:hidden}.plan-head{padding:0 16px 0 20px}.plan-id{font-weight:800;font-size:13px;color:var(--ink-soft)}.plan-title{font-weight:600;font-size:16px;line-height:1.25;margin:2px 0 6px}.plan-meta{font-size:13px;color:var(--ink-soft);display:flex;flex-wrap:wrap;gap:4px 12px}.lane{display:inline-flex;align-items:center;gap:6px}.lane:before{content:"";width:14px;height:4px;border-radius:2px;background:var(--lane-color)}.route{position:relative;width:calc(var(--stations) * var(--colw))}.track{position:relative;height:22px}.seg{position:absolute;top:9px;height:4px;width:var(--colw);left:calc(var(--i) * var(--colw) + var(--colw) / 2);background-image:radial-gradient(circle,var(--road) 1.2px,transparent 1.6px);background-size:8px 4px}.seg:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--lane-color);border-radius:2px;transform-origin:left;transform:scaleX(0);transition:transform .7s cubic-bezier(.6,0,.2,1)}.seg.is-done:after{transform:scaleX(1)}.seg.is-off{background-image:none}.stop{position:absolute;top:3px;width:16px;height:16px;margin-left:-8px;left:calc(var(--i) * var(--colw) + var(--colw) / 2);border-radius:50%;background:var(--plate);border:3px solid var(--road);transition:border-color .3s,background .3s}.stop.is-done{border-color:var(--lane-color);background:var(--lane-color)}.stop.is-here{border-color:var(--lane-color);background:var(--plate);box-shadow:0 0 0 4px color-mix(in srgb,var(--lane-color) 22%,transparent)}.stop.is-skip{border-width:2px;border-style:dashed;width:12px;height:12px;margin-left:-6px;top:5px}.stop.is-off{opacity:.35;border-width:2px}.cars{display:flex;flex-direction:column;align-items:flex-start;gap:8px;margin-top:12px;padding-left:8px;transform:translate(calc(var(--col) * var(--colw) + var(--colw) / 2 - 22px));transition:transform .7s cubic-bezier(.6,0,.2,1);width:max-content}.car{position:relative;display:block;text-align:left;width:248px;padding:10px 12px;cursor:pointer;--car-tint: var(--go);background:color-mix(in srgb,var(--car-tint) 13%,transparent);border:1px solid color-mix(in srgb,var(--car-tint) 32%,transparent);border-left:3px solid var(--lane-color);border-radius:var(--radius-car);transition:background-color .4s,border-color .4s}.car.is-blocked{--car-tint: var(--alarm);border-left-color:var(--alarm)}.car.is-blocked .car-model{color:var(--alarm);font-weight:600}.car.is-blocked .car-activity{color:var(--ink);font:13px/1.35 var(--sans);white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.car:hover{border-color:color-mix(in srgb,var(--car-tint) 70%,transparent)}.car:has(.car-open[aria-expanded=true]){border-color:var(--ink)}.car:hover,.car:has(.car-open[aria-expanded=true]){border-left-color:var(--lane-color)}.car.is-blocked:hover,.car.is-blocked:has(.car-open[aria-expanded=true]){border-left-color:var(--alarm)}.car-top{display:flex;justify-content:space-between;gap:8px;font-size:14px}.car-agent{font-weight:800;letter-spacing:-.01em}.car-model{color:var(--ink-soft);font-size:13px}.car-activity{font:12px/1.4 var(--mono);color:var(--ink-soft);margin:6px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.car-stats{display:flex;gap:12px;font-size:13px}.car-stats span:last-child{margin-left:auto;color:var(--ink-soft)}.car.is-queued{border-left-style:dashed;cursor:default}.car-open{all:unset;cursor:pointer;font-weight:800;letter-spacing:-.01em}.car-open:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit}.car:has(.car-open:focus-visible){outline:2px solid var(--focus);outline-offset:2px}.car-slot{position:relative;z-index:1;display:inline-flex}.cars:has(.terminus){flex-direction:row}.cars.is-late{transform:translate(calc(var(--stations) * var(--colw) - 100% - 8px))}.terminus{font-size:13px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}.chip{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid var(--hairline)}.chip-progress{background:var(--label-progress);border-color:transparent;color:var(--ink)}.chip-approved{background:var(--label-approved);border-color:transparent;color:#fff}.chip-rejected{background:var(--alarm);border-color:transparent;color:#fff}.pr-link{font-weight:800;color:var(--ink);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--road)}.pr-link:hover{text-decoration-color:currentColor}.pr-link:after{content:"↗";margin-left:3px;font-weight:400;color:var(--ink-soft)}.pr-link.is-merged{color:var(--merged)}.chip-merged{background:var(--merged);border-color:transparent;color:#fff}.ci-pass{color:var(--go);font-weight:600}.ci-run{color:var(--ink-soft)}.ci-fail{color:var(--alarm);font-weight:600}.machine-note{margin:0 0 6px;padding:12px 16px 0;font-size:13px;color:var(--ink-soft)}.machine-note strong{color:var(--ink)}.car.is-readonly{cursor:default}.car.is-readonly:hover{border-color:color-mix(in srgb,var(--car-tint) 32%,transparent);border-left-color:var(--lane-color)}.machine-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 16px;margin:0 0 2px;padding:8px 18px 12px;background:var(--highlight);color:var(--on-highlight);border-radius:10px}.plan+.machine-head{margin-top:22px}.machine-head{font-family:var(--condensed);font-weight:600}.machine-head h2{margin:0;font-size:24px;font-weight:600;letter-spacing:.01em}.machine-head h2:before{content:"🖥️";margin-right:8px;font-size:18px}.machine-head p{margin:0;font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--on-highlight);display:flex;flex-wrap:wrap;gap:0 14px}.plan.is-theirs{opacity:.85}.board-empty{padding:16px 20px;color:var(--ink-soft)}@media(prefers-reduced-motion:reduce){.seg:after,.cars,.stop,.car{transition:none}}.btn{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 16px;border-radius:8px;cursor:pointer;font:inherit;font-weight:600;color:var(--ink);border:1px solid var(--hairline);background:var(--plate)}.btn[aria-pressed=true]:not(.md-mode){background:var(--ink);color:var(--plate);border-color:var(--ink)}.btn-choice{min-width:76px;justify-content:center}.btn-words{font-size:13px;text-decoration:underline;text-underline-offset:3px}.help-pill{min-width:40px;padding-inline:0;justify-content:center;border:1px solid color-mix(in srgb,var(--ink) 30%,transparent);border-radius:999px;font-weight:800}.feedback{margin:8px 0 0;font-size:13px;color:var(--ink-soft)}.feedback.is-refused{color:var(--alarm);font-weight:600}.feedback:empty{display:none}.rail,.drawer{background:var(--plate);border:1px solid var(--hairline);border-radius:var(--radius-plate);padding:18px 18px 20px;position:sticky;top:16px;max-height:calc(100vh - 32px);display:flex;flex-direction:column}.rail h2,.drawer h2{font-size:18px;font-weight:800;letter-spacing:-.01em;margin:0 0 4px}.rail-sub{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.drawer{overflow-y:auto}@media(max-width:960px){.rail,.drawer{position:static;max-height:70vh}}.asks{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px;margin:0 -6px;padding:2px 6px 4px;overscroll-behavior:contain}.empty{color:var(--ink-soft)}.ask{flex:none;padding:14px;border-radius:10px;background:var(--enamel);border:1px solid var(--hairline);border-left:3px solid var(--alarm);transition:opacity .5s ease}.ask textarea{background:var(--plate)}.ask-who{font-size:13px;color:var(--ink-soft);margin:0}.ask-text{margin:4px 0 10px}.ask-text>:first-child{margin-top:0}.ask-text>:last-child{margin-bottom:0}.ask textarea,.drawer textarea{width:100%;min-height:76px;resize:vertical;padding:10px;border-radius:8px;font:inherit;color:var(--ink);border:1px solid var(--hairline);background:var(--enamel)}textarea[aria-invalid=true]{border-color:var(--alarm)}.ask-actions,.composer-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.ask-done{color:var(--ink-soft);font-size:14px;margin:0}.ask.is-done{border-left-color:var(--hairline);padding:10px 14px}.ask-held{--held: color-mix(in srgb, var(--alarm) 70%, #000);margin-left:6px;padding:1px 8px;border-radius:999px;background:var(--held);color:#fff;font-weight:700}.ask.is-held{border-left-color:var(--alarm)}.is-leaving{opacity:0}.ask-confirm{margin:10px 0 0;padding:10px 12px;border-radius:8px;background:color-mix(in srgb,var(--alarm) 10%,transparent);border:1px solid color-mix(in srgb,var(--alarm) 35%,transparent)}.ask-confirm p{margin:0}.unblock{margin:14px 24px 0;padding:14px 16px 16px;background:var(--plate);border:2px solid var(--highlight);border-radius:var(--radius-plate);transition:opacity .5s ease}.unblock-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}.unblock-head h2{margin:0;font-size:18px;font-weight:800;letter-spacing:-.01em}.unblock-head .btn{margin-left:auto}.unblock .ask{border:0;padding:0;background:transparent}.unblock-answer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end}.unblock-buttons{display:flex;flex-direction:column;gap:8px}@media(max-width:640px){.unblock-answer{grid-template-columns:minmax(0,1fr)}}@media(max-width:960px){.unblock{margin:12px 16px 0}}.md{--editor-bg: oklch(from var(--enamel) calc(l*.93) c h);position:relative;height:var(--md-height, min(52vh, 460px));min-height:120px;border:1px solid var(--hairline);border-radius:10px;background:var(--editor-bg);overflow:hidden}.md.is-resizable{resize:vertical}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .md{--editor-bg: oklch(from var(--enamel) calc(l*1.3) c h)}}:root[data-theme=dark] .md{--editor-bg: oklch(from var(--enamel) calc(l*1.3) c h)}.md:focus-within{outline:2px solid var(--focus);outline-offset:1px}.md.is-invalid{border-color:var(--alarm)}.md .cm-theme,.md .cm-editor{height:100%}.md .cm-editor.cm-focused{outline:none}.md .cm-scroller{font:14px/1.6 var(--mono)}.md .cm-content{padding:14px 4px}.md-modes{display:flex;justify-content:flex-end;gap:4px;margin-bottom:6px}.md-mode{min-height:30px;padding:3px 12px;font-size:13px;border-radius:999px;border-color:transparent}.md-mode[aria-pressed=true]{background:color-mix(in srgb,var(--ink) 14%,transparent);color:var(--ink)}.md-mode[aria-pressed=false]{background:transparent;color:var(--ink-soft)}.md-preview{height:var(--md-height, 180px);min-height:120px;resize:vertical;overflow:auto;padding:10px 16px;border:1px solid var(--hairline);border-radius:10px;background:var(--plate);line-height:1.55}.md-preview:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.md-preview>:first-child{margin-top:0}.md-preview h1,.md-preview h2,.md-preview h3{margin:14px 0 6px;line-height:1.25}.md-preview h1{font-size:22px}.md-preview h2{font-size:19px}.md-preview h3{font-size:16px}.md-preview p,.md-preview ul,.md-preview ol,.md-preview blockquote{margin:0 0 10px}.md-preview blockquote{padding-left:12px;border-left:3px solid var(--hairline);color:var(--ink-soft)}.md-preview code{font:13px/1.5 var(--mono)}.md-preview :not(pre)>code{padding:1px 5px;border-radius:5px;background:color-mix(in srgb,var(--ink) 8%,transparent)}.md-preview pre{margin:0 0 10px;padding:10px 14px;border-radius:8px;overflow-x:auto;color:var(--gb-fg);background:oklch(from var(--enamel) calc(l*.93) c h)}.md-preview pre code.hljs{background:transparent;padding:0;color:inherit}.md-preview a{color:var(--focus)}.md-empty{color:var(--ink-soft)}.md,.md-preview,.ask-text{--gb-fg: #3c3836;--gb-red: #9d0006;--gb-green: #79740e;--gb-yellow: #b57614;--gb-blue: #076678;--gb-purple: #8f3f71;--gb-aqua: #427b58;--gb-orange: #af3a03;--gb-gray: #928374}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) :is(.md,.md-preview,.ask-text){--gb-fg: #ebdbb2;--gb-red: #fb4934;--gb-green: #b8bb26;--gb-yellow: #fabd2f;--gb-blue: #83a598;--gb-purple: #d3869b;--gb-aqua: #8ec07c;--gb-orange: #fe8019;--gb-gray: #928374}}:root[data-theme=dark] :is(.md,.md-preview,.ask-text){--gb-fg: #ebdbb2;--gb-red: #fb4934;--gb-green: #b8bb26;--gb-yellow: #fabd2f;--gb-blue: #83a598;--gb-purple: #d3869b;--gb-aqua: #8ec07c;--gb-orange: #fe8019;--gb-gray: #928374}.md-preview .hljs-keyword,.md-preview .hljs-selector-tag,.md-preview .hljs-bullet{color:var(--gb-red)}.md-preview .hljs-string,.md-preview .hljs-regexp,.md-preview .hljs-title,.md-preview .hljs-link{color:var(--gb-green)}.md-preview .hljs-title.function_,.md-preview .hljs-section,.md-preview .hljs-strong{font-weight:700}.md-preview .hljs-number,.md-preview .hljs-literal,.md-preview .hljs-symbol{color:var(--gb-purple)}.md-preview .hljs-comment,.md-preview .hljs-quote,.md-preview .hljs-meta{color:var(--gb-gray);font-style:italic}.md-preview .hljs-type,.md-preview .hljs-title.class_,.md-preview .hljs-section{color:var(--gb-yellow)}.md-preview .hljs-variable,.md-preview .hljs-attr,.md-preview .hljs-attribute,.md-preview .hljs-params,.md-preview .hljs-template-variable{color:var(--gb-blue)}.md-preview .hljs-built_in,.md-preview .hljs-code,.md-preview .hljs-subst{color:var(--gb-orange)}.md-preview .hljs-emphasis{font-style:italic}.drawer-head{display:flex;justify-content:space-between;align-items:start;gap:12px}.drawer-meta{color:var(--ink-soft);font-size:13px;margin:0 0 12px}.d-model{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:4px 10px;margin:0 0 4px}.d-model label{font-weight:700;font-size:14px}.d-model-help{grid-column:2;margin:0;font-size:12px;color:var(--ink-soft)}.drawer-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0 16px}.drawer-stats div{font-size:13px;color:var(--ink-soft)}.drawer-stats strong{display:block;font-size:20px;color:var(--ink);font-weight:800}.d-context{margin:0 0 16px;font-size:13px;color:var(--ink-soft)}.d-context p{margin:0 0 6px}.d-context strong{color:var(--ink)}.d-ctx-bar{position:relative;height:8px;border-radius:999px;background:color-mix(in srgb,var(--ink) 10%,transparent)}.d-ctx-bar i{position:absolute;inset:0 auto 0 0;border-radius:999px;background:var(--lane-full);transition:width .4s ease}.d-ctx-bar b{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--highlight)}.d-block{margin:0 0 16px;padding:12px;border-radius:8px;background:color-mix(in srgb,var(--alarm) 12%,transparent);border:1px solid color-mix(in srgb,var(--alarm) 35%,transparent)}.d-block p{margin:0 0 10px}.d-block textarea{background:var(--plate)}.transcript{list-style:none;margin:0 0 16px;padding:10px 12px;max-height:260px;overflow-y:auto;background:var(--enamel);border-radius:8px;font:12px/1.55 var(--mono)}.transcript li{color:var(--ink-soft)}.transcript li:first-child{color:var(--ink)}.composer label{font-weight:600;font-size:14px;display:block;margin-bottom:6px}.composer-actions{justify-content:space-between}.menu{z-index:40;width:340px;max-height:70vh;overflow-y:auto;padding:6px;background:var(--plate);color:var(--ink);border:1px solid var(--hairline);border-radius:12px;box-shadow:0 12px 32px #00000047}.menu.is-up{width:280px}.menu-item{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;min-height:44px;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer;outline:none}.menu-item[data-highlighted],.menu-item:focus-visible{background:color-mix(in srgb,var(--ink) 9%,transparent)}.menu-title{font-weight:700}.menu-sub{font-size:12px;color:var(--ink-soft)}.menu-back{min-height:36px;color:var(--ink-soft)}.menu-danger .menu-title{color:var(--alarm)}.menu-note{margin:6px 12px 4px;font-size:12px;color:var(--ink-soft)}.menu-filter{width:calc(100% - 12px);margin:4px 6px 6px;min-height:36px;padding:4px 10px;border-radius:8px;border:1px solid var(--hairline);background:var(--enamel);color:var(--ink);font:inherit;font-size:14px}.model-trigger{display:inline-flex;align-items:center;gap:4px;max-width:118px;padding:1px 2px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ink-soft);font:13px var(--sans);cursor:pointer;position:relative;z-index:1}.model-trigger:hover{border-color:var(--hairline);background:var(--plate);color:var(--ink)}.model-trigger.is-changed{color:var(--ink);font-weight:700}.model-trigger.is-field{max-width:none;min-height:36px;padding:4px 8px;border-color:var(--hairline);background:var(--enamel);color:var(--ink);font-size:15px;justify-content:space-between}.model-content{z-index:50;padding:4px;background:var(--plate);color:var(--ink);border:1px solid var(--hairline);border-radius:10px;box-shadow:0 12px 32px #00000047}.model-item{display:flex;align-items:center;min-height:32px;padding:4px 10px 4px 24px;border-radius:6px;font-size:14px;cursor:pointer;outline:none;position:relative}.model-item[data-highlighted]{background:color-mix(in srgb,var(--ink) 9%,transparent)}.model-item[data-state=checked]{font-weight:700}.model-check{position:absolute;left:8px}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#080c148c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.start{position:fixed;z-index:61;left:50%;top:50%;transform:translate(-50%,-50%);width:min(1120px,calc(100vw - 32px));max-height:calc(100vh - 48px);padding:0;border:1px solid var(--hairline);border-radius:14px;background:var(--plate);color:var(--ink);box-shadow:0 24px 80px #00000059;display:flex;flex-direction:column}.help{width:min(620px,calc(100vw - 32px))}.confirm{width:min(520px,calc(100vw - 32px))}.help-body{padding:4px 24px 8px;overflow-y:auto;font-size:15px;line-height:1.6}.help-body p{margin:0 0 12px;max-width:66ch}.help-body code{font:14px var(--mono)}.help-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 24px 20px}.start-head{padding:20px 24px 12px}.start-head h2{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em}.start-head p{margin:4px 0 0;color:var(--ink-soft);font-size:14px;max-width:70ch}.start-body{flex:1;min-height:0;overflow-y:auto;padding:4px 24px 8px}.start-foot{display:flex;gap:10px;align-items:center;padding:14px 24px 18px;border-top:1px solid var(--hairline)}.start-foot .grow{flex:1;color:var(--ink-soft);font-size:13px}.fm-form{display:flex;flex-wrap:wrap;gap:14px 22px;align-items:flex-end;margin:0 0 14px}.fm-form fieldset{border:0;margin:0;padding:0;min-width:0}.fm-row{width:100%;display:grid;gap:14px 22px;grid-template-columns:minmax(min-content,1fr) minmax(min-content,1.75fr) minmax(min-content,1fr) minmax(min-content,1fr)}.fm-row fieldset{display:flex;flex-direction:column;align-items:flex-start}.choice-help{margin:7px 0 0;min-height:2.8em;font-size:12.5px;line-height:1.4;color:var(--ink-soft)}.choice label:has(input:disabled){opacity:.45;cursor:not-allowed}@media(max-width:760px){.fm-row{grid-template-columns:1fr 1fr}}.fm-form legend,.fm-form .lbl{display:block;font-size:12px;font-weight:700;color:var(--ink-soft);margin-bottom:5px;padding:0}.fm-form .lbl{width:100%;margin:0}.choice{display:inline-flex;border:1px solid var(--hairline);border-radius:8px;overflow:hidden}.choice label{position:relative}.choice input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;margin:0;cursor:pointer}.choice span{display:block;white-space:nowrap;padding:7px 12px;font-size:13px;font-weight:600;border-right:1px solid var(--hairline)}.choice label:last-child span{border-right:0}.choice input:checked+span{background:var(--ink);color:var(--plate)}.choice input:focus-visible+span{outline:2px solid var(--focus);outline-offset:-2px}.choice .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}@media(prefers-reduced-motion:reduce){.ask,.unblock,.d-ctx-bar i{transition:none}.is-leaving{opacity:1}}button,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.topbar{--logo-plate-w: 158px;position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px 28px;padding:14px 24px 14px calc(var(--logo-plate-w) + 28px);background:var(--plate);border-bottom:1px solid var(--hairline)}.logo{position:absolute;inset:0 auto 0 0;width:var(--logo-plate-w);display:flex;align-items:center;justify-content:center;background:var(--logo-plate)}.logo img{height:30px;width:auto;display:block}.project{min-width:0;max-width:52ch}.project-title{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.15}.project-meta{margin:0;font-size:13px;color:var(--ink-soft);display:flex;flex-wrap:wrap;gap:0 12px}.project-path{font-size:12px}.topbar-stat{color:var(--ink-soft)}.topbar-stat strong{color:var(--ink);font-weight:600}.topbar-spacer{flex:1}.sample{font-size:13px;color:var(--ink-soft);border:1px dashed var(--road);padding:2px 8px;border-radius:999px}.conn{font-size:13px;color:var(--ink-soft)}.conn.is-offline{color:var(--alarm);font-weight:600}.node{font-size:12px;color:var(--ink-soft)}.node strong{color:var(--ink);font-weight:700}.btn{min-height:40px;padding:8px 16px;border-radius:8px;cursor:pointer;border:1px solid var(--hairline);background:var(--plate);font-weight:600}.btn:hover{border-color:var(--ink-soft)}.btn-primary{background:var(--ink);color:var(--plate);border-color:var(--ink)}.btn-primary:hover{opacity:.9}.btn-alarm{color:var(--alarm);border-color:color-mix(in srgb,var(--alarm) 45%,transparent)}.btn-alarm:hover{border-color:var(--alarm)}.btn-quiet{border-color:transparent;background:transparent}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-icon{display:inline-grid;place-items:center;width:44px;padding:0}.btn[aria-pressed=true]{background:var(--ink);color:var(--plate);border-color:var(--ink)}.help-pill{min-width:40px;padding-inline:0;border:1px solid color-mix(in srgb,var(--ink) 30%,transparent);border-radius:999px;font-weight:800}.tabs-root{display:contents}.layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:20px;padding:20px 24px;align-items:start}@media(max-width:960px){.layout{grid-template-columns:minmax(0,1fr);padding:16px}}.loading{padding:40px 24px;color:var(--ink-soft)}.loading.is-error{color:var(--alarm)}.tabs{display:flex;align-items:center;gap:8px;padding:14px 24px 2px;overflow-x:auto;scrollbar-width:thin}.tab{--pill-tint: 4%;border:1px solid color-mix(in srgb,var(--ink) 9%,transparent);border-radius:999px;background:color-mix(in srgb,var(--ink) var(--pill-tint),transparent)}.tab{display:inline-flex;align-items:center;min-height:40px;padding:6px 16px;cursor:pointer;font-weight:600;color:color-mix(in srgb,var(--ink) 30%,var(--ink-soft));flex:none;white-space:nowrap}.tab:hover{--pill-tint: 8%;color:var(--ink)}.tab[aria-selected=true]{--pill-tint: 14%;color:var(--ink);border-color:color-mix(in srgb,var(--ink) 22%,transparent)}.tab:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.tab-count{margin-left:6px;padding:0 7px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--alarm) 16%,transparent);color:var(--alarm)}.tab-count:empty{display:none}.tab-machine:before{content:"🖥️";margin-right:6px;font-size:13px}.tabs>:not(.tab-machine)+.tab-machine{margin-left:auto}.run-chip{margin-left:8px;padding:0 8px;border-radius:999px;font-size:12px;font-weight:600;background:var(--hairline);color:var(--ink-soft)}@media(max-width:960px){.tabs{padding:8px 16px 0}}.logs{background:var(--plate);border:1px solid var(--hairline);border-radius:var(--radius-plate)}.logs[hidden]{display:none}.log-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:12px 16px;border-bottom:1px solid var(--hairline)}.log-tools fieldset{border:0;margin:0;padding:0;display:flex;gap:6px;align-items:center}.log-tools legend{float:left;margin-right:6px;font-size:13px;color:var(--ink-soft)}.toggle{min-height:36px;padding:4px 12px;border-radius:999px;border:1px solid var(--hairline);background:transparent;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink-soft)}.toggle[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--plate)}.log-search{min-height:36px;padding:4px 10px;border-radius:8px;border:1px solid var(--hairline);background:var(--enamel);min-width:180px;flex:1;max-width:320px}.log-follow{margin-left:auto}.log{list-style:none;margin:0;padding:8px 0;height:calc(100vh - 230px);min-height:320px;overflow-y:auto;font:12.5px/1.6 var(--mono)}.log li{display:grid;grid-template-columns:76px 44px 132px minmax(0,1fr);gap:12px;padding:1px 16px}.log time,.log .lvl,.log .src{color:var(--ink-soft)}.log .msg{overflow-wrap:anywhere}.log .is-warn{background:color-mix(in srgb,var(--lane-plan) 16%,transparent)}.log .is-warn .lvl{color:var(--lane-plan)}.log .is-error{background:color-mix(in srgb,var(--alarm) 13%,transparent)}.log .is-error .lvl{color:var(--alarm);font-weight:600}.log .is-debug .msg{color:var(--ink-soft)}.log .log-empty{display:block;padding:16px;color:var(--ink-soft);font-family:var(--sans)}.log-path{margin:0;font-size:13px;color:var(--ink-soft);padding:8px 16px 12px;border-top:1px solid var(--hairline)}@media(max-width:700px){.log li{grid-template-columns:64px minmax(0,1fr)}.log .lvl,.log .src{display:none}}.tests{background:var(--plate);border:1px solid var(--hairline);border-radius:var(--radius-plate);padding-bottom:8px}.tests[hidden]{display:none}.tests-head{padding:18px 20px 4px}.tests-head h2{margin:0;font-size:20px;font-weight:800;letter-spacing:-.01em}.tests-head p{margin:4px 0 0;color:var(--ink-soft);font-size:14px}.tests-head code{font:13px var(--mono);color:var(--ink)}.tests-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:14px 20px 10px}.tests-stats div{font-size:13px;color:var(--ink-soft)}.tests-stats strong{display:block;font-size:26px;font-weight:800;color:var(--ink)}.bar{display:flex;height:10px;margin:0 20px 16px;border-radius:999px;overflow:hidden;background:var(--hairline)}.bar span{height:100%;transition:width .3s}.bar .run{background:var(--ink-soft)}@media(prefers-reduced-motion:reduce){.bar span{transition:none}}@media(max-width:700px){.tests-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}.statusbar{position:fixed;left:0;right:0;bottom:0;z-index:15;height:var(--statusbar-h);display:flex;align-items:center;gap:16px;padding:0 16px;background:var(--plate);border-top:1px solid var(--hairline)}.statusbar h2{margin:0;font-size:13px;font-weight:800;white-space:nowrap}.pills{flex:1;min-width:0;display:flex;gap:6px;list-style:none;margin:0;padding:4px 0;overflow-x:auto;scrollbar-width:thin}.pills>li{flex:none;display:flex}.statusbar{--solid: 70%}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .statusbar{--solid: 55%}}:root[data-theme=dark] .statusbar{--solid: 55%}.pill{--pill: var(--lane-plan);--tint: 16%;display:flex;align-items:center;gap:7px;min-height:44px;padding:3px 12px 3px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--pill) 55%,transparent);background:color-mix(in srgb,var(--pill) var(--tint),var(--plate));color:var(--ink);cursor:pointer;font:inherit;text-align:left;white-space:nowrap}.pill:hover{--tint: 26%}.pill.is-done{--pill: var(--go)}.pill.is-blocked{--pill: var(--alarm)}.pill-mark{font-size:15px;line-height:1;width:18px;text-align:center}.pill.is-held{--solid-bg: color-mix(in srgb, var(--alarm) var(--solid), #000)}.pill.is-merged{--solid-bg: color-mix(in srgb, var(--go) var(--solid), #000)}.pill.is-gone{--solid-bg: color-mix(in srgb, var(--merged) var(--solid), #000)}.pill.is-held,.pill.is-merged,.pill.is-gone{background:var(--solid-bg);border-color:var(--solid-bg);color:#fff}.pill.is-held:hover,.pill.is-merged:hover,.pill.is-gone:hover{background:color-mix(in srgb,var(--solid-bg) 85%,#000)}.pill.is-held .pill-time,.pill.is-merged .pill-time,.pill.is-gone .pill-time{color:#ffffffe5}.pill.is-done .pill-mark{color:var(--go);font-weight:800}.pill-text{display:flex;flex-direction:column;line-height:1.15}.pill-id{font-size:13px;font-weight:800}.pill-time{font-size:11px;color:color-mix(in srgb,var(--ink) 30%,var(--ink-soft))}.pills .divider{width:1px;align-self:stretch;margin:4px 6px;background:var(--hairline);flex:none}.pills-theirs{flex:none;max-width:40%;padding-left:10px;border-left:1px solid var(--hairline)}.pills-theirs:empty{display:none}.pills-theirs .pill{--tint: 9%}.pills-theirs .pill:hover{--tint: 18%}.pills-theirs .pill-mark{opacity:.7}.statusbar-sum{margin:0;font-size:13px;color:var(--ink-soft);white-space:nowrap}@media(max-width:720px){.statusbar h2,.statusbar-sum{display:none}}
/data/exe/{depot → ol} RENAMED
File without changes