@prismatic-io/lux 0.0.1 → 0.0.2-preview.10

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 (256) hide show
  1. package/lib/answerers/persona/index.d.ts +2 -1
  2. package/lib/answerers/persona/index.d.ts.map +1 -1
  3. package/lib/answerers/persona/index.js +19 -5
  4. package/lib/answerers/persona/index.js.map +1 -1
  5. package/lib/answerers/terminal/index.js +1 -1
  6. package/lib/answerers/terminal/index.js.map +1 -1
  7. package/lib/assertions/authoring.d.ts +14 -0
  8. package/lib/assertions/authoring.d.ts.map +1 -0
  9. package/lib/assertions/authoring.js +3 -0
  10. package/lib/assertions/authoring.js.map +1 -0
  11. package/lib/assertions/core/helpers.d.ts +2 -7
  12. package/lib/assertions/core/helpers.d.ts.map +1 -1
  13. package/lib/assertions/core/helpers.js +2 -6
  14. package/lib/assertions/core/helpers.js.map +1 -1
  15. package/lib/assertions/core/index.d.ts.map +1 -1
  16. package/lib/assertions/core/index.js +2 -1
  17. package/lib/assertions/core/index.js.map +1 -1
  18. package/lib/assertions/core/resource-checks.d.ts +19 -0
  19. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  20. package/lib/assertions/core/resource-checks.js +32 -0
  21. package/lib/assertions/core/resource-checks.js.map +1 -1
  22. package/lib/authoring.d.ts +1 -0
  23. package/lib/authoring.d.ts.map +1 -1
  24. package/lib/authoring.js +1 -0
  25. package/lib/authoring.js.map +1 -1
  26. package/lib/cli/program.d.ts.map +1 -1
  27. package/lib/cli/program.js +12 -67
  28. package/lib/cli/program.js.map +1 -1
  29. package/lib/cli/render/reporter.d.ts.map +1 -1
  30. package/lib/cli/render/reporter.js +16 -3
  31. package/lib/cli/render/reporter.js.map +1 -1
  32. package/lib/cli/run-options.d.ts +1 -0
  33. package/lib/cli/run-options.d.ts.map +1 -1
  34. package/lib/cli/run-options.js.map +1 -1
  35. package/lib/cli/view.d.ts +13 -0
  36. package/lib/cli/view.d.ts.map +1 -0
  37. package/lib/cli/view.js +126 -0
  38. package/lib/cli/view.js.map +1 -0
  39. package/lib/core/action-events.d.ts +29 -0
  40. package/lib/core/action-events.d.ts.map +1 -0
  41. package/lib/core/action-events.js +51 -0
  42. package/lib/core/action-events.js.map +1 -0
  43. package/lib/core/agent-activity.d.ts +49 -0
  44. package/lib/core/agent-activity.d.ts.map +1 -0
  45. package/lib/core/agent-activity.js +206 -0
  46. package/lib/core/agent-activity.js.map +1 -0
  47. package/lib/core/agent-events.d.ts +26 -0
  48. package/lib/core/agent-events.d.ts.map +1 -0
  49. package/lib/core/agent-events.js +13 -0
  50. package/lib/core/agent-events.js.map +1 -0
  51. package/lib/core/artifact-evidence.d.ts +8 -0
  52. package/lib/core/artifact-evidence.d.ts.map +1 -1
  53. package/lib/core/artifact-evidence.js +36 -4
  54. package/lib/core/artifact-evidence.js.map +1 -1
  55. package/lib/core/assertion.d.ts +19 -9
  56. package/lib/core/assertion.d.ts.map +1 -1
  57. package/lib/core/assertion.js +26 -0
  58. package/lib/core/assertion.js.map +1 -1
  59. package/lib/core/case-authoring-state.d.ts +12 -0
  60. package/lib/core/case-authoring-state.d.ts.map +1 -0
  61. package/lib/core/case-authoring-state.js +43 -0
  62. package/lib/core/case-authoring-state.js.map +1 -0
  63. package/lib/core/case.d.ts +29 -1
  64. package/lib/core/case.d.ts.map +1 -1
  65. package/lib/core/case.js +14 -6
  66. package/lib/core/case.js.map +1 -1
  67. package/lib/core/driver-metrics.d.ts +98 -0
  68. package/lib/core/driver-metrics.d.ts.map +1 -0
  69. package/lib/core/driver-metrics.js +36 -0
  70. package/lib/core/driver-metrics.js.map +1 -0
  71. package/lib/core/driver.d.ts +3 -0
  72. package/lib/core/driver.d.ts.map +1 -1
  73. package/lib/core/driver.js.map +1 -1
  74. package/lib/core/events.d.ts +36 -0
  75. package/lib/core/events.d.ts.map +1 -1
  76. package/lib/core/events.js +12 -2
  77. package/lib/core/events.js.map +1 -1
  78. package/lib/core/experiment.d.ts +19 -0
  79. package/lib/core/experiment.d.ts.map +1 -1
  80. package/lib/core/experiment.js +2 -0
  81. package/lib/core/experiment.js.map +1 -1
  82. package/lib/core/index.d.ts +4 -0
  83. package/lib/core/index.d.ts.map +1 -1
  84. package/lib/core/index.js +4 -0
  85. package/lib/core/index.js.map +1 -1
  86. package/lib/core/lifecycle-fixtures.d.ts +3 -1
  87. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  88. package/lib/core/lifecycle-fixtures.js +4 -2
  89. package/lib/core/lifecycle-fixtures.js.map +1 -1
  90. package/lib/core/lifecycle-hooks.d.ts +9 -0
  91. package/lib/core/lifecycle-hooks.d.ts.map +1 -1
  92. package/lib/core/lifecycle-hooks.js +8 -2
  93. package/lib/core/lifecycle-hooks.js.map +1 -1
  94. package/lib/core/run.d.ts +150 -0
  95. package/lib/core/run.d.ts.map +1 -1
  96. package/lib/core/run.js +9 -0
  97. package/lib/core/run.js.map +1 -1
  98. package/lib/core/wire.d.ts +12 -0
  99. package/lib/core/wire.d.ts.map +1 -1
  100. package/lib/core/wire.js +5 -1
  101. package/lib/core/wire.js.map +1 -1
  102. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  103. package/lib/drivers/claude-code/parse-events.js +73 -8
  104. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  105. package/lib/drivers/codex/app-events.d.ts +9 -2
  106. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  107. package/lib/drivers/codex/app-events.js +93 -12
  108. package/lib/drivers/codex/app-events.js.map +1 -1
  109. package/lib/drivers/codex/index.d.ts.map +1 -1
  110. package/lib/drivers/codex/index.js +10 -14
  111. package/lib/drivers/codex/index.js.map +1 -1
  112. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  113. package/lib/drivers/subprocess/index.js +6 -0
  114. package/lib/drivers/subprocess/index.js.map +1 -1
  115. package/lib/index.d.ts +10 -6
  116. package/lib/index.d.ts.map +1 -1
  117. package/lib/index.js +10 -6
  118. package/lib/index.js.map +1 -1
  119. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  120. package/lib/orchestrator/annotation-store.js +6 -2
  121. package/lib/orchestrator/annotation-store.js.map +1 -1
  122. package/lib/orchestrator/case-extensions.d.ts +6 -0
  123. package/lib/orchestrator/case-extensions.d.ts.map +1 -0
  124. package/lib/orchestrator/case-extensions.js +28 -0
  125. package/lib/orchestrator/case-extensions.js.map +1 -0
  126. package/lib/orchestrator/compare.d.ts +13 -1
  127. package/lib/orchestrator/compare.d.ts.map +1 -1
  128. package/lib/orchestrator/compare.js +12 -0
  129. package/lib/orchestrator/compare.js.map +1 -1
  130. package/lib/orchestrator/config.d.ts.map +1 -1
  131. package/lib/orchestrator/config.js +0 -2
  132. package/lib/orchestrator/config.js.map +1 -1
  133. package/lib/orchestrator/doctor.d.ts.map +1 -1
  134. package/lib/orchestrator/doctor.js +5 -3
  135. package/lib/orchestrator/doctor.js.map +1 -1
  136. package/lib/orchestrator/experiment-contracts.d.ts +19 -0
  137. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  138. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  139. package/lib/orchestrator/experiment-evaluation.js +17 -0
  140. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  141. package/lib/orchestrator/experiment-report.d.ts +19 -0
  142. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  143. package/lib/orchestrator/experiment-runs.d.ts +38 -0
  144. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  145. package/lib/orchestrator/grader-experiment.d.ts +12 -0
  146. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  147. package/lib/orchestrator/grading.d.ts +2 -1
  148. package/lib/orchestrator/grading.d.ts.map +1 -1
  149. package/lib/orchestrator/grading.js +16 -4
  150. package/lib/orchestrator/grading.js.map +1 -1
  151. package/lib/orchestrator/index.d.ts +1 -1
  152. package/lib/orchestrator/index.d.ts.map +1 -1
  153. package/lib/orchestrator/index.js +1 -1
  154. package/lib/orchestrator/index.js.map +1 -1
  155. package/lib/orchestrator/list-runs.d.ts +7 -1
  156. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  157. package/lib/orchestrator/list-runs.js +50 -6
  158. package/lib/orchestrator/list-runs.js.map +1 -1
  159. package/lib/orchestrator/loader.d.ts.map +1 -1
  160. package/lib/orchestrator/loader.js +2 -0
  161. package/lib/orchestrator/loader.js.map +1 -1
  162. package/lib/orchestrator/orchestrator.d.ts +3 -0
  163. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  164. package/lib/orchestrator/orchestrator.js +42 -14
  165. package/lib/orchestrator/orchestrator.js.map +1 -1
  166. package/lib/orchestrator/owned-lock.d.ts.map +1 -1
  167. package/lib/orchestrator/owned-lock.js +52 -38
  168. package/lib/orchestrator/owned-lock.js.map +1 -1
  169. package/lib/orchestrator/regrade.d.ts +6 -0
  170. package/lib/orchestrator/regrade.d.ts.map +1 -1
  171. package/lib/orchestrator/regrade.js +8 -4
  172. package/lib/orchestrator/regrade.js.map +1 -1
  173. package/lib/orchestrator/run-execution.d.ts +2 -1
  174. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  175. package/lib/orchestrator/run-execution.js +20 -5
  176. package/lib/orchestrator/run-execution.js.map +1 -1
  177. package/lib/orchestrator/suite-compare.d.ts +34 -0
  178. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  179. package/lib/orchestrator/suite-summary.d.ts +68 -0
  180. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  181. package/lib/orchestrator/suite-summary.js +45 -7
  182. package/lib/orchestrator/suite-summary.js.map +1 -1
  183. package/lib/previewer/artifacts.d.ts +25 -0
  184. package/lib/previewer/artifacts.d.ts.map +1 -0
  185. package/lib/previewer/artifacts.js +180 -0
  186. package/lib/previewer/artifacts.js.map +1 -0
  187. package/lib/previewer/server.d.ts +105 -0
  188. package/lib/previewer/server.d.ts.map +1 -0
  189. package/lib/previewer/server.js +542 -0
  190. package/lib/previewer/server.js.map +1 -0
  191. package/package.json +2 -2
  192. package/skills/lux/SKILL.md +7 -3
  193. package/skills/lux/references/cli.md +25 -2
  194. package/skills/lux/references/eval-authoring.md +158 -4
  195. package/skills/lux-answerer/SKILL.md +1 -1
  196. package/src/answerers/persona/index.ts +20 -4
  197. package/src/answerers/terminal/index.ts +1 -1
  198. package/src/assertions/authoring.ts +81 -0
  199. package/src/assertions/core/helpers.ts +3 -6
  200. package/src/assertions/core/index.ts +2 -0
  201. package/src/assertions/core/resource-checks.ts +35 -0
  202. package/src/authoring.ts +1 -0
  203. package/src/cli/program.ts +14 -93
  204. package/src/cli/render/reporter.ts +18 -3
  205. package/src/cli/run-options.ts +1 -0
  206. package/src/cli/view.ts +168 -0
  207. package/src/core/action-events.ts +59 -0
  208. package/src/core/agent-activity.ts +236 -0
  209. package/src/core/agent-events.ts +17 -0
  210. package/src/core/artifact-evidence.ts +47 -4
  211. package/src/core/assertion.ts +41 -22
  212. package/src/core/case-authoring-state.ts +65 -0
  213. package/src/core/case.ts +57 -6
  214. package/src/core/driver-metrics.ts +51 -0
  215. package/src/core/driver.ts +3 -0
  216. package/src/core/events.ts +14 -2
  217. package/src/core/experiment.ts +2 -0
  218. package/src/core/index.ts +4 -0
  219. package/src/core/lifecycle-fixtures.ts +7 -2
  220. package/src/core/lifecycle-hooks.ts +16 -2
  221. package/src/core/run.ts +9 -0
  222. package/src/core/wire.ts +5 -1
  223. package/src/drivers/claude-code/parse-events.ts +98 -12
  224. package/src/drivers/codex/app-events.ts +116 -16
  225. package/src/drivers/codex/index.ts +16 -14
  226. package/src/drivers/subprocess/index.ts +6 -0
  227. package/src/index.ts +50 -6
  228. package/src/orchestrator/annotation-store.ts +5 -1
  229. package/src/orchestrator/case-extensions.ts +44 -0
  230. package/src/orchestrator/compare.ts +18 -0
  231. package/src/orchestrator/config.ts +0 -2
  232. package/src/orchestrator/doctor.ts +5 -3
  233. package/src/orchestrator/experiment-evaluation.ts +23 -0
  234. package/src/orchestrator/grading.ts +21 -2
  235. package/src/orchestrator/index.ts +1 -0
  236. package/src/orchestrator/list-runs.ts +66 -5
  237. package/src/orchestrator/loader.ts +2 -0
  238. package/src/orchestrator/orchestrator.ts +86 -40
  239. package/src/orchestrator/owned-lock.ts +54 -34
  240. package/src/orchestrator/regrade.ts +8 -7
  241. package/src/orchestrator/run-execution.ts +24 -3
  242. package/src/orchestrator/suite-summary.ts +101 -8
  243. package/src/previewer/artifacts.ts +221 -0
  244. package/src/previewer/server.ts +765 -0
  245. package/viewer/app.css +2075 -0
  246. package/viewer/app.js +606 -0
  247. package/viewer/artifact-view.js +48 -0
  248. package/viewer/charts.js +86 -0
  249. package/viewer/detail.js +1214 -0
  250. package/viewer/format.js +129 -0
  251. package/viewer/index.html +151 -0
  252. package/lib/answerers/scripted/index.d.ts +0 -8
  253. package/lib/answerers/scripted/index.d.ts.map +0 -1
  254. package/lib/answerers/scripted/index.js +0 -163
  255. package/lib/answerers/scripted/index.js.map +0 -1
  256. package/src/answerers/scripted/index.ts +0 -186
package/viewer/app.css ADDED
@@ -0,0 +1,2075 @@
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.passed .assertion-mark {
997
+ color: var(--lime);
998
+ }
999
+
1000
+ .assertion strong,
1001
+ .assertion small {
1002
+ display: block;
1003
+ }
1004
+
1005
+ .assertion strong {
1006
+ font-size: 10px;
1007
+ }
1008
+
1009
+ .assertion small {
1010
+ margin-top: 4px;
1011
+ color: var(--muted);
1012
+ font-size: 9px;
1013
+ line-height: 1.5;
1014
+ }
1015
+
1016
+ .assertion-score {
1017
+ color: var(--muted);
1018
+ font:
1019
+ 550 9px / 1.4 ui-monospace,
1020
+ SFMono-Regular,
1021
+ Menlo,
1022
+ monospace;
1023
+ }
1024
+
1025
+ .assertion-content {
1026
+ min-width: 0;
1027
+ }
1028
+
1029
+ .assertion-comment {
1030
+ margin: 7px 0 0;
1031
+ color: #c0c4bf;
1032
+ font-size: 9px;
1033
+ line-height: 1.55;
1034
+ }
1035
+
1036
+ .diagnostic-error {
1037
+ margin: 7px 0 0;
1038
+ color: var(--coral);
1039
+ font-size: 9px;
1040
+ }
1041
+
1042
+ .diagnostic {
1043
+ margin-top: 7px;
1044
+ color: var(--muted);
1045
+ font-size: 9px;
1046
+ }
1047
+
1048
+ .diagnostic summary {
1049
+ cursor: pointer;
1050
+ }
1051
+
1052
+ .diagnostic pre {
1053
+ max-height: 180px;
1054
+ overflow: auto;
1055
+ margin: 7px 0 0;
1056
+ border-radius: 6px;
1057
+ background: #0d1011;
1058
+ padding: 9px;
1059
+ font-size: 8px;
1060
+ white-space: pre-wrap;
1061
+ }
1062
+
1063
+ .agent-grid {
1064
+ display: grid;
1065
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1066
+ gap: 12px;
1067
+ }
1068
+
1069
+ .agent-card {
1070
+ padding: 14px;
1071
+ border: 1px solid var(--line);
1072
+ border-radius: 10px;
1073
+ background: var(--panel-raised);
1074
+ }
1075
+
1076
+ .agent-card header,
1077
+ .agent-card header div {
1078
+ display: flex;
1079
+ justify-content: space-between;
1080
+ gap: 8px;
1081
+ }
1082
+
1083
+ .agent-card header div {
1084
+ min-width: 0;
1085
+ flex-direction: column;
1086
+ }
1087
+
1088
+ .agent-card header small,
1089
+ .agent-parent {
1090
+ color: var(--muted);
1091
+ overflow-wrap: anywhere;
1092
+ }
1093
+
1094
+ .agent-card dl {
1095
+ display: grid;
1096
+ grid-template-columns: repeat(2, 1fr);
1097
+ gap: 8px;
1098
+ margin: 14px 0;
1099
+ }
1100
+
1101
+ .agent-card dl div {
1102
+ display: flex;
1103
+ justify-content: space-between;
1104
+ gap: 8px;
1105
+ }
1106
+
1107
+ .agent-card dt {
1108
+ color: var(--muted);
1109
+ }
1110
+
1111
+ .agent-card dd {
1112
+ margin: 0;
1113
+ font-weight: 650;
1114
+ }
1115
+
1116
+ .trace-item {
1117
+ display: grid;
1118
+ grid-template-columns: 58px minmax(0, 1fr);
1119
+ gap: 10px;
1120
+ border-left: 1px solid var(--line);
1121
+ padding: 3px 0 10px 13px;
1122
+ }
1123
+
1124
+ .trace-item time {
1125
+ color: var(--faint);
1126
+ font:
1127
+ 500 8px / 1.45 ui-monospace,
1128
+ SFMono-Regular,
1129
+ Menlo,
1130
+ monospace;
1131
+ }
1132
+
1133
+ .trace-item strong,
1134
+ .trace-item p {
1135
+ margin: 0;
1136
+ font-size: 9px;
1137
+ line-height: 1.5;
1138
+ }
1139
+
1140
+ .trace-item strong {
1141
+ display: block;
1142
+ margin-bottom: 2px;
1143
+ color: var(--muted);
1144
+ text-transform: uppercase;
1145
+ }
1146
+
1147
+ .trace-item p {
1148
+ overflow-wrap: anywhere;
1149
+ color: var(--faint);
1150
+ }
1151
+
1152
+ .artifact,
1153
+ .suite-item {
1154
+ display: flex;
1155
+ align-items: center;
1156
+ justify-content: space-between;
1157
+ gap: 12px;
1158
+ border: 1px solid var(--line-soft);
1159
+ border-radius: 7px;
1160
+ padding: 9px 11px;
1161
+ color: var(--muted);
1162
+ font:
1163
+ 500 9px / 1.3 ui-monospace,
1164
+ SFMono-Regular,
1165
+ Menlo,
1166
+ monospace;
1167
+ }
1168
+
1169
+ .artifact span:first-child,
1170
+ .suite-item span:first-child {
1171
+ overflow: hidden;
1172
+ text-overflow: ellipsis;
1173
+ white-space: nowrap;
1174
+ }
1175
+
1176
+ .artifact small,
1177
+ .suite-item small {
1178
+ flex: none;
1179
+ color: var(--faint);
1180
+ font-size: 8px;
1181
+ text-transform: uppercase;
1182
+ }
1183
+
1184
+ .artifact-button,
1185
+ .suite-button {
1186
+ width: 100%;
1187
+ background: transparent;
1188
+ text-align: left;
1189
+ cursor: pointer;
1190
+ }
1191
+
1192
+ .artifact-button:hover,
1193
+ .suite-button:hover {
1194
+ border-color: #58672f;
1195
+ background: #171d14;
1196
+ color: var(--ink);
1197
+ }
1198
+
1199
+ .artifact-button.changed small,
1200
+ .artifact-button.removed small {
1201
+ color: var(--coral);
1202
+ }
1203
+
1204
+ .artifact-button.added small {
1205
+ color: var(--lime);
1206
+ }
1207
+
1208
+ .matrix-wrap {
1209
+ overflow-x: auto;
1210
+ border: 1px solid var(--line);
1211
+ border-radius: 9px;
1212
+ }
1213
+
1214
+ .matrix {
1215
+ width: 100%;
1216
+ border-collapse: collapse;
1217
+ font-size: 9px;
1218
+ }
1219
+
1220
+ .matrix th,
1221
+ .matrix td {
1222
+ border-bottom: 1px solid var(--line-soft);
1223
+ padding: 10px;
1224
+ text-align: left;
1225
+ white-space: nowrap;
1226
+ }
1227
+
1228
+ .matrix th {
1229
+ color: var(--faint);
1230
+ font-size: 8px;
1231
+ font-weight: 600;
1232
+ text-transform: uppercase;
1233
+ }
1234
+
1235
+ .matrix td {
1236
+ color: var(--muted);
1237
+ }
1238
+
1239
+ .matrix tr:last-child td {
1240
+ border-bottom: 0;
1241
+ }
1242
+
1243
+ .matrix .metric-good {
1244
+ color: var(--lime);
1245
+ }
1246
+
1247
+ .matrix .metric-bad {
1248
+ color: var(--coral);
1249
+ }
1250
+
1251
+ .metric-neutral {
1252
+ color: var(--muted);
1253
+ }
1254
+
1255
+ .quantized-bar {
1256
+ display: grid;
1257
+ grid-template-columns: repeat(20, minmax(2px, 1fr));
1258
+ gap: 2px;
1259
+ width: 100%;
1260
+ min-width: 92px;
1261
+ height: 9px;
1262
+ }
1263
+
1264
+ .quantized-cell {
1265
+ min-width: 0;
1266
+ border-radius: 1px;
1267
+ background: #282d30;
1268
+ }
1269
+
1270
+ .quantized-cell.is-filled.tone-positive,
1271
+ .quantized-cell.is-filled.tone-after,
1272
+ .quantized-cell.is-filled.segment-passed,
1273
+ .quantized-cell.is-filled.segment-improved,
1274
+ .legend-swatch.segment-passed,
1275
+ .legend-swatch.segment-improved {
1276
+ background: var(--lime);
1277
+ }
1278
+
1279
+ .quantized-cell.is-filled.tone-negative,
1280
+ .quantized-cell.is-filled.segment-regressed,
1281
+ .quantized-cell.is-filled.segment-removed,
1282
+ .legend-swatch.segment-regressed,
1283
+ .legend-swatch.segment-removed {
1284
+ background: var(--coral);
1285
+ }
1286
+
1287
+ .quantized-cell.is-filled.tone-before,
1288
+ .quantized-cell.is-filled.segment-agent,
1289
+ .legend-swatch.segment-agent {
1290
+ background: var(--blue);
1291
+ }
1292
+
1293
+ .quantized-cell.is-filled.tone-neutral,
1294
+ .quantized-cell.is-filled.segment-unchanged,
1295
+ .legend-swatch.segment-unchanged {
1296
+ background: #899095;
1297
+ }
1298
+
1299
+ .quantized-cell.is-filled.segment-answerer,
1300
+ .quantized-cell.is-filled.segment-added,
1301
+ .legend-swatch.segment-answerer,
1302
+ .legend-swatch.segment-added {
1303
+ background: var(--amber);
1304
+ }
1305
+
1306
+ .quantized-cell.is-filled.segment-grading,
1307
+ .quantized-cell.is-filled.segment-changed,
1308
+ .legend-swatch.segment-grading,
1309
+ .legend-swatch.segment-changed {
1310
+ background: #b28cff;
1311
+ }
1312
+
1313
+ .quantized-cell.is-filled.segment-collect,
1314
+ .legend-swatch.segment-collect {
1315
+ background: #64c6c0;
1316
+ }
1317
+
1318
+ .quantized-cell.is-filled.segment-ungraded,
1319
+ .quantized-cell.is-filled.segment-pending,
1320
+ .legend-swatch.segment-ungraded,
1321
+ .legend-swatch.segment-pending {
1322
+ background: var(--faint);
1323
+ }
1324
+
1325
+ .quantized-cell.has-threshold {
1326
+ box-shadow: -2px 0 0 var(--amber);
1327
+ }
1328
+
1329
+ .distribution-visual {
1330
+ display: grid;
1331
+ gap: 8px;
1332
+ }
1333
+
1334
+ .visual-legend {
1335
+ display: flex;
1336
+ flex-wrap: wrap;
1337
+ gap: 7px 12px;
1338
+ color: var(--muted);
1339
+ font:
1340
+ 500 9px / 1.3 ui-monospace,
1341
+ SFMono-Regular,
1342
+ Menlo,
1343
+ monospace;
1344
+ }
1345
+
1346
+ .visual-legend span {
1347
+ display: inline-flex;
1348
+ align-items: center;
1349
+ gap: 5px;
1350
+ }
1351
+
1352
+ .visual-legend b {
1353
+ color: var(--ink);
1354
+ font-weight: 600;
1355
+ }
1356
+
1357
+ .legend-swatch {
1358
+ width: 7px;
1359
+ height: 7px;
1360
+ border-radius: 2px;
1361
+ }
1362
+
1363
+ .evidence-visual-grid,
1364
+ .comparison-distributions,
1365
+ .experiment-visuals {
1366
+ display: grid;
1367
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1368
+ gap: 16px 20px;
1369
+ }
1370
+
1371
+ .composition-figure,
1372
+ .comparison-bars,
1373
+ .candidate-landscape,
1374
+ .budget-visual {
1375
+ min-width: 0;
1376
+ margin: 0;
1377
+ }
1378
+
1379
+ .composition-figure figcaption,
1380
+ .comparison-bars figcaption,
1381
+ .candidate-landscape figcaption,
1382
+ .budget-visual figcaption {
1383
+ display: flex;
1384
+ align-items: baseline;
1385
+ justify-content: space-between;
1386
+ gap: 10px;
1387
+ margin-bottom: 9px;
1388
+ color: var(--ink);
1389
+ font-size: 10px;
1390
+ font-weight: 600;
1391
+ }
1392
+
1393
+ .candidate-landscape figcaption small,
1394
+ .budget-visual figcaption small {
1395
+ color: var(--faint);
1396
+ font:
1397
+ 500 8px / 1 ui-monospace,
1398
+ SFMono-Regular,
1399
+ Menlo,
1400
+ monospace;
1401
+ text-transform: uppercase;
1402
+ }
1403
+
1404
+ .assertion-content > .quantized-bar {
1405
+ max-width: 220px;
1406
+ margin-top: 8px;
1407
+ }
1408
+
1409
+ .comparison-plot-grid {
1410
+ display: grid;
1411
+ gap: 11px;
1412
+ }
1413
+
1414
+ .comparison-bars {
1415
+ border-bottom: 1px solid var(--line-soft);
1416
+ padding-bottom: 11px;
1417
+ }
1418
+
1419
+ .comparison-bars:last-child {
1420
+ border-bottom: 0;
1421
+ padding-bottom: 0;
1422
+ }
1423
+
1424
+ .comparison-bars figcaption b {
1425
+ font:
1426
+ 600 9px / 1 ui-monospace,
1427
+ SFMono-Regular,
1428
+ Menlo,
1429
+ monospace;
1430
+ }
1431
+
1432
+ .bar-lane,
1433
+ .landscape-row,
1434
+ .budget-row {
1435
+ display: grid;
1436
+ grid-template-columns: 18px minmax(90px, 1fr) 58px;
1437
+ align-items: center;
1438
+ gap: 8px;
1439
+ margin-top: 6px;
1440
+ }
1441
+
1442
+ .bar-lane strong {
1443
+ color: var(--faint);
1444
+ font:
1445
+ 700 8px / 1 ui-monospace,
1446
+ SFMono-Regular,
1447
+ Menlo,
1448
+ monospace;
1449
+ }
1450
+
1451
+ .bar-lane > span:last-child,
1452
+ .landscape-row > b,
1453
+ .budget-row > b {
1454
+ overflow: hidden;
1455
+ color: var(--muted);
1456
+ font:
1457
+ 500 8px / 1 ui-monospace,
1458
+ SFMono-Regular,
1459
+ Menlo,
1460
+ monospace;
1461
+ text-align: right;
1462
+ text-overflow: ellipsis;
1463
+ white-space: nowrap;
1464
+ }
1465
+
1466
+ .comparison-distributions {
1467
+ margin-top: 18px;
1468
+ border-top: 1px solid var(--line-soft);
1469
+ padding-top: 15px;
1470
+ }
1471
+
1472
+ .suite-outcome-visual {
1473
+ display: grid;
1474
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
1475
+ gap: 22px;
1476
+ }
1477
+
1478
+ .landscape-axis {
1479
+ display: flex;
1480
+ justify-content: space-between;
1481
+ margin: 0 0 5px 138px;
1482
+ color: var(--faint);
1483
+ font:
1484
+ 500 7px / 1 ui-monospace,
1485
+ SFMono-Regular,
1486
+ Menlo,
1487
+ monospace;
1488
+ }
1489
+
1490
+ .landscape-row {
1491
+ grid-template-columns: 130px minmax(100px, 1fr) 38px;
1492
+ border-bottom: 1px solid var(--line-soft);
1493
+ padding: 7px 0;
1494
+ }
1495
+
1496
+ .landscape-row > span {
1497
+ min-width: 0;
1498
+ }
1499
+
1500
+ .landscape-row strong,
1501
+ .landscape-row small {
1502
+ display: block;
1503
+ overflow: hidden;
1504
+ text-overflow: ellipsis;
1505
+ white-space: nowrap;
1506
+ }
1507
+
1508
+ .landscape-row strong {
1509
+ color: var(--muted);
1510
+ font-size: 9px;
1511
+ }
1512
+
1513
+ .landscape-row small {
1514
+ margin-top: 3px;
1515
+ color: var(--faint);
1516
+ font-size: 8px;
1517
+ }
1518
+
1519
+ .landscape-row.baseline strong::after,
1520
+ .landscape-row.target strong::after {
1521
+ margin-left: 5px;
1522
+ color: var(--faint);
1523
+ font-size: 7px;
1524
+ text-transform: uppercase;
1525
+ }
1526
+
1527
+ .landscape-row.baseline strong::after {
1528
+ content: "A";
1529
+ }
1530
+
1531
+ .landscape-row.target strong::after {
1532
+ content: "B";
1533
+ }
1534
+
1535
+ .budget-row {
1536
+ grid-template-columns: 80px minmax(90px, 1fr) 86px;
1537
+ margin-top: 9px;
1538
+ }
1539
+
1540
+ .budget-row > span:first-child {
1541
+ color: var(--muted);
1542
+ font-size: 9px;
1543
+ }
1544
+
1545
+ .bar-table-cell {
1546
+ min-width: 150px;
1547
+ }
1548
+
1549
+ .bar-table-cell .quantized-bar {
1550
+ display: inline-grid;
1551
+ width: 96px;
1552
+ min-width: 96px;
1553
+ margin-right: 7px;
1554
+ vertical-align: middle;
1555
+ }
1556
+
1557
+ .bar-table-cell small {
1558
+ display: inline;
1559
+ margin: 0;
1560
+ white-space: nowrap;
1561
+ }
1562
+
1563
+ .section-heading {
1564
+ display: flex;
1565
+ align-items: center;
1566
+ justify-content: space-between;
1567
+ gap: 12px;
1568
+ margin-bottom: 10px;
1569
+ }
1570
+
1571
+ .section-heading h3 {
1572
+ flex: 1;
1573
+ margin: 0;
1574
+ }
1575
+
1576
+ .candidate-picker {
1577
+ display: flex;
1578
+ align-items: center;
1579
+ gap: 6px;
1580
+ color: var(--faint);
1581
+ font-size: 8px;
1582
+ text-transform: uppercase;
1583
+ }
1584
+
1585
+ .candidate-picker select {
1586
+ max-width: 170px;
1587
+ border: 1px solid var(--line);
1588
+ border-radius: 6px;
1589
+ background: #0f1213;
1590
+ padding: 6px;
1591
+ color: var(--ink);
1592
+ font-size: 9px;
1593
+ }
1594
+
1595
+ .gate-list,
1596
+ .comparison-scopes,
1597
+ .failure-list {
1598
+ display: grid;
1599
+ gap: 8px;
1600
+ }
1601
+
1602
+ .gate {
1603
+ display: grid;
1604
+ grid-template-columns: 18px minmax(0, 1fr) auto;
1605
+ gap: 9px;
1606
+ align-items: center;
1607
+ border: 1px solid var(--line-soft);
1608
+ border-radius: 8px;
1609
+ padding: 10px;
1610
+ color: var(--coral);
1611
+ }
1612
+
1613
+ .gate.passed {
1614
+ color: var(--lime);
1615
+ }
1616
+
1617
+ .gate strong,
1618
+ .gate small {
1619
+ display: block;
1620
+ }
1621
+
1622
+ .gate strong {
1623
+ color: var(--ink);
1624
+ font-size: 9px;
1625
+ }
1626
+
1627
+ .gate small {
1628
+ margin-top: 3px;
1629
+ color: var(--faint);
1630
+ font-size: 8px;
1631
+ }
1632
+
1633
+ .gate b {
1634
+ color: var(--muted);
1635
+ font:
1636
+ 500 9px / 1.2 ui-monospace,
1637
+ SFMono-Regular,
1638
+ Menlo,
1639
+ monospace;
1640
+ }
1641
+
1642
+ .decision-meta {
1643
+ display: grid;
1644
+ grid-template-columns: auto minmax(0, 1fr);
1645
+ gap: 7px 12px;
1646
+ margin-top: 10px;
1647
+ border-left: 2px solid #4f5e31;
1648
+ background: #141814;
1649
+ padding: 10px 12px;
1650
+ font-size: 9px;
1651
+ }
1652
+
1653
+ .decision-meta span {
1654
+ color: var(--faint);
1655
+ text-transform: uppercase;
1656
+ }
1657
+
1658
+ .decision-meta strong {
1659
+ overflow-wrap: anywhere;
1660
+ color: var(--muted);
1661
+ }
1662
+
1663
+ .lineage-card,
1664
+ .failure-card,
1665
+ .comparison-scope {
1666
+ border: 1px solid var(--line-soft);
1667
+ border-radius: 8px;
1668
+ background: #141719;
1669
+ padding: 11px;
1670
+ }
1671
+
1672
+ .lineage-card > span,
1673
+ .lineage-card > small {
1674
+ display: block;
1675
+ }
1676
+
1677
+ .lineage-card > span {
1678
+ font-size: 11px;
1679
+ font-weight: 650;
1680
+ }
1681
+
1682
+ .lineage-card > small,
1683
+ .lineage-card > p {
1684
+ margin-top: 5px;
1685
+ color: var(--muted);
1686
+ font-size: 9px;
1687
+ line-height: 1.5;
1688
+ }
1689
+
1690
+ .lineage-card code {
1691
+ display: inline-block;
1692
+ margin: 5px 5px 0 0;
1693
+ border-radius: 4px;
1694
+ background: #202527;
1695
+ padding: 3px 5px;
1696
+ color: var(--faint);
1697
+ font-size: 8px;
1698
+ }
1699
+
1700
+ .comparison-scope > header,
1701
+ .failure-card > header {
1702
+ display: flex;
1703
+ justify-content: space-between;
1704
+ gap: 12px;
1705
+ margin-bottom: 9px;
1706
+ font-size: 9px;
1707
+ }
1708
+
1709
+ .failure-card ul,
1710
+ .failure-card p {
1711
+ margin: 6px 0 0;
1712
+ padding-left: 18px;
1713
+ color: var(--muted);
1714
+ font-size: 9px;
1715
+ line-height: 1.55;
1716
+ }
1717
+
1718
+ .comparison-stats {
1719
+ display: grid;
1720
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1721
+ gap: 8px;
1722
+ margin: 0;
1723
+ }
1724
+
1725
+ .comparison-stats div {
1726
+ border: 1px solid var(--line);
1727
+ border-radius: 8px;
1728
+ padding: 11px;
1729
+ }
1730
+
1731
+ .comparison-stats dt,
1732
+ .comparison-stats small {
1733
+ color: var(--faint);
1734
+ font-size: 8px;
1735
+ text-transform: uppercase;
1736
+ }
1737
+
1738
+ .comparison-stats dd {
1739
+ margin: 7px 0 5px;
1740
+ font:
1741
+ 550 11px / 1.2 ui-monospace,
1742
+ SFMono-Regular,
1743
+ Menlo,
1744
+ monospace;
1745
+ }
1746
+
1747
+ .comparison-matrix td strong,
1748
+ .comparison-matrix td small {
1749
+ display: block;
1750
+ }
1751
+
1752
+ .comparison-matrix td small {
1753
+ margin-top: 3px;
1754
+ color: var(--faint);
1755
+ }
1756
+
1757
+ .rationale-cell {
1758
+ min-width: 240px;
1759
+ white-space: normal;
1760
+ }
1761
+
1762
+ .rationale-cell span {
1763
+ display: inline;
1764
+ line-height: 1.45;
1765
+ }
1766
+
1767
+ .rationale-cell b {
1768
+ margin: 0 5px;
1769
+ color: var(--faint);
1770
+ }
1771
+
1772
+ .delta-badge {
1773
+ border-radius: 99px;
1774
+ background: #252a2d;
1775
+ padding: 3px 6px;
1776
+ color: var(--muted);
1777
+ font-size: 8px;
1778
+ text-transform: uppercase;
1779
+ }
1780
+
1781
+ .delta-badge.improved,
1782
+ .delta-badge.added {
1783
+ background: #1d2917;
1784
+ color: var(--lime);
1785
+ }
1786
+
1787
+ .delta-badge.regressed,
1788
+ .delta-badge.removed {
1789
+ background: #3b211f;
1790
+ color: var(--coral);
1791
+ }
1792
+
1793
+ .row-regressed {
1794
+ background: rgb(255 128 102 / 5%);
1795
+ }
1796
+
1797
+ .metric-deltas span {
1798
+ display: block;
1799
+ margin: 2px 0;
1800
+ }
1801
+
1802
+ .artifact-preview,
1803
+ .artifact-diff {
1804
+ max-height: 560px;
1805
+ overflow: auto;
1806
+ margin: 0;
1807
+ border: 1px solid var(--line);
1808
+ border-radius: 8px;
1809
+ background: #0c0f10;
1810
+ padding: 14px;
1811
+ color: #bdc2be;
1812
+ font:
1813
+ 500 9px / 1.6 ui-monospace,
1814
+ SFMono-Regular,
1815
+ Menlo,
1816
+ monospace;
1817
+ white-space: pre-wrap;
1818
+ }
1819
+
1820
+ .artifact-diff span {
1821
+ display: block;
1822
+ min-height: 1.6em;
1823
+ }
1824
+
1825
+ .artifact-diff b {
1826
+ display: inline-block;
1827
+ width: 18px;
1828
+ user-select: none;
1829
+ }
1830
+
1831
+ .artifact-diff .diff-added {
1832
+ background: rgb(200 241 105 / 8%);
1833
+ color: #d5f78a;
1834
+ }
1835
+
1836
+ .artifact-diff .diff-removed {
1837
+ background: rgb(255 128 102 / 8%);
1838
+ color: #ff9a87;
1839
+ }
1840
+
1841
+ .compact-header .back-button {
1842
+ margin-bottom: 15px;
1843
+ }
1844
+
1845
+ .prompt-block {
1846
+ max-height: 160px;
1847
+ overflow: auto;
1848
+ border-left: 2px solid #4f5e31;
1849
+ background: #141814;
1850
+ padding: 12px 14px;
1851
+ color: #b5b9b3;
1852
+ font:
1853
+ 500 9px / 1.65 ui-monospace,
1854
+ SFMono-Regular,
1855
+ Menlo,
1856
+ monospace;
1857
+ white-space: pre-wrap;
1858
+ }
1859
+
1860
+ .error-card {
1861
+ margin: 24px;
1862
+ border: 1px solid #5a302b;
1863
+ border-radius: 9px;
1864
+ background: #211716;
1865
+ padding: 16px;
1866
+ color: #ffad9d;
1867
+ font-size: 10px;
1868
+ line-height: 1.6;
1869
+ }
1870
+
1871
+ footer {
1872
+ display: flex;
1873
+ justify-content: space-between;
1874
+ gap: 20px;
1875
+ padding: 13px 2px 0;
1876
+ color: var(--faint);
1877
+ font:
1878
+ 500 8px / 1.2 ui-monospace,
1879
+ SFMono-Regular,
1880
+ Menlo,
1881
+ monospace;
1882
+ }
1883
+
1884
+ #runs-root {
1885
+ overflow: hidden;
1886
+ text-overflow: ellipsis;
1887
+ white-space: nowrap;
1888
+ }
1889
+
1890
+ #connection-state {
1891
+ flex: none;
1892
+ }
1893
+
1894
+ #connection-state i {
1895
+ display: inline-block;
1896
+ width: 5px;
1897
+ height: 5px;
1898
+ margin-right: 5px;
1899
+ border-radius: 50%;
1900
+ background: var(--lime);
1901
+ }
1902
+
1903
+ #connection-state.is-offline i {
1904
+ background: var(--coral);
1905
+ }
1906
+
1907
+ @media (max-width: 1100px) {
1908
+ .workspace {
1909
+ grid-template-columns: minmax(310px, 0.8fr) minmax(390px, 1.2fr);
1910
+ }
1911
+
1912
+ .metrics {
1913
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1914
+ }
1915
+
1916
+ .metrics article:nth-child(3) {
1917
+ border-top: 1px solid var(--line);
1918
+ border-left: 0;
1919
+ }
1920
+
1921
+ .metrics article:nth-child(4) {
1922
+ border-top: 1px solid var(--line);
1923
+ }
1924
+ }
1925
+
1926
+ @media (max-width: 830px) {
1927
+ .app-shell {
1928
+ display: block;
1929
+ }
1930
+
1931
+ .sidebar {
1932
+ position: static;
1933
+ display: grid;
1934
+ grid-template-columns: auto 1fr;
1935
+ height: auto;
1936
+ border-right: 0;
1937
+ border-bottom: 1px solid var(--line);
1938
+ padding: 14px 18px;
1939
+ }
1940
+
1941
+ .primary-nav {
1942
+ display: flex;
1943
+ justify-content: flex-end;
1944
+ margin: 0;
1945
+ }
1946
+
1947
+ .nav-item {
1948
+ display: flex;
1949
+ width: auto;
1950
+ }
1951
+
1952
+ .nav-glyph,
1953
+ .sidebar-note,
1954
+ .shortcut-card {
1955
+ display: none;
1956
+ }
1957
+
1958
+ main {
1959
+ padding: 24px 18px;
1960
+ }
1961
+
1962
+ .workspace {
1963
+ display: block;
1964
+ }
1965
+
1966
+ .collection-pane {
1967
+ border-right: 0;
1968
+ border-bottom: 1px solid var(--line);
1969
+ }
1970
+
1971
+ .collection-list {
1972
+ max-height: 420px;
1973
+ }
1974
+
1975
+ .inspector {
1976
+ max-height: none;
1977
+ }
1978
+
1979
+ .experiment-visuals {
1980
+ grid-template-columns: 1fr;
1981
+ }
1982
+ }
1983
+
1984
+ @media (max-width: 560px) {
1985
+ .sidebar {
1986
+ display: block;
1987
+ }
1988
+
1989
+ .primary-nav {
1990
+ justify-content: stretch;
1991
+ margin-top: 14px;
1992
+ }
1993
+
1994
+ .nav-item {
1995
+ flex: 1;
1996
+ justify-content: center;
1997
+ padding: 8px;
1998
+ }
1999
+
2000
+ .nav-count {
2001
+ display: none;
2002
+ }
2003
+
2004
+ .topbar {
2005
+ display: block;
2006
+ }
2007
+
2008
+ .topbar-actions {
2009
+ margin-top: 18px;
2010
+ }
2011
+
2012
+ .search {
2013
+ flex: 1;
2014
+ }
2015
+
2016
+ .metrics {
2017
+ grid-template-columns: 1fr 1fr;
2018
+ }
2019
+
2020
+ .metrics article {
2021
+ padding: 14px;
2022
+ }
2023
+
2024
+ .detail-title-row {
2025
+ display: block;
2026
+ }
2027
+
2028
+ .score-block {
2029
+ margin-top: 14px;
2030
+ border-left: 0;
2031
+ padding-left: 0;
2032
+ text-align: left;
2033
+ }
2034
+
2035
+ .detail-stats {
2036
+ grid-template-columns: 1fr 1fr;
2037
+ }
2038
+
2039
+ .detail-stats div:nth-child(3) {
2040
+ border-top: 1px solid var(--line);
2041
+ border-left: 0;
2042
+ }
2043
+
2044
+ .detail-stats div:nth-child(4) {
2045
+ border-top: 1px solid var(--line);
2046
+ }
2047
+
2048
+ .evidence-visual-grid,
2049
+ .comparison-distributions,
2050
+ .suite-outcome-visual {
2051
+ grid-template-columns: 1fr;
2052
+ }
2053
+
2054
+ .landscape-row {
2055
+ grid-template-columns: 96px minmax(80px, 1fr) 34px;
2056
+ }
2057
+
2058
+ .landscape-axis {
2059
+ margin-left: 104px;
2060
+ }
2061
+
2062
+ .budget-row {
2063
+ grid-template-columns: 68px minmax(70px, 1fr) 76px;
2064
+ }
2065
+ }
2066
+
2067
+ @media (prefers-reduced-motion: reduce) {
2068
+ *,
2069
+ *::before,
2070
+ *::after {
2071
+ scroll-behavior: auto;
2072
+ animation-duration: 0.01ms;
2073
+ animation-iteration-count: 1;
2074
+ }
2075
+ }