@prismatic-io/lux 0.0.2-preview.3 → 0.0.2-preview.32

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 (727) 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 +7 -5
  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 +4 -1
  17. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  18. package/lib/assertions/core/command-exits-zero.js +50 -7
  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/helpers.d.ts +2 -7
  27. package/lib/assertions/core/helpers.d.ts.map +1 -1
  28. package/lib/assertions/core/helpers.js +2 -6
  29. package/lib/assertions/core/helpers.js.map +1 -1
  30. package/lib/assertions/core/index.d.ts.map +1 -1
  31. package/lib/assertions/core/index.js +2 -1
  32. package/lib/assertions/core/index.js.map +1 -1
  33. package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
  34. package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
  35. package/lib/assertions/core/output-checks.d.ts +3 -0
  36. package/lib/assertions/core/output-checks.d.ts.map +1 -1
  37. package/lib/assertions/core/predicate.d.ts +1 -0
  38. package/lib/assertions/core/predicate.d.ts.map +1 -1
  39. package/lib/assertions/core/resource-checks.d.ts +25 -0
  40. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  41. package/lib/assertions/core/resource-checks.js +35 -5
  42. package/lib/assertions/core/resource-checks.js.map +1 -1
  43. package/lib/assertions/rubric/index.d.ts +28 -3
  44. package/lib/assertions/rubric/index.d.ts.map +1 -1
  45. package/lib/assertions/rubric/index.js +59 -13
  46. package/lib/assertions/rubric/index.js.map +1 -1
  47. package/lib/assertions/rubric/internal.d.ts +30 -5
  48. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  49. package/lib/assertions/rubric/internal.js +181 -28
  50. package/lib/assertions/rubric/internal.js.map +1 -1
  51. package/lib/authoring.d.ts +36 -2
  52. package/lib/authoring.d.ts.map +1 -1
  53. package/lib/authoring.js +36 -1
  54. package/lib/authoring.js.map +1 -1
  55. package/lib/cli/bin.js +2 -13
  56. package/lib/cli/bin.js.map +1 -1
  57. package/lib/cli/command-runtime.d.ts +3 -3
  58. package/lib/cli/command-runtime.d.ts.map +1 -1
  59. package/lib/cli/command-runtime.js +17 -6
  60. package/lib/cli/command-runtime.js.map +1 -1
  61. package/lib/cli/doctor.d.ts +55 -0
  62. package/lib/cli/doctor.d.ts.map +1 -0
  63. package/lib/cli/doctor.js +14 -0
  64. package/lib/cli/doctor.js.map +1 -0
  65. package/lib/cli/harness-plan.d.ts +26 -0
  66. package/lib/cli/harness-plan.d.ts.map +1 -0
  67. package/lib/cli/harness-plan.js +75 -0
  68. package/lib/cli/harness-plan.js.map +1 -0
  69. package/lib/cli/init-templates.d.ts +11 -0
  70. package/lib/cli/init-templates.d.ts.map +1 -0
  71. package/lib/cli/init-templates.js +215 -0
  72. package/lib/cli/init-templates.js.map +1 -0
  73. package/lib/cli/init.d.ts +10 -0
  74. package/lib/cli/init.d.ts.map +1 -1
  75. package/lib/cli/init.js +34 -173
  76. package/lib/cli/init.js.map +1 -1
  77. package/lib/cli/output-schemas.d.ts +1408 -0
  78. package/lib/cli/output-schemas.d.ts.map +1 -0
  79. package/lib/cli/output-schemas.js +91 -0
  80. package/lib/cli/output-schemas.js.map +1 -0
  81. package/lib/cli/program.d.ts +140 -12
  82. package/lib/cli/program.d.ts.map +1 -1
  83. package/lib/cli/program.js +779 -646
  84. package/lib/cli/program.js.map +1 -1
  85. package/lib/cli/render/reporter.d.ts.map +1 -1
  86. package/lib/cli/render/reporter.js +48 -8
  87. package/lib/cli/render/reporter.js.map +1 -1
  88. package/lib/cli/run-options.d.ts +20 -4
  89. package/lib/cli/run-options.d.ts.map +1 -1
  90. package/lib/cli/run-options.js +100 -19
  91. package/lib/cli/run-options.js.map +1 -1
  92. package/lib/cli/view.d.ts +15 -0
  93. package/lib/cli/view.d.ts.map +1 -0
  94. package/lib/cli/view.js +168 -0
  95. package/lib/cli/view.js.map +1 -0
  96. package/lib/container/driver.d.ts +27 -0
  97. package/lib/container/driver.d.ts.map +1 -0
  98. package/lib/container/driver.js +197 -0
  99. package/lib/container/driver.js.map +1 -0
  100. package/lib/container/protocol.d.ts +12 -0
  101. package/lib/container/protocol.d.ts.map +1 -0
  102. package/lib/container/protocol.js +38 -0
  103. package/lib/container/protocol.js.map +1 -0
  104. package/lib/container/resources.d.ts +12 -0
  105. package/lib/container/resources.d.ts.map +1 -0
  106. package/lib/container/resources.js +133 -0
  107. package/lib/container/resources.js.map +1 -0
  108. package/lib/container/worker.d.ts +2 -0
  109. package/lib/container/worker.d.ts.map +1 -0
  110. package/lib/container/worker.js +85 -0
  111. package/lib/container/worker.js.map +1 -0
  112. package/lib/core/action-events.d.ts +29 -0
  113. package/lib/core/action-events.d.ts.map +1 -0
  114. package/lib/core/action-events.js +51 -0
  115. package/lib/core/action-events.js.map +1 -0
  116. package/lib/core/agent-activity.d.ts +49 -0
  117. package/lib/core/agent-activity.d.ts.map +1 -0
  118. package/lib/core/agent-activity.js +206 -0
  119. package/lib/core/agent-activity.js.map +1 -0
  120. package/lib/core/agent-environment.d.ts +5 -0
  121. package/lib/core/agent-environment.d.ts.map +1 -0
  122. package/lib/core/agent-environment.js +47 -0
  123. package/lib/core/agent-environment.js.map +1 -0
  124. package/lib/core/agent-events.d.ts +26 -0
  125. package/lib/core/agent-events.d.ts.map +1 -0
  126. package/lib/core/agent-events.js +13 -0
  127. package/lib/core/agent-events.js.map +1 -0
  128. package/lib/core/annotation.d.ts +6 -2
  129. package/lib/core/annotation.d.ts.map +1 -1
  130. package/lib/core/annotation.js +2 -1
  131. package/lib/core/annotation.js.map +1 -1
  132. package/lib/core/answerer.d.ts +12 -0
  133. package/lib/core/answerer.d.ts.map +1 -1
  134. package/lib/core/answerer.js +2 -0
  135. package/lib/core/answerer.js.map +1 -1
  136. package/lib/core/artifact-evidence.d.ts +8 -0
  137. package/lib/core/artifact-evidence.d.ts.map +1 -1
  138. package/lib/core/artifact-evidence.js +36 -4
  139. package/lib/core/artifact-evidence.js.map +1 -1
  140. package/lib/core/assertion.d.ts +20 -2
  141. package/lib/core/assertion.d.ts.map +1 -1
  142. package/lib/core/assertion.js +19 -1
  143. package/lib/core/assertion.js.map +1 -1
  144. package/lib/core/case.d.ts +111 -3
  145. package/lib/core/case.d.ts.map +1 -1
  146. package/lib/core/case.js +17 -2
  147. package/lib/core/case.js.map +1 -1
  148. package/lib/core/command-verification.d.ts +10 -0
  149. package/lib/core/command-verification.d.ts.map +1 -0
  150. package/lib/core/command-verification.js +66 -0
  151. package/lib/core/command-verification.js.map +1 -0
  152. package/lib/core/driver-execution.d.ts +83 -0
  153. package/lib/core/driver-execution.d.ts.map +1 -0
  154. package/lib/core/driver-execution.js +72 -0
  155. package/lib/core/driver-execution.js.map +1 -0
  156. package/lib/core/driver-metrics.d.ts +98 -0
  157. package/lib/core/driver-metrics.d.ts.map +1 -0
  158. package/lib/core/driver-metrics.js +36 -0
  159. package/lib/core/driver-metrics.js.map +1 -0
  160. package/lib/core/driver.d.ts +64 -0
  161. package/lib/core/driver.d.ts.map +1 -1
  162. package/lib/core/driver.js +28 -0
  163. package/lib/core/driver.js.map +1 -1
  164. package/lib/core/duration.d.ts +5 -0
  165. package/lib/core/duration.d.ts.map +1 -0
  166. package/lib/core/duration.js +49 -0
  167. package/lib/core/duration.js.map +1 -0
  168. package/lib/core/environment.d.ts +18 -0
  169. package/lib/core/environment.d.ts.map +1 -0
  170. package/lib/core/environment.js +21 -0
  171. package/lib/core/environment.js.map +1 -0
  172. package/lib/core/evaluation-clusters.d.ts +17 -0
  173. package/lib/core/evaluation-clusters.d.ts.map +1 -0
  174. package/lib/core/evaluation-clusters.js +23 -0
  175. package/lib/core/evaluation-clusters.js.map +1 -0
  176. package/lib/core/events.d.ts +36 -0
  177. package/lib/core/events.d.ts.map +1 -1
  178. package/lib/core/events.js +12 -2
  179. package/lib/core/events.js.map +1 -1
  180. package/lib/core/experiment.d.ts +32 -2
  181. package/lib/core/experiment.d.ts.map +1 -1
  182. package/lib/core/experiment.js +35 -18
  183. package/lib/core/experiment.js.map +1 -1
  184. package/lib/core/file-tree.d.ts +7 -0
  185. package/lib/core/file-tree.d.ts.map +1 -0
  186. package/lib/core/file-tree.js +35 -0
  187. package/lib/core/file-tree.js.map +1 -0
  188. package/lib/core/global-id.d.ts +6 -0
  189. package/lib/core/global-id.d.ts.map +1 -0
  190. package/lib/core/global-id.js +17 -0
  191. package/lib/core/global-id.js.map +1 -0
  192. package/lib/core/harness-catalog.d.ts +35 -0
  193. package/lib/core/harness-catalog.d.ts.map +1 -0
  194. package/lib/core/harness-catalog.js +45 -0
  195. package/lib/core/harness-catalog.js.map +1 -0
  196. package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
  197. package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
  198. package/lib/core/harness-catalogs/antigravity.js +23 -0
  199. package/lib/core/harness-catalogs/antigravity.js.map +1 -0
  200. package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
  201. package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
  202. package/lib/core/harness-catalogs/claude-code.js +24 -0
  203. package/lib/core/harness-catalogs/claude-code.js.map +1 -0
  204. package/lib/core/harness-catalogs/codex.d.ts +11 -0
  205. package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
  206. package/lib/core/harness-catalogs/codex.js +26 -0
  207. package/lib/core/harness-catalogs/codex.js.map +1 -0
  208. package/lib/core/harness-catalogs/copilot.d.ts +29 -0
  209. package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
  210. package/lib/core/harness-catalogs/copilot.js +45 -0
  211. package/lib/core/harness-catalogs/copilot.js.map +1 -0
  212. package/lib/core/harness-catalogs/cursor.d.ts +2 -0
  213. package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
  214. package/lib/core/harness-catalogs/cursor.js +13 -0
  215. package/lib/core/harness-catalogs/cursor.js.map +1 -0
  216. package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
  217. package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
  218. package/lib/core/harness-catalogs/grok-build.js +18 -0
  219. package/lib/core/harness-catalogs/grok-build.js.map +1 -0
  220. package/lib/core/harness-catalogs/index.d.ts +73 -0
  221. package/lib/core/harness-catalogs/index.d.ts.map +1 -0
  222. package/lib/core/harness-catalogs/index.js +17 -0
  223. package/lib/core/harness-catalogs/index.js.map +1 -0
  224. package/lib/core/harness-matrix.d.ts +154 -0
  225. package/lib/core/harness-matrix.d.ts.map +1 -0
  226. package/lib/core/harness-matrix.js +204 -0
  227. package/lib/core/harness-matrix.js.map +1 -0
  228. package/lib/core/index.d.ts +12 -0
  229. package/lib/core/index.d.ts.map +1 -1
  230. package/lib/core/index.js +12 -0
  231. package/lib/core/index.js.map +1 -1
  232. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  233. package/lib/core/lifecycle-fixtures.js +4 -2
  234. package/lib/core/lifecycle-fixtures.js.map +1 -1
  235. package/lib/core/model-cli.d.ts +9 -11
  236. package/lib/core/model-cli.d.ts.map +1 -1
  237. package/lib/core/model-cli.js +31 -19
  238. package/lib/core/model-cli.js.map +1 -1
  239. package/lib/core/platform-process.d.ts +6 -1
  240. package/lib/core/platform-process.d.ts.map +1 -1
  241. package/lib/core/platform-process.js +49 -11
  242. package/lib/core/platform-process.js.map +1 -1
  243. package/lib/core/rubric.d.ts +1 -0
  244. package/lib/core/rubric.d.ts.map +1 -1
  245. package/lib/core/run.d.ts +293 -1
  246. package/lib/core/run.d.ts.map +1 -1
  247. package/lib/core/run.js +27 -0
  248. package/lib/core/run.js.map +1 -1
  249. package/lib/core/secure-copy.d.ts.map +1 -0
  250. package/lib/core/secure-copy.js.map +1 -0
  251. package/lib/core/usage.d.ts +5 -0
  252. package/lib/core/usage.d.ts.map +1 -1
  253. package/lib/core/usage.js +3 -0
  254. package/lib/core/usage.js.map +1 -1
  255. package/lib/core/wire.d.ts +12 -0
  256. package/lib/core/wire.d.ts.map +1 -1
  257. package/lib/core/wire.js +5 -1
  258. package/lib/core/wire.js.map +1 -1
  259. package/lib/drivers/antigravity/artifacts.d.ts +2 -0
  260. package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
  261. package/lib/drivers/antigravity/artifacts.js +33 -0
  262. package/lib/drivers/antigravity/artifacts.js.map +1 -0
  263. package/lib/drivers/antigravity/config.d.ts +88 -0
  264. package/lib/drivers/antigravity/config.d.ts.map +1 -0
  265. package/lib/drivers/antigravity/config.js +87 -0
  266. package/lib/drivers/antigravity/config.js.map +1 -0
  267. package/lib/drivers/antigravity/events.d.ts +4 -0
  268. package/lib/drivers/antigravity/events.d.ts.map +1 -0
  269. package/lib/drivers/antigravity/events.js +241 -0
  270. package/lib/drivers/antigravity/events.js.map +1 -0
  271. package/lib/drivers/antigravity/index.d.ts +114 -0
  272. package/lib/drivers/antigravity/index.d.ts.map +1 -0
  273. package/lib/drivers/antigravity/index.js +113 -0
  274. package/lib/drivers/antigravity/index.js.map +1 -0
  275. package/lib/drivers/antigravity/runtime.d.ts +7 -0
  276. package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
  277. package/lib/drivers/antigravity/runtime.js +83 -0
  278. package/lib/drivers/antigravity/runtime.js.map +1 -0
  279. package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
  280. package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
  281. package/lib/drivers/claude-code/deferred-process.js +108 -0
  282. package/lib/drivers/claude-code/deferred-process.js.map +1 -0
  283. package/lib/drivers/claude-code/index.d.ts +180 -10
  284. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  285. package/lib/drivers/claude-code/index.js +186 -252
  286. package/lib/drivers/claude-code/index.js.map +1 -1
  287. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  288. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  289. package/lib/drivers/claude-code/isolation.js +199 -0
  290. package/lib/drivers/claude-code/isolation.js.map +1 -0
  291. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  292. package/lib/drivers/claude-code/parse-events.js +73 -8
  293. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  294. package/lib/drivers/codex/app-events.d.ts +9 -2
  295. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  296. package/lib/drivers/codex/app-events.js +104 -12
  297. package/lib/drivers/codex/app-events.js.map +1 -1
  298. package/lib/drivers/codex/config.d.ts +66 -5
  299. package/lib/drivers/codex/config.d.ts.map +1 -1
  300. package/lib/drivers/codex/config.js +39 -8
  301. package/lib/drivers/codex/config.js.map +1 -1
  302. package/lib/drivers/codex/exec-events.d.ts +4 -0
  303. package/lib/drivers/codex/exec-events.d.ts.map +1 -0
  304. package/lib/drivers/codex/exec-events.js +230 -0
  305. package/lib/drivers/codex/exec-events.js.map +1 -0
  306. package/lib/drivers/codex/index.d.ts +138 -4
  307. package/lib/drivers/codex/index.d.ts.map +1 -1
  308. package/lib/drivers/codex/index.js +112 -276
  309. package/lib/drivers/codex/index.js.map +1 -1
  310. package/lib/drivers/copilot/config.d.ts +84 -0
  311. package/lib/drivers/copilot/config.d.ts.map +1 -0
  312. package/lib/drivers/copilot/config.js +57 -0
  313. package/lib/drivers/copilot/config.js.map +1 -0
  314. package/lib/drivers/copilot/index.d.ts +107 -0
  315. package/lib/drivers/copilot/index.d.ts.map +1 -0
  316. package/lib/drivers/copilot/index.js +268 -0
  317. package/lib/drivers/copilot/index.js.map +1 -0
  318. package/lib/drivers/cursor/config.d.ts +28 -0
  319. package/lib/drivers/cursor/config.d.ts.map +1 -0
  320. package/lib/drivers/cursor/config.js +28 -0
  321. package/lib/drivers/cursor/config.js.map +1 -0
  322. package/lib/drivers/cursor/index.d.ts +44 -0
  323. package/lib/drivers/cursor/index.d.ts.map +1 -0
  324. package/lib/drivers/cursor/index.js +286 -0
  325. package/lib/drivers/cursor/index.js.map +1 -0
  326. package/lib/drivers/cursor/interaction.d.ts +6 -0
  327. package/lib/drivers/cursor/interaction.d.ts.map +1 -0
  328. package/lib/drivers/cursor/interaction.js +55 -0
  329. package/lib/drivers/cursor/interaction.js.map +1 -0
  330. package/lib/drivers/grok-build/config.d.ts +68 -0
  331. package/lib/drivers/grok-build/config.d.ts.map +1 -0
  332. package/lib/drivers/grok-build/config.js +40 -0
  333. package/lib/drivers/grok-build/config.js.map +1 -0
  334. package/lib/drivers/grok-build/index.d.ts +87 -0
  335. package/lib/drivers/grok-build/index.d.ts.map +1 -0
  336. package/lib/drivers/grok-build/index.js +293 -0
  337. package/lib/drivers/grok-build/index.js.map +1 -0
  338. package/lib/drivers/mcp/index.d.ts +37 -4
  339. package/lib/drivers/mcp/index.d.ts.map +1 -1
  340. package/lib/drivers/mcp/index.js +25 -11
  341. package/lib/drivers/mcp/index.js.map +1 -1
  342. package/lib/drivers/shared/acp-events.d.ts +15 -0
  343. package/lib/drivers/shared/acp-events.d.ts.map +1 -0
  344. package/lib/drivers/shared/acp-events.js +83 -0
  345. package/lib/drivers/shared/acp-events.js.map +1 -0
  346. package/lib/drivers/shared/acp-interaction.d.ts +7 -0
  347. package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
  348. package/lib/drivers/shared/acp-interaction.js +20 -0
  349. package/lib/drivers/shared/acp-interaction.js.map +1 -0
  350. package/lib/drivers/shared/acp-session.d.ts +4 -0
  351. package/lib/drivers/shared/acp-session.d.ts.map +1 -0
  352. package/lib/drivers/shared/acp-session.js +23 -0
  353. package/lib/drivers/shared/acp-session.js.map +1 -0
  354. package/lib/drivers/shared/acp-transport.d.ts +40 -0
  355. package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
  356. package/lib/drivers/shared/acp-transport.js +152 -0
  357. package/lib/drivers/shared/acp-transport.js.map +1 -0
  358. package/lib/drivers/shared/artifacts.d.ts.map +1 -1
  359. package/lib/drivers/shared/artifacts.js +3 -2
  360. package/lib/drivers/shared/artifacts.js.map +1 -1
  361. package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
  362. package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
  363. package/lib/drivers/shared/experiment-behavior.js +197 -0
  364. package/lib/drivers/shared/experiment-behavior.js.map +1 -0
  365. package/lib/drivers/shared/experiment-policy.d.ts +4 -0
  366. package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
  367. package/lib/drivers/shared/experiment-policy.js +143 -0
  368. package/lib/drivers/shared/experiment-policy.js.map +1 -0
  369. package/lib/drivers/subprocess/index.d.ts +39 -4
  370. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  371. package/lib/drivers/subprocess/index.js +56 -12
  372. package/lib/drivers/subprocess/index.js.map +1 -1
  373. package/lib/index.d.ts +22 -8
  374. package/lib/index.d.ts.map +1 -1
  375. package/lib/index.js +20 -6
  376. package/lib/index.js.map +1 -1
  377. package/lib/optimization/reflective.d.ts +3 -1
  378. package/lib/optimization/reflective.d.ts.map +1 -1
  379. package/lib/optimization/reflective.js +3 -2
  380. package/lib/optimization/reflective.js.map +1 -1
  381. package/lib/orchestrator/annotation-loader.d.ts +6 -2
  382. package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
  383. package/lib/orchestrator/annotation-loader.js +8 -0
  384. package/lib/orchestrator/annotation-loader.js.map +1 -1
  385. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  386. package/lib/orchestrator/annotation-store.js +16 -2
  387. package/lib/orchestrator/annotation-store.js.map +1 -1
  388. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  389. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  390. package/lib/orchestrator/artifact-origin.js +40 -0
  391. package/lib/orchestrator/artifact-origin.js.map +1 -0
  392. package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
  393. package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
  394. package/lib/orchestrator/campaign-lifecycle.js +4 -1
  395. package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
  396. package/lib/orchestrator/candidates.d.ts.map +1 -1
  397. package/lib/orchestrator/candidates.js +3 -2
  398. package/lib/orchestrator/candidates.js.map +1 -1
  399. package/lib/orchestrator/compare.d.ts +19 -3
  400. package/lib/orchestrator/compare.d.ts.map +1 -1
  401. package/lib/orchestrator/compare.js +32 -6
  402. package/lib/orchestrator/compare.js.map +1 -1
  403. package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
  404. package/lib/orchestrator/comparison-identity.js +2 -0
  405. package/lib/orchestrator/comparison-identity.js.map +1 -1
  406. package/lib/orchestrator/config.d.ts +179 -1
  407. package/lib/orchestrator/config.d.ts.map +1 -1
  408. package/lib/orchestrator/config.js +18 -4
  409. package/lib/orchestrator/config.js.map +1 -1
  410. package/lib/orchestrator/discover.d.ts +1 -0
  411. package/lib/orchestrator/discover.d.ts.map +1 -1
  412. package/lib/orchestrator/discover.js +7 -1
  413. package/lib/orchestrator/discover.js.map +1 -1
  414. package/lib/orchestrator/doctor.d.ts +1 -0
  415. package/lib/orchestrator/doctor.d.ts.map +1 -1
  416. package/lib/orchestrator/doctor.js +121 -33
  417. package/lib/orchestrator/doctor.js.map +1 -1
  418. package/lib/orchestrator/driver-capabilities.d.ts +4 -0
  419. package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
  420. package/lib/orchestrator/driver-capabilities.js +13 -0
  421. package/lib/orchestrator/driver-capabilities.js.map +1 -0
  422. package/lib/orchestrator/driver-identity.d.ts +5 -0
  423. package/lib/orchestrator/driver-identity.d.ts.map +1 -0
  424. package/lib/orchestrator/driver-identity.js +51 -0
  425. package/lib/orchestrator/driver-identity.js.map +1 -0
  426. package/lib/orchestrator/experiment-context.d.ts +51 -3
  427. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  428. package/lib/orchestrator/experiment-context.js.map +1 -1
  429. package/lib/orchestrator/experiment-contracts.d.ts +30 -1
  430. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  431. package/lib/orchestrator/experiment-corpus.d.ts +2 -1
  432. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  433. package/lib/orchestrator/experiment-corpus.js +28 -22
  434. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  435. package/lib/orchestrator/experiment-effects.d.ts +33 -0
  436. package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
  437. package/lib/orchestrator/experiment-effects.js +44 -0
  438. package/lib/orchestrator/experiment-effects.js.map +1 -0
  439. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  440. package/lib/orchestrator/experiment-evaluation.js +56 -5
  441. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  442. package/lib/orchestrator/experiment-identity.d.ts +3 -0
  443. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  444. package/lib/orchestrator/experiment-identity.js +22 -33
  445. package/lib/orchestrator/experiment-identity.js.map +1 -1
  446. package/lib/orchestrator/experiment-loader.d.ts +8 -3
  447. package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
  448. package/lib/orchestrator/experiment-preflight.d.ts +3 -0
  449. package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
  450. package/lib/orchestrator/experiment-preflight.js +21 -0
  451. package/lib/orchestrator/experiment-preflight.js.map +1 -0
  452. package/lib/orchestrator/experiment-report.d.ts +90 -1
  453. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  454. package/lib/orchestrator/experiment-report.js +9 -1
  455. package/lib/orchestrator/experiment-report.js.map +1 -1
  456. package/lib/orchestrator/experiment-runs.d.ts +61 -2
  457. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  458. package/lib/orchestrator/experiment-runs.js +13 -5
  459. package/lib/orchestrator/experiment-runs.js.map +1 -1
  460. package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
  461. package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
  462. package/lib/orchestrator/experiment-runtime-identity.js +5 -220
  463. package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
  464. package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
  465. package/lib/orchestrator/experiment-selection.js +52 -0
  466. package/lib/orchestrator/experiment-selection.js.map +1 -1
  467. package/lib/orchestrator/experiment.d.ts +3 -3
  468. package/lib/orchestrator/experiment.d.ts.map +1 -1
  469. package/lib/orchestrator/experiment.js +26 -21
  470. package/lib/orchestrator/experiment.js.map +1 -1
  471. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  472. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  473. package/lib/orchestrator/fixture-identity.js +6 -1
  474. package/lib/orchestrator/fixture-identity.js.map +1 -1
  475. package/lib/orchestrator/fs-read.d.ts +1 -6
  476. package/lib/orchestrator/fs-read.d.ts.map +1 -1
  477. package/lib/orchestrator/fs-read.js +2 -32
  478. package/lib/orchestrator/fs-read.js.map +1 -1
  479. package/lib/orchestrator/grader-experiment.d.ts +33 -3
  480. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  481. package/lib/orchestrator/grader-experiment.js +54 -9
  482. package/lib/orchestrator/grader-experiment.js.map +1 -1
  483. package/lib/orchestrator/grading.d.ts +2 -1
  484. package/lib/orchestrator/grading.d.ts.map +1 -1
  485. package/lib/orchestrator/grading.js +46 -31
  486. package/lib/orchestrator/grading.js.map +1 -1
  487. package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
  488. package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
  489. package/lib/orchestrator/harness-catalog-drift.js +90 -0
  490. package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
  491. package/lib/orchestrator/harness-registry.d.ts +4 -0
  492. package/lib/orchestrator/harness-registry.d.ts.map +1 -0
  493. package/lib/orchestrator/harness-registry.js +5 -0
  494. package/lib/orchestrator/harness-registry.js.map +1 -0
  495. package/lib/orchestrator/index.d.ts +1 -1
  496. package/lib/orchestrator/index.d.ts.map +1 -1
  497. package/lib/orchestrator/index.js +1 -1
  498. package/lib/orchestrator/index.js.map +1 -1
  499. package/lib/orchestrator/list-runs.d.ts +8 -1
  500. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  501. package/lib/orchestrator/list-runs.js +81 -14
  502. package/lib/orchestrator/list-runs.js.map +1 -1
  503. package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
  504. package/lib/orchestrator/optimization-lifecycle.js +3 -1
  505. package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
  506. package/lib/orchestrator/orchestrator.d.ts +18 -2
  507. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  508. package/lib/orchestrator/orchestrator.js +50 -168
  509. package/lib/orchestrator/orchestrator.js.map +1 -1
  510. package/lib/orchestrator/paired-effects.d.ts +34 -0
  511. package/lib/orchestrator/paired-effects.d.ts.map +1 -0
  512. package/lib/orchestrator/paired-effects.js +158 -0
  513. package/lib/orchestrator/paired-effects.js.map +1 -0
  514. package/lib/orchestrator/provenance.d.ts +5 -1
  515. package/lib/orchestrator/provenance.d.ts.map +1 -1
  516. package/lib/orchestrator/provenance.js +16 -3
  517. package/lib/orchestrator/provenance.js.map +1 -1
  518. package/lib/orchestrator/regrade.d.ts +9 -1
  519. package/lib/orchestrator/regrade.d.ts.map +1 -1
  520. package/lib/orchestrator/rubric-loader.js +1 -1
  521. package/lib/orchestrator/rubric-loader.js.map +1 -1
  522. package/lib/orchestrator/run-dir.d.ts +2 -0
  523. package/lib/orchestrator/run-dir.d.ts.map +1 -1
  524. package/lib/orchestrator/run-dir.js +1 -1
  525. package/lib/orchestrator/run-dir.js.map +1 -1
  526. package/lib/orchestrator/run-execution.d.ts +3 -0
  527. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  528. package/lib/orchestrator/run-execution.js +66 -12
  529. package/lib/orchestrator/run-execution.js.map +1 -1
  530. package/lib/orchestrator/run-lifecycle.d.ts +1 -0
  531. package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
  532. package/lib/orchestrator/run-lifecycle.js +3 -2
  533. package/lib/orchestrator/run-lifecycle.js.map +1 -1
  534. package/lib/orchestrator/run-workspace.d.ts +10 -0
  535. package/lib/orchestrator/run-workspace.d.ts.map +1 -0
  536. package/lib/orchestrator/run-workspace.js +58 -0
  537. package/lib/orchestrator/run-workspace.js.map +1 -0
  538. package/lib/orchestrator/suite-compare.d.ts +37 -0
  539. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  540. package/lib/orchestrator/suite-compare.js +27 -17
  541. package/lib/orchestrator/suite-compare.js.map +1 -1
  542. package/lib/orchestrator/suite-runs.d.ts +6 -1
  543. package/lib/orchestrator/suite-runs.d.ts.map +1 -1
  544. package/lib/orchestrator/suite-runs.js +14 -2
  545. package/lib/orchestrator/suite-runs.js.map +1 -1
  546. package/lib/orchestrator/suite-summary.d.ts +77 -0
  547. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  548. package/lib/orchestrator/suite-summary.js +61 -12
  549. package/lib/orchestrator/suite-summary.js.map +1 -1
  550. package/lib/previewer/artifacts.d.ts +25 -0
  551. package/lib/previewer/artifacts.d.ts.map +1 -0
  552. package/lib/previewer/artifacts.js +180 -0
  553. package/lib/previewer/artifacts.js.map +1 -0
  554. package/lib/previewer/server.d.ts +111 -0
  555. package/lib/previewer/server.d.ts.map +1 -0
  556. package/lib/previewer/server.js +558 -0
  557. package/lib/previewer/server.js.map +1 -0
  558. package/package.json +3 -3
  559. package/skills/lux-answerer/SKILL.md +2 -2
  560. package/src/answerers/claude-code/index.ts +6 -5
  561. package/src/answerers/persona/index.ts +75 -34
  562. package/src/answerers/terminal/index.ts +8 -12
  563. package/src/assertions/authoring.ts +2 -0
  564. package/src/assertions/core/command-exits-zero.ts +61 -7
  565. package/src/assertions/core/event-checks.ts +64 -3
  566. package/src/assertions/core/helpers.ts +3 -6
  567. package/src/assertions/core/index.ts +2 -0
  568. package/src/assertions/core/resource-checks.ts +38 -5
  569. package/src/assertions/rubric/index.ts +68 -13
  570. package/src/assertions/rubric/internal.ts +227 -27
  571. package/src/authoring.ts +345 -2
  572. package/src/cli/bin.ts +2 -12
  573. package/src/cli/command-runtime.ts +20 -9
  574. package/src/cli/doctor.ts +17 -0
  575. package/src/cli/harness-plan.ts +117 -0
  576. package/src/cli/init-templates.ts +238 -0
  577. package/src/cli/init.ts +53 -184
  578. package/src/cli/output-schemas.ts +106 -0
  579. package/src/cli/program.ts +691 -721
  580. package/src/cli/render/reporter.ts +50 -8
  581. package/src/cli/run-options.ts +132 -25
  582. package/src/cli/view.ts +129 -0
  583. package/src/container/driver.ts +211 -0
  584. package/src/container/protocol.ts +48 -0
  585. package/src/container/resources.ts +153 -0
  586. package/src/container/worker.ts +107 -0
  587. package/src/core/action-events.ts +59 -0
  588. package/src/core/agent-activity.ts +236 -0
  589. package/src/core/agent-environment.ts +64 -0
  590. package/src/core/agent-events.ts +17 -0
  591. package/src/core/annotation.ts +2 -1
  592. package/src/core/answerer.ts +9 -0
  593. package/src/core/artifact-evidence.ts +47 -4
  594. package/src/core/assertion.ts +21 -1
  595. package/src/core/case.ts +21 -3
  596. package/src/core/command-verification.ts +74 -0
  597. package/src/core/driver-execution.ts +84 -0
  598. package/src/core/driver-metrics.ts +51 -0
  599. package/src/core/driver.ts +76 -0
  600. package/src/core/duration.ts +52 -0
  601. package/src/core/environment.ts +22 -0
  602. package/src/core/evaluation-clusters.ts +35 -0
  603. package/src/core/events.ts +14 -2
  604. package/src/core/experiment.ts +64 -24
  605. package/src/core/file-tree.ts +35 -0
  606. package/src/core/global-id.ts +26 -0
  607. package/src/core/harness-catalog.ts +100 -0
  608. package/src/core/harness-catalogs/antigravity.ts +24 -0
  609. package/src/core/harness-catalogs/claude-code.ts +25 -0
  610. package/src/core/harness-catalogs/codex.ts +27 -0
  611. package/src/core/harness-catalogs/copilot.ts +46 -0
  612. package/src/core/harness-catalogs/cursor.ts +13 -0
  613. package/src/core/harness-catalogs/grok-build.ts +19 -0
  614. package/src/core/harness-catalogs/index.ts +31 -0
  615. package/src/core/harness-matrix.ts +316 -0
  616. package/src/core/index.ts +12 -0
  617. package/src/core/lifecycle-fixtures.ts +4 -2
  618. package/src/core/model-cli.ts +52 -23
  619. package/src/core/platform-process.ts +58 -10
  620. package/src/core/run.ts +31 -0
  621. package/src/core/usage.ts +8 -0
  622. package/src/core/wire.ts +5 -1
  623. package/src/drivers/antigravity/README.md +171 -0
  624. package/src/drivers/antigravity/artifacts.ts +37 -0
  625. package/src/drivers/antigravity/config.ts +92 -0
  626. package/src/drivers/antigravity/events.ts +290 -0
  627. package/src/drivers/antigravity/index.ts +132 -0
  628. package/src/drivers/antigravity/runtime.ts +94 -0
  629. package/src/drivers/claude-code/deferred-process.ts +118 -0
  630. package/src/drivers/claude-code/index.ts +216 -281
  631. package/src/drivers/claude-code/isolation.ts +228 -0
  632. package/src/drivers/claude-code/parse-events.ts +98 -12
  633. package/src/drivers/codex/app-events.ts +126 -16
  634. package/src/drivers/codex/config.ts +50 -8
  635. package/src/drivers/codex/exec-events.ts +258 -0
  636. package/src/drivers/codex/index.ts +144 -312
  637. package/src/drivers/copilot/README.md +60 -0
  638. package/src/drivers/copilot/config.ts +61 -0
  639. package/src/drivers/copilot/index.ts +310 -0
  640. package/src/drivers/cursor/README.md +66 -0
  641. package/src/drivers/cursor/config.ts +31 -0
  642. package/src/drivers/cursor/index.ts +326 -0
  643. package/src/drivers/cursor/interaction.ts +74 -0
  644. package/src/drivers/grok-build/README.md +112 -0
  645. package/src/drivers/grok-build/config.ts +43 -0
  646. package/src/drivers/grok-build/index.ts +331 -0
  647. package/src/drivers/mcp/index.ts +25 -11
  648. package/src/drivers/shared/acp-events.ts +94 -0
  649. package/src/drivers/shared/acp-interaction.ts +27 -0
  650. package/src/drivers/shared/acp-session.ts +40 -0
  651. package/src/drivers/shared/acp-transport.ts +187 -0
  652. package/src/drivers/shared/artifacts.ts +6 -2
  653. package/src/drivers/shared/experiment-behavior.ts +214 -0
  654. package/src/drivers/shared/experiment-policy.ts +195 -0
  655. package/src/drivers/subprocess/index.ts +55 -12
  656. package/src/index.ts +115 -10
  657. package/src/optimization/reflective.ts +3 -2
  658. package/src/orchestrator/annotation-loader.ts +10 -0
  659. package/src/orchestrator/annotation-store.ts +24 -3
  660. package/src/orchestrator/artifact-origin.ts +50 -0
  661. package/src/orchestrator/campaign-lifecycle.ts +5 -1
  662. package/src/orchestrator/candidates.ts +3 -2
  663. package/src/orchestrator/compare.ts +41 -6
  664. package/src/orchestrator/comparison-identity.ts +2 -0
  665. package/src/orchestrator/config.ts +20 -3
  666. package/src/orchestrator/discover.ts +8 -1
  667. package/src/orchestrator/doctor.ts +189 -28
  668. package/src/orchestrator/driver-capabilities.ts +21 -0
  669. package/src/orchestrator/driver-identity.ts +69 -0
  670. package/src/orchestrator/experiment-context.ts +3 -2
  671. package/src/orchestrator/experiment-corpus.ts +53 -37
  672. package/src/orchestrator/experiment-effects.ts +61 -0
  673. package/src/orchestrator/experiment-evaluation.ts +71 -10
  674. package/src/orchestrator/experiment-identity.ts +42 -48
  675. package/src/orchestrator/experiment-preflight.ts +27 -0
  676. package/src/orchestrator/experiment-report.ts +21 -1
  677. package/src/orchestrator/experiment-runs.ts +11 -4
  678. package/src/orchestrator/experiment-runtime-identity.ts +5 -243
  679. package/src/orchestrator/experiment-selection.ts +77 -0
  680. package/src/orchestrator/experiment.ts +29 -29
  681. package/src/orchestrator/fixture-identity.ts +9 -1
  682. package/src/orchestrator/fs-read.ts +2 -32
  683. package/src/orchestrator/grader-experiment.ts +74 -13
  684. package/src/orchestrator/grading.ts +67 -28
  685. package/src/orchestrator/harness-catalog-drift.ts +132 -0
  686. package/src/orchestrator/harness-registry.ts +12 -0
  687. package/src/orchestrator/index.ts +1 -0
  688. package/src/orchestrator/list-runs.ts +98 -13
  689. package/src/orchestrator/optimization-lifecycle.ts +4 -1
  690. package/src/orchestrator/orchestrator.ts +92 -216
  691. package/src/orchestrator/paired-effects.ts +209 -0
  692. package/src/orchestrator/provenance.ts +23 -3
  693. package/src/orchestrator/rubric-loader.ts +1 -1
  694. package/src/orchestrator/run-dir.ts +8 -1
  695. package/src/orchestrator/run-execution.ts +77 -11
  696. package/src/orchestrator/run-lifecycle.ts +4 -2
  697. package/src/orchestrator/run-workspace.ts +62 -0
  698. package/src/orchestrator/suite-compare.ts +29 -19
  699. package/src/orchestrator/suite-runs.ts +13 -2
  700. package/src/orchestrator/suite-summary.ts +122 -13
  701. package/src/previewer/artifacts.ts +221 -0
  702. package/src/previewer/server.ts +787 -0
  703. package/viewer/app.css +2079 -0
  704. package/viewer/app.js +627 -0
  705. package/viewer/artifact-view.js +48 -0
  706. package/viewer/charts.js +86 -0
  707. package/viewer/detail.js +1237 -0
  708. package/viewer/format.js +129 -0
  709. package/viewer/index.html +151 -0
  710. package/lib/answerers/scripted/index.d.ts +0 -8
  711. package/lib/answerers/scripted/index.d.ts.map +0 -1
  712. package/lib/answerers/scripted/index.js +0 -163
  713. package/lib/answerers/scripted/index.js.map +0 -1
  714. package/lib/cli/skills.d.ts +0 -38
  715. package/lib/cli/skills.d.ts.map +0 -1
  716. package/lib/cli/skills.js +0 -84
  717. package/lib/cli/skills.js.map +0 -1
  718. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  719. package/lib/drivers/shared/secure-copy.js.map +0 -1
  720. package/skills/lux/SKILL.md +0 -85
  721. package/skills/lux/references/cli.md +0 -102
  722. package/skills/lux/references/eval-authoring.md +0 -105
  723. package/src/answerers/scripted/index.ts +0 -186
  724. package/src/cli/skills.ts +0 -129
  725. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  726. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  727. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
package/viewer/app.css ADDED
@@ -0,0 +1,2079 @@
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
+ .quantized-bar {
1260
+ display: grid;
1261
+ grid-template-columns: repeat(20, minmax(2px, 1fr));
1262
+ gap: 2px;
1263
+ width: 100%;
1264
+ min-width: 92px;
1265
+ height: 9px;
1266
+ }
1267
+
1268
+ .quantized-cell {
1269
+ min-width: 0;
1270
+ border-radius: 1px;
1271
+ background: #282d30;
1272
+ }
1273
+
1274
+ .quantized-cell.is-filled.tone-positive,
1275
+ .quantized-cell.is-filled.tone-after,
1276
+ .quantized-cell.is-filled.segment-passed,
1277
+ .quantized-cell.is-filled.segment-improved,
1278
+ .legend-swatch.segment-passed,
1279
+ .legend-swatch.segment-improved {
1280
+ background: var(--lime);
1281
+ }
1282
+
1283
+ .quantized-cell.is-filled.tone-negative,
1284
+ .quantized-cell.is-filled.segment-regressed,
1285
+ .quantized-cell.is-filled.segment-removed,
1286
+ .legend-swatch.segment-regressed,
1287
+ .legend-swatch.segment-removed {
1288
+ background: var(--coral);
1289
+ }
1290
+
1291
+ .quantized-cell.is-filled.tone-before,
1292
+ .quantized-cell.is-filled.segment-agent,
1293
+ .legend-swatch.segment-agent {
1294
+ background: var(--blue);
1295
+ }
1296
+
1297
+ .quantized-cell.is-filled.tone-neutral,
1298
+ .quantized-cell.is-filled.segment-unchanged,
1299
+ .legend-swatch.segment-unchanged {
1300
+ background: #899095;
1301
+ }
1302
+
1303
+ .quantized-cell.is-filled.segment-answerer,
1304
+ .quantized-cell.is-filled.segment-added,
1305
+ .legend-swatch.segment-answerer,
1306
+ .legend-swatch.segment-added {
1307
+ background: var(--amber);
1308
+ }
1309
+
1310
+ .quantized-cell.is-filled.segment-grading,
1311
+ .quantized-cell.is-filled.segment-changed,
1312
+ .legend-swatch.segment-grading,
1313
+ .legend-swatch.segment-changed {
1314
+ background: #b28cff;
1315
+ }
1316
+
1317
+ .quantized-cell.is-filled.segment-collect,
1318
+ .legend-swatch.segment-collect {
1319
+ background: #64c6c0;
1320
+ }
1321
+
1322
+ .quantized-cell.is-filled.segment-ungraded,
1323
+ .quantized-cell.is-filled.segment-pending,
1324
+ .legend-swatch.segment-ungraded,
1325
+ .legend-swatch.segment-pending {
1326
+ background: var(--faint);
1327
+ }
1328
+
1329
+ .quantized-cell.has-threshold {
1330
+ box-shadow: -2px 0 0 var(--amber);
1331
+ }
1332
+
1333
+ .distribution-visual {
1334
+ display: grid;
1335
+ gap: 8px;
1336
+ }
1337
+
1338
+ .visual-legend {
1339
+ display: flex;
1340
+ flex-wrap: wrap;
1341
+ gap: 7px 12px;
1342
+ color: var(--muted);
1343
+ font:
1344
+ 500 9px / 1.3 ui-monospace,
1345
+ SFMono-Regular,
1346
+ Menlo,
1347
+ monospace;
1348
+ }
1349
+
1350
+ .visual-legend span {
1351
+ display: inline-flex;
1352
+ align-items: center;
1353
+ gap: 5px;
1354
+ }
1355
+
1356
+ .visual-legend b {
1357
+ color: var(--ink);
1358
+ font-weight: 600;
1359
+ }
1360
+
1361
+ .legend-swatch {
1362
+ width: 7px;
1363
+ height: 7px;
1364
+ border-radius: 2px;
1365
+ }
1366
+
1367
+ .evidence-visual-grid,
1368
+ .comparison-distributions,
1369
+ .experiment-visuals {
1370
+ display: grid;
1371
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1372
+ gap: 16px 20px;
1373
+ }
1374
+
1375
+ .composition-figure,
1376
+ .comparison-bars,
1377
+ .candidate-landscape,
1378
+ .budget-visual {
1379
+ min-width: 0;
1380
+ margin: 0;
1381
+ }
1382
+
1383
+ .composition-figure figcaption,
1384
+ .comparison-bars figcaption,
1385
+ .candidate-landscape figcaption,
1386
+ .budget-visual figcaption {
1387
+ display: flex;
1388
+ align-items: baseline;
1389
+ justify-content: space-between;
1390
+ gap: 10px;
1391
+ margin-bottom: 9px;
1392
+ color: var(--ink);
1393
+ font-size: 10px;
1394
+ font-weight: 600;
1395
+ }
1396
+
1397
+ .candidate-landscape figcaption small,
1398
+ .budget-visual figcaption small {
1399
+ color: var(--faint);
1400
+ font:
1401
+ 500 8px / 1 ui-monospace,
1402
+ SFMono-Regular,
1403
+ Menlo,
1404
+ monospace;
1405
+ text-transform: uppercase;
1406
+ }
1407
+
1408
+ .assertion-content > .quantized-bar {
1409
+ max-width: 220px;
1410
+ margin-top: 8px;
1411
+ }
1412
+
1413
+ .comparison-plot-grid {
1414
+ display: grid;
1415
+ gap: 11px;
1416
+ }
1417
+
1418
+ .comparison-bars {
1419
+ border-bottom: 1px solid var(--line-soft);
1420
+ padding-bottom: 11px;
1421
+ }
1422
+
1423
+ .comparison-bars:last-child {
1424
+ border-bottom: 0;
1425
+ padding-bottom: 0;
1426
+ }
1427
+
1428
+ .comparison-bars figcaption b {
1429
+ font:
1430
+ 600 9px / 1 ui-monospace,
1431
+ SFMono-Regular,
1432
+ Menlo,
1433
+ monospace;
1434
+ }
1435
+
1436
+ .bar-lane,
1437
+ .landscape-row,
1438
+ .budget-row {
1439
+ display: grid;
1440
+ grid-template-columns: 18px minmax(90px, 1fr) 58px;
1441
+ align-items: center;
1442
+ gap: 8px;
1443
+ margin-top: 6px;
1444
+ }
1445
+
1446
+ .bar-lane strong {
1447
+ color: var(--faint);
1448
+ font:
1449
+ 700 8px / 1 ui-monospace,
1450
+ SFMono-Regular,
1451
+ Menlo,
1452
+ monospace;
1453
+ }
1454
+
1455
+ .bar-lane > span:last-child,
1456
+ .landscape-row > b,
1457
+ .budget-row > b {
1458
+ overflow: hidden;
1459
+ color: var(--muted);
1460
+ font:
1461
+ 500 8px / 1 ui-monospace,
1462
+ SFMono-Regular,
1463
+ Menlo,
1464
+ monospace;
1465
+ text-align: right;
1466
+ text-overflow: ellipsis;
1467
+ white-space: nowrap;
1468
+ }
1469
+
1470
+ .comparison-distributions {
1471
+ margin-top: 18px;
1472
+ border-top: 1px solid var(--line-soft);
1473
+ padding-top: 15px;
1474
+ }
1475
+
1476
+ .suite-outcome-visual {
1477
+ display: grid;
1478
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
1479
+ gap: 22px;
1480
+ }
1481
+
1482
+ .landscape-axis {
1483
+ display: flex;
1484
+ justify-content: space-between;
1485
+ margin: 0 0 5px 138px;
1486
+ color: var(--faint);
1487
+ font:
1488
+ 500 7px / 1 ui-monospace,
1489
+ SFMono-Regular,
1490
+ Menlo,
1491
+ monospace;
1492
+ }
1493
+
1494
+ .landscape-row {
1495
+ grid-template-columns: 130px minmax(100px, 1fr) 38px;
1496
+ border-bottom: 1px solid var(--line-soft);
1497
+ padding: 7px 0;
1498
+ }
1499
+
1500
+ .landscape-row > span {
1501
+ min-width: 0;
1502
+ }
1503
+
1504
+ .landscape-row strong,
1505
+ .landscape-row small {
1506
+ display: block;
1507
+ overflow: hidden;
1508
+ text-overflow: ellipsis;
1509
+ white-space: nowrap;
1510
+ }
1511
+
1512
+ .landscape-row strong {
1513
+ color: var(--muted);
1514
+ font-size: 9px;
1515
+ }
1516
+
1517
+ .landscape-row small {
1518
+ margin-top: 3px;
1519
+ color: var(--faint);
1520
+ font-size: 8px;
1521
+ }
1522
+
1523
+ .landscape-row.baseline strong::after,
1524
+ .landscape-row.target strong::after {
1525
+ margin-left: 5px;
1526
+ color: var(--faint);
1527
+ font-size: 7px;
1528
+ text-transform: uppercase;
1529
+ }
1530
+
1531
+ .landscape-row.baseline strong::after {
1532
+ content: "A";
1533
+ }
1534
+
1535
+ .landscape-row.target strong::after {
1536
+ content: "B";
1537
+ }
1538
+
1539
+ .budget-row {
1540
+ grid-template-columns: 80px minmax(90px, 1fr) 86px;
1541
+ margin-top: 9px;
1542
+ }
1543
+
1544
+ .budget-row > span:first-child {
1545
+ color: var(--muted);
1546
+ font-size: 9px;
1547
+ }
1548
+
1549
+ .bar-table-cell {
1550
+ min-width: 150px;
1551
+ }
1552
+
1553
+ .bar-table-cell .quantized-bar {
1554
+ display: inline-grid;
1555
+ width: 96px;
1556
+ min-width: 96px;
1557
+ margin-right: 7px;
1558
+ vertical-align: middle;
1559
+ }
1560
+
1561
+ .bar-table-cell small {
1562
+ display: inline;
1563
+ margin: 0;
1564
+ white-space: nowrap;
1565
+ }
1566
+
1567
+ .section-heading {
1568
+ display: flex;
1569
+ align-items: center;
1570
+ justify-content: space-between;
1571
+ gap: 12px;
1572
+ margin-bottom: 10px;
1573
+ }
1574
+
1575
+ .section-heading h3 {
1576
+ flex: 1;
1577
+ margin: 0;
1578
+ }
1579
+
1580
+ .candidate-picker {
1581
+ display: flex;
1582
+ align-items: center;
1583
+ gap: 6px;
1584
+ color: var(--faint);
1585
+ font-size: 8px;
1586
+ text-transform: uppercase;
1587
+ }
1588
+
1589
+ .candidate-picker select {
1590
+ max-width: 170px;
1591
+ border: 1px solid var(--line);
1592
+ border-radius: 6px;
1593
+ background: #0f1213;
1594
+ padding: 6px;
1595
+ color: var(--ink);
1596
+ font-size: 9px;
1597
+ }
1598
+
1599
+ .gate-list,
1600
+ .comparison-scopes,
1601
+ .failure-list {
1602
+ display: grid;
1603
+ gap: 8px;
1604
+ }
1605
+
1606
+ .gate {
1607
+ display: grid;
1608
+ grid-template-columns: 18px minmax(0, 1fr) auto;
1609
+ gap: 9px;
1610
+ align-items: center;
1611
+ border: 1px solid var(--line-soft);
1612
+ border-radius: 8px;
1613
+ padding: 10px;
1614
+ color: var(--coral);
1615
+ }
1616
+
1617
+ .gate.passed {
1618
+ color: var(--lime);
1619
+ }
1620
+
1621
+ .gate strong,
1622
+ .gate small {
1623
+ display: block;
1624
+ }
1625
+
1626
+ .gate strong {
1627
+ color: var(--ink);
1628
+ font-size: 9px;
1629
+ }
1630
+
1631
+ .gate small {
1632
+ margin-top: 3px;
1633
+ color: var(--faint);
1634
+ font-size: 8px;
1635
+ }
1636
+
1637
+ .gate b {
1638
+ color: var(--muted);
1639
+ font:
1640
+ 500 9px / 1.2 ui-monospace,
1641
+ SFMono-Regular,
1642
+ Menlo,
1643
+ monospace;
1644
+ }
1645
+
1646
+ .decision-meta {
1647
+ display: grid;
1648
+ grid-template-columns: auto minmax(0, 1fr);
1649
+ gap: 7px 12px;
1650
+ margin-top: 10px;
1651
+ border-left: 2px solid #4f5e31;
1652
+ background: #141814;
1653
+ padding: 10px 12px;
1654
+ font-size: 9px;
1655
+ }
1656
+
1657
+ .decision-meta span {
1658
+ color: var(--faint);
1659
+ text-transform: uppercase;
1660
+ }
1661
+
1662
+ .decision-meta strong {
1663
+ overflow-wrap: anywhere;
1664
+ color: var(--muted);
1665
+ }
1666
+
1667
+ .lineage-card,
1668
+ .failure-card,
1669
+ .comparison-scope {
1670
+ border: 1px solid var(--line-soft);
1671
+ border-radius: 8px;
1672
+ background: #141719;
1673
+ padding: 11px;
1674
+ }
1675
+
1676
+ .lineage-card > span,
1677
+ .lineage-card > small {
1678
+ display: block;
1679
+ }
1680
+
1681
+ .lineage-card > span {
1682
+ font-size: 11px;
1683
+ font-weight: 650;
1684
+ }
1685
+
1686
+ .lineage-card > small,
1687
+ .lineage-card > p {
1688
+ margin-top: 5px;
1689
+ color: var(--muted);
1690
+ font-size: 9px;
1691
+ line-height: 1.5;
1692
+ }
1693
+
1694
+ .lineage-card code {
1695
+ display: inline-block;
1696
+ margin: 5px 5px 0 0;
1697
+ border-radius: 4px;
1698
+ background: #202527;
1699
+ padding: 3px 5px;
1700
+ color: var(--faint);
1701
+ font-size: 8px;
1702
+ }
1703
+
1704
+ .comparison-scope > header,
1705
+ .failure-card > header {
1706
+ display: flex;
1707
+ justify-content: space-between;
1708
+ gap: 12px;
1709
+ margin-bottom: 9px;
1710
+ font-size: 9px;
1711
+ }
1712
+
1713
+ .failure-card ul,
1714
+ .failure-card p {
1715
+ margin: 6px 0 0;
1716
+ padding-left: 18px;
1717
+ color: var(--muted);
1718
+ font-size: 9px;
1719
+ line-height: 1.55;
1720
+ }
1721
+
1722
+ .comparison-stats {
1723
+ display: grid;
1724
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1725
+ gap: 8px;
1726
+ margin: 0;
1727
+ }
1728
+
1729
+ .comparison-stats div {
1730
+ border: 1px solid var(--line);
1731
+ border-radius: 8px;
1732
+ padding: 11px;
1733
+ }
1734
+
1735
+ .comparison-stats dt,
1736
+ .comparison-stats small {
1737
+ color: var(--faint);
1738
+ font-size: 8px;
1739
+ text-transform: uppercase;
1740
+ }
1741
+
1742
+ .comparison-stats dd {
1743
+ margin: 7px 0 5px;
1744
+ font:
1745
+ 550 11px / 1.2 ui-monospace,
1746
+ SFMono-Regular,
1747
+ Menlo,
1748
+ monospace;
1749
+ }
1750
+
1751
+ .comparison-matrix td strong,
1752
+ .comparison-matrix td small {
1753
+ display: block;
1754
+ }
1755
+
1756
+ .comparison-matrix td small {
1757
+ margin-top: 3px;
1758
+ color: var(--faint);
1759
+ }
1760
+
1761
+ .rationale-cell {
1762
+ min-width: 240px;
1763
+ white-space: normal;
1764
+ }
1765
+
1766
+ .rationale-cell span {
1767
+ display: inline;
1768
+ line-height: 1.45;
1769
+ }
1770
+
1771
+ .rationale-cell b {
1772
+ margin: 0 5px;
1773
+ color: var(--faint);
1774
+ }
1775
+
1776
+ .delta-badge {
1777
+ border-radius: 99px;
1778
+ background: #252a2d;
1779
+ padding: 3px 6px;
1780
+ color: var(--muted);
1781
+ font-size: 8px;
1782
+ text-transform: uppercase;
1783
+ }
1784
+
1785
+ .delta-badge.improved,
1786
+ .delta-badge.added {
1787
+ background: #1d2917;
1788
+ color: var(--lime);
1789
+ }
1790
+
1791
+ .delta-badge.regressed,
1792
+ .delta-badge.removed {
1793
+ background: #3b211f;
1794
+ color: var(--coral);
1795
+ }
1796
+
1797
+ .row-regressed {
1798
+ background: rgb(255 128 102 / 5%);
1799
+ }
1800
+
1801
+ .metric-deltas span {
1802
+ display: block;
1803
+ margin: 2px 0;
1804
+ }
1805
+
1806
+ .artifact-preview,
1807
+ .artifact-diff {
1808
+ max-height: 560px;
1809
+ overflow: auto;
1810
+ margin: 0;
1811
+ border: 1px solid var(--line);
1812
+ border-radius: 8px;
1813
+ background: #0c0f10;
1814
+ padding: 14px;
1815
+ color: #bdc2be;
1816
+ font:
1817
+ 500 9px / 1.6 ui-monospace,
1818
+ SFMono-Regular,
1819
+ Menlo,
1820
+ monospace;
1821
+ white-space: pre-wrap;
1822
+ }
1823
+
1824
+ .artifact-diff span {
1825
+ display: block;
1826
+ min-height: 1.6em;
1827
+ }
1828
+
1829
+ .artifact-diff b {
1830
+ display: inline-block;
1831
+ width: 18px;
1832
+ user-select: none;
1833
+ }
1834
+
1835
+ .artifact-diff .diff-added {
1836
+ background: rgb(200 241 105 / 8%);
1837
+ color: #d5f78a;
1838
+ }
1839
+
1840
+ .artifact-diff .diff-removed {
1841
+ background: rgb(255 128 102 / 8%);
1842
+ color: #ff9a87;
1843
+ }
1844
+
1845
+ .compact-header .back-button {
1846
+ margin-bottom: 15px;
1847
+ }
1848
+
1849
+ .prompt-block {
1850
+ max-height: 160px;
1851
+ overflow: auto;
1852
+ border-left: 2px solid #4f5e31;
1853
+ background: #141814;
1854
+ padding: 12px 14px;
1855
+ color: #b5b9b3;
1856
+ font:
1857
+ 500 9px / 1.65 ui-monospace,
1858
+ SFMono-Regular,
1859
+ Menlo,
1860
+ monospace;
1861
+ white-space: pre-wrap;
1862
+ }
1863
+
1864
+ .error-card {
1865
+ margin: 24px;
1866
+ border: 1px solid #5a302b;
1867
+ border-radius: 9px;
1868
+ background: #211716;
1869
+ padding: 16px;
1870
+ color: #ffad9d;
1871
+ font-size: 10px;
1872
+ line-height: 1.6;
1873
+ }
1874
+
1875
+ footer {
1876
+ display: flex;
1877
+ justify-content: space-between;
1878
+ gap: 20px;
1879
+ padding: 13px 2px 0;
1880
+ color: var(--faint);
1881
+ font:
1882
+ 500 8px / 1.2 ui-monospace,
1883
+ SFMono-Regular,
1884
+ Menlo,
1885
+ monospace;
1886
+ }
1887
+
1888
+ #runs-root {
1889
+ overflow: hidden;
1890
+ text-overflow: ellipsis;
1891
+ white-space: nowrap;
1892
+ }
1893
+
1894
+ #connection-state {
1895
+ flex: none;
1896
+ }
1897
+
1898
+ #connection-state i {
1899
+ display: inline-block;
1900
+ width: 5px;
1901
+ height: 5px;
1902
+ margin-right: 5px;
1903
+ border-radius: 50%;
1904
+ background: var(--lime);
1905
+ }
1906
+
1907
+ #connection-state.is-offline i {
1908
+ background: var(--coral);
1909
+ }
1910
+
1911
+ @media (max-width: 1100px) {
1912
+ .workspace {
1913
+ grid-template-columns: minmax(310px, 0.8fr) minmax(390px, 1.2fr);
1914
+ }
1915
+
1916
+ .metrics {
1917
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1918
+ }
1919
+
1920
+ .metrics article:nth-child(3) {
1921
+ border-top: 1px solid var(--line);
1922
+ border-left: 0;
1923
+ }
1924
+
1925
+ .metrics article:nth-child(4) {
1926
+ border-top: 1px solid var(--line);
1927
+ }
1928
+ }
1929
+
1930
+ @media (max-width: 830px) {
1931
+ .app-shell {
1932
+ display: block;
1933
+ }
1934
+
1935
+ .sidebar {
1936
+ position: static;
1937
+ display: grid;
1938
+ grid-template-columns: auto 1fr;
1939
+ height: auto;
1940
+ border-right: 0;
1941
+ border-bottom: 1px solid var(--line);
1942
+ padding: 14px 18px;
1943
+ }
1944
+
1945
+ .primary-nav {
1946
+ display: flex;
1947
+ justify-content: flex-end;
1948
+ margin: 0;
1949
+ }
1950
+
1951
+ .nav-item {
1952
+ display: flex;
1953
+ width: auto;
1954
+ }
1955
+
1956
+ .nav-glyph,
1957
+ .sidebar-note,
1958
+ .shortcut-card {
1959
+ display: none;
1960
+ }
1961
+
1962
+ main {
1963
+ padding: 24px 18px;
1964
+ }
1965
+
1966
+ .workspace {
1967
+ display: block;
1968
+ }
1969
+
1970
+ .collection-pane {
1971
+ border-right: 0;
1972
+ border-bottom: 1px solid var(--line);
1973
+ }
1974
+
1975
+ .collection-list {
1976
+ max-height: 420px;
1977
+ }
1978
+
1979
+ .inspector {
1980
+ max-height: none;
1981
+ }
1982
+
1983
+ .experiment-visuals {
1984
+ grid-template-columns: 1fr;
1985
+ }
1986
+ }
1987
+
1988
+ @media (max-width: 560px) {
1989
+ .sidebar {
1990
+ display: block;
1991
+ }
1992
+
1993
+ .primary-nav {
1994
+ justify-content: stretch;
1995
+ margin-top: 14px;
1996
+ }
1997
+
1998
+ .nav-item {
1999
+ flex: 1;
2000
+ justify-content: center;
2001
+ padding: 8px;
2002
+ }
2003
+
2004
+ .nav-count {
2005
+ display: none;
2006
+ }
2007
+
2008
+ .topbar {
2009
+ display: block;
2010
+ }
2011
+
2012
+ .topbar-actions {
2013
+ margin-top: 18px;
2014
+ }
2015
+
2016
+ .search {
2017
+ flex: 1;
2018
+ }
2019
+
2020
+ .metrics {
2021
+ grid-template-columns: 1fr 1fr;
2022
+ }
2023
+
2024
+ .metrics article {
2025
+ padding: 14px;
2026
+ }
2027
+
2028
+ .detail-title-row {
2029
+ display: block;
2030
+ }
2031
+
2032
+ .score-block {
2033
+ margin-top: 14px;
2034
+ border-left: 0;
2035
+ padding-left: 0;
2036
+ text-align: left;
2037
+ }
2038
+
2039
+ .detail-stats {
2040
+ grid-template-columns: 1fr 1fr;
2041
+ }
2042
+
2043
+ .detail-stats div:nth-child(3) {
2044
+ border-top: 1px solid var(--line);
2045
+ border-left: 0;
2046
+ }
2047
+
2048
+ .detail-stats div:nth-child(4) {
2049
+ border-top: 1px solid var(--line);
2050
+ }
2051
+
2052
+ .evidence-visual-grid,
2053
+ .comparison-distributions,
2054
+ .suite-outcome-visual {
2055
+ grid-template-columns: 1fr;
2056
+ }
2057
+
2058
+ .landscape-row {
2059
+ grid-template-columns: 96px minmax(80px, 1fr) 34px;
2060
+ }
2061
+
2062
+ .landscape-axis {
2063
+ margin-left: 104px;
2064
+ }
2065
+
2066
+ .budget-row {
2067
+ grid-template-columns: 68px minmax(70px, 1fr) 76px;
2068
+ }
2069
+ }
2070
+
2071
+ @media (prefers-reduced-motion: reduce) {
2072
+ *,
2073
+ *::before,
2074
+ *::after {
2075
+ scroll-behavior: auto;
2076
+ animation-duration: 0.01ms;
2077
+ animation-iteration-count: 1;
2078
+ }
2079
+ }