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

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