@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.40

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 (753) hide show
  1. package/lib/answerers/claude-code/index.d.ts +15 -3
  2. package/lib/answerers/claude-code/index.d.ts.map +1 -1
  3. package/lib/answerers/claude-code/index.js +6 -5
  4. package/lib/answerers/claude-code/index.js.map +1 -1
  5. package/lib/answerers/persona/index.d.ts +44 -5
  6. package/lib/answerers/persona/index.d.ts.map +1 -1
  7. package/lib/answerers/persona/index.js +60 -34
  8. package/lib/answerers/persona/index.js.map +1 -1
  9. package/lib/answerers/terminal/index.d.ts +9 -3
  10. package/lib/answerers/terminal/index.d.ts.map +1 -1
  11. package/lib/answerers/terminal/index.js +6 -4
  12. package/lib/answerers/terminal/index.js.map +1 -1
  13. package/lib/assertions/authoring.d.ts +2 -2
  14. package/lib/assertions/authoring.d.ts.map +1 -1
  15. package/lib/assertions/authoring.js.map +1 -1
  16. package/lib/assertions/core/command-exits-zero.d.ts +5 -2
  17. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  18. package/lib/assertions/core/command-exits-zero.js +59 -14
  19. package/lib/assertions/core/command-exits-zero.js.map +1 -1
  20. package/lib/assertions/core/event-checks.d.ts +3 -0
  21. package/lib/assertions/core/event-checks.d.ts.map +1 -1
  22. package/lib/assertions/core/event-checks.js +49 -3
  23. package/lib/assertions/core/event-checks.js.map +1 -1
  24. package/lib/assertions/core/file-checks.d.ts +6 -0
  25. package/lib/assertions/core/file-checks.d.ts.map +1 -1
  26. package/lib/assertions/core/index.d.ts.map +1 -1
  27. package/lib/assertions/core/index.js +2 -1
  28. package/lib/assertions/core/index.js.map +1 -1
  29. package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
  30. package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
  31. package/lib/assertions/core/output-checks.d.ts +3 -0
  32. package/lib/assertions/core/output-checks.d.ts.map +1 -1
  33. package/lib/assertions/core/predicate.d.ts +1 -0
  34. package/lib/assertions/core/predicate.d.ts.map +1 -1
  35. package/lib/assertions/core/resource-checks.d.ts +25 -0
  36. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  37. package/lib/assertions/core/resource-checks.js +35 -5
  38. package/lib/assertions/core/resource-checks.js.map +1 -1
  39. package/lib/assertions/core/safe-regex.d.ts.map +1 -1
  40. package/lib/assertions/core/safe-regex.js +7 -1
  41. package/lib/assertions/core/safe-regex.js.map +1 -1
  42. package/lib/assertions/rubric/evidence.d.ts +88 -0
  43. package/lib/assertions/rubric/evidence.d.ts.map +1 -0
  44. package/lib/assertions/rubric/evidence.js +75 -0
  45. package/lib/assertions/rubric/evidence.js.map +1 -0
  46. package/lib/assertions/rubric/index.d.ts +88 -34
  47. package/lib/assertions/rubric/index.d.ts.map +1 -1
  48. package/lib/assertions/rubric/index.js +59 -43
  49. package/lib/assertions/rubric/index.js.map +1 -1
  50. package/lib/assertions/rubric/internal.d.ts +30 -5
  51. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  52. package/lib/assertions/rubric/internal.js +203 -41
  53. package/lib/assertions/rubric/internal.js.map +1 -1
  54. package/lib/authoring.d.ts +37 -2
  55. package/lib/authoring.d.ts.map +1 -1
  56. package/lib/authoring.js +36 -1
  57. package/lib/authoring.js.map +1 -1
  58. package/lib/cli/bin.js +2 -13
  59. package/lib/cli/bin.js.map +1 -1
  60. package/lib/cli/command-runtime.d.ts +3 -3
  61. package/lib/cli/command-runtime.d.ts.map +1 -1
  62. package/lib/cli/command-runtime.js +17 -6
  63. package/lib/cli/command-runtime.js.map +1 -1
  64. package/lib/cli/doctor.d.ts +55 -0
  65. package/lib/cli/doctor.d.ts.map +1 -0
  66. package/lib/cli/doctor.js +14 -0
  67. package/lib/cli/doctor.js.map +1 -0
  68. package/lib/cli/harness-plan.d.ts +27 -0
  69. package/lib/cli/harness-plan.d.ts.map +1 -0
  70. package/lib/cli/harness-plan.js +75 -0
  71. package/lib/cli/harness-plan.js.map +1 -0
  72. package/lib/cli/init-templates.d.ts +11 -0
  73. package/lib/cli/init-templates.d.ts.map +1 -0
  74. package/lib/cli/init-templates.js +215 -0
  75. package/lib/cli/init-templates.js.map +1 -0
  76. package/lib/cli/init.d.ts +10 -0
  77. package/lib/cli/init.d.ts.map +1 -1
  78. package/lib/cli/init.js +34 -173
  79. package/lib/cli/init.js.map +1 -1
  80. package/lib/cli/output-schemas.d.ts +1412 -0
  81. package/lib/cli/output-schemas.d.ts.map +1 -0
  82. package/lib/cli/output-schemas.js +94 -0
  83. package/lib/cli/output-schemas.js.map +1 -0
  84. package/lib/cli/program.d.ts +140 -12
  85. package/lib/cli/program.d.ts.map +1 -1
  86. package/lib/cli/program.js +783 -650
  87. package/lib/cli/program.js.map +1 -1
  88. package/lib/cli/render/format.d.ts.map +1 -1
  89. package/lib/cli/render/format.js +1 -1
  90. package/lib/cli/render/format.js.map +1 -1
  91. package/lib/cli/render/reporter.d.ts.map +1 -1
  92. package/lib/cli/render/reporter.js +35 -8
  93. package/lib/cli/render/reporter.js.map +1 -1
  94. package/lib/cli/run-options.d.ts +19 -4
  95. package/lib/cli/run-options.d.ts.map +1 -1
  96. package/lib/cli/run-options.js +100 -19
  97. package/lib/cli/run-options.js.map +1 -1
  98. package/lib/cli/view.d.ts +15 -0
  99. package/lib/cli/view.d.ts.map +1 -0
  100. package/lib/cli/view.js +168 -0
  101. package/lib/cli/view.js.map +1 -0
  102. package/lib/container/driver.d.ts +27 -0
  103. package/lib/container/driver.d.ts.map +1 -0
  104. package/lib/container/driver.js +199 -0
  105. package/lib/container/driver.js.map +1 -0
  106. package/lib/container/paths.d.ts +3 -0
  107. package/lib/container/paths.d.ts.map +1 -0
  108. package/lib/container/paths.js +27 -0
  109. package/lib/container/paths.js.map +1 -0
  110. package/lib/container/protocol.d.ts +12 -0
  111. package/lib/container/protocol.d.ts.map +1 -0
  112. package/lib/container/protocol.js +38 -0
  113. package/lib/container/protocol.js.map +1 -0
  114. package/lib/container/resources.d.ts +14 -0
  115. package/lib/container/resources.d.ts.map +1 -0
  116. package/lib/container/resources.js +141 -0
  117. package/lib/container/resources.js.map +1 -0
  118. package/lib/container/worker.d.ts +2 -0
  119. package/lib/container/worker.d.ts.map +1 -0
  120. package/lib/container/worker.js +85 -0
  121. package/lib/container/worker.js.map +1 -0
  122. package/lib/core/action-events.d.ts +29 -0
  123. package/lib/core/action-events.d.ts.map +1 -0
  124. package/lib/core/action-events.js +51 -0
  125. package/lib/core/action-events.js.map +1 -0
  126. package/lib/core/agent-activity.d.ts +49 -0
  127. package/lib/core/agent-activity.d.ts.map +1 -0
  128. package/lib/core/agent-activity.js +206 -0
  129. package/lib/core/agent-activity.js.map +1 -0
  130. package/lib/core/agent-environment.d.ts +5 -0
  131. package/lib/core/agent-environment.d.ts.map +1 -0
  132. package/lib/core/agent-environment.js +47 -0
  133. package/lib/core/agent-environment.js.map +1 -0
  134. package/lib/core/agent-events.d.ts +26 -0
  135. package/lib/core/agent-events.d.ts.map +1 -0
  136. package/lib/core/agent-events.js +13 -0
  137. package/lib/core/agent-events.js.map +1 -0
  138. package/lib/core/annotation.d.ts +6 -2
  139. package/lib/core/annotation.d.ts.map +1 -1
  140. package/lib/core/annotation.js +2 -1
  141. package/lib/core/annotation.js.map +1 -1
  142. package/lib/core/answerer.d.ts +12 -0
  143. package/lib/core/answerer.d.ts.map +1 -1
  144. package/lib/core/answerer.js +2 -0
  145. package/lib/core/answerer.js.map +1 -1
  146. package/lib/core/artifact-evidence.d.ts +6 -1
  147. package/lib/core/artifact-evidence.d.ts.map +1 -1
  148. package/lib/core/artifact-evidence.js +27 -6
  149. package/lib/core/artifact-evidence.js.map +1 -1
  150. package/lib/core/assertion.d.ts +10 -4
  151. package/lib/core/assertion.d.ts.map +1 -1
  152. package/lib/core/assertion.js +8 -2
  153. package/lib/core/assertion.js.map +1 -1
  154. package/lib/core/case-defaults.d.ts +16 -0
  155. package/lib/core/case-defaults.d.ts.map +1 -0
  156. package/lib/core/case-defaults.js +42 -0
  157. package/lib/core/case-defaults.js.map +1 -0
  158. package/lib/core/case.d.ts +120 -6
  159. package/lib/core/case.d.ts.map +1 -1
  160. package/lib/core/case.js +51 -5
  161. package/lib/core/case.js.map +1 -1
  162. package/lib/core/command-verification.d.ts +10 -0
  163. package/lib/core/command-verification.d.ts.map +1 -0
  164. package/lib/core/command-verification.js +66 -0
  165. package/lib/core/command-verification.js.map +1 -0
  166. package/lib/core/driver-execution.d.ts +83 -0
  167. package/lib/core/driver-execution.d.ts.map +1 -0
  168. package/lib/core/driver-execution.js +72 -0
  169. package/lib/core/driver-execution.js.map +1 -0
  170. package/lib/core/driver-metrics.d.ts +98 -0
  171. package/lib/core/driver-metrics.d.ts.map +1 -0
  172. package/lib/core/driver-metrics.js +36 -0
  173. package/lib/core/driver-metrics.js.map +1 -0
  174. package/lib/core/driver.d.ts +64 -0
  175. package/lib/core/driver.d.ts.map +1 -1
  176. package/lib/core/driver.js +28 -0
  177. package/lib/core/driver.js.map +1 -1
  178. package/lib/core/duration.d.ts +5 -0
  179. package/lib/core/duration.d.ts.map +1 -0
  180. package/lib/core/duration.js +49 -0
  181. package/lib/core/duration.js.map +1 -0
  182. package/lib/core/environment.d.ts +18 -0
  183. package/lib/core/environment.d.ts.map +1 -0
  184. package/lib/core/environment.js +21 -0
  185. package/lib/core/environment.js.map +1 -0
  186. package/lib/core/evaluation-clusters.d.ts +17 -0
  187. package/lib/core/evaluation-clusters.d.ts.map +1 -0
  188. package/lib/core/evaluation-clusters.js +23 -0
  189. package/lib/core/evaluation-clusters.js.map +1 -0
  190. package/lib/core/events.d.ts +34 -0
  191. package/lib/core/events.d.ts.map +1 -1
  192. package/lib/core/events.js +11 -2
  193. package/lib/core/events.js.map +1 -1
  194. package/lib/core/experiment.d.ts +33 -2
  195. package/lib/core/experiment.d.ts.map +1 -1
  196. package/lib/core/experiment.js +40 -19
  197. package/lib/core/experiment.js.map +1 -1
  198. package/lib/core/file-tree.d.ts +7 -0
  199. package/lib/core/file-tree.d.ts.map +1 -0
  200. package/lib/core/file-tree.js +35 -0
  201. package/lib/core/file-tree.js.map +1 -0
  202. package/lib/core/global-id.d.ts +6 -0
  203. package/lib/core/global-id.d.ts.map +1 -0
  204. package/lib/core/global-id.js +17 -0
  205. package/lib/core/global-id.js.map +1 -0
  206. package/lib/core/harness-catalog.d.ts +35 -0
  207. package/lib/core/harness-catalog.d.ts.map +1 -0
  208. package/lib/core/harness-catalog.js +45 -0
  209. package/lib/core/harness-catalog.js.map +1 -0
  210. package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
  211. package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
  212. package/lib/core/harness-catalogs/antigravity.js +23 -0
  213. package/lib/core/harness-catalogs/antigravity.js.map +1 -0
  214. package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
  215. package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
  216. package/lib/core/harness-catalogs/claude-code.js +24 -0
  217. package/lib/core/harness-catalogs/claude-code.js.map +1 -0
  218. package/lib/core/harness-catalogs/codex.d.ts +11 -0
  219. package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
  220. package/lib/core/harness-catalogs/codex.js +26 -0
  221. package/lib/core/harness-catalogs/codex.js.map +1 -0
  222. package/lib/core/harness-catalogs/copilot.d.ts +29 -0
  223. package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
  224. package/lib/core/harness-catalogs/copilot.js +45 -0
  225. package/lib/core/harness-catalogs/copilot.js.map +1 -0
  226. package/lib/core/harness-catalogs/cursor.d.ts +2 -0
  227. package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
  228. package/lib/core/harness-catalogs/cursor.js +13 -0
  229. package/lib/core/harness-catalogs/cursor.js.map +1 -0
  230. package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
  231. package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
  232. package/lib/core/harness-catalogs/grok-build.js +18 -0
  233. package/lib/core/harness-catalogs/grok-build.js.map +1 -0
  234. package/lib/core/harness-catalogs/index.d.ts +73 -0
  235. package/lib/core/harness-catalogs/index.d.ts.map +1 -0
  236. package/lib/core/harness-catalogs/index.js +17 -0
  237. package/lib/core/harness-catalogs/index.js.map +1 -0
  238. package/lib/core/harness-matrix.d.ts +154 -0
  239. package/lib/core/harness-matrix.d.ts.map +1 -0
  240. package/lib/core/harness-matrix.js +204 -0
  241. package/lib/core/harness-matrix.js.map +1 -0
  242. package/lib/core/index.d.ts +12 -0
  243. package/lib/core/index.d.ts.map +1 -1
  244. package/lib/core/index.js +12 -0
  245. package/lib/core/index.js.map +1 -1
  246. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  247. package/lib/core/lifecycle-fixtures.js +4 -2
  248. package/lib/core/lifecycle-fixtures.js.map +1 -1
  249. package/lib/core/model-cli.d.ts +9 -11
  250. package/lib/core/model-cli.d.ts.map +1 -1
  251. package/lib/core/model-cli.js +39 -22
  252. package/lib/core/model-cli.js.map +1 -1
  253. package/lib/core/platform-process.d.ts +7 -2
  254. package/lib/core/platform-process.d.ts.map +1 -1
  255. package/lib/core/platform-process.js +54 -16
  256. package/lib/core/platform-process.js.map +1 -1
  257. package/lib/core/reference-defaults.d.ts +5 -0
  258. package/lib/core/reference-defaults.d.ts.map +1 -0
  259. package/lib/core/reference-defaults.js +42 -0
  260. package/lib/core/reference-defaults.js.map +1 -0
  261. package/lib/core/rubric.d.ts +1 -0
  262. package/lib/core/rubric.d.ts.map +1 -1
  263. package/lib/core/run.d.ts +292 -1
  264. package/lib/core/run.d.ts.map +1 -1
  265. package/lib/core/run.js +27 -0
  266. package/lib/core/run.js.map +1 -1
  267. package/lib/core/secure-copy.d.ts.map +1 -0
  268. package/lib/core/secure-copy.js.map +1 -0
  269. package/lib/core/usage.d.ts +5 -0
  270. package/lib/core/usage.d.ts.map +1 -1
  271. package/lib/core/usage.js +3 -0
  272. package/lib/core/usage.js.map +1 -1
  273. package/lib/core/wire.d.ts +11 -0
  274. package/lib/core/wire.d.ts.map +1 -1
  275. package/lib/drivers/antigravity/artifacts.d.ts +2 -0
  276. package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
  277. package/lib/drivers/antigravity/artifacts.js +33 -0
  278. package/lib/drivers/antigravity/artifacts.js.map +1 -0
  279. package/lib/drivers/antigravity/config.d.ts +88 -0
  280. package/lib/drivers/antigravity/config.d.ts.map +1 -0
  281. package/lib/drivers/antigravity/config.js +87 -0
  282. package/lib/drivers/antigravity/config.js.map +1 -0
  283. package/lib/drivers/antigravity/events.d.ts +4 -0
  284. package/lib/drivers/antigravity/events.d.ts.map +1 -0
  285. package/lib/drivers/antigravity/events.js +241 -0
  286. package/lib/drivers/antigravity/events.js.map +1 -0
  287. package/lib/drivers/antigravity/index.d.ts +114 -0
  288. package/lib/drivers/antigravity/index.d.ts.map +1 -0
  289. package/lib/drivers/antigravity/index.js +113 -0
  290. package/lib/drivers/antigravity/index.js.map +1 -0
  291. package/lib/drivers/antigravity/runtime.d.ts +7 -0
  292. package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
  293. package/lib/drivers/antigravity/runtime.js +83 -0
  294. package/lib/drivers/antigravity/runtime.js.map +1 -0
  295. package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
  296. package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
  297. package/lib/drivers/claude-code/deferred-process.js +108 -0
  298. package/lib/drivers/claude-code/deferred-process.js.map +1 -0
  299. package/lib/drivers/claude-code/index.d.ts +187 -10
  300. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  301. package/lib/drivers/claude-code/index.js +197 -252
  302. package/lib/drivers/claude-code/index.js.map +1 -1
  303. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  304. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  305. package/lib/drivers/claude-code/isolation.js +199 -0
  306. package/lib/drivers/claude-code/isolation.js.map +1 -0
  307. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  308. package/lib/drivers/claude-code/parse-events.js +73 -8
  309. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  310. package/lib/drivers/codex/app-events.d.ts +9 -2
  311. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  312. package/lib/drivers/codex/app-events.js +104 -12
  313. package/lib/drivers/codex/app-events.js.map +1 -1
  314. package/lib/drivers/codex/config.d.ts +69 -5
  315. package/lib/drivers/codex/config.d.ts.map +1 -1
  316. package/lib/drivers/codex/config.js +48 -8
  317. package/lib/drivers/codex/config.js.map +1 -1
  318. package/lib/drivers/codex/exec-events.d.ts +4 -0
  319. package/lib/drivers/codex/exec-events.d.ts.map +1 -0
  320. package/lib/drivers/codex/exec-events.js +230 -0
  321. package/lib/drivers/codex/exec-events.js.map +1 -0
  322. package/lib/drivers/codex/index.d.ts +142 -4
  323. package/lib/drivers/codex/index.d.ts.map +1 -1
  324. package/lib/drivers/codex/index.js +114 -276
  325. package/lib/drivers/codex/index.js.map +1 -1
  326. package/lib/drivers/copilot/config.d.ts +84 -0
  327. package/lib/drivers/copilot/config.d.ts.map +1 -0
  328. package/lib/drivers/copilot/config.js +57 -0
  329. package/lib/drivers/copilot/config.js.map +1 -0
  330. package/lib/drivers/copilot/index.d.ts +107 -0
  331. package/lib/drivers/copilot/index.d.ts.map +1 -0
  332. package/lib/drivers/copilot/index.js +268 -0
  333. package/lib/drivers/copilot/index.js.map +1 -0
  334. package/lib/drivers/cursor/config.d.ts +28 -0
  335. package/lib/drivers/cursor/config.d.ts.map +1 -0
  336. package/lib/drivers/cursor/config.js +28 -0
  337. package/lib/drivers/cursor/config.js.map +1 -0
  338. package/lib/drivers/cursor/index.d.ts +44 -0
  339. package/lib/drivers/cursor/index.d.ts.map +1 -0
  340. package/lib/drivers/cursor/index.js +286 -0
  341. package/lib/drivers/cursor/index.js.map +1 -0
  342. package/lib/drivers/cursor/interaction.d.ts +6 -0
  343. package/lib/drivers/cursor/interaction.d.ts.map +1 -0
  344. package/lib/drivers/cursor/interaction.js +55 -0
  345. package/lib/drivers/cursor/interaction.js.map +1 -0
  346. package/lib/drivers/grok-build/config.d.ts +68 -0
  347. package/lib/drivers/grok-build/config.d.ts.map +1 -0
  348. package/lib/drivers/grok-build/config.js +40 -0
  349. package/lib/drivers/grok-build/config.js.map +1 -0
  350. package/lib/drivers/grok-build/index.d.ts +87 -0
  351. package/lib/drivers/grok-build/index.d.ts.map +1 -0
  352. package/lib/drivers/grok-build/index.js +293 -0
  353. package/lib/drivers/grok-build/index.js.map +1 -0
  354. package/lib/drivers/mcp/index.d.ts +37 -4
  355. package/lib/drivers/mcp/index.d.ts.map +1 -1
  356. package/lib/drivers/mcp/index.js +25 -11
  357. package/lib/drivers/mcp/index.js.map +1 -1
  358. package/lib/drivers/shared/acp-events.d.ts +15 -0
  359. package/lib/drivers/shared/acp-events.d.ts.map +1 -0
  360. package/lib/drivers/shared/acp-events.js +83 -0
  361. package/lib/drivers/shared/acp-events.js.map +1 -0
  362. package/lib/drivers/shared/acp-interaction.d.ts +7 -0
  363. package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
  364. package/lib/drivers/shared/acp-interaction.js +20 -0
  365. package/lib/drivers/shared/acp-interaction.js.map +1 -0
  366. package/lib/drivers/shared/acp-session.d.ts +4 -0
  367. package/lib/drivers/shared/acp-session.d.ts.map +1 -0
  368. package/lib/drivers/shared/acp-session.js +23 -0
  369. package/lib/drivers/shared/acp-session.js.map +1 -0
  370. package/lib/drivers/shared/acp-transport.d.ts +40 -0
  371. package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
  372. package/lib/drivers/shared/acp-transport.js +152 -0
  373. package/lib/drivers/shared/acp-transport.js.map +1 -0
  374. package/lib/drivers/shared/artifacts.d.ts.map +1 -1
  375. package/lib/drivers/shared/artifacts.js +3 -2
  376. package/lib/drivers/shared/artifacts.js.map +1 -1
  377. package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
  378. package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
  379. package/lib/drivers/shared/experiment-behavior.js +200 -0
  380. package/lib/drivers/shared/experiment-behavior.js.map +1 -0
  381. package/lib/drivers/shared/experiment-policy.d.ts +4 -0
  382. package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
  383. package/lib/drivers/shared/experiment-policy.js +144 -0
  384. package/lib/drivers/shared/experiment-policy.js.map +1 -0
  385. package/lib/drivers/shared/skills.d.ts +3 -0
  386. package/lib/drivers/shared/skills.d.ts.map +1 -0
  387. package/lib/drivers/shared/skills.js +73 -0
  388. package/lib/drivers/shared/skills.js.map +1 -0
  389. package/lib/drivers/subprocess/index.d.ts +39 -4
  390. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  391. package/lib/drivers/subprocess/index.js +56 -12
  392. package/lib/drivers/subprocess/index.js.map +1 -1
  393. package/lib/index.d.ts +24 -8
  394. package/lib/index.d.ts.map +1 -1
  395. package/lib/index.js +20 -5
  396. package/lib/index.js.map +1 -1
  397. package/lib/optimization/reflective.d.ts +3 -1
  398. package/lib/optimization/reflective.d.ts.map +1 -1
  399. package/lib/optimization/reflective.js +3 -2
  400. package/lib/optimization/reflective.js.map +1 -1
  401. package/lib/orchestrator/annotation-loader.d.ts +6 -2
  402. package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
  403. package/lib/orchestrator/annotation-loader.js +8 -0
  404. package/lib/orchestrator/annotation-loader.js.map +1 -1
  405. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  406. package/lib/orchestrator/annotation-store.js +16 -2
  407. package/lib/orchestrator/annotation-store.js.map +1 -1
  408. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  409. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  410. package/lib/orchestrator/artifact-origin.js +40 -0
  411. package/lib/orchestrator/artifact-origin.js.map +1 -0
  412. package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
  413. package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
  414. package/lib/orchestrator/campaign-lifecycle.js +4 -1
  415. package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
  416. package/lib/orchestrator/candidates.d.ts.map +1 -1
  417. package/lib/orchestrator/candidates.js +3 -2
  418. package/lib/orchestrator/candidates.js.map +1 -1
  419. package/lib/orchestrator/compare.d.ts +23 -6
  420. package/lib/orchestrator/compare.d.ts.map +1 -1
  421. package/lib/orchestrator/compare.js +45 -12
  422. package/lib/orchestrator/compare.js.map +1 -1
  423. package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
  424. package/lib/orchestrator/comparison-identity.js +2 -0
  425. package/lib/orchestrator/comparison-identity.js.map +1 -1
  426. package/lib/orchestrator/config.d.ts +180 -1
  427. package/lib/orchestrator/config.d.ts.map +1 -1
  428. package/lib/orchestrator/config.js +21 -2
  429. package/lib/orchestrator/config.js.map +1 -1
  430. package/lib/orchestrator/discover.d.ts +1 -0
  431. package/lib/orchestrator/discover.d.ts.map +1 -1
  432. package/lib/orchestrator/discover.js +7 -1
  433. package/lib/orchestrator/discover.js.map +1 -1
  434. package/lib/orchestrator/doctor.d.ts +1 -0
  435. package/lib/orchestrator/doctor.d.ts.map +1 -1
  436. package/lib/orchestrator/doctor.js +134 -69
  437. package/lib/orchestrator/doctor.js.map +1 -1
  438. package/lib/orchestrator/driver-capabilities.d.ts +4 -0
  439. package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
  440. package/lib/orchestrator/driver-capabilities.js +13 -0
  441. package/lib/orchestrator/driver-capabilities.js.map +1 -0
  442. package/lib/orchestrator/driver-identity.d.ts +5 -0
  443. package/lib/orchestrator/driver-identity.d.ts.map +1 -0
  444. package/lib/orchestrator/driver-identity.js +51 -0
  445. package/lib/orchestrator/driver-identity.js.map +1 -0
  446. package/lib/orchestrator/experiment-context.d.ts +51 -3
  447. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  448. package/lib/orchestrator/experiment-context.js +2 -1
  449. package/lib/orchestrator/experiment-context.js.map +1 -1
  450. package/lib/orchestrator/experiment-contracts.d.ts +31 -1
  451. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  452. package/lib/orchestrator/experiment-corpus.d.ts +2 -1
  453. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  454. package/lib/orchestrator/experiment-corpus.js +28 -22
  455. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  456. package/lib/orchestrator/experiment-effects.d.ts +33 -0
  457. package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
  458. package/lib/orchestrator/experiment-effects.js +46 -0
  459. package/lib/orchestrator/experiment-effects.js.map +1 -0
  460. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  461. package/lib/orchestrator/experiment-evaluation.js +70 -5
  462. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  463. package/lib/orchestrator/experiment-identity.d.ts +3 -0
  464. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  465. package/lib/orchestrator/experiment-identity.js +22 -33
  466. package/lib/orchestrator/experiment-identity.js.map +1 -1
  467. package/lib/orchestrator/experiment-loader.d.ts +8 -3
  468. package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
  469. package/lib/orchestrator/experiment-preflight.d.ts +3 -0
  470. package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
  471. package/lib/orchestrator/experiment-preflight.js +21 -0
  472. package/lib/orchestrator/experiment-preflight.js.map +1 -0
  473. package/lib/orchestrator/experiment-report.d.ts +91 -1
  474. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  475. package/lib/orchestrator/experiment-report.js +9 -1
  476. package/lib/orchestrator/experiment-report.js.map +1 -1
  477. package/lib/orchestrator/experiment-runs.d.ts +63 -2
  478. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  479. package/lib/orchestrator/experiment-runs.js +13 -5
  480. package/lib/orchestrator/experiment-runs.js.map +1 -1
  481. package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
  482. package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
  483. package/lib/orchestrator/experiment-runtime-identity.js +5 -220
  484. package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
  485. package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
  486. package/lib/orchestrator/experiment-selection.js +151 -43
  487. package/lib/orchestrator/experiment-selection.js.map +1 -1
  488. package/lib/orchestrator/experiment.d.ts +3 -3
  489. package/lib/orchestrator/experiment.d.ts.map +1 -1
  490. package/lib/orchestrator/experiment.js +26 -21
  491. package/lib/orchestrator/experiment.js.map +1 -1
  492. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  493. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  494. package/lib/orchestrator/fixture-identity.js +6 -1
  495. package/lib/orchestrator/fixture-identity.js.map +1 -1
  496. package/lib/orchestrator/fs-read.d.ts +1 -6
  497. package/lib/orchestrator/fs-read.d.ts.map +1 -1
  498. package/lib/orchestrator/fs-read.js +2 -32
  499. package/lib/orchestrator/fs-read.js.map +1 -1
  500. package/lib/orchestrator/grader-experiment.d.ts +23 -5
  501. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  502. package/lib/orchestrator/grader-experiment.js +54 -9
  503. package/lib/orchestrator/grader-experiment.js.map +1 -1
  504. package/lib/orchestrator/grading.d.ts +1 -0
  505. package/lib/orchestrator/grading.d.ts.map +1 -1
  506. package/lib/orchestrator/grading.js +41 -33
  507. package/lib/orchestrator/grading.js.map +1 -1
  508. package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
  509. package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
  510. package/lib/orchestrator/harness-catalog-drift.js +90 -0
  511. package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
  512. package/lib/orchestrator/harness-registry.d.ts +4 -0
  513. package/lib/orchestrator/harness-registry.d.ts.map +1 -0
  514. package/lib/orchestrator/harness-registry.js +5 -0
  515. package/lib/orchestrator/harness-registry.js.map +1 -0
  516. package/lib/orchestrator/index.d.ts +1 -1
  517. package/lib/orchestrator/index.d.ts.map +1 -1
  518. package/lib/orchestrator/index.js +1 -1
  519. package/lib/orchestrator/index.js.map +1 -1
  520. package/lib/orchestrator/list-runs.d.ts +8 -1
  521. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  522. package/lib/orchestrator/list-runs.js +83 -18
  523. package/lib/orchestrator/list-runs.js.map +1 -1
  524. package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
  525. package/lib/orchestrator/optimization-lifecycle.js +3 -1
  526. package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
  527. package/lib/orchestrator/orchestrator.d.ts +17 -2
  528. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  529. package/lib/orchestrator/orchestrator.js +55 -177
  530. package/lib/orchestrator/orchestrator.js.map +1 -1
  531. package/lib/orchestrator/paired-effects.d.ts +34 -0
  532. package/lib/orchestrator/paired-effects.d.ts.map +1 -0
  533. package/lib/orchestrator/paired-effects.js +164 -0
  534. package/lib/orchestrator/paired-effects.js.map +1 -0
  535. package/lib/orchestrator/profile.d.ts +4 -0
  536. package/lib/orchestrator/profile.d.ts.map +1 -0
  537. package/lib/orchestrator/profile.js +10 -0
  538. package/lib/orchestrator/profile.js.map +1 -0
  539. package/lib/orchestrator/provenance.d.ts +5 -1
  540. package/lib/orchestrator/provenance.d.ts.map +1 -1
  541. package/lib/orchestrator/provenance.js +16 -3
  542. package/lib/orchestrator/provenance.js.map +1 -1
  543. package/lib/orchestrator/regrade.d.ts +4 -2
  544. package/lib/orchestrator/regrade.d.ts.map +1 -1
  545. package/lib/orchestrator/rubric-loader.js +1 -1
  546. package/lib/orchestrator/rubric-loader.js.map +1 -1
  547. package/lib/orchestrator/run-dir.d.ts +2 -0
  548. package/lib/orchestrator/run-dir.d.ts.map +1 -1
  549. package/lib/orchestrator/run-dir.js +1 -1
  550. package/lib/orchestrator/run-dir.js.map +1 -1
  551. package/lib/orchestrator/run-execution.d.ts +3 -0
  552. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  553. package/lib/orchestrator/run-execution.js +64 -10
  554. package/lib/orchestrator/run-execution.js.map +1 -1
  555. package/lib/orchestrator/run-lifecycle.d.ts +1 -0
  556. package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
  557. package/lib/orchestrator/run-lifecycle.js +3 -2
  558. package/lib/orchestrator/run-lifecycle.js.map +1 -1
  559. package/lib/orchestrator/run-workspace.d.ts +10 -0
  560. package/lib/orchestrator/run-workspace.d.ts.map +1 -0
  561. package/lib/orchestrator/run-workspace.js +58 -0
  562. package/lib/orchestrator/run-workspace.js.map +1 -0
  563. package/lib/orchestrator/suite-compare.d.ts +37 -0
  564. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  565. package/lib/orchestrator/suite-compare.js +44 -22
  566. package/lib/orchestrator/suite-compare.js.map +1 -1
  567. package/lib/orchestrator/suite-runs.d.ts +6 -1
  568. package/lib/orchestrator/suite-runs.d.ts.map +1 -1
  569. package/lib/orchestrator/suite-runs.js +14 -2
  570. package/lib/orchestrator/suite-runs.js.map +1 -1
  571. package/lib/orchestrator/suite-summary.d.ts +79 -0
  572. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  573. package/lib/orchestrator/suite-summary.js +67 -14
  574. package/lib/orchestrator/suite-summary.js.map +1 -1
  575. package/lib/previewer/artifacts.d.ts +25 -0
  576. package/lib/previewer/artifacts.d.ts.map +1 -0
  577. package/lib/previewer/artifacts.js +180 -0
  578. package/lib/previewer/artifacts.js.map +1 -0
  579. package/lib/previewer/server.d.ts +111 -0
  580. package/lib/previewer/server.d.ts.map +1 -0
  581. package/lib/previewer/server.js +559 -0
  582. package/lib/previewer/server.js.map +1 -0
  583. package/package.json +4 -2
  584. package/skills/lux-answerer/SKILL.md +2 -2
  585. package/src/answerers/claude-code/index.ts +6 -5
  586. package/src/answerers/persona/index.ts +75 -34
  587. package/src/answerers/terminal/index.ts +7 -11
  588. package/src/assertions/authoring.ts +2 -0
  589. package/src/assertions/core/command-exits-zero.ts +82 -17
  590. package/src/assertions/core/event-checks.ts +64 -3
  591. package/src/assertions/core/index.ts +2 -0
  592. package/src/assertions/core/resource-checks.ts +38 -5
  593. package/src/assertions/core/safe-regex.ts +16 -6
  594. package/src/assertions/rubric/evidence.ts +85 -0
  595. package/src/assertions/rubric/index.ts +63 -46
  596. package/src/assertions/rubric/internal.ts +256 -41
  597. package/src/authoring.ts +346 -2
  598. package/src/cli/bin.ts +2 -12
  599. package/src/cli/command-runtime.ts +20 -9
  600. package/src/cli/doctor.ts +17 -0
  601. package/src/cli/harness-plan.ts +123 -0
  602. package/src/cli/init-templates.ts +238 -0
  603. package/src/cli/init.ts +53 -184
  604. package/src/cli/output-schemas.ts +109 -0
  605. package/src/cli/program.ts +697 -730
  606. package/src/cli/render/format.ts +1 -1
  607. package/src/cli/render/reporter.ts +36 -8
  608. package/src/cli/run-options.ts +131 -25
  609. package/src/cli/view.ts +129 -0
  610. package/src/container/driver.ts +213 -0
  611. package/src/container/paths.ts +29 -0
  612. package/src/container/protocol.ts +48 -0
  613. package/src/container/resources.ts +165 -0
  614. package/src/container/worker.ts +107 -0
  615. package/src/core/action-events.ts +59 -0
  616. package/src/core/agent-activity.ts +236 -0
  617. package/src/core/agent-environment.ts +64 -0
  618. package/src/core/agent-events.ts +17 -0
  619. package/src/core/annotation.ts +2 -1
  620. package/src/core/answerer.ts +9 -0
  621. package/src/core/artifact-evidence.ts +40 -5
  622. package/src/core/assertion.ts +8 -2
  623. package/src/core/case-defaults.ts +65 -0
  624. package/src/core/case.ts +79 -8
  625. package/src/core/command-verification.ts +74 -0
  626. package/src/core/driver-execution.ts +84 -0
  627. package/src/core/driver-metrics.ts +51 -0
  628. package/src/core/driver.ts +76 -0
  629. package/src/core/duration.ts +52 -0
  630. package/src/core/environment.ts +22 -0
  631. package/src/core/evaluation-clusters.ts +35 -0
  632. package/src/core/events.ts +13 -2
  633. package/src/core/experiment.ts +71 -25
  634. package/src/core/file-tree.ts +35 -0
  635. package/src/core/global-id.ts +26 -0
  636. package/src/core/harness-catalog.ts +100 -0
  637. package/src/core/harness-catalogs/antigravity.ts +24 -0
  638. package/src/core/harness-catalogs/claude-code.ts +25 -0
  639. package/src/core/harness-catalogs/codex.ts +27 -0
  640. package/src/core/harness-catalogs/copilot.ts +46 -0
  641. package/src/core/harness-catalogs/cursor.ts +13 -0
  642. package/src/core/harness-catalogs/grok-build.ts +19 -0
  643. package/src/core/harness-catalogs/index.ts +31 -0
  644. package/src/core/harness-matrix.ts +316 -0
  645. package/src/core/index.ts +12 -0
  646. package/src/core/lifecycle-fixtures.ts +4 -2
  647. package/src/core/model-cli.ts +60 -26
  648. package/src/core/platform-process.ts +65 -16
  649. package/src/core/reference-defaults.ts +47 -0
  650. package/src/core/run.ts +31 -0
  651. package/src/core/usage.ts +8 -0
  652. package/src/drivers/antigravity/README.md +171 -0
  653. package/src/drivers/antigravity/artifacts.ts +37 -0
  654. package/src/drivers/antigravity/config.ts +92 -0
  655. package/src/drivers/antigravity/events.ts +290 -0
  656. package/src/drivers/antigravity/index.ts +132 -0
  657. package/src/drivers/antigravity/runtime.ts +94 -0
  658. package/src/drivers/claude-code/deferred-process.ts +118 -0
  659. package/src/drivers/claude-code/index.ts +227 -281
  660. package/src/drivers/claude-code/isolation.ts +228 -0
  661. package/src/drivers/claude-code/parse-events.ts +98 -12
  662. package/src/drivers/codex/app-events.ts +126 -16
  663. package/src/drivers/codex/config.ts +59 -8
  664. package/src/drivers/codex/exec-events.ts +258 -0
  665. package/src/drivers/codex/index.ts +146 -312
  666. package/src/drivers/copilot/README.md +60 -0
  667. package/src/drivers/copilot/config.ts +61 -0
  668. package/src/drivers/copilot/index.ts +310 -0
  669. package/src/drivers/cursor/README.md +66 -0
  670. package/src/drivers/cursor/config.ts +31 -0
  671. package/src/drivers/cursor/index.ts +326 -0
  672. package/src/drivers/cursor/interaction.ts +74 -0
  673. package/src/drivers/grok-build/README.md +112 -0
  674. package/src/drivers/grok-build/config.ts +43 -0
  675. package/src/drivers/grok-build/index.ts +331 -0
  676. package/src/drivers/mcp/index.ts +25 -11
  677. package/src/drivers/shared/acp-events.ts +94 -0
  678. package/src/drivers/shared/acp-interaction.ts +27 -0
  679. package/src/drivers/shared/acp-session.ts +40 -0
  680. package/src/drivers/shared/acp-transport.ts +187 -0
  681. package/src/drivers/shared/artifacts.ts +6 -2
  682. package/src/drivers/shared/experiment-behavior.ts +217 -0
  683. package/src/drivers/shared/experiment-policy.ts +196 -0
  684. package/src/drivers/shared/skills.ts +74 -0
  685. package/src/drivers/subprocess/index.ts +55 -12
  686. package/src/index.ts +117 -6
  687. package/src/optimization/reflective.ts +3 -2
  688. package/src/orchestrator/annotation-loader.ts +10 -0
  689. package/src/orchestrator/annotation-store.ts +24 -3
  690. package/src/orchestrator/artifact-origin.ts +50 -0
  691. package/src/orchestrator/campaign-lifecycle.ts +5 -1
  692. package/src/orchestrator/candidates.ts +3 -2
  693. package/src/orchestrator/compare.ts +62 -13
  694. package/src/orchestrator/comparison-identity.ts +2 -0
  695. package/src/orchestrator/config.ts +23 -1
  696. package/src/orchestrator/discover.ts +8 -1
  697. package/src/orchestrator/doctor.ts +211 -65
  698. package/src/orchestrator/driver-capabilities.ts +21 -0
  699. package/src/orchestrator/driver-identity.ts +69 -0
  700. package/src/orchestrator/experiment-context.ts +5 -3
  701. package/src/orchestrator/experiment-corpus.ts +58 -37
  702. package/src/orchestrator/experiment-effects.ts +63 -0
  703. package/src/orchestrator/experiment-evaluation.ts +88 -10
  704. package/src/orchestrator/experiment-identity.ts +57 -48
  705. package/src/orchestrator/experiment-preflight.ts +27 -0
  706. package/src/orchestrator/experiment-report.ts +21 -1
  707. package/src/orchestrator/experiment-runs.ts +11 -4
  708. package/src/orchestrator/experiment-runtime-identity.ts +5 -243
  709. package/src/orchestrator/experiment-selection.ts +178 -18
  710. package/src/orchestrator/experiment.ts +29 -29
  711. package/src/orchestrator/fixture-identity.ts +9 -1
  712. package/src/orchestrator/fs-read.ts +2 -32
  713. package/src/orchestrator/grader-experiment.ts +74 -13
  714. package/src/orchestrator/grading.ts +60 -31
  715. package/src/orchestrator/harness-catalog-drift.ts +132 -0
  716. package/src/orchestrator/harness-registry.ts +12 -0
  717. package/src/orchestrator/index.ts +1 -0
  718. package/src/orchestrator/list-runs.ts +102 -18
  719. package/src/orchestrator/optimization-lifecycle.ts +4 -1
  720. package/src/orchestrator/orchestrator.ts +105 -224
  721. package/src/orchestrator/paired-effects.ts +214 -0
  722. package/src/orchestrator/profile.ts +24 -0
  723. package/src/orchestrator/provenance.ts +23 -3
  724. package/src/orchestrator/rubric-loader.ts +1 -1
  725. package/src/orchestrator/run-dir.ts +8 -1
  726. package/src/orchestrator/run-execution.ts +75 -10
  727. package/src/orchestrator/run-lifecycle.ts +4 -2
  728. package/src/orchestrator/run-workspace.ts +62 -0
  729. package/src/orchestrator/suite-compare.ts +47 -23
  730. package/src/orchestrator/suite-runs.ts +13 -2
  731. package/src/orchestrator/suite-summary.ts +129 -15
  732. package/src/previewer/artifacts.ts +221 -0
  733. package/src/previewer/server.ts +789 -0
  734. package/viewer/app.css +2111 -0
  735. package/viewer/app.js +627 -0
  736. package/viewer/artifact-view.js +48 -0
  737. package/viewer/charts.js +98 -0
  738. package/viewer/detail.js +1266 -0
  739. package/viewer/format.js +129 -0
  740. package/viewer/index.html +151 -0
  741. package/lib/cli/skills.d.ts +0 -38
  742. package/lib/cli/skills.d.ts.map +0 -1
  743. package/lib/cli/skills.js +0 -84
  744. package/lib/cli/skills.js.map +0 -1
  745. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  746. package/lib/drivers/shared/secure-copy.js.map +0 -1
  747. package/skills/lux/SKILL.md +0 -89
  748. package/skills/lux/references/cli.md +0 -125
  749. package/skills/lux/references/eval-authoring.md +0 -257
  750. package/src/cli/skills.ts +0 -129
  751. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  752. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  753. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
package/viewer/app.css ADDED
@@ -0,0 +1,2111 @@
1
+ :root {
2
+ color-scheme: only dark;
3
+ --ink: #f4f1e8;
4
+ --muted: #969b9d;
5
+ --faint: #686e73;
6
+ --canvas: #0b0d0f;
7
+ --panel: #111416;
8
+ --panel-raised: #171b1e;
9
+ --line: #292e31;
10
+ --line-soft: #202528;
11
+ --lime: #c8f169;
12
+ --lime-ink: #182208;
13
+ --coral: #ff8066;
14
+ --amber: #f7c96b;
15
+ --blue: #77a8ff;
16
+ --radius: 12px;
17
+ font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
18
+ font-synthesis: none;
19
+ }
20
+
21
+ * {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ html {
26
+ background: var(--canvas);
27
+ }
28
+
29
+ body {
30
+ margin: 0;
31
+ min-width: 320px;
32
+ min-height: 100vh;
33
+ background:
34
+ radial-gradient(circle at 72% -15%, rgb(200 241 105 / 7%), transparent 31rem), var(--canvas);
35
+ color: var(--ink);
36
+ }
37
+
38
+ h1,
39
+ h2,
40
+ h3,
41
+ p {
42
+ margin-top: 0;
43
+ }
44
+
45
+ button,
46
+ input {
47
+ font: inherit;
48
+ }
49
+
50
+ button {
51
+ color: inherit;
52
+ }
53
+
54
+ .app-shell {
55
+ display: grid;
56
+ grid-template-columns: 218px minmax(0, 1fr);
57
+ min-height: 100vh;
58
+ }
59
+
60
+ .sidebar {
61
+ position: sticky;
62
+ top: 0;
63
+ display: flex;
64
+ height: 100vh;
65
+ flex-direction: column;
66
+ border-right: 1px solid var(--line);
67
+ background: rgb(9 11 12 / 88%);
68
+ padding: 24px 18px 20px;
69
+ backdrop-filter: blur(18px);
70
+ }
71
+
72
+ .brand {
73
+ display: flex;
74
+ align-items: center;
75
+ gap: 12px;
76
+ color: inherit;
77
+ text-decoration: none;
78
+ }
79
+
80
+ .brand-mark {
81
+ display: grid;
82
+ width: 39px;
83
+ height: 39px;
84
+ place-items: center;
85
+ border: 1px solid var(--lime);
86
+ border-radius: 10px 3px 10px 3px;
87
+ color: var(--lime);
88
+ font:
89
+ 700 11px / 1 ui-monospace,
90
+ SFMono-Regular,
91
+ Menlo,
92
+ monospace;
93
+ letter-spacing: 0.08em;
94
+ }
95
+
96
+ .brand strong,
97
+ .brand small {
98
+ display: block;
99
+ letter-spacing: 0.15em;
100
+ }
101
+
102
+ .brand strong {
103
+ font-size: 14px;
104
+ }
105
+
106
+ .brand small {
107
+ margin-top: 2px;
108
+ color: var(--muted);
109
+ font:
110
+ 500 9px / 1.2 ui-monospace,
111
+ SFMono-Regular,
112
+ Menlo,
113
+ monospace;
114
+ }
115
+
116
+ .primary-nav {
117
+ display: grid;
118
+ gap: 7px;
119
+ margin-top: 56px;
120
+ }
121
+
122
+ .nav-item {
123
+ display: grid;
124
+ grid-template-columns: 26px 1fr auto;
125
+ align-items: center;
126
+ gap: 10px;
127
+ width: 100%;
128
+ border: 1px solid transparent;
129
+ border-radius: 9px;
130
+ background: transparent;
131
+ padding: 10px;
132
+ color: var(--muted);
133
+ text-align: left;
134
+ cursor: pointer;
135
+ }
136
+
137
+ .nav-item:hover {
138
+ background: var(--panel);
139
+ color: var(--ink);
140
+ }
141
+
142
+ .nav-item.is-active {
143
+ border-color: #384026;
144
+ background: #171d12;
145
+ color: var(--ink);
146
+ }
147
+
148
+ .nav-glyph {
149
+ display: grid;
150
+ width: 24px;
151
+ height: 24px;
152
+ place-items: center;
153
+ border: 1px solid var(--line);
154
+ border-radius: 6px;
155
+ color: var(--faint);
156
+ font:
157
+ 700 9px / 1 ui-monospace,
158
+ SFMono-Regular,
159
+ Menlo,
160
+ monospace;
161
+ }
162
+
163
+ .is-active .nav-glyph {
164
+ border-color: #627632;
165
+ color: var(--lime);
166
+ }
167
+
168
+ .nav-count {
169
+ min-width: 24px;
170
+ border-radius: 99px;
171
+ background: #202426;
172
+ padding: 3px 7px;
173
+ color: var(--muted);
174
+ font:
175
+ 600 10px / 1 ui-monospace,
176
+ SFMono-Regular,
177
+ Menlo,
178
+ monospace;
179
+ text-align: center;
180
+ }
181
+
182
+ .sidebar-note {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: 10px;
186
+ margin-top: auto;
187
+ border-top: 1px solid var(--line-soft);
188
+ padding: 18px 8px;
189
+ }
190
+
191
+ .sidebar-note strong,
192
+ .sidebar-note small {
193
+ display: block;
194
+ }
195
+
196
+ .sidebar-note strong {
197
+ font-size: 11px;
198
+ }
199
+
200
+ .sidebar-note small {
201
+ margin-top: 3px;
202
+ color: var(--faint);
203
+ font-size: 9px;
204
+ }
205
+
206
+ .pulse-dot {
207
+ width: 8px;
208
+ height: 8px;
209
+ border-radius: 50%;
210
+ background: var(--lime);
211
+ box-shadow: 0 0 0 5px rgb(200 241 105 / 8%);
212
+ }
213
+
214
+ .shortcut-card {
215
+ border: 1px solid var(--line);
216
+ border-radius: var(--radius);
217
+ background: var(--panel);
218
+ padding: 12px;
219
+ }
220
+
221
+ .shortcut-card p {
222
+ margin: 0 0 9px;
223
+ color: var(--faint);
224
+ font:
225
+ 600 9px / 1 ui-monospace,
226
+ SFMono-Regular,
227
+ Menlo,
228
+ monospace;
229
+ letter-spacing: 0.1em;
230
+ text-transform: uppercase;
231
+ }
232
+
233
+ .shortcut-card dl {
234
+ display: grid;
235
+ gap: 7px;
236
+ margin: 0;
237
+ }
238
+
239
+ .shortcut-row {
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: space-between;
243
+ }
244
+
245
+ .shortcut-card dt,
246
+ .shortcut-card dd {
247
+ margin: 0;
248
+ color: var(--muted);
249
+ font-size: 9px;
250
+ }
251
+
252
+ kbd {
253
+ border: 1px solid #373d40;
254
+ border-bottom-color: #4d5458;
255
+ border-radius: 4px;
256
+ background: #1a1e20;
257
+ padding: 2px 5px;
258
+ color: var(--muted);
259
+ font:
260
+ 500 9px / 1 ui-monospace,
261
+ SFMono-Regular,
262
+ Menlo,
263
+ monospace;
264
+ }
265
+
266
+ main {
267
+ min-width: 0;
268
+ padding: 31px 34px 20px;
269
+ }
270
+
271
+ .topbar {
272
+ display: flex;
273
+ align-items: flex-end;
274
+ justify-content: space-between;
275
+ gap: 24px;
276
+ }
277
+
278
+ .eyebrow {
279
+ color: var(--lime);
280
+ font:
281
+ 600 9px / 1 ui-monospace,
282
+ SFMono-Regular,
283
+ Menlo,
284
+ monospace;
285
+ letter-spacing: 0.13em;
286
+ text-transform: uppercase;
287
+ }
288
+
289
+ h1 {
290
+ margin-bottom: 0;
291
+ font-size: clamp(25px, 3vw, 36px);
292
+ font-weight: 570;
293
+ letter-spacing: -0.045em;
294
+ }
295
+
296
+ .topbar-actions {
297
+ display: flex;
298
+ align-items: center;
299
+ gap: 8px;
300
+ }
301
+
302
+ .search {
303
+ display: grid;
304
+ grid-template-columns: auto minmax(130px, 270px) auto;
305
+ align-items: center;
306
+ gap: 9px;
307
+ height: 40px;
308
+ border: 1px solid var(--line);
309
+ border-radius: 9px;
310
+ background: var(--panel);
311
+ padding: 0 10px;
312
+ color: var(--faint);
313
+ }
314
+
315
+ .search:focus-within {
316
+ border-color: #617635;
317
+ box-shadow: 0 0 0 3px rgb(200 241 105 / 6%);
318
+ }
319
+
320
+ .search input {
321
+ min-width: 0;
322
+ border: 0;
323
+ outline: 0;
324
+ background: transparent;
325
+ color: var(--ink);
326
+ font-size: 11px;
327
+ }
328
+
329
+ .search input::placeholder {
330
+ color: var(--faint);
331
+ }
332
+
333
+ .icon-button {
334
+ display: grid;
335
+ width: 40px;
336
+ height: 40px;
337
+ place-items: center;
338
+ border: 1px solid var(--line);
339
+ border-radius: 9px;
340
+ background: var(--panel);
341
+ color: var(--muted);
342
+ cursor: pointer;
343
+ }
344
+
345
+ .icon-button:hover {
346
+ border-color: #485054;
347
+ color: var(--ink);
348
+ }
349
+
350
+ .icon-button.is-spinning {
351
+ animation: spin 0.8s linear infinite;
352
+ }
353
+
354
+ @keyframes spin {
355
+ to {
356
+ transform: rotate(360deg);
357
+ }
358
+ }
359
+
360
+ .metrics {
361
+ display: grid;
362
+ grid-template-columns: repeat(4, minmax(0, 1fr));
363
+ margin-top: 27px;
364
+ border: 1px solid var(--line);
365
+ border-radius: var(--radius);
366
+ background: rgb(17 20 22 / 75%);
367
+ }
368
+
369
+ .metrics article {
370
+ min-width: 0;
371
+ padding: 17px 19px 15px;
372
+ }
373
+
374
+ .metrics article + article {
375
+ border-left: 1px solid var(--line);
376
+ }
377
+
378
+ .metrics span,
379
+ .metrics small {
380
+ display: block;
381
+ overflow: hidden;
382
+ color: var(--muted);
383
+ font-size: 9px;
384
+ text-overflow: ellipsis;
385
+ white-space: nowrap;
386
+ }
387
+
388
+ .metrics strong {
389
+ display: block;
390
+ margin: 9px 0 5px;
391
+ font:
392
+ 520 24px / 1 ui-monospace,
393
+ SFMono-Regular,
394
+ Menlo,
395
+ monospace;
396
+ letter-spacing: -0.05em;
397
+ }
398
+
399
+ .workspace {
400
+ display: grid;
401
+ grid-template-columns: minmax(360px, 0.86fr) minmax(470px, 1.14fr);
402
+ min-height: 590px;
403
+ margin-top: 18px;
404
+ overflow: hidden;
405
+ border: 1px solid var(--line);
406
+ border-radius: var(--radius);
407
+ background: var(--panel);
408
+ }
409
+
410
+ .collection-pane,
411
+ .inspector {
412
+ min-width: 0;
413
+ }
414
+
415
+ .collection-pane {
416
+ border-right: 1px solid var(--line);
417
+ }
418
+
419
+ .collection-toolbar {
420
+ display: flex;
421
+ align-items: flex-end;
422
+ justify-content: space-between;
423
+ padding: 20px 20px 15px;
424
+ }
425
+
426
+ .collection-toolbar h2 {
427
+ margin: 6px 0 0;
428
+ font-size: 19px;
429
+ font-weight: 570;
430
+ letter-spacing: -0.03em;
431
+ }
432
+
433
+ .collection-actions {
434
+ display: flex;
435
+ align-items: center;
436
+ gap: 10px;
437
+ }
438
+
439
+ .compare-button,
440
+ .secondary-button,
441
+ .back-button {
442
+ border: 1px solid var(--line);
443
+ border-radius: 7px;
444
+ background: #181c1e;
445
+ padding: 7px 10px;
446
+ color: var(--muted);
447
+ font-size: 9px;
448
+ cursor: pointer;
449
+ }
450
+
451
+ .compare-button:hover,
452
+ .compare-button.is-active,
453
+ .secondary-button:hover,
454
+ .back-button:hover {
455
+ border-color: #627632;
456
+ color: var(--lime);
457
+ }
458
+
459
+ .compare-tray {
460
+ display: grid;
461
+ grid-template-columns: 1fr auto 1fr;
462
+ align-items: center;
463
+ gap: 8px;
464
+ border-top: 1px solid var(--line-soft);
465
+ border-bottom: 1px solid var(--line);
466
+ background: #141914;
467
+ padding: 11px 20px;
468
+ }
469
+
470
+ .compare-tray[hidden] {
471
+ display: none;
472
+ }
473
+
474
+ .compare-tray span {
475
+ min-width: 0;
476
+ overflow: hidden;
477
+ color: var(--muted);
478
+ font-size: 9px;
479
+ text-overflow: ellipsis;
480
+ white-space: nowrap;
481
+ }
482
+
483
+ .compare-tray b {
484
+ display: inline-grid;
485
+ width: 19px;
486
+ height: 19px;
487
+ margin-right: 6px;
488
+ place-items: center;
489
+ border-radius: 5px;
490
+ background: var(--lime);
491
+ color: var(--lime-ink);
492
+ font-size: 8px;
493
+ }
494
+
495
+ .compare-tray i {
496
+ color: var(--faint);
497
+ font-style: normal;
498
+ }
499
+
500
+ .compare-tray small {
501
+ grid-column: 1 / -1;
502
+ color: var(--faint);
503
+ font-size: 8px;
504
+ text-align: center;
505
+ }
506
+
507
+ .result-count {
508
+ color: var(--faint);
509
+ font:
510
+ 500 9px / 1 ui-monospace,
511
+ SFMono-Regular,
512
+ Menlo,
513
+ monospace;
514
+ }
515
+
516
+ .status-filters {
517
+ display: flex;
518
+ gap: 6px;
519
+ overflow-x: auto;
520
+ border-bottom: 1px solid var(--line);
521
+ border-right: 0;
522
+ border-left: 0;
523
+ border-top: 0;
524
+ margin: 0;
525
+ min-width: 0;
526
+ padding: 0 20px 13px;
527
+ }
528
+
529
+ .filter-chip {
530
+ flex: none;
531
+ border: 1px solid var(--line);
532
+ border-radius: 99px;
533
+ background: transparent;
534
+ padding: 5px 9px;
535
+ color: var(--muted);
536
+ font-size: 9px;
537
+ cursor: pointer;
538
+ }
539
+
540
+ .filter-chip:hover,
541
+ .filter-chip.is-active {
542
+ border-color: #56662f;
543
+ background: #1a2015;
544
+ color: var(--lime);
545
+ }
546
+
547
+ .collection-list {
548
+ max-height: 620px;
549
+ overflow-y: auto;
550
+ }
551
+
552
+ .evidence-row {
553
+ position: relative;
554
+ display: grid;
555
+ grid-template-columns: 12px minmax(0, 1fr) auto;
556
+ gap: 12px;
557
+ width: 100%;
558
+ border: 0;
559
+ border-bottom: 1px solid var(--line-soft);
560
+ background: transparent;
561
+ padding: 16px 18px;
562
+ text-align: left;
563
+ cursor: pointer;
564
+ }
565
+
566
+ .evidence-row:hover {
567
+ background: #15191b;
568
+ }
569
+
570
+ .evidence-row.is-selected {
571
+ background: #1a1f1a;
572
+ box-shadow: inset 3px 0 var(--lime);
573
+ }
574
+
575
+ .evidence-row.is-compare-mode {
576
+ grid-template-columns: 28px 12px minmax(0, 1fr) auto;
577
+ }
578
+
579
+ .evidence-row.is-compared {
580
+ background: #1a1f1a;
581
+ }
582
+
583
+ .compare-slot {
584
+ display: grid;
585
+ width: 25px;
586
+ height: 25px;
587
+ place-items: center;
588
+ border: 1px solid #667c32;
589
+ border-radius: 6px;
590
+ background: var(--lime);
591
+ color: var(--lime-ink);
592
+ font:
593
+ 700 9px / 1 ui-monospace,
594
+ SFMono-Regular,
595
+ Menlo,
596
+ monospace;
597
+ }
598
+
599
+ .compare-slot.empty {
600
+ border-color: var(--line);
601
+ background: transparent;
602
+ color: var(--faint);
603
+ }
604
+
605
+ .status-pin {
606
+ width: 8px;
607
+ height: 8px;
608
+ margin-top: 4px;
609
+ border-radius: 50%;
610
+ background: var(--faint);
611
+ }
612
+
613
+ .status-pin.passed {
614
+ background: var(--lime);
615
+ }
616
+
617
+ .status-pin.failed,
618
+ .status-pin.error {
619
+ background: var(--coral);
620
+ }
621
+
622
+ .status-pin.running {
623
+ background: var(--blue);
624
+ box-shadow: 0 0 0 4px rgb(119 168 255 / 10%);
625
+ }
626
+
627
+ .status-pin.aborted {
628
+ background: var(--amber);
629
+ }
630
+
631
+ .row-main {
632
+ min-width: 0;
633
+ }
634
+
635
+ .row-title {
636
+ display: block;
637
+ overflow: hidden;
638
+ font-size: 12px;
639
+ font-weight: 610;
640
+ text-overflow: ellipsis;
641
+ white-space: nowrap;
642
+ }
643
+
644
+ .row-meta {
645
+ display: flex;
646
+ gap: 7px;
647
+ margin-top: 7px;
648
+ overflow: hidden;
649
+ color: var(--faint);
650
+ font:
651
+ 500 9px / 1.4 ui-monospace,
652
+ SFMono-Regular,
653
+ Menlo,
654
+ monospace;
655
+ white-space: nowrap;
656
+ }
657
+
658
+ .row-meta span {
659
+ overflow: hidden;
660
+ text-overflow: ellipsis;
661
+ }
662
+
663
+ .row-metric {
664
+ align-self: center;
665
+ min-width: 52px;
666
+ text-align: right;
667
+ }
668
+
669
+ .row-metric strong,
670
+ .row-metric small {
671
+ display: block;
672
+ }
673
+
674
+ .row-metric strong {
675
+ font:
676
+ 550 13px / 1 ui-monospace,
677
+ SFMono-Regular,
678
+ Menlo,
679
+ monospace;
680
+ }
681
+
682
+ .row-metric small {
683
+ margin-top: 5px;
684
+ color: var(--faint);
685
+ font-size: 8px;
686
+ text-transform: uppercase;
687
+ }
688
+
689
+ .loading-card,
690
+ .empty-list {
691
+ display: grid;
692
+ min-height: 300px;
693
+ place-content: center;
694
+ padding: 30px;
695
+ color: var(--faint);
696
+ text-align: center;
697
+ }
698
+
699
+ .loading-card span {
700
+ width: 180px;
701
+ height: 8px;
702
+ margin: 5px auto;
703
+ border-radius: 99px;
704
+ background: linear-gradient(90deg, #1b2022 30%, #293033 50%, #1b2022 70%);
705
+ background-size: 260% 100%;
706
+ animation: shimmer 1.3s infinite;
707
+ }
708
+
709
+ .loading-card span:nth-child(2) {
710
+ width: 135px;
711
+ }
712
+
713
+ .loading-card span:nth-child(3) {
714
+ width: 160px;
715
+ }
716
+
717
+ .loading-card p {
718
+ margin: 18px 0 0;
719
+ font-size: 10px;
720
+ }
721
+
722
+ @keyframes shimmer {
723
+ to {
724
+ background-position: -260% 0;
725
+ }
726
+ }
727
+
728
+ .inspector {
729
+ max-height: 710px;
730
+ overflow-y: auto;
731
+ background: linear-gradient(rgb(255 255 255 / 1%), rgb(255 255 255 / 1%)), var(--panel);
732
+ }
733
+
734
+ .inspector-empty {
735
+ display: grid;
736
+ min-height: 560px;
737
+ place-content: center;
738
+ padding: 40px;
739
+ text-align: center;
740
+ }
741
+
742
+ .empty-glyph {
743
+ display: grid;
744
+ width: 54px;
745
+ height: 54px;
746
+ margin: 0 auto 18px;
747
+ place-items: center;
748
+ border: 1px solid var(--line);
749
+ border-radius: 50%;
750
+ color: var(--lime);
751
+ font-size: 21px;
752
+ }
753
+
754
+ .inspector-empty h2 {
755
+ margin-bottom: 8px;
756
+ font-size: 16px;
757
+ }
758
+
759
+ .inspector-empty p {
760
+ max-width: 300px;
761
+ color: var(--faint);
762
+ font-size: 11px;
763
+ line-height: 1.6;
764
+ }
765
+
766
+ .detail-header {
767
+ padding: 23px 24px 20px;
768
+ border-bottom: 1px solid var(--line);
769
+ }
770
+
771
+ .detail-kicker {
772
+ display: flex;
773
+ align-items: center;
774
+ gap: 8px;
775
+ margin-bottom: 10px;
776
+ }
777
+
778
+ .status-badge {
779
+ border-radius: 99px;
780
+ padding: 4px 8px;
781
+ background: #272c2f;
782
+ color: var(--muted);
783
+ font:
784
+ 700 8px / 1 ui-monospace,
785
+ SFMono-Regular,
786
+ Menlo,
787
+ monospace;
788
+ letter-spacing: 0.08em;
789
+ text-transform: uppercase;
790
+ }
791
+
792
+ .status-badge.passed {
793
+ background: var(--lime);
794
+ color: var(--lime-ink);
795
+ }
796
+
797
+ .status-badge.failed,
798
+ .status-badge.error {
799
+ background: #3b211f;
800
+ color: #ff9a87;
801
+ }
802
+
803
+ .status-badge.running {
804
+ background: #172943;
805
+ color: #9ac0ff;
806
+ }
807
+
808
+ .status-badge.aborted {
809
+ background: #382f1d;
810
+ color: var(--amber);
811
+ }
812
+
813
+ .status-badge.promote {
814
+ background: var(--lime);
815
+ color: var(--lime-ink);
816
+ }
817
+
818
+ .status-badge.retain,
819
+ .status-badge.incomplete {
820
+ background: #382f1d;
821
+ color: var(--amber);
822
+ }
823
+
824
+ .status-badge.reject {
825
+ background: #3b211f;
826
+ color: #ff9a87;
827
+ }
828
+
829
+ .detail-path {
830
+ overflow: hidden;
831
+ color: var(--faint);
832
+ font:
833
+ 500 8px / 1 ui-monospace,
834
+ SFMono-Regular,
835
+ Menlo,
836
+ monospace;
837
+ text-overflow: ellipsis;
838
+ white-space: nowrap;
839
+ }
840
+
841
+ .detail-title-row {
842
+ display: flex;
843
+ align-items: flex-start;
844
+ justify-content: space-between;
845
+ gap: 18px;
846
+ }
847
+
848
+ .detail-title-row h2 {
849
+ margin-bottom: 8px;
850
+ font-size: 22px;
851
+ font-weight: 570;
852
+ letter-spacing: -0.035em;
853
+ }
854
+
855
+ .detail-subtitle {
856
+ margin: 0;
857
+ color: var(--muted);
858
+ font-size: 11px;
859
+ line-height: 1.5;
860
+ }
861
+
862
+ .score-block {
863
+ min-width: 72px;
864
+ border-left: 1px solid var(--line);
865
+ padding-left: 18px;
866
+ text-align: right;
867
+ }
868
+
869
+ .score-block strong,
870
+ .score-block small {
871
+ display: block;
872
+ }
873
+
874
+ .score-block strong {
875
+ font:
876
+ 560 23px / 1 ui-monospace,
877
+ SFMono-Regular,
878
+ Menlo,
879
+ monospace;
880
+ }
881
+
882
+ .score-block small {
883
+ margin-top: 5px;
884
+ color: var(--faint);
885
+ font-size: 8px;
886
+ text-transform: uppercase;
887
+ }
888
+
889
+ .detail-body {
890
+ display: grid;
891
+ gap: 22px;
892
+ padding: 21px 24px 28px;
893
+ }
894
+
895
+ .attention-banner,
896
+ .integrity-banner {
897
+ border: 1px solid #5a302b;
898
+ border-radius: 8px;
899
+ background: #211716;
900
+ padding: 11px 13px;
901
+ color: #ffad9d;
902
+ font-size: 9px;
903
+ line-height: 1.55;
904
+ }
905
+
906
+ .integrity-banner {
907
+ border-color: #405126;
908
+ background: #171d12;
909
+ color: var(--lime);
910
+ }
911
+
912
+ .detail-stats {
913
+ display: grid;
914
+ grid-template-columns: repeat(4, minmax(0, 1fr));
915
+ border: 1px solid var(--line);
916
+ border-radius: 9px;
917
+ }
918
+
919
+ .detail-stats div {
920
+ min-width: 0;
921
+ padding: 11px 12px;
922
+ }
923
+
924
+ .detail-stats div + div {
925
+ border-left: 1px solid var(--line);
926
+ }
927
+
928
+ .detail-stats dt {
929
+ overflow: hidden;
930
+ color: var(--faint);
931
+ font-size: 8px;
932
+ text-overflow: ellipsis;
933
+ text-transform: uppercase;
934
+ white-space: nowrap;
935
+ }
936
+
937
+ .detail-stats dd {
938
+ overflow: hidden;
939
+ margin: 6px 0 0;
940
+ font:
941
+ 520 10px / 1.3 ui-monospace,
942
+ SFMono-Regular,
943
+ Menlo,
944
+ monospace;
945
+ text-overflow: ellipsis;
946
+ white-space: nowrap;
947
+ }
948
+
949
+ .detail-section h3 {
950
+ display: flex;
951
+ align-items: center;
952
+ justify-content: space-between;
953
+ margin-bottom: 10px;
954
+ font-size: 10px;
955
+ font-weight: 650;
956
+ letter-spacing: 0.08em;
957
+ text-transform: uppercase;
958
+ }
959
+
960
+ .detail-section h3 span {
961
+ color: var(--faint);
962
+ font:
963
+ 500 9px / 1 ui-monospace,
964
+ SFMono-Regular,
965
+ Menlo,
966
+ monospace;
967
+ }
968
+
969
+ .assertion-list,
970
+ .trace-list,
971
+ .artifact-list,
972
+ .suite-list {
973
+ display: grid;
974
+ gap: 7px;
975
+ }
976
+
977
+ .assertion {
978
+ display: grid;
979
+ grid-template-columns: 18px minmax(0, 1fr) auto;
980
+ gap: 9px;
981
+ border: 1px solid var(--line-soft);
982
+ border-radius: 8px;
983
+ background: #141719;
984
+ padding: 11px;
985
+ }
986
+
987
+ .assertion-mark {
988
+ color: var(--coral);
989
+ font:
990
+ 700 11px / 1.4 ui-monospace,
991
+ SFMono-Regular,
992
+ Menlo,
993
+ monospace;
994
+ }
995
+
996
+ .assertion.informational .assertion-mark {
997
+ color: var(--muted);
998
+ }
999
+
1000
+ .assertion.passed .assertion-mark {
1001
+ color: var(--lime);
1002
+ }
1003
+
1004
+ .assertion strong,
1005
+ .assertion small {
1006
+ display: block;
1007
+ }
1008
+
1009
+ .assertion strong {
1010
+ font-size: 10px;
1011
+ }
1012
+
1013
+ .assertion small {
1014
+ margin-top: 4px;
1015
+ color: var(--muted);
1016
+ font-size: 9px;
1017
+ line-height: 1.5;
1018
+ }
1019
+
1020
+ .assertion-score {
1021
+ color: var(--muted);
1022
+ font:
1023
+ 550 9px / 1.4 ui-monospace,
1024
+ SFMono-Regular,
1025
+ Menlo,
1026
+ monospace;
1027
+ }
1028
+
1029
+ .assertion-content {
1030
+ min-width: 0;
1031
+ }
1032
+
1033
+ .assertion-comment {
1034
+ margin: 7px 0 0;
1035
+ color: #c0c4bf;
1036
+ font-size: 9px;
1037
+ line-height: 1.55;
1038
+ }
1039
+
1040
+ .diagnostic-error {
1041
+ margin: 7px 0 0;
1042
+ color: var(--coral);
1043
+ font-size: 9px;
1044
+ }
1045
+
1046
+ .diagnostic {
1047
+ margin-top: 7px;
1048
+ color: var(--muted);
1049
+ font-size: 9px;
1050
+ }
1051
+
1052
+ .diagnostic summary {
1053
+ cursor: pointer;
1054
+ }
1055
+
1056
+ .diagnostic pre {
1057
+ max-height: 180px;
1058
+ overflow: auto;
1059
+ margin: 7px 0 0;
1060
+ border-radius: 6px;
1061
+ background: #0d1011;
1062
+ padding: 9px;
1063
+ font-size: 8px;
1064
+ white-space: pre-wrap;
1065
+ }
1066
+
1067
+ .agent-grid {
1068
+ display: grid;
1069
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1070
+ gap: 12px;
1071
+ }
1072
+
1073
+ .agent-card {
1074
+ padding: 14px;
1075
+ border: 1px solid var(--line);
1076
+ border-radius: 10px;
1077
+ background: var(--panel-raised);
1078
+ }
1079
+
1080
+ .agent-card header,
1081
+ .agent-card header div {
1082
+ display: flex;
1083
+ justify-content: space-between;
1084
+ gap: 8px;
1085
+ }
1086
+
1087
+ .agent-card header div {
1088
+ min-width: 0;
1089
+ flex-direction: column;
1090
+ }
1091
+
1092
+ .agent-card header small,
1093
+ .agent-parent {
1094
+ color: var(--muted);
1095
+ overflow-wrap: anywhere;
1096
+ }
1097
+
1098
+ .agent-card dl {
1099
+ display: grid;
1100
+ grid-template-columns: repeat(2, 1fr);
1101
+ gap: 8px;
1102
+ margin: 14px 0;
1103
+ }
1104
+
1105
+ .agent-card dl div {
1106
+ display: flex;
1107
+ justify-content: space-between;
1108
+ gap: 8px;
1109
+ }
1110
+
1111
+ .agent-card dt {
1112
+ color: var(--muted);
1113
+ }
1114
+
1115
+ .agent-card dd {
1116
+ margin: 0;
1117
+ font-weight: 650;
1118
+ }
1119
+
1120
+ .trace-item {
1121
+ display: grid;
1122
+ grid-template-columns: 58px minmax(0, 1fr);
1123
+ gap: 10px;
1124
+ border-left: 1px solid var(--line);
1125
+ padding: 3px 0 10px 13px;
1126
+ }
1127
+
1128
+ .trace-item time {
1129
+ color: var(--faint);
1130
+ font:
1131
+ 500 8px / 1.45 ui-monospace,
1132
+ SFMono-Regular,
1133
+ Menlo,
1134
+ monospace;
1135
+ }
1136
+
1137
+ .trace-item strong,
1138
+ .trace-item p {
1139
+ margin: 0;
1140
+ font-size: 9px;
1141
+ line-height: 1.5;
1142
+ }
1143
+
1144
+ .trace-item strong {
1145
+ display: block;
1146
+ margin-bottom: 2px;
1147
+ color: var(--muted);
1148
+ text-transform: uppercase;
1149
+ }
1150
+
1151
+ .trace-item p {
1152
+ overflow-wrap: anywhere;
1153
+ color: var(--faint);
1154
+ }
1155
+
1156
+ .artifact,
1157
+ .suite-item {
1158
+ display: flex;
1159
+ align-items: center;
1160
+ justify-content: space-between;
1161
+ gap: 12px;
1162
+ border: 1px solid var(--line-soft);
1163
+ border-radius: 7px;
1164
+ padding: 9px 11px;
1165
+ color: var(--muted);
1166
+ font:
1167
+ 500 9px / 1.3 ui-monospace,
1168
+ SFMono-Regular,
1169
+ Menlo,
1170
+ monospace;
1171
+ }
1172
+
1173
+ .artifact span:first-child,
1174
+ .suite-item span:first-child {
1175
+ overflow: hidden;
1176
+ text-overflow: ellipsis;
1177
+ white-space: nowrap;
1178
+ }
1179
+
1180
+ .artifact small,
1181
+ .suite-item small {
1182
+ flex: none;
1183
+ color: var(--faint);
1184
+ font-size: 8px;
1185
+ text-transform: uppercase;
1186
+ }
1187
+
1188
+ .artifact-button,
1189
+ .suite-button {
1190
+ width: 100%;
1191
+ background: transparent;
1192
+ text-align: left;
1193
+ cursor: pointer;
1194
+ }
1195
+
1196
+ .artifact-button:hover,
1197
+ .suite-button:hover {
1198
+ border-color: #58672f;
1199
+ background: #171d14;
1200
+ color: var(--ink);
1201
+ }
1202
+
1203
+ .artifact-button.changed small,
1204
+ .artifact-button.removed small {
1205
+ color: var(--coral);
1206
+ }
1207
+
1208
+ .artifact-button.added small {
1209
+ color: var(--lime);
1210
+ }
1211
+
1212
+ .matrix-wrap {
1213
+ overflow-x: auto;
1214
+ border: 1px solid var(--line);
1215
+ border-radius: 9px;
1216
+ }
1217
+
1218
+ .matrix {
1219
+ width: 100%;
1220
+ border-collapse: collapse;
1221
+ font-size: 9px;
1222
+ }
1223
+
1224
+ .matrix th,
1225
+ .matrix td {
1226
+ border-bottom: 1px solid var(--line-soft);
1227
+ padding: 10px;
1228
+ text-align: left;
1229
+ white-space: nowrap;
1230
+ }
1231
+
1232
+ .matrix th {
1233
+ color: var(--faint);
1234
+ font-size: 8px;
1235
+ font-weight: 600;
1236
+ text-transform: uppercase;
1237
+ }
1238
+
1239
+ .matrix td {
1240
+ color: var(--muted);
1241
+ }
1242
+
1243
+ .matrix tr:last-child td {
1244
+ border-bottom: 0;
1245
+ }
1246
+
1247
+ .matrix .metric-good {
1248
+ color: var(--lime);
1249
+ }
1250
+
1251
+ .matrix .metric-bad {
1252
+ color: var(--coral);
1253
+ }
1254
+
1255
+ .metric-neutral {
1256
+ color: var(--muted);
1257
+ }
1258
+
1259
+ .score-bar {
1260
+ position: relative;
1261
+ display: block;
1262
+ width: 100%;
1263
+ min-width: 92px;
1264
+ height: 9px;
1265
+ background: #282d30;
1266
+ }
1267
+
1268
+ .score-fill {
1269
+ display: block;
1270
+ height: 100%;
1271
+ background: var(--muted);
1272
+ }
1273
+
1274
+ .score-fill.tone-positive,
1275
+ .score-fill.tone-after {
1276
+ background: var(--lime);
1277
+ }
1278
+
1279
+ .score-fill.tone-negative {
1280
+ background: var(--coral);
1281
+ }
1282
+
1283
+ .score-bar > .has-threshold {
1284
+ position: absolute;
1285
+ top: -2px;
1286
+ height: 13px;
1287
+ border-left: 1px solid currentColor;
1288
+ }
1289
+
1290
+ .quantized-bar {
1291
+ display: grid;
1292
+ grid-template-columns: repeat(20, minmax(2px, 1fr));
1293
+ gap: 2px;
1294
+ width: 100%;
1295
+ min-width: 92px;
1296
+ height: 9px;
1297
+ }
1298
+
1299
+ .quantized-cell {
1300
+ min-width: 0;
1301
+ border-radius: 1px;
1302
+ background: #282d30;
1303
+ }
1304
+
1305
+ .quantized-cell.is-filled.tone-positive,
1306
+ .quantized-cell.is-filled.tone-after,
1307
+ .quantized-cell.is-filled.segment-passed,
1308
+ .quantized-cell.is-filled.segment-improved,
1309
+ .legend-swatch.segment-passed,
1310
+ .legend-swatch.segment-improved {
1311
+ background: var(--lime);
1312
+ }
1313
+
1314
+ .quantized-cell.is-filled.tone-negative,
1315
+ .quantized-cell.is-filled.segment-regressed,
1316
+ .quantized-cell.is-filled.segment-removed,
1317
+ .legend-swatch.segment-regressed,
1318
+ .legend-swatch.segment-removed {
1319
+ background: var(--coral);
1320
+ }
1321
+
1322
+ .quantized-cell.is-filled.tone-before,
1323
+ .quantized-cell.is-filled.segment-agent,
1324
+ .legend-swatch.segment-agent {
1325
+ background: var(--blue);
1326
+ }
1327
+
1328
+ .quantized-cell.is-filled.tone-neutral,
1329
+ .quantized-cell.is-filled.segment-unchanged,
1330
+ .legend-swatch.segment-unchanged {
1331
+ background: #899095;
1332
+ }
1333
+
1334
+ .quantized-cell.is-filled.segment-answerer,
1335
+ .quantized-cell.is-filled.segment-added,
1336
+ .legend-swatch.segment-answerer,
1337
+ .legend-swatch.segment-added {
1338
+ background: var(--amber);
1339
+ }
1340
+
1341
+ .quantized-cell.is-filled.segment-grading,
1342
+ .quantized-cell.is-filled.segment-changed,
1343
+ .legend-swatch.segment-grading,
1344
+ .legend-swatch.segment-changed {
1345
+ background: #b28cff;
1346
+ }
1347
+
1348
+ .quantized-cell.is-filled.segment-collect,
1349
+ .legend-swatch.segment-collect {
1350
+ background: #64c6c0;
1351
+ }
1352
+
1353
+ .quantized-cell.is-filled.segment-ungraded,
1354
+ .quantized-cell.is-filled.segment-pending,
1355
+ .legend-swatch.segment-ungraded,
1356
+ .legend-swatch.segment-pending {
1357
+ background: var(--faint);
1358
+ }
1359
+
1360
+ .quantized-cell.has-threshold {
1361
+ box-shadow: -2px 0 0 var(--amber);
1362
+ }
1363
+
1364
+ .distribution-visual {
1365
+ display: grid;
1366
+ gap: 8px;
1367
+ }
1368
+
1369
+ .visual-legend {
1370
+ display: flex;
1371
+ flex-wrap: wrap;
1372
+ gap: 7px 12px;
1373
+ color: var(--muted);
1374
+ font:
1375
+ 500 9px / 1.3 ui-monospace,
1376
+ SFMono-Regular,
1377
+ Menlo,
1378
+ monospace;
1379
+ }
1380
+
1381
+ .visual-legend span {
1382
+ display: inline-flex;
1383
+ align-items: center;
1384
+ gap: 5px;
1385
+ }
1386
+
1387
+ .visual-legend b {
1388
+ color: var(--ink);
1389
+ font-weight: 600;
1390
+ }
1391
+
1392
+ .legend-swatch {
1393
+ width: 7px;
1394
+ height: 7px;
1395
+ border-radius: 2px;
1396
+ }
1397
+
1398
+ .evidence-visual-grid,
1399
+ .comparison-distributions,
1400
+ .experiment-visuals {
1401
+ display: grid;
1402
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1403
+ gap: 16px 20px;
1404
+ }
1405
+
1406
+ .composition-figure,
1407
+ .comparison-bars,
1408
+ .candidate-landscape,
1409
+ .budget-visual {
1410
+ min-width: 0;
1411
+ margin: 0;
1412
+ }
1413
+
1414
+ .composition-figure figcaption,
1415
+ .comparison-bars figcaption,
1416
+ .candidate-landscape figcaption,
1417
+ .budget-visual figcaption {
1418
+ display: flex;
1419
+ align-items: baseline;
1420
+ justify-content: space-between;
1421
+ gap: 10px;
1422
+ margin-bottom: 9px;
1423
+ color: var(--ink);
1424
+ font-size: 10px;
1425
+ font-weight: 600;
1426
+ }
1427
+
1428
+ .candidate-landscape figcaption small,
1429
+ .budget-visual figcaption small {
1430
+ color: var(--faint);
1431
+ font:
1432
+ 500 8px / 1 ui-monospace,
1433
+ SFMono-Regular,
1434
+ Menlo,
1435
+ monospace;
1436
+ text-transform: uppercase;
1437
+ }
1438
+
1439
+ .assertion-content > .score-bar,
1440
+ .assertion-content > .quantized-bar {
1441
+ max-width: 220px;
1442
+ margin-top: 8px;
1443
+ }
1444
+
1445
+ .comparison-plot-grid {
1446
+ display: grid;
1447
+ gap: 11px;
1448
+ }
1449
+
1450
+ .comparison-bars {
1451
+ border-bottom: 1px solid var(--line-soft);
1452
+ padding-bottom: 11px;
1453
+ }
1454
+
1455
+ .comparison-bars:last-child {
1456
+ border-bottom: 0;
1457
+ padding-bottom: 0;
1458
+ }
1459
+
1460
+ .comparison-bars figcaption b {
1461
+ font:
1462
+ 600 9px / 1 ui-monospace,
1463
+ SFMono-Regular,
1464
+ Menlo,
1465
+ monospace;
1466
+ }
1467
+
1468
+ .bar-lane,
1469
+ .landscape-row,
1470
+ .budget-row {
1471
+ display: grid;
1472
+ grid-template-columns: 18px minmax(90px, 1fr) 58px;
1473
+ align-items: center;
1474
+ gap: 8px;
1475
+ margin-top: 6px;
1476
+ }
1477
+
1478
+ .bar-lane strong {
1479
+ color: var(--faint);
1480
+ font:
1481
+ 700 8px / 1 ui-monospace,
1482
+ SFMono-Regular,
1483
+ Menlo,
1484
+ monospace;
1485
+ }
1486
+
1487
+ .bar-lane > span:last-child,
1488
+ .landscape-row > b,
1489
+ .budget-row > b {
1490
+ overflow: hidden;
1491
+ color: var(--muted);
1492
+ font:
1493
+ 500 8px / 1 ui-monospace,
1494
+ SFMono-Regular,
1495
+ Menlo,
1496
+ monospace;
1497
+ text-align: right;
1498
+ text-overflow: ellipsis;
1499
+ white-space: nowrap;
1500
+ }
1501
+
1502
+ .comparison-distributions {
1503
+ margin-top: 18px;
1504
+ border-top: 1px solid var(--line-soft);
1505
+ padding-top: 15px;
1506
+ }
1507
+
1508
+ .suite-outcome-visual {
1509
+ display: grid;
1510
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
1511
+ gap: 22px;
1512
+ }
1513
+
1514
+ .landscape-axis {
1515
+ display: flex;
1516
+ justify-content: space-between;
1517
+ margin: 0 0 5px 138px;
1518
+ color: var(--faint);
1519
+ font:
1520
+ 500 7px / 1 ui-monospace,
1521
+ SFMono-Regular,
1522
+ Menlo,
1523
+ monospace;
1524
+ }
1525
+
1526
+ .landscape-row {
1527
+ grid-template-columns: 130px minmax(100px, 1fr) 38px;
1528
+ border-bottom: 1px solid var(--line-soft);
1529
+ padding: 7px 0;
1530
+ }
1531
+
1532
+ .landscape-row > span {
1533
+ min-width: 0;
1534
+ }
1535
+
1536
+ .landscape-row strong,
1537
+ .landscape-row small {
1538
+ display: block;
1539
+ overflow: hidden;
1540
+ text-overflow: ellipsis;
1541
+ white-space: nowrap;
1542
+ }
1543
+
1544
+ .landscape-row strong {
1545
+ color: var(--muted);
1546
+ font-size: 9px;
1547
+ }
1548
+
1549
+ .landscape-row small {
1550
+ margin-top: 3px;
1551
+ color: var(--faint);
1552
+ font-size: 8px;
1553
+ }
1554
+
1555
+ .landscape-row.baseline strong::after,
1556
+ .landscape-row.target strong::after {
1557
+ margin-left: 5px;
1558
+ color: var(--faint);
1559
+ font-size: 7px;
1560
+ text-transform: uppercase;
1561
+ }
1562
+
1563
+ .landscape-row.baseline strong::after {
1564
+ content: "A";
1565
+ }
1566
+
1567
+ .landscape-row.target strong::after {
1568
+ content: "B";
1569
+ }
1570
+
1571
+ .budget-row {
1572
+ grid-template-columns: 80px minmax(90px, 1fr) 86px;
1573
+ margin-top: 9px;
1574
+ }
1575
+
1576
+ .budget-row > span:first-child {
1577
+ color: var(--muted);
1578
+ font-size: 9px;
1579
+ }
1580
+
1581
+ .bar-table-cell {
1582
+ min-width: 150px;
1583
+ }
1584
+
1585
+ .bar-table-cell .quantized-bar {
1586
+ display: inline-grid;
1587
+ width: 96px;
1588
+ min-width: 96px;
1589
+ margin-right: 7px;
1590
+ vertical-align: middle;
1591
+ }
1592
+
1593
+ .bar-table-cell small {
1594
+ display: inline;
1595
+ margin: 0;
1596
+ white-space: nowrap;
1597
+ }
1598
+
1599
+ .section-heading {
1600
+ display: flex;
1601
+ align-items: center;
1602
+ justify-content: space-between;
1603
+ gap: 12px;
1604
+ margin-bottom: 10px;
1605
+ }
1606
+
1607
+ .section-heading h3 {
1608
+ flex: 1;
1609
+ margin: 0;
1610
+ }
1611
+
1612
+ .candidate-picker {
1613
+ display: flex;
1614
+ align-items: center;
1615
+ gap: 6px;
1616
+ color: var(--faint);
1617
+ font-size: 8px;
1618
+ text-transform: uppercase;
1619
+ }
1620
+
1621
+ .candidate-picker select {
1622
+ max-width: 170px;
1623
+ border: 1px solid var(--line);
1624
+ border-radius: 6px;
1625
+ background: #0f1213;
1626
+ padding: 6px;
1627
+ color: var(--ink);
1628
+ font-size: 9px;
1629
+ }
1630
+
1631
+ .gate-list,
1632
+ .comparison-scopes,
1633
+ .failure-list {
1634
+ display: grid;
1635
+ gap: 8px;
1636
+ }
1637
+
1638
+ .gate {
1639
+ display: grid;
1640
+ grid-template-columns: 18px minmax(0, 1fr) auto;
1641
+ gap: 9px;
1642
+ align-items: center;
1643
+ border: 1px solid var(--line-soft);
1644
+ border-radius: 8px;
1645
+ padding: 10px;
1646
+ color: var(--coral);
1647
+ }
1648
+
1649
+ .gate.passed {
1650
+ color: var(--lime);
1651
+ }
1652
+
1653
+ .gate strong,
1654
+ .gate small {
1655
+ display: block;
1656
+ }
1657
+
1658
+ .gate strong {
1659
+ color: var(--ink);
1660
+ font-size: 9px;
1661
+ }
1662
+
1663
+ .gate small {
1664
+ margin-top: 3px;
1665
+ color: var(--faint);
1666
+ font-size: 8px;
1667
+ }
1668
+
1669
+ .gate b {
1670
+ color: var(--muted);
1671
+ font:
1672
+ 500 9px / 1.2 ui-monospace,
1673
+ SFMono-Regular,
1674
+ Menlo,
1675
+ monospace;
1676
+ }
1677
+
1678
+ .decision-meta {
1679
+ display: grid;
1680
+ grid-template-columns: auto minmax(0, 1fr);
1681
+ gap: 7px 12px;
1682
+ margin-top: 10px;
1683
+ border-left: 2px solid #4f5e31;
1684
+ background: #141814;
1685
+ padding: 10px 12px;
1686
+ font-size: 9px;
1687
+ }
1688
+
1689
+ .decision-meta span {
1690
+ color: var(--faint);
1691
+ text-transform: uppercase;
1692
+ }
1693
+
1694
+ .decision-meta strong {
1695
+ overflow-wrap: anywhere;
1696
+ color: var(--muted);
1697
+ }
1698
+
1699
+ .lineage-card,
1700
+ .failure-card,
1701
+ .comparison-scope {
1702
+ border: 1px solid var(--line-soft);
1703
+ border-radius: 8px;
1704
+ background: #141719;
1705
+ padding: 11px;
1706
+ }
1707
+
1708
+ .lineage-card > span,
1709
+ .lineage-card > small {
1710
+ display: block;
1711
+ }
1712
+
1713
+ .lineage-card > span {
1714
+ font-size: 11px;
1715
+ font-weight: 650;
1716
+ }
1717
+
1718
+ .lineage-card > small,
1719
+ .lineage-card > p {
1720
+ margin-top: 5px;
1721
+ color: var(--muted);
1722
+ font-size: 9px;
1723
+ line-height: 1.5;
1724
+ }
1725
+
1726
+ .lineage-card code {
1727
+ display: inline-block;
1728
+ margin: 5px 5px 0 0;
1729
+ border-radius: 4px;
1730
+ background: #202527;
1731
+ padding: 3px 5px;
1732
+ color: var(--faint);
1733
+ font-size: 8px;
1734
+ }
1735
+
1736
+ .comparison-scope > header,
1737
+ .failure-card > header {
1738
+ display: flex;
1739
+ justify-content: space-between;
1740
+ gap: 12px;
1741
+ margin-bottom: 9px;
1742
+ font-size: 9px;
1743
+ }
1744
+
1745
+ .failure-card ul,
1746
+ .failure-card p {
1747
+ margin: 6px 0 0;
1748
+ padding-left: 18px;
1749
+ color: var(--muted);
1750
+ font-size: 9px;
1751
+ line-height: 1.55;
1752
+ }
1753
+
1754
+ .comparison-stats {
1755
+ display: grid;
1756
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1757
+ gap: 8px;
1758
+ margin: 0;
1759
+ }
1760
+
1761
+ .comparison-stats div {
1762
+ border: 1px solid var(--line);
1763
+ border-radius: 8px;
1764
+ padding: 11px;
1765
+ }
1766
+
1767
+ .comparison-stats dt,
1768
+ .comparison-stats small {
1769
+ color: var(--faint);
1770
+ font-size: 8px;
1771
+ text-transform: uppercase;
1772
+ }
1773
+
1774
+ .comparison-stats dd {
1775
+ margin: 7px 0 5px;
1776
+ font:
1777
+ 550 11px / 1.2 ui-monospace,
1778
+ SFMono-Regular,
1779
+ Menlo,
1780
+ monospace;
1781
+ }
1782
+
1783
+ .comparison-matrix td strong,
1784
+ .comparison-matrix td small {
1785
+ display: block;
1786
+ }
1787
+
1788
+ .comparison-matrix td small {
1789
+ margin-top: 3px;
1790
+ color: var(--faint);
1791
+ }
1792
+
1793
+ .rationale-cell {
1794
+ min-width: 240px;
1795
+ white-space: normal;
1796
+ }
1797
+
1798
+ .rationale-cell span {
1799
+ display: inline;
1800
+ line-height: 1.45;
1801
+ }
1802
+
1803
+ .rationale-cell b {
1804
+ margin: 0 5px;
1805
+ color: var(--faint);
1806
+ }
1807
+
1808
+ .delta-badge {
1809
+ border-radius: 99px;
1810
+ background: #252a2d;
1811
+ padding: 3px 6px;
1812
+ color: var(--muted);
1813
+ font-size: 8px;
1814
+ text-transform: uppercase;
1815
+ }
1816
+
1817
+ .delta-badge.improved,
1818
+ .delta-badge.added {
1819
+ background: #1d2917;
1820
+ color: var(--lime);
1821
+ }
1822
+
1823
+ .delta-badge.regressed,
1824
+ .delta-badge.removed {
1825
+ background: #3b211f;
1826
+ color: var(--coral);
1827
+ }
1828
+
1829
+ .row-regressed {
1830
+ background: rgb(255 128 102 / 5%);
1831
+ }
1832
+
1833
+ .metric-deltas span {
1834
+ display: block;
1835
+ margin: 2px 0;
1836
+ }
1837
+
1838
+ .artifact-preview,
1839
+ .artifact-diff {
1840
+ max-height: 560px;
1841
+ overflow: auto;
1842
+ margin: 0;
1843
+ border: 1px solid var(--line);
1844
+ border-radius: 8px;
1845
+ background: #0c0f10;
1846
+ padding: 14px;
1847
+ color: #bdc2be;
1848
+ font:
1849
+ 500 9px / 1.6 ui-monospace,
1850
+ SFMono-Regular,
1851
+ Menlo,
1852
+ monospace;
1853
+ white-space: pre-wrap;
1854
+ }
1855
+
1856
+ .artifact-diff span {
1857
+ display: block;
1858
+ min-height: 1.6em;
1859
+ }
1860
+
1861
+ .artifact-diff b {
1862
+ display: inline-block;
1863
+ width: 18px;
1864
+ user-select: none;
1865
+ }
1866
+
1867
+ .artifact-diff .diff-added {
1868
+ background: rgb(200 241 105 / 8%);
1869
+ color: #d5f78a;
1870
+ }
1871
+
1872
+ .artifact-diff .diff-removed {
1873
+ background: rgb(255 128 102 / 8%);
1874
+ color: #ff9a87;
1875
+ }
1876
+
1877
+ .compact-header .back-button {
1878
+ margin-bottom: 15px;
1879
+ }
1880
+
1881
+ .prompt-block {
1882
+ max-height: 160px;
1883
+ overflow: auto;
1884
+ border-left: 2px solid #4f5e31;
1885
+ background: #141814;
1886
+ padding: 12px 14px;
1887
+ color: #b5b9b3;
1888
+ font:
1889
+ 500 9px / 1.65 ui-monospace,
1890
+ SFMono-Regular,
1891
+ Menlo,
1892
+ monospace;
1893
+ white-space: pre-wrap;
1894
+ }
1895
+
1896
+ .error-card {
1897
+ margin: 24px;
1898
+ border: 1px solid #5a302b;
1899
+ border-radius: 9px;
1900
+ background: #211716;
1901
+ padding: 16px;
1902
+ color: #ffad9d;
1903
+ font-size: 10px;
1904
+ line-height: 1.6;
1905
+ }
1906
+
1907
+ footer {
1908
+ display: flex;
1909
+ justify-content: space-between;
1910
+ gap: 20px;
1911
+ padding: 13px 2px 0;
1912
+ color: var(--faint);
1913
+ font:
1914
+ 500 8px / 1.2 ui-monospace,
1915
+ SFMono-Regular,
1916
+ Menlo,
1917
+ monospace;
1918
+ }
1919
+
1920
+ #runs-root {
1921
+ overflow: hidden;
1922
+ text-overflow: ellipsis;
1923
+ white-space: nowrap;
1924
+ }
1925
+
1926
+ #connection-state {
1927
+ flex: none;
1928
+ }
1929
+
1930
+ #connection-state i {
1931
+ display: inline-block;
1932
+ width: 5px;
1933
+ height: 5px;
1934
+ margin-right: 5px;
1935
+ border-radius: 50%;
1936
+ background: var(--lime);
1937
+ }
1938
+
1939
+ #connection-state.is-offline i {
1940
+ background: var(--coral);
1941
+ }
1942
+
1943
+ @media (max-width: 1100px) {
1944
+ .workspace {
1945
+ grid-template-columns: minmax(310px, 0.8fr) minmax(390px, 1.2fr);
1946
+ }
1947
+
1948
+ .metrics {
1949
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1950
+ }
1951
+
1952
+ .metrics article:nth-child(3) {
1953
+ border-top: 1px solid var(--line);
1954
+ border-left: 0;
1955
+ }
1956
+
1957
+ .metrics article:nth-child(4) {
1958
+ border-top: 1px solid var(--line);
1959
+ }
1960
+ }
1961
+
1962
+ @media (max-width: 830px) {
1963
+ .app-shell {
1964
+ display: block;
1965
+ }
1966
+
1967
+ .sidebar {
1968
+ position: static;
1969
+ display: grid;
1970
+ grid-template-columns: auto 1fr;
1971
+ height: auto;
1972
+ border-right: 0;
1973
+ border-bottom: 1px solid var(--line);
1974
+ padding: 14px 18px;
1975
+ }
1976
+
1977
+ .primary-nav {
1978
+ display: flex;
1979
+ justify-content: flex-end;
1980
+ margin: 0;
1981
+ }
1982
+
1983
+ .nav-item {
1984
+ display: flex;
1985
+ width: auto;
1986
+ }
1987
+
1988
+ .nav-glyph,
1989
+ .sidebar-note,
1990
+ .shortcut-card {
1991
+ display: none;
1992
+ }
1993
+
1994
+ main {
1995
+ padding: 24px 18px;
1996
+ }
1997
+
1998
+ .workspace {
1999
+ display: block;
2000
+ }
2001
+
2002
+ .collection-pane {
2003
+ border-right: 0;
2004
+ border-bottom: 1px solid var(--line);
2005
+ }
2006
+
2007
+ .collection-list {
2008
+ max-height: 420px;
2009
+ }
2010
+
2011
+ .inspector {
2012
+ max-height: none;
2013
+ }
2014
+
2015
+ .experiment-visuals {
2016
+ grid-template-columns: 1fr;
2017
+ }
2018
+ }
2019
+
2020
+ @media (max-width: 560px) {
2021
+ .sidebar {
2022
+ display: block;
2023
+ }
2024
+
2025
+ .primary-nav {
2026
+ justify-content: stretch;
2027
+ margin-top: 14px;
2028
+ }
2029
+
2030
+ .nav-item {
2031
+ flex: 1;
2032
+ justify-content: center;
2033
+ padding: 8px;
2034
+ }
2035
+
2036
+ .nav-count {
2037
+ display: none;
2038
+ }
2039
+
2040
+ .topbar {
2041
+ display: block;
2042
+ }
2043
+
2044
+ .topbar-actions {
2045
+ margin-top: 18px;
2046
+ }
2047
+
2048
+ .search {
2049
+ flex: 1;
2050
+ }
2051
+
2052
+ .metrics {
2053
+ grid-template-columns: 1fr 1fr;
2054
+ }
2055
+
2056
+ .metrics article {
2057
+ padding: 14px;
2058
+ }
2059
+
2060
+ .detail-title-row {
2061
+ display: block;
2062
+ }
2063
+
2064
+ .score-block {
2065
+ margin-top: 14px;
2066
+ border-left: 0;
2067
+ padding-left: 0;
2068
+ text-align: left;
2069
+ }
2070
+
2071
+ .detail-stats {
2072
+ grid-template-columns: 1fr 1fr;
2073
+ }
2074
+
2075
+ .detail-stats div:nth-child(3) {
2076
+ border-top: 1px solid var(--line);
2077
+ border-left: 0;
2078
+ }
2079
+
2080
+ .detail-stats div:nth-child(4) {
2081
+ border-top: 1px solid var(--line);
2082
+ }
2083
+
2084
+ .evidence-visual-grid,
2085
+ .comparison-distributions,
2086
+ .suite-outcome-visual {
2087
+ grid-template-columns: 1fr;
2088
+ }
2089
+
2090
+ .landscape-row {
2091
+ grid-template-columns: 96px minmax(80px, 1fr) 34px;
2092
+ }
2093
+
2094
+ .landscape-axis {
2095
+ margin-left: 104px;
2096
+ }
2097
+
2098
+ .budget-row {
2099
+ grid-template-columns: 68px minmax(70px, 1fr) 76px;
2100
+ }
2101
+ }
2102
+
2103
+ @media (prefers-reduced-motion: reduce) {
2104
+ *,
2105
+ *::before,
2106
+ *::after {
2107
+ scroll-behavior: auto;
2108
+ animation-duration: 0.01ms;
2109
+ animation-iteration-count: 1;
2110
+ }
2111
+ }