niceeval 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/INDEX.md +77 -45
  2. package/dist/agents/types.d.ts +28 -6
  3. package/dist/i18n/en.d.ts +2 -0
  4. package/dist/i18n/zh-CN.d.ts +2 -0
  5. package/dist/report/built-in/index.d.ts +3 -2
  6. package/dist/report/built-in/index.js +7 -8
  7. package/dist/report/built-in/standard.d.ts +1 -0
  8. package/dist/report/built-in/standard.js +30 -0
  9. package/dist/report/components.d.ts +69 -2
  10. package/dist/report/components.js +152 -3
  11. package/dist/report/compute.d.ts +28 -1
  12. package/dist/report/compute.js +123 -0
  13. package/dist/report/index.d.ts +4 -4
  14. package/dist/report/index.js +3 -2
  15. package/dist/report/locale.d.ts +39 -1
  16. package/dist/report/locale.js +69 -0
  17. package/dist/report/react/AttemptList.d.ts +3 -1
  18. package/dist/report/react/AttemptList.js +3 -3
  19. package/dist/report/react/CopyFixPrompt.d.ts +12 -0
  20. package/dist/report/react/CopyFixPrompt.js +12 -0
  21. package/dist/report/react/HeroCard.d.ts +13 -0
  22. package/dist/report/react/HeroCard.js +35 -0
  23. package/dist/report/react/PoweredBy.d.ts +5 -0
  24. package/dist/report/react/PoweredBy.js +7 -0
  25. package/dist/report/react/ScopeWarnings.d.ts +12 -0
  26. package/dist/report/react/ScopeWarnings.js +18 -0
  27. package/dist/report/react/TraceWaterfall.d.ts +14 -0
  28. package/dist/report/react/TraceWaterfall.js +22 -0
  29. package/dist/report/react/index.d.ts +6 -1
  30. package/dist/report/react/index.js +6 -0
  31. package/dist/report/report.d.ts +22 -6
  32. package/dist/report/report.js +66 -53
  33. package/dist/report/scope-warnings.d.ts +28 -0
  34. package/dist/report/scope-warnings.js +101 -0
  35. package/dist/report/text/faces.d.ts +19 -1
  36. package/dist/report/text/faces.js +61 -0
  37. package/dist/report/tree.js +6 -1
  38. package/dist/report/types.d.ts +45 -0
  39. package/dist/report/web.d.ts +5 -4
  40. package/dist/report/web.js +7 -22
  41. package/dist/results/select.d.ts +15 -2
  42. package/dist/results/select.js +75 -10
  43. package/dist/results/types.d.ts +26 -0
  44. package/dist/runner/fingerprint.d.ts +3 -3
  45. package/dist/runner/sandbox-selection.d.ts +12 -0
  46. package/dist/runner/types.d.ts +18 -6
  47. package/dist/sandbox/types.d.ts +12 -0
  48. package/docs-site/zh/explanation/evals.mdx +2 -1
  49. package/docs-site/zh/explanation/experiment.mdx +2 -0
  50. package/docs-site/zh/how-to/custom-reports.mdx +22 -6
  51. package/docs-site/zh/how-to/publish-report.mdx +5 -4
  52. package/docs-site/zh/how-to/viewing-results.mdx +3 -3
  53. package/docs-site/zh/how-to/write-experiment.mdx +40 -1
  54. package/docs-site/zh/reference/builtin-agents.mdx +40 -3
  55. package/docs-site/zh/reference/cli.mdx +1 -1
  56. package/docs-site/zh/reference/define-eval.mdx +8 -0
  57. package/docs-site/zh/reference/official-adapters.mdx +10 -5
  58. package/package.json +2 -1
  59. package/src/agents/bub.ts +13 -1
  60. package/src/agents/claude-code.test.ts +43 -1
  61. package/src/agents/claude-code.ts +32 -14
  62. package/src/agents/codex.test.ts +168 -1
  63. package/src/agents/codex.ts +51 -15
  64. package/src/agents/mcp.ts +31 -0
  65. package/src/agents/post-setup.ts +33 -0
  66. package/src/agents/types.ts +28 -7
  67. package/src/cli.ts +8 -6
  68. package/src/define.ts +3 -0
  69. package/src/i18n/en.ts +5 -2
  70. package/src/i18n/zh-CN.ts +5 -1
  71. package/src/index.ts +1 -0
  72. package/src/report/built-in/index.tsx +8 -7
  73. package/src/report/built-in/standard.tsx +59 -0
  74. package/src/report/components.tsx +218 -2
  75. package/src/report/compute.ts +138 -1
  76. package/src/report/dual-render.test.tsx +139 -12
  77. package/src/report/index.ts +20 -0
  78. package/src/report/locale.ts +83 -1
  79. package/src/report/react/AttemptList.tsx +13 -1
  80. package/src/report/react/CopyFixPrompt.tsx +37 -0
  81. package/src/report/react/HeroCard.tsx +59 -0
  82. package/src/report/react/PoweredBy.tsx +20 -0
  83. package/src/report/react/ScopeWarnings.tsx +74 -0
  84. package/src/report/react/TraceWaterfall.tsx +78 -0
  85. package/src/report/react/enhance.js +14 -0
  86. package/src/report/react/index.tsx +11 -0
  87. package/src/report/react/styles.css +187 -7
  88. package/src/report/report.ts +97 -62
  89. package/src/report/scope-warnings.ts +155 -0
  90. package/src/report/site-components.test.tsx +526 -0
  91. package/src/report/text/faces.ts +66 -0
  92. package/src/report/tree.ts +8 -1
  93. package/src/report/types.ts +51 -0
  94. package/src/report/web.ts +7 -40
  95. package/src/results/host-equivalence.test.ts +5 -1
  96. package/src/results/open.ts +5 -4
  97. package/src/results/results.test.ts +78 -1
  98. package/src/results/select.ts +78 -10
  99. package/src/results/types.ts +27 -0
  100. package/src/runner/attempt.ts +10 -9
  101. package/src/runner/discover.test.ts +9 -1
  102. package/src/runner/discover.ts +3 -3
  103. package/src/runner/fingerprint.ts +9 -4
  104. package/src/runner/ledger.test.ts +30 -1
  105. package/src/runner/ledger.ts +26 -4
  106. package/src/runner/run.ts +5 -1
  107. package/src/runner/sandbox-selection.test.ts +131 -0
  108. package/src/runner/sandbox-selection.ts +110 -0
  109. package/src/runner/types.ts +19 -2
  110. package/src/sandbox/types.ts +6 -0
  111. package/src/show/index.ts +17 -10
  112. package/src/show/render.ts +11 -11
  113. package/src/show/report-host.test.ts +32 -15
  114. package/src/show/report-host.ts +5 -4
  115. package/src/show/show.test.ts +140 -3
  116. package/src/view/app/App.test.tsx +78 -17
  117. package/src/view/app/App.tsx +17 -78
  118. package/src/view/app/components/CopyControls.tsx +4 -42
  119. package/src/view/app/i18n.ts +5 -227
  120. package/src/view/app/lib/rows.ts +3 -21
  121. package/src/view/app/shared.ts +1 -3
  122. package/src/view/app/types.ts +2 -2
  123. package/src/view/client-dist/app.css +1 -1
  124. package/src/view/client-dist/app.js +20 -20
  125. package/src/view/data.ts +2 -2
  126. package/src/view/shared/types.ts +11 -6
  127. package/src/view/styles.css +6 -266
  128. package/src/view/view-report.test.ts +59 -22
  129. package/src/view/app/components/LazyArtifact.tsx +0 -51
  130. package/src/view/app/components/SkippedRunsBanner.tsx +0 -140
  131. package/src/view/app/pages/AttemptsPage.tsx +0 -80
  132. package/src/view/app/pages/TracesPage.tsx +0 -35
@@ -1,78 +1,22 @@
1
1
  // view 前端 i18n:内核(插值/归一)在 src/i18n/core.ts;这里只注入
2
2
  // localStorage + navigator 的 locale 来源与 en 默认值。字典与 CLI 侧分开维护。
3
+ // 词条只覆盖宿主机器(导航标签、attempt 详情弹窗):页面内容(hero、警告、列表、瀑布)
4
+ // 是报告组件,文案在 niceeval/report 的组件词典里(src/report/locale.ts)。
3
5
 
4
6
  import { interpolate, normalizeLocale, type Locale, type Vars } from "../../i18n/core.ts";
5
7
 
6
8
  export type MessageKey =
7
- | "app.title"
8
9
  | "nav.label"
9
- | "nav.report"
10
- | "nav.experiments"
11
- | "nav.attempts"
12
- | "nav.traces"
13
10
  | "hero.title"
14
- | "hero.lastRun"
15
- | "hero.noRuns"
16
- | "metric.passRate"
17
- | "metric.evalResults"
18
- | "metric.duration"
19
- | "metric.cost"
20
- | "section.experiments"
21
- | "section.attempts"
22
- | "section.traces"
23
- | "search.experiments"
24
- | "search.attempts"
25
- | "empty.summary"
26
- | "empty.attempts"
27
- | "empty.attemptsFilter"
28
- | "empty.traces"
29
- | "table.experiment"
30
- | "table.model"
31
- | "table.agent"
32
- | "table.avgDuration"
33
- | "table.successRate"
34
- | "table.tokens"
35
- | "table.estCost"
36
- | "table.verdicts"
37
- | "table.evalId"
38
- | "table.verdict"
39
- | "table.ranAt"
40
- | "detail.evalResult"
41
- | "detail.evalResults"
42
- | "detail.attempts"
43
- | "detail.evals"
44
- | "detail.runs"
45
- | "detail.runsUnit"
46
- | "detail.passed"
47
- | "detail.failed"
48
- | "detail.errored"
49
- | "detail.totalTime"
50
- | "detail.totalCost"
51
- | "detail.ran"
52
- | "detail.evaluationAttempts"
53
- | "detail.status"
54
- | "detail.eval"
55
- | "detail.reason"
56
- | "detail.time"
57
- | "detail.run"
58
- | "detail.rawSample"
59
- | "detail.rawNote"
60
- | "config.experiment"
61
- | "config.flagsNone"
62
- | "config.default"
63
- | "config.none"
64
- | "config.notApplicable"
65
11
  | "status.pass"
66
12
  | "status.fail"
67
13
  | "status.error"
68
14
  | "status.skipped"
69
15
  | "action.close"
70
- | "action.copyReason"
71
16
  | "action.copyPrompt"
72
17
  | "action.copied"
73
18
  | "trace.loading"
74
19
  | "trace.loadFailed"
75
- | "trace.transcript"
76
20
  | "trace.timing"
77
21
  | "trace.noSpans"
78
22
  | "trace.total"
@@ -111,100 +55,25 @@ export type MessageKey =
111
55
  | "assert.unavailable"
112
56
  | "assert.optional"
113
57
  | "assert.soft"
114
- | "assert.evidence"
115
- | "verdict.passed"
116
- | "verdict.failed"
117
- | "verdict.errored"
118
- | "verdict.skipped"
119
- | "banner.skippedTitle"
120
- | "banner.skipped.incompatible"
121
- | "banner.skipped.incompatibleForeign"
122
- | "banner.skipped.malformed"
123
- | "banner.skipped.incomplete"
124
- | "banner.expandRest"
125
- | "banner.collapse"
126
- | "banner.copyCommand"
127
- | "banner.warningsTitle"
128
- | "hero.composedFrom"
129
- | "chart.costVsScore"
130
- | "chart.axisCost"
131
- | "chart.axisScore";
58
+ | "assert.evidence";
132
59
 
133
60
  type Dictionary = Record<MessageKey, string>;
134
61
 
135
62
  const dictionaries: Record<Locale, Dictionary> = {
136
63
  en: {
137
- "app.title": "niceeval experiment view",
138
64
  "nav.label": "Report",
139
- "nav.report": "Report",
140
- "nav.experiments": "Experiments",
141
- "nav.attempts": "Attempts",
142
- "nav.traces": "Traces",
143
65
  // 标题回退链终点的内置文案(shell.md:「Eval 运行结果 / Eval Results」);
144
66
  // 正常路径 server 侧已走完回退链,这里只兜旧数据 / 缺声明。
145
67
  "hero.title": "Eval Results",
146
- "hero.lastRun": "Last run:",
147
- "hero.noRuns": "No runs yet",
148
- "metric.passRate": "Pass Rate",
149
- "metric.evalResults": "Eval Results",
150
- "metric.duration": "Duration",
151
- "metric.cost": "Estimated Cost",
152
- "section.experiments": "Experiments",
153
- "section.attempts": "Attempts",
154
- "section.traces": "Traces",
155
- "search.experiments": "Filter experiment, agent, model, or eval...",
156
- "search.attempts": "Filter eval ID or experiment...",
157
- "empty.summary": "No snapshots found. Run niceeval or pass niceeval view path/to/snapshot.json.",
158
- "empty.attempts": "No attempts found.",
159
- "empty.attemptsFilter": "No results match the filter.",
160
- "empty.traces": "No traces available. Traces are collected during eval runs when artifacts are saved.",
161
- "table.experiment": "Experiment",
162
- "table.model": "Model",
163
- "table.agent": "Agent",
164
- "table.avgDuration": "Avg Duration",
165
- "table.successRate": "Success Rate",
166
- "table.tokens": "Tokens",
167
- "table.estCost": "Est. Cost",
168
- "table.verdicts": "Verdicts",
169
- "table.evalId": "Eval ID",
170
- "table.verdict": "Verdict",
171
- "table.ranAt": "Ran At",
172
- "detail.evalResult": "eval",
173
- "detail.evalResults": "evals",
174
- "detail.attempts": "Attempts",
175
- "detail.evals": "Evals",
176
- "detail.runs": "Runs",
177
- "detail.runsUnit": "runs",
178
- "detail.passed": "Passed",
179
- "detail.failed": "Failed",
180
- "detail.errored": "Errored",
181
- "detail.totalTime": "Total Time",
182
- "detail.totalCost": "Total Cost",
183
- "detail.ran": "Ran",
184
- "detail.evaluationAttempts": "Evals",
185
- "detail.status": "Status",
186
- "detail.eval": "Eval",
187
- "detail.reason": "Reason",
188
- "detail.time": "Time",
189
- "detail.run": "Run",
190
- "detail.rawSample": "Raw sample result",
191
- "detail.rawNote": "debug JSON, defaults to first error/failure when available",
192
- "config.experiment": "experiment",
193
- "config.flagsNone": "none",
194
- "config.default": "default",
195
- "config.none": "none",
196
- "config.notApplicable": "n/a",
197
68
  "status.pass": "pass",
198
69
  "status.fail": "fail",
199
70
  "status.error": "error",
200
71
  "status.skipped": "skipped",
201
72
  "action.close": "Close",
202
- "action.copyReason": "Copy reason",
203
73
  "action.copyPrompt": "Copy fix prompt",
204
74
  "action.copied": "Copied",
205
75
  "trace.loading": "loading...",
206
76
  "trace.loadFailed": "load failed (static report has no server - use niceeval view):",
207
- "trace.transcript": "transcript",
208
77
  "trace.timing": "timing trace",
209
78
  "trace.noSpans": "no spans",
210
79
  "trace.total": "total",
@@ -244,94 +113,19 @@ const dictionaries: Record<Locale, Dictionary> = {
244
113
  "assert.optional": "optional",
245
114
  "assert.soft": "soft",
246
115
  "assert.evidence": "What was checked",
247
- "verdict.passed": "passed",
248
- "verdict.failed": "failed",
249
- "verdict.errored": "errors",
250
- "verdict.skipped": "skipped",
251
- "banner.skippedTitle": "{{count}} run(s) could not be loaded and are not shown here",
252
- "banner.skipped.incompatible": "written by niceeval {{producer}} (schemaVersion {{schemaVersion}}) — current version can't read it, expand for the view command",
253
- "banner.skipped.incompatibleForeign": "written by {{name}} {{version}} (schemaVersion {{schemaVersion}}) — this viewer cannot read them; open with the tool that produced them",
254
- "banner.skipped.malformed": "unreadable report ({{detail}}) — may be corrupted; re-run the eval or delete the run directory",
255
- "banner.skipped.incomplete": "snapshot.json was never written (a narrow crash window) — completed attempt artifacts remain on disk for manual inspection; delete the directory if you no longer need them",
256
- "banner.expandRest": "Show {{count}} more",
257
- "banner.collapse": "Collapse",
258
- "banner.copyCommand": "Copy view command",
259
- "banner.warningsTitle": "Heads-up about the current leaderboard selection:",
260
- "hero.composedFrom": "Composed from {{count}} run(s)",
261
- "chart.costVsScore": "Cost vs. Score",
262
- "chart.axisCost": "Avg cost per eval",
263
- "chart.axisScore": "Pass rate",
264
116
  },
265
117
  "zh-CN": {
266
- "app.title": "niceeval 实验查看器",
267
118
  "nav.label": "报告",
268
- "nav.report": "报告",
269
- "nav.experiments": "实验",
270
- "nav.attempts": "Attempts",
271
- "nav.traces": "追踪",
272
119
  "hero.title": "Eval 运行结果",
273
- "hero.lastRun": "最近运行:",
274
- "hero.noRuns": "还没有运行",
275
- "metric.passRate": "通过率",
276
- "metric.evalResults": "Eval 结果",
277
- "metric.duration": "耗时",
278
- "metric.cost": "预估成本",
279
- "section.experiments": "实验",
280
- "section.attempts": "Attempts",
281
- "section.traces": "追踪",
282
- "search.experiments": "筛选实验、agent、model 或 eval...",
283
- "search.attempts": "筛选 eval ID 或实验...",
284
- "empty.summary": "没有找到快照。请先运行 niceeval,或传入 niceeval view path/to/snapshot.json。",
285
- "empty.attempts": "还没有 attempt。",
286
- "empty.attemptsFilter": "没有匹配筛选条件的结果。",
287
- "empty.traces": "没有可用追踪。保存 artifact 的 eval run 会收集 traces。",
288
- "table.experiment": "实验",
289
- "table.model": "模型",
290
- "table.agent": "Agent",
291
- "table.avgDuration": "平均耗时",
292
- "table.successRate": "成功率",
293
- "table.tokens": "Tokens",
294
- "table.estCost": "预估成本",
295
- "table.verdicts": "结果",
296
- "table.evalId": "Eval ID",
297
- "table.verdict": "状态",
298
- "table.ranAt": "运行时间",
299
- "detail.evalResult": "个 eval",
300
- "detail.evalResults": "个 eval",
301
- "detail.attempts": "尝试",
302
- "detail.evals": "Eval 数",
303
- "detail.runs": "总轮次",
304
- "detail.runsUnit": "轮",
305
- "detail.passed": "通过",
306
- "detail.failed": "失败",
307
- "detail.errored": "错误",
308
- "detail.totalTime": "总耗时",
309
- "detail.totalCost": "总成本",
310
- "detail.ran": "运行",
311
- "detail.evaluationAttempts": "各 Eval",
312
- "detail.status": "状态",
313
- "detail.eval": "Eval",
314
- "detail.reason": "原因",
315
- "detail.time": "耗时",
316
- "detail.run": "轮次",
317
- "detail.rawSample": "原始样例结果",
318
- "detail.rawNote": "调试 JSON,默认选择第一条错误/失败",
319
- "config.experiment": "实验",
320
- "config.flagsNone": "无",
321
- "config.default": "默认",
322
- "config.none": "无",
323
- "config.notApplicable": "不适用",
324
120
  "status.pass": "通过",
325
121
  "status.fail": "失败",
326
122
  "status.error": "错误",
327
123
  "status.skipped": "跳过",
328
124
  "action.close": "关闭",
329
- "action.copyReason": "复制原因",
330
125
  "action.copyPrompt": "复制修复 Prompt",
331
126
  "action.copied": "已复制",
332
127
  "trace.loading": "加载中...",
333
128
  "trace.loadFailed": "加载失败(静态报告没有服务端 - 请用 niceeval view):",
334
- "trace.transcript": "会话",
335
129
  "trace.timing": "耗时追踪",
336
130
  "trace.noSpans": "没有 span",
337
131
  "trace.total": "总计",
@@ -371,23 +165,6 @@ const dictionaries: Record<Locale, Dictionary> = {
371
165
  "assert.optional": "可缺席",
372
166
  "assert.soft": "soft",
373
167
  "assert.evidence": "实际被检查的内容",
374
- "verdict.passed": "通过",
375
- "verdict.failed": "失败",
376
- "verdict.errored": "错误",
377
- "verdict.skipped": "跳过",
378
- "banner.skippedTitle": "{{count}} 个 run 读取失败,此处不展示",
379
- "banner.skipped.incompatible": "由 niceeval {{producer}} 写入(schemaVersion {{schemaVersion}})—— 当前版本读不了,展开查看命令",
380
- "banner.skipped.incompatibleForeign": "由 {{name}} {{version}} 写入(schemaVersion {{schemaVersion}})—— 当前查看器读不了;请用写出它的工具查看",
381
- "banner.skipped.malformed": "报告读不了({{detail}})—— 可能已损坏;重跑该 eval 或删除对应 run 目录",
382
- "banner.skipped.incomplete": "快照目录已创建但从未写出 snapshot.json(极窄的崩溃窗口)—— 已完成的 attempt artifact 仍在盘上供手工排查;不需要就删除对应目录",
383
- "banner.expandRest": "展开其余 {{count}} 个",
384
- "banner.collapse": "收起",
385
- "banner.copyCommand": "复制查看命令",
386
- "banner.warningsTitle": "当前榜单挑选的提醒:",
387
- "hero.composedFrom": "合成自 {{count}} 个 run",
388
- "chart.costVsScore": "成本 × 通过率",
389
- "chart.axisCost": "平均每个 eval 成本",
390
- "chart.axisScore": "通过率",
391
168
  },
392
169
  };
393
170
 
@@ -408,9 +185,10 @@ export function persistLocale(locale: Locale): void {
408
185
  }
409
186
  }
410
187
 
188
+ // 浏览器 <title> 是宿主文档单例,唯一归属是 App 的 shellTitle effect(外壳标题回退链);
189
+ // 这里只切文档语言,不碰标题。
411
190
  export function setDocumentLocale(locale: Locale): void {
412
191
  document.documentElement.lang = locale;
413
- document.title = dictionaries[locale]["app.title"];
414
192
  }
415
193
 
416
194
  export function makeTranslator(locale: Locale): (key: MessageKey, vars?: Vars) => string {
@@ -1,26 +1,8 @@
1
- // viewData 快照明细 → 证据室页面模型的纯拼接,零聚合口径:Runs / Traces 的平铺列表
2
- // 来自全部快照(server 侧已跨快照去重);统计口径整体住在报告槽的静态 HTML 里,
3
- // 前端不再拼榜单行。修复 prompt 的失败清单(CopyControls 的 fixPromptEntries)
4
- // 也从这份快照明细现算。
1
+ // viewData 快照明细 → attempt 深链解析的纯拼接,零聚合口径:统计与列表整体住在报告页的
2
+ // 静态 HTML 里(报告组件的官方计算函数),前端不拼任何榜单行。Attempts / Traces 是内建报告
3
+ // 的普通页(AttemptList / TraceWaterfall 组件),不再由前端平铺快照明细。
5
4
 
6
- import type { RowRun } from "../shared.ts";
7
5
  import type { ViewResult, ViewSnapshot } from "../types.ts";
8
- import { displayExperimentName } from "../../../shared/aggregate.ts";
9
-
10
- /** 快照的展示标签:experiment id 的末段。 */
11
- export function snapshotLabel(snapshot: ViewSnapshot): string {
12
- return displayExperimentName(snapshot.experimentId) ?? snapshot.experimentId;
13
- }
14
-
15
- /** Runs / Traces 的平铺列表:全部快照(含历史)的 attempt,带所属实验的展示标注。 */
16
- export function flattenAttempts(snapshots: ViewSnapshot[]): RowRun[] {
17
- return snapshots.flatMap((snapshot) => {
18
- const label = snapshotLabel(snapshot);
19
- return snapshot.results.map(
20
- (r): RowRun => ({ ...r, rowLabel: label, rowAgent: snapshot.agent, rowModel: r.model ?? snapshot.model }),
21
- );
22
- });
23
- }
24
6
 
25
7
  /** 旧版 ?modal= 深链的只读回退:在全部快照里按 (eval id, experimentId, attempt) 定位。 */
26
8
  export function resultFromUrl(snapshots: ViewSnapshot[]): ViewResult | null {
@@ -1,10 +1,8 @@
1
1
  import type { Vars } from "../../i18n/core.ts";
2
2
  import type { MessageKey } from "./i18n.ts";
3
- import type { CodeSource, TranscriptEvent, ViewJson, ViewResult } from "./types.ts";
3
+ import type { CodeSource, TranscriptEvent, ViewJson } from "./types.ts";
4
4
 
5
5
  export type T = (key: MessageKey, vars?: Vars) => string;
6
6
  export type ArtifactLoadState =
7
7
  | { sources: CodeSource[] | null; events: TranscriptEvent[] | null; status: "loading" | "ready" | "none" };
8
- export type RowRun = ViewResult & { rowLabel: string; rowAgent: string; rowModel?: string };
9
- export type LazyArtifactType = "trace" | "transcript";
10
8
  export type ToolBlockCall = { tool?: string; name: string; input: ViewJson };
@@ -23,8 +23,8 @@ export type {
23
23
  ViewSnapshot,
24
24
  } from "../shared/types.ts";
25
25
 
26
- /** 导航 tab:报告页(`page:<id>`,路由 `#/page/<id>`)在前,内置证据页 Attempts / Traces 恒在其后。 */
27
- export type Tab = `page:${string}` | "attempts" | "traces";
26
+ /** 导航 tab:只有报告定义声明的页(`page:<id>`,路由 `#/page/<id>`),按声明序;宿主不追加任何项。 */
27
+ export type Tab = `page:${string}`;
28
28
 
29
29
  /** 前端拿到的单条 attempt 结果就是瘦身后的 EvalResult(locator / artifactBase 由 loader 注入)。 */
30
30
  export type ViewResult = ViewEvalResult;
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-bold:700;--radius-md:.375rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-panel:var(--panel);--color-panel-2:var(--panel-2);--color-line:var(--line);--color-line-strong:var(--line-strong);--color-text:var(--text);--color-muted:var(--muted)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\/2{top:50%}.left-1\/2{left:50%}.z-\[200\]{z-index:200}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-7{height:calc(var(--spacing) * 7)}.max-h-\[min\(86vh\,820px\)\]{max-height:min(86vh,820px)}.w-7{width:calc(var(--spacing) * 7)}.w-\[min\(1120px\,calc\(100vw-48px\)\)\]{width:min(1120px,100vw - 48px)}.w-fit{width:fit-content}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.flex-col{flex-direction:column}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-3{gap:calc(var(--spacing) * 3)}.gap-\[3px\]{gap:3px}.gap-\[22px\]{gap:22px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[5px\]{border-radius:5px}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-current{border-color:currentColor}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-transparent{border-color:#0000}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab, red, red)){.bg-black\/90{background-color:color-mix(in oklab, var(--color-black) 90%, transparent)}}.bg-current\/10{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/10{background-color:color-mix(in oklab, currentcolor 10%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-transparent{background-color:#0000}.p-0{padding:0}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-\[7px\]{padding-inline:7px}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pl-3{padding-left:calc(var(--spacing) * 3)}.font-\[inherit\]{font-family:inherit}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-\[640\]{--tw-font-weight:640;font-weight:640}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-muted{color:var(--color-muted)}.text-text{color:var(--color-text)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.45\)\]{--tw-shadow:0 20px 60px var(--tw-shadow-color,#00000073);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:border-line:hover{border-color:var(--color-line)}.hover\:bg-panel-2:hover{background-color:var(--color-panel-2)}.hover\:text-text:hover{color:var(--color-text)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.data-\[state\=active\]\:font-\[560\][data-state=active]{--tw-font-weight:560;font-weight:560}.data-\[state\=active\]\:text-text[data-state=active]{color:var(--color-text)}@media not all and (width>=760px){.max-\[760px\]\:hidden{display:none}}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#050505);--panel:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0b0b0b);--panel-2:var(--lightningcss-light,#f4f4f5)var(--lightningcss-dark,#111);--line:var(--lightningcss-light,#dedee2)var(--lightningcss-dark,#262626);--line-strong:var(--lightningcss-light,#c9c9cf)var(--lightningcss-dark,#343434);--text:var(--lightningcss-light,#111113)var(--lightningcss-dark,#ededed);--muted:var(--lightningcss-light,#62636a)var(--lightningcss-dark,#a1a1aa);--soft:var(--lightningcss-light,#8b8d98)var(--lightningcss-dark,#74747b);--good:var(--lightningcss-light,#087f5b)var(--lightningcss-dark,#3ddc97);--bad:var(--lightningcss-light,#b42318)var(--lightningcss-dark,#ff6b6b);--warn:var(--lightningcss-light,#9a6700)var(--lightningcss-dark,#e8b84a);--blue:var(--lightningcss-light,#1d63d8)var(--lightningcss-dark,#6ea8fe);--focus:var(--lightningcss-light,#111113)var(--lightningcss-dark,#ededed);--series-1:var(--lightningcss-light,#2a78d6)var(--lightningcss-dark,#3987e5);--series-2:var(--lightningcss-light,#1baf7a)var(--lightningcss-dark,#199e70);--series-3:var(--lightningcss-light,#eda100)var(--lightningcss-dark,#c98500);--series-4:var(--lightningcss-light,#008300)var(--lightningcss-dark,#008300);--series-5:var(--lightningcss-light,#e34948)var(--lightningcss-dark,#e66767);--series-6:var(--lightningcss-light,#eb6834)var(--lightningcss-dark,#d95926);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box}html{scrollbar-gutter:stable;overflow-y:scroll}body{background:var(--bg);color:var(--text);letter-spacing:0;margin:0}a{color:inherit}.topbar{border-bottom:1px solid var(--line);background:var(--bg);justify-content:space-between;align-items:center;gap:28px;height:64px;padding:0 clamp(20px,5vw,80px);display:flex}@supports (color:color-mix(in lab, red, red)){.topbar{background:color-mix(in oklch, var(--bg), transparent 4%)}}.topbar{z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:sticky;top:0}.brand{align-items:baseline;gap:12px;font-size:20px;font-weight:690;display:flex}.mark{border:1.25px solid var(--text);width:18px;height:18px;display:inline-block;transform:rotate(45deg)}.lang-switch{border:1px solid var(--line);background:var(--panel);border-radius:7px;flex:none;align-items:center;display:inline-flex;overflow:hidden}.lang-switch button{border:0;border-right:1px solid var(--line);min-width:44px;height:30px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;font-size:12px;line-height:1}.lang-switch button:last-child{border-right:0}.lang-switch button:hover{color:var(--text)}.lang-switch button.is-active{background:var(--panel-2);color:var(--text);font-weight:620}main{width:min(1120px,100vw - 40px);margin:0 auto;padding:clamp(52px,7vw,82px) 0 72px}.hero{text-align:center;max-width:740px;margin:0 auto clamp(38px,6vw,58px)}h1{letter-spacing:0;margin:0;font-size:clamp(42px,5.6vw,66px);font-weight:760;line-height:.94}.subtitle{color:var(--muted);margin:20px auto 0}@supports (color:color-mix(in lab, red, red)){.subtitle{color:color-mix(in oklch, var(--muted), var(--text) 12%)}}.subtitle{max-width:660px;font-size:clamp(17px,2vw,21px);line-height:1.58}.meta{color:var(--muted);flex-wrap:wrap;justify-content:center;gap:14px;margin-top:24px;font-size:14px;display:flex}.meta b{color:var(--text);font-weight:570}.report-slot{margin:0 auto 36px}.incompatible-banner{border:1px solid var(--warn)}@supports (color:color-mix(in lab, red, red)){.incompatible-banner{border:1px solid color-mix(in oklch, var(--warn), var(--line) 35%)}}.incompatible-banner{border-left:3px solid var(--warn);background:var(--warn);border-radius:8px}@supports (color:color-mix(in lab, red, red)){.incompatible-banner{background:color-mix(in oklch, var(--warn), var(--panel) 85%)}}.incompatible-banner{margin:0 auto 36px;padding:12px 16px 14px;font-size:13px}.ib-head{align-items:center;gap:8px;display:flex}.ib-head b{font-weight:640}.ib-icon{width:16px;height:16px;color:var(--warn);stroke-width:2px;flex-shrink:0}.ib-groups{gap:10px;margin-top:10px;display:grid}.ib-group-head{align-items:baseline;gap:8px;display:flex}.ib-group-count{background:var(--warn);border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;min-width:20px;height:20px;padding:0 6px;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.ib-group-count{background:color-mix(in oklch, var(--warn), var(--panel) 72%)}}.ib-group-count{color:var(--text);font-variant-numeric:tabular-nums;font-size:11px;font-weight:640}.ib-group-desc{color:var(--soft)}.ib-group ul{gap:3px;margin:5px 0 0;padding:0;list-style:none;display:grid}.ib-group li{align-items:center;gap:8px;min-height:22px;display:flex}.ib-dir{font-family:var(--mono,ui-monospace, monospace);font-weight:560}.ib-more{color:var(--soft);font-size:12px}.ib-copy{border:1px solid var(--line);background:var(--panel);width:22px;height:22px;color:var(--muted);cursor:pointer;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;transition:color .12s,border-color .12s;display:inline-flex}.ib-copy svg{stroke:currentColor;fill:none;stroke-width:2px;width:12px;height:12px}.ib-copy:hover{color:var(--text);border-color:var(--line-strong)}.ib-copy.is-copied{color:var(--good);border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.ib-copy.is-copied{border-color:color-mix(in oklch, var(--good), var(--line) 40%)}}.ib-toggle{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;margin-top:10px;padding:0;font-size:12px;display:inline-flex}.ib-toggle svg{width:12px;height:12px;transition:transform .12s}.ib-toggle svg.is-open{transform:rotate(90deg)}.ib-toggle:hover{color:var(--text)}.section-head{justify-content:space-between;align-items:end;gap:18px;margin-bottom:16px;display:flex}h2{margin:0;font-size:clamp(24px,2.6vw,31px);font-weight:720;line-height:1.1}.controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.search{border:1px solid var(--line);background:var(--panel);min-width:320px;height:36px;color:var(--text);border-radius:7px;outline:none;padding:0 12px}.search:focus{border-color:var(--focus)}.table-wrap{border:1px solid var(--line);background:var(--panel);border-radius:8px;overflow:auto}table{border-collapse:collapse;width:100%;min-width:1040px}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;height:52px;padding:0 16px;font-size:14px}th{color:var(--muted);background:var(--panel);z-index:2;font-weight:500;position:sticky;top:0}tbody tr:last-child td{border-bottom:0}.section-sub-head{justify-content:space-between;align-items:center;gap:18px;min-height:36px;margin-bottom:16px;display:flex}.group-detail-label{color:var(--text);font-size:15px;font-weight:680}.name{font-weight:610}.sub{color:var(--muted);margin-top:3px;font-size:12px}.num{font-variant-numeric:tabular-nums;white-space:nowrap;font-feature-settings:"tnum"}.good{color:var(--good)}.bad{color:var(--bad)}.warn,.infra-err{color:var(--warn)}.eval-id{overflow-wrap:anywhere;align-items:center;font-weight:560;display:flex}.copy-all-errors{border:1px solid var(--line);background:var(--panel);height:36px;color:var(--muted);cursor:pointer;white-space:nowrap;border-radius:7px;flex-shrink:0;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:13px;transition:color .12s,border-color .12s,background .12s;display:inline-flex}.copy-all-errors svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.copy-all-errors:hover{color:var(--text);border-color:var(--line-strong)}.copy-all-errors.is-copied{color:var(--good);border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.copy-all-errors.is-copied{border-color:color-mix(in oklch, var(--good), var(--line) 40%)}}.copy-all-errors.is-copied{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.copy-all-errors.is-copied{background:color-mix(in oklch, var(--good), transparent 88%)}}.raw-details{border-top:1px solid var(--line);margin-top:16px}@supports (color:color-mix(in lab, red, red)){.raw-details{border-top:1px solid color-mix(in oklch, var(--line), transparent 15%)}}.raw-details{color:var(--muted);padding-top:14px}@supports (color:color-mix(in lab, red, red)){.raw-details{color:color-mix(in oklch, var(--muted), var(--text) 6%)}}.raw-details summary{cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none;font-size:13px;font-weight:560}.raw-details pre{margin-top:12px}.raw-note{color:var(--soft);margin-left:8px;font-weight:400}.reason-empty{color:var(--soft)}.ran-at{color:var(--soft);font-variant-numeric:tabular-nums;margin-top:2px;font-size:11px;display:block}.attempt-status{align-items:center;gap:4px;min-width:0;display:flex}.eval-item-clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.eval-item-clickable:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.eval-item-clickable:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 30%)}}.run-ratio{color:var(--soft)}.eval-attempts{border-left:2px solid var(--accent,var(--line));margin-left:8px;display:grid}@supports (color:color-mix(in lab, red, red)){.eval-attempts{border-left:2px solid color-mix(in oklch, var(--accent,var(--line)), transparent 55%)}}.eval-attempts{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.eval-attempts{background:color-mix(in oklch, var(--panel-2), transparent 55%)}}.eval-attempts .eval-item{padding-left:12px}.eval-attempts .eval-item:last-child{border-bottom:none}.nosource{flex-direction:column;gap:14px;display:flex}.nosource-note{color:var(--muted);border:1px dashed var(--line-strong);padding:9px 12px;font-size:12.5px;line-height:1.55}@supports (color:color-mix(in lab, red, red)){.nosource-note{border:1px dashed color-mix(in oklch, var(--line-strong), transparent 25%)}}.nosource-note{background:var(--panel);border-radius:8px}@supports (color:color-mix(in lab, red, red)){.nosource-note{background:color-mix(in oklch, var(--panel), var(--line) 20%)}}.nosource-block{border:1px solid var(--line);background:var(--panel-2);border-radius:10px;overflow:hidden}.nosource-head{color:var(--muted);background:var(--panel-2);padding:7px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}@supports (color:color-mix(in lab, red, red)){.nosource-head{background:color-mix(in oklch, var(--panel-2), var(--line) 35%)}}.nosource-head{border-bottom:1px solid var(--line)}.nosource-block>.assert-detail,.nosource-block>.transcript{padding:10px 14px}.conv-loading{color:var(--soft);padding:8px 0;font-size:12px}.trace-details{border-bottom:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.trace-details{border-bottom:1px solid color-mix(in oklch, var(--line), transparent 35%)}}.trace-details{padding:4px 0 10px}.trace-details summary{cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none;padding:4px 0;font-size:12px}.trace-details summary:hover{color:var(--text)}.trace{border:1px solid var(--line);margin:8px 0 4px;padding:10px 12px}@supports (color:color-mix(in lab, red, red)){.trace{border:1px solid color-mix(in oklch, var(--line), transparent 20%)}}.trace{background:var(--panel);border-radius:7px}@supports (color:color-mix(in lab, red, red)){.trace{background:color-mix(in oklch, var(--panel), black 6%)}}.trace-span-meta{color:var(--soft);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;font-size:11px}.span-d{border-radius:4px}.span-d>.trace-row{cursor:default}details.span-d>summary.trace-row{cursor:pointer;list-style:none}details.span-d>summary.trace-row::-webkit-details-marker{display:none}details.span-d[open]>summary.trace-row{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){details.span-d[open]>summary.trace-row{background:color-mix(in oklch, var(--panel-2), var(--panel) 10%)}}details.span-d>summary.trace-row:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){details.span-d>summary.trace-row:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.trace-row{grid-template-columns:minmax(140px,.9fr) minmax(0,2fr) 56px;align-items:center;column-gap:12px;height:22px;font-size:12px;display:grid}.span-attrs{border-left:2px solid var(--line-strong);margin:2px 0 6px;padding:6px 8px 10px 16px}@supports (color:color-mix(in lab, red, red)){.span-attrs{border-left:2px solid color-mix(in oklch, var(--line-strong), transparent 30%)}}.span-attrs{font-size:12px}.attr-row{grid-template-columns:minmax(120px,220px) 1fr;column-gap:12px;padding:2px 0;display:grid}.attr-k{color:var(--soft);overflow-wrap:anywhere}.attr-v{color:var(--text);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.attr-io{margin:4px 0}.attr-io .attr-k{text-transform:uppercase;letter-spacing:.05em;margin-bottom:3px;font-size:11px;display:block}.attr-pre{border:1px solid var(--line);background:var(--panel);border-radius:6px;max-height:220px;margin:0;padding:8px 10px;overflow:auto}@supports (color:color-mix(in lab, red, red)){.attr-pre{background:color-mix(in oklch, var(--panel), black 8%)}}.attr-pre{color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45}.trace-label{text-overflow:ellipsis;white-space:nowrap;color:var(--muted);overflow:hidden}@supports (color:color-mix(in lab, red, red)){.trace-label{color:color-mix(in oklch, var(--muted), var(--text) 12%)}}.trace-track{background:var(--panel-2);border-radius:3px;height:12px;position:relative}@supports (color:color-mix(in lab, red, red)){.trace-track{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.trace-bar{background:var(--good);border-radius:3px;min-width:2px;height:12px;position:absolute;top:0}.trace-bar.bad{background:var(--bad)}.trace-bar.k-model{background:oklch(72% .13 250)}.trace-bar.k-tool{background:oklch(74% .14 150)}.trace-bar.k-agent{background:oklch(74% .15 300)}.trace-bar.k-turn{background:oklch(78% .13 90)}.trace-bar.k-other{background:var(--soft)}@supports (color:color-mix(in lab, red, red)){.trace-bar.k-other{background:color-mix(in oklch, var(--soft), var(--panel) 30%)}}.trace-dur{color:var(--soft);text-align:right}.kind-chip{text-transform:uppercase;letter-spacing:.03em;color:var(--panel);vertical-align:middle;border-radius:3px;margin-right:6px;padding:0 5px;font-size:10px;font-weight:600;display:inline-block}.kind-chip.k-model{background:oklch(72% .13 250)}.kind-chip.k-tool{background:oklch(74% .14 150)}.kind-chip.k-agent{background:oklch(74% .15 300)}.kind-chip.k-turn{background:oklch(78% .13 90)}.transcript{flex-direction:column;gap:6px;margin:8px 0 4px;display:flex}.ts-msg{border:1px solid var(--line);border-radius:7px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.ts-msg{border:1px solid color-mix(in oklch, var(--line), transparent 30%)}}.ts-msg{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.ts-msg{background:color-mix(in oklch, var(--panel), black 4%)}}.ts-assistant{border-left:2px solid var(--good)}.ts-user{border-left:2px solid var(--line-strong)}.ts-input{border-left:2px solid var(--warn)}.ts-role{text-transform:uppercase;letter-spacing:.07em;color:var(--soft);margin-bottom:4px;font-size:10px;display:block}.ts-text{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:360px;font-size:13px;line-height:1.55;overflow:auto}.ts-think{font-size:12px}.ts-think>summary{cursor:pointer;color:var(--soft);padding:2px 0;font-style:italic;list-style:none}.ts-think>summary::-webkit-details-marker{display:none}.ts-think>summary:before{content:"✦ "}.ts-think-text{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);max-height:280px;padding:4px 0 6px 16px;font-style:italic;overflow:auto}.ts-tool-d{border:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d{border:1px solid color-mix(in oklch, var(--line), transparent 30%)}}.ts-tool-d{background:var(--panel);border-radius:7px}@supports (color:color-mix(in lab, red, red)){.ts-tool-d{background:color-mix(in oklch, var(--panel), black 6%)}}.ts-tool-d>summary.ts-row{cursor:pointer;grid-template-columns:8px minmax(110px,max-content) 1fr;align-items:center;column-gap:9px;padding:7px 11px;list-style:none;display:grid}.ts-tool-d>summary.ts-row::-webkit-details-marker{display:none}.ts-tool-d[open]>summary.ts-row{border-bottom:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d[open]>summary.ts-row{border-bottom:1px solid color-mix(in oklch, var(--line), transparent 40%)}}.ts-tool-d>summary.ts-row:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d>summary.ts-row:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.ts-dot{background:var(--good);border-radius:50%;width:8px;height:8px}.ts-dot.bad{background:var(--bad)}.ts-dot.warn{background:var(--warn)}.ts-dot.pending{background:var(--soft)}.ts-tool{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;font-weight:600;overflow:hidden}.ts-preview{color:var(--soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.ts-body{flex-direction:column;gap:8px;padding:8px 11px 10px;display:flex}.ts-field .ts-k{text-transform:uppercase;letter-spacing:.05em;color:var(--soft);margin-bottom:3px;font-size:10px;display:block}.ts-error{border:1px solid var(--bad);border-radius:7px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.ts-error{border:1px solid color-mix(in oklch, var(--bad), transparent 55%)}}.ts-error{color:var(--bad);font-size:12.5px}.ts-skill{font-size:12px}.ts-raw .ts-tool{color:var(--soft)}.ts-skill .ts-text{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ts-compaction{text-align:center;color:var(--soft);text-transform:uppercase;letter-spacing:.06em;padding:2px 0;font-size:11px}pre{border:1px solid var(--line);background:var(--panel);border-radius:7px;margin:0;padding:12px}@supports (color:color-mix(in lab, red, red)){pre{background:color-mix(in oklch, var(--panel), black 8%)}}pre{color:var(--muted);overflow-wrap:anywhere;max-height:360px;font-size:12px;line-height:1.5;overflow:auto}.empty{border:1px dashed var(--line-strong);color:var(--muted);text-align:center;background:var(--panel);border-radius:8px;padding:40px 24px}a.brand{color:inherit;text-decoration:none}a.brand:hover{opacity:.75}.traces-entry{border:1px solid var(--line);background:var(--panel);border-radius:8px;margin-bottom:12px;padding:14px 18px}.traces-entry-head{align-items:baseline;gap:12px;margin-bottom:8px;font-size:13px;display:flex}.traces-verdict{min-width:52px;font-weight:600}.traces-exp{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.traces-dur{color:var(--soft)}@media (width<=760px){.topbar{padding:0 20px}.lang-switch button{min-width:40px}main{width:min(100vw - 28px,1120px);padding-top:42px}.hero{text-align:left;margin-left:0}.meta{justify-content:flex-start}.section-head{flex-direction:column;align-items:stretch}.search{width:100%;min-width:0}.detail{padding:18px 16px 20px}.config-strip{gap:6px}.detail-kpis{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:10px}.eval-grid-head,.eval-item{grid-template-columns:72px minmax(180px,1fr) minmax(220px,1fr) 76px 78px 72px 50px}}.modal-error{color:var(--bad);background:var(--bad);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}@supports (color:color-mix(in lab, red, red)){.modal-error{background:color-mix(in oklch, var(--bad), transparent 92%)}}.modal-error{border:1px solid var(--bad)}@supports (color:color-mix(in lab, red, red)){.modal-error{border:1px solid color-mix(in oklch, var(--bad), var(--line) 50%)}}.modal-error{white-space:pre-wrap;word-break:break-word;border-radius:8px;margin-bottom:12px;padding:8px 10px}.codeview{flex-direction:column;gap:14px;display:flex}.code-file{border:1px solid var(--line);background:var(--panel);border-radius:10px;overflow:hidden}.code-file-head{color:var(--muted);background:var(--panel-2);padding:7px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}@supports (color:color-mix(in lab, red, red)){.code-file-head{background:color-mix(in oklch, var(--panel-2), var(--line) 35%)}}.code-file-head{border-bottom:1px solid var(--line)}.code-lines{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.7;overflow-x:auto}.code-lines::-webkit-scrollbar{height:8px}.code-lines::-webkit-scrollbar-track{background:0 0}.code-lines::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:4px}.code-lines::-webkit-scrollbar-thumb:hover{background:var(--soft)}.code-line{border-left:3px solid #0000;grid-template-columns:46px 22px minmax(0,1fr) auto;align-items:center;width:max-content;min-width:100%;display:grid}.code-line.line-clickable{cursor:pointer}.code-line.line-clickable:hover{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover{background:color-mix(in oklch, var(--panel), var(--line) 45%)}}.code-line.line-send{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send{background:color-mix(in oklch, var(--blue), var(--panel) 88%)}}.code-line.line-send{border-left-color:var(--blue)}.code-line.line-send .ln{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .ln{background:color-mix(in oklch, var(--blue), var(--panel) 74%)}}.code-line.line-send .ln{color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .ln{color:color-mix(in oklch, var(--blue), var(--text) 45%)}}.code-line.line-send.line-clickable:hover{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send.line-clickable:hover{background:color-mix(in oklch, var(--blue), var(--panel) 82%)}}.code-line.is-open{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.code-line.is-open{background:color-mix(in oklch, var(--panel), var(--line) 34%)}}.code-line.line-pass{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass{background:color-mix(in oklch, var(--good), var(--panel) 58%)}}.code-line.line-pass{border-left-color:var(--good)}.code-line.line-pass .ln{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass .ln{background:color-mix(in oklch, var(--good), var(--panel) 34%)}}.code-line.line-pass .ln{color:var(--text)}.code-line.line-fail{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail{background:color-mix(in oklch, var(--bad), var(--panel) 58%)}}.code-line.line-fail{border-left-color:var(--bad)}.code-line.line-fail .ln{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail .ln{background:color-mix(in oklch, var(--bad), var(--panel) 34%)}}.code-line.line-fail .ln{color:var(--text)}.code-line.line-warn{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn{background:color-mix(in oklch, var(--warn), var(--panel) 58%)}}.code-line.line-warn{border-left-color:var(--warn)}.code-line.line-warn .ln{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn .ln{background:color-mix(in oklch, var(--warn), var(--panel) 34%)}}.code-line.line-warn .ln{color:var(--text)}.code-line.line-pass.line-clickable:hover{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass.line-clickable:hover{background:color-mix(in oklch, var(--good), var(--panel) 64%)}}.code-line.line-fail.line-clickable:hover{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail.line-clickable:hover{background:color-mix(in oklch, var(--bad), var(--panel) 64%)}}.code-line.line-warn.line-clickable:hover{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn.line-clickable:hover{background:color-mix(in oklch, var(--warn), var(--panel) 64%)}}.ln{text-align:right;color:var(--soft);-webkit-user-select:none;user-select:none;justify-content:flex-end;align-self:stretch;align-items:center;padding:1px 8px 1px 0;font-size:11px;display:flex}.gmark{justify-content:center;align-items:center;display:inline-flex}.gstat{flex-shrink:0;width:13px;height:13px}.gstat.good{color:var(--good)}.gstat.bad{color:var(--bad)}.gstat.warn{color:var(--warn)}.gstat.na{color:var(--muted,#8a8f98)}.gsend{width:13px;height:13px;color:var(--blue);flex-shrink:0}.ctext{white-space:pre;color:var(--text);padding-left:8px}.lbadges{white-space:nowrap;justify-self:end;align-items:center;gap:6px;padding-right:12px;display:inline-flex}.abadge{border:1px solid #0000;border-radius:5px;padding:0 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:650}.abadge.good{color:var(--good);border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.abadge.good{border-color:color-mix(in oklch, var(--good), var(--line) 55%)}}.abadge.good{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.abadge.good{background:color-mix(in oklch, var(--good), transparent 90%)}}.abadge.bad{color:var(--bad);border-color:var(--bad)}@supports (color:color-mix(in lab, red, red)){.abadge.bad{border-color:color-mix(in oklch, var(--bad), var(--line) 55%)}}.abadge.bad{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.abadge.bad{background:color-mix(in oklch, var(--bad), transparent 90%)}}.abadge.warn{color:var(--warn);border-color:var(--warn)}@supports (color:color-mix(in lab, red, red)){.abadge.warn{border-color:color-mix(in oklch, var(--warn), var(--line) 55%)}}.abadge.warn{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.abadge.warn{background:color-mix(in oklch, var(--warn), transparent 90%)}}.abadge.na{color:var(--muted,#8a8f98);border-color:var(--line);background:var(--muted,#8a8f98)}@supports (color:color-mix(in lab, red, red)){.abadge.na{background:color-mix(in oklch, var(--muted,#8a8f98), transparent 92%)}}.abadge-th{opacity:.55;font-weight:400}.reply-hint{letter-spacing:.02em;color:var(--muted);border:1px solid var(--line-strong);font-size:10px;font-weight:650}@supports (color:color-mix(in lab, red, red)){.reply-hint{border:1px solid color-mix(in oklch, var(--line-strong), transparent 12%)}}.reply-hint{background:var(--panel);border-radius:5px;padding:1px 7px}@supports (color:color-mix(in lab, red, red)){.reply-hint{background:color-mix(in oklch, var(--panel), var(--line) 28%)}}.reply-hint{transition:color .12s,border-color .12s,background .12s}.code-line.line-send .reply-hint{color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{color:color-mix(in oklch, var(--blue), var(--text) 30%)}}.code-line.line-send .reply-hint{border-color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{border-color:color-mix(in oklch, var(--blue), var(--line) 55%)}}.code-line.line-send .reply-hint{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{background:color-mix(in oklch, var(--blue), transparent 88%)}}.code-line.line-clickable:hover .reply-hint{color:var(--text);border-color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover .reply-hint{border-color:color-mix(in oklch, var(--blue), var(--line) 30%)}}.code-line.line-clickable:hover .reply-hint{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover .reply-hint{background:color-mix(in oklch, var(--blue), transparent 80%)}}.line-chev{width:14px;height:14px;color:var(--soft);transition:transform .12s,color .12s}.line-chev.is-open{transform:rotate(90deg)}.code-line.line-clickable:hover .line-chev{color:var(--text)}.line-detail{font-family:var(--sans,-apple-system, system-ui, "Segoe UI", sans-serif);white-space:normal;background:var(--panel);padding:10px 16px 12px 60px}@supports (color:color-mix(in lab, red, red)){.line-detail{background:color-mix(in oklch, var(--panel), var(--line) 22%)}}.line-detail{border-left:3px solid var(--line-strong);font-size:12.5px}.reply-panel{border-left-color:var(--blue);flex-direction:column;gap:9px;display:flex}@supports (color:color-mix(in lab, red, red)){.reply-panel{border-left-color:color-mix(in oklch, var(--blue), var(--line) 40%)}}.reply-role{text-transform:uppercase;letter-spacing:.05em;color:var(--blue);margin-bottom:2px;font-size:10px;display:block}.reply-text{color:var(--text);white-space:pre-wrap;word-break:break-word}.reply-think{color:var(--muted);font-size:12px}.reply-think summary{cursor:pointer;-webkit-user-select:none;user-select:none}.reply-think-text{white-space:pre-wrap;color:var(--soft);margin-top:4px;padding-left:4px}.reply-tool{color:var(--text);flex-wrap:wrap;gap:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;display:flex}.reply-tool-name{color:var(--warn)}.reply-tool-out{color:var(--muted)}.reply-err{color:var(--bad);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.reply-skill{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.reply-user .reply-text{color:var(--muted);white-space:pre-wrap;word-break:break-word}.reply-empty{color:var(--soft)}.assert-detail{flex-direction:column;gap:9px;display:flex}.assert-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:8px;display:grid}.assert-name{color:var(--text);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.assert-sev{color:var(--soft);text-transform:uppercase;letter-spacing:.04em;font-size:10px}.assert-score{color:var(--muted);white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.assert-reason{color:var(--muted);white-space:pre-wrap;grid-column:1/-1;font-size:12px}.assert-evidence{grid-column:1/-1;margin-top:2px}.assert-evidence>summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--soft);letter-spacing:.02em;font-size:11px}.assert-evidence>summary:hover{color:var(--text)}.assert-evidence-pre{color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;background:var(--panel);margin:6px 0 0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;line-height:1.5}@supports (color:color-mix(in lab, red, red)){.assert-evidence-pre{background:color-mix(in oklch, var(--panel), var(--line) 24%)}}.assert-evidence-pre{border:1px solid var(--line);border-radius:7px;max-height:260px;overflow-y:auto}.code-orphans{border:1px solid var(--line);border-radius:10px;padding:10px 12px}.code-orphans-head{color:var(--muted);margin-bottom:8px;font-size:11px}.modal-sect{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-size:11px;font-weight:660}.attempt-asserts{margin-bottom:14px}.attempt-asserts-open{border:1px solid var(--line);background:var(--panel);border-radius:10px;margin-top:6px;overflow:hidden}.attempt-asserts .assert-detail{background:0 0;border-left:0;padding:10px 12px}.assert-reason{max-height:180px;overflow-y:auto}.fail-row{border-bottom:1px solid var(--line)}.fail-row:last-child{border-bottom:0}.fail-sum{cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;padding:8px 12px;list-style:none;display:flex}.fail-sum::-webkit-details-marker{display:none}.fail-sum:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;align-self:center;width:0;height:0;transition:transform .12s}.fail-row[open]>.fail-sum:before{transform:rotate(90deg)}.fail-sum:hover{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.fail-sum:hover{background:color-mix(in oklch, var(--panel), var(--line) 30%)}}.fail-name{color:var(--text);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.fail-matcher{color:var(--muted);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px}.fail-body{flex-direction:column;gap:6px;padding:2px 12px 10px 24px;display:flex}.assert-loc{color:var(--soft);white-space:nowrap;margin-left:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.asserts-passed{margin-top:8px}.asserts-passed>summary,.asserts-passed-group>summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:12px}.asserts-passed>summary:hover,.asserts-passed-group>summary:hover{color:var(--text)}.asserts-passed-group{margin:6px 0 0 14px}.asserts-passed-group>.assert-detail{margin-top:4px}.attempt-timing{margin:14px 0}summary.timing-sum{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;list-style:none;display:flex}summary.timing-sum::-webkit-details-marker{display:none}summary.timing-sum:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;width:0;height:0;transition:transform .12s}details[open]>summary.timing-sum:before{transform:rotate(90deg)}summary.timing-sum:hover .modal-sect{color:var(--text)}.timing-sum .modal-sect{margin-bottom:0}.phase-bar{border-radius:4px;gap:1px;height:8px;margin:7px 0 8px;display:flex;overflow:hidden}.phase-seg{flex-basis:0;min-width:2px}.phase-seg-1{background:var(--series-1)}.phase-seg-2{background:var(--series-2)}.phase-seg-3{background:var(--series-3)}.phase-seg-4{background:var(--series-4)}.phase-seg-5{background:var(--series-5)}.phase-seg-6{background:var(--series-6)}.phase-seg-bad{background:var(--bad)}.phase-list,.timing-kids{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.timing-kids{margin-top:2px;padding-left:18px}.phase-row,.tnode-row{align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.7;display:flex}summary.phase-row,summary.tnode-row{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}summary.phase-row::-webkit-details-marker{display:none}summary.tnode-row::-webkit-details-marker{display:none}summary.phase-row:before,summary.tnode-row:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;width:0;height:0;transition:transform .12s}details[open]>summary.phase-row:before,details[open]>summary.tnode-row:before{transform:rotate(90deg)}li.phase-row:before,li.tnode-row:before{content:"";flex-shrink:0;width:4px}.phase-dot{border-radius:2px;flex-shrink:0;width:8px;height:8px}.phase-dot-none{background:0 0}.phase-name{color:var(--text);white-space:nowrap;flex-shrink:0;width:168px}.phase-dur{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.phase-fail{color:var(--bad);font-weight:650}.phase-kids{color:var(--soft);border:1px solid var(--line);border-radius:999px;padding:0 6px;font-size:10px;line-height:1.5}.tnode-label{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;overflow:hidden}.tnode-meta{color:var(--soft);padding:3px 0 3px 18px;font-size:11px}.tnode-trace{margin:4px 0 6px 18px}.phase-closing{margin-top:8px}.phase-closing-head{color:var(--soft);margin-bottom:2px;font-size:11px}.meta-chips{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.meta-chip{color:var(--muted);border:1px solid var(--line);background:var(--panel);border-radius:6px;padding:3px 9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.meta-chip b{color:var(--text);font-weight:640}.tok-comment{color:var(--soft);font-style:italic}.tok-str{color:var(--lightningcss-light,#0a7d3c)var(--lightningcss-dark,#7ee787)}.tok-kw{color:var(--lightningcss-light,#9333ea)var(--lightningcss-dark,#c792ea)}.tok-num{color:var(--lightningcss-light,#b25000)var(--lightningcss-dark,#f0a36b)}.tok-fn{color:var(--lightningcss-light,#0b62d6)var(--lightningcss-dark,#82aaff)}.shell-links{align-items:center;gap:8px;margin-left:auto;display:flex}.shell-links a{color:var(--soft);align-items:center;gap:6px;padding:6px 4px;font-size:13px;text-decoration:none;display:inline-flex}.shell-links a:hover{color:var(--text)}.shell-link-icon{align-items:center;display:inline-flex}.shell-link-icon svg{fill:currentColor;width:14px;height:14px;display:block}.site-footer{color:var(--soft);flex-wrap:wrap;justify-content:center;align-items:baseline;gap:12px;padding:24px 24px 32px;font-size:12px;display:flex}.hero .powered-by{margin-top:16px;font-size:12px;display:block}.hero .powered-by a{color:var(--blue);text-decoration:none}.hero .powered-by a:hover{text-decoration:underline}.nre-page-error pre{white-space:pre-wrap}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-bold:700;--radius-md:.375rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-panel:var(--panel);--color-panel-2:var(--panel-2);--color-line:var(--line);--color-line-strong:var(--line-strong);--color-text:var(--text);--color-muted:var(--muted)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\/2{top:50%}.left-1\/2{left:50%}.z-\[200\]{z-index:200}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-7{height:calc(var(--spacing) * 7)}.max-h-\[min\(86vh\,820px\)\]{max-height:min(86vh,820px)}.w-7{width:calc(var(--spacing) * 7)}.w-\[min\(1120px\,calc\(100vw-48px\)\)\]{width:min(1120px,100vw - 48px)}.w-fit{width:fit-content}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.flex-col{flex-direction:column}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-3{gap:calc(var(--spacing) * 3)}.gap-\[3px\]{gap:3px}.gap-\[22px\]{gap:22px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[5px\]{border-radius:5px}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-current{border-color:currentColor}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-transparent{border-color:#0000}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab, red, red)){.bg-black\/90{background-color:color-mix(in oklab, var(--color-black) 90%, transparent)}}.bg-current\/10{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/10{background-color:color-mix(in oklab, currentcolor 10%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-transparent{background-color:#0000}.p-0{padding:0}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-\[7px\]{padding-inline:7px}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pl-3{padding-left:calc(var(--spacing) * 3)}.font-\[inherit\]{font-family:inherit}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-\[640\]{--tw-font-weight:640;font-weight:640}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-muted{color:var(--color-muted)}.text-text{color:var(--color-text)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.45\)\]{--tw-shadow:0 20px 60px var(--tw-shadow-color,#00000073);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:border-line:hover{border-color:var(--color-line)}.hover\:bg-panel-2:hover{background-color:var(--color-panel-2)}.hover\:text-text:hover{color:var(--color-text)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.data-\[state\=active\]\:font-\[560\][data-state=active]{--tw-font-weight:560;font-weight:560}.data-\[state\=active\]\:text-text[data-state=active]{color:var(--color-text)}@media not all and (width>=760px){.max-\[760px\]\:hidden{display:none}}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#050505);--panel:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0b0b0b);--panel-2:var(--lightningcss-light,#f4f4f5)var(--lightningcss-dark,#111);--line:var(--lightningcss-light,#dedee2)var(--lightningcss-dark,#262626);--line-strong:var(--lightningcss-light,#c9c9cf)var(--lightningcss-dark,#343434);--text:var(--lightningcss-light,#111113)var(--lightningcss-dark,#ededed);--muted:var(--lightningcss-light,#62636a)var(--lightningcss-dark,#a1a1aa);--soft:var(--lightningcss-light,#8b8d98)var(--lightningcss-dark,#74747b);--good:var(--lightningcss-light,#087f5b)var(--lightningcss-dark,#3ddc97);--bad:var(--lightningcss-light,#b42318)var(--lightningcss-dark,#ff6b6b);--warn:var(--lightningcss-light,#9a6700)var(--lightningcss-dark,#e8b84a);--blue:var(--lightningcss-light,#1d63d8)var(--lightningcss-dark,#6ea8fe);--focus:var(--lightningcss-light,#111113)var(--lightningcss-dark,#ededed);--series-1:var(--lightningcss-light,#2a78d6)var(--lightningcss-dark,#3987e5);--series-2:var(--lightningcss-light,#1baf7a)var(--lightningcss-dark,#199e70);--series-3:var(--lightningcss-light,#eda100)var(--lightningcss-dark,#c98500);--series-4:var(--lightningcss-light,#008300)var(--lightningcss-dark,#008300);--series-5:var(--lightningcss-light,#e34948)var(--lightningcss-dark,#e66767);--series-6:var(--lightningcss-light,#eb6834)var(--lightningcss-dark,#d95926);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box}html{scrollbar-gutter:stable;overflow-y:scroll}body{background:var(--bg);color:var(--text);letter-spacing:0;margin:0}a{color:inherit}.topbar{border-bottom:1px solid var(--line);background:var(--bg);justify-content:space-between;align-items:center;gap:28px;height:64px;padding:0 clamp(20px,5vw,80px);display:flex}@supports (color:color-mix(in lab, red, red)){.topbar{background:color-mix(in oklch, var(--bg), transparent 4%)}}.topbar{z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:sticky;top:0}.lang-switch{border:1px solid var(--line);background:var(--panel);border-radius:7px;flex:none;align-items:center;display:inline-flex;overflow:hidden}.lang-switch button{border:0;border-right:1px solid var(--line);min-width:44px;height:30px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;font-size:12px;line-height:1}.lang-switch button:last-child{border-right:0}.lang-switch button:hover{color:var(--text)}.lang-switch button.is-active{background:var(--panel-2);color:var(--text);font-weight:620}main{width:min(1120px,100vw - 40px);margin:0 auto;padding:clamp(52px,7vw,82px) 0 72px}.report-slot{margin:0 auto 36px}.name{font-weight:610}.num{font-variant-numeric:tabular-nums;white-space:nowrap;font-feature-settings:"tnum"}.good{color:var(--good)}.bad{color:var(--bad)}.warn,.infra-err{color:var(--warn)}.copy-all-errors{border:1px solid var(--line);background:var(--panel);height:36px;color:var(--muted);cursor:pointer;white-space:nowrap;border-radius:7px;flex-shrink:0;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:13px;transition:color .12s,border-color .12s,background .12s;display:inline-flex}.copy-all-errors svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.copy-all-errors:hover{color:var(--text);border-color:var(--line-strong)}.copy-all-errors.is-copied{color:var(--good);border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.copy-all-errors.is-copied{border-color:color-mix(in oklch, var(--good), var(--line) 40%)}}.copy-all-errors.is-copied{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.copy-all-errors.is-copied{background:color-mix(in oklch, var(--good), transparent 88%)}}.raw-details{border-top:1px solid var(--line);margin-top:16px}@supports (color:color-mix(in lab, red, red)){.raw-details{border-top:1px solid color-mix(in oklch, var(--line), transparent 15%)}}.raw-details{color:var(--muted);padding-top:14px}@supports (color:color-mix(in lab, red, red)){.raw-details{color:color-mix(in oklch, var(--muted), var(--text) 6%)}}.raw-details summary{cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none;font-size:13px;font-weight:560}.raw-details pre{margin-top:12px}.raw-note{color:var(--soft);margin-left:8px;font-weight:400}.reason-empty{color:var(--soft)}.ran-at{color:var(--soft);font-variant-numeric:tabular-nums;margin-top:2px;font-size:11px;display:block}.attempt-status{align-items:center;gap:4px;min-width:0;display:flex}.eval-item-clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.eval-item-clickable:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.eval-item-clickable:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 30%)}}.run-ratio{color:var(--soft)}.eval-attempts{border-left:2px solid var(--accent,var(--line));margin-left:8px;display:grid}@supports (color:color-mix(in lab, red, red)){.eval-attempts{border-left:2px solid color-mix(in oklch, var(--accent,var(--line)), transparent 55%)}}.eval-attempts{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.eval-attempts{background:color-mix(in oklch, var(--panel-2), transparent 55%)}}.eval-attempts .eval-item{padding-left:12px}.eval-attempts .eval-item:last-child{border-bottom:none}.nosource{flex-direction:column;gap:14px;display:flex}.nosource-note{color:var(--muted);border:1px dashed var(--line-strong);padding:9px 12px;font-size:12.5px;line-height:1.55}@supports (color:color-mix(in lab, red, red)){.nosource-note{border:1px dashed color-mix(in oklch, var(--line-strong), transparent 25%)}}.nosource-note{background:var(--panel);border-radius:8px}@supports (color:color-mix(in lab, red, red)){.nosource-note{background:color-mix(in oklch, var(--panel), var(--line) 20%)}}.nosource-block{border:1px solid var(--line);background:var(--panel-2);border-radius:10px;overflow:hidden}.nosource-head{color:var(--muted);background:var(--panel-2);padding:7px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}@supports (color:color-mix(in lab, red, red)){.nosource-head{background:color-mix(in oklch, var(--panel-2), var(--line) 35%)}}.nosource-head{border-bottom:1px solid var(--line)}.nosource-block>.assert-detail,.nosource-block>.transcript{padding:10px 14px}.conv-loading{color:var(--soft);padding:8px 0;font-size:12px}.trace-details{border-bottom:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.trace-details{border-bottom:1px solid color-mix(in oklch, var(--line), transparent 35%)}}.trace-details{padding:4px 0 10px}.trace-details summary{cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none;padding:4px 0;font-size:12px}.trace-details summary:hover{color:var(--text)}.trace{border:1px solid var(--line);margin:8px 0 4px;padding:10px 12px}@supports (color:color-mix(in lab, red, red)){.trace{border:1px solid color-mix(in oklch, var(--line), transparent 20%)}}.trace{background:var(--panel);border-radius:7px}@supports (color:color-mix(in lab, red, red)){.trace{background:color-mix(in oklch, var(--panel), black 6%)}}.trace-span-meta{color:var(--soft);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;font-size:11px}.span-d{border-radius:4px}.span-d>.trace-row{cursor:default}details.span-d>summary.trace-row{cursor:pointer;list-style:none}details.span-d>summary.trace-row::-webkit-details-marker{display:none}details.span-d[open]>summary.trace-row{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){details.span-d[open]>summary.trace-row{background:color-mix(in oklch, var(--panel-2), var(--panel) 10%)}}details.span-d>summary.trace-row:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){details.span-d>summary.trace-row:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.trace-row{grid-template-columns:minmax(140px,.9fr) minmax(0,2fr) 56px;align-items:center;column-gap:12px;height:22px;font-size:12px;display:grid}.span-attrs{border-left:2px solid var(--line-strong);margin:2px 0 6px;padding:6px 8px 10px 16px}@supports (color:color-mix(in lab, red, red)){.span-attrs{border-left:2px solid color-mix(in oklch, var(--line-strong), transparent 30%)}}.span-attrs{font-size:12px}.attr-row{grid-template-columns:minmax(120px,220px) 1fr;column-gap:12px;padding:2px 0;display:grid}.attr-k{color:var(--soft);overflow-wrap:anywhere}.attr-v{color:var(--text);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.attr-io{margin:4px 0}.attr-io .attr-k{text-transform:uppercase;letter-spacing:.05em;margin-bottom:3px;font-size:11px;display:block}.attr-pre{border:1px solid var(--line);background:var(--panel);border-radius:6px;max-height:220px;margin:0;padding:8px 10px;overflow:auto}@supports (color:color-mix(in lab, red, red)){.attr-pre{background:color-mix(in oklch, var(--panel), black 8%)}}.attr-pre{color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45}.trace-label{text-overflow:ellipsis;white-space:nowrap;color:var(--muted);overflow:hidden}@supports (color:color-mix(in lab, red, red)){.trace-label{color:color-mix(in oklch, var(--muted), var(--text) 12%)}}.trace-track{background:var(--panel-2);border-radius:3px;height:12px;position:relative}@supports (color:color-mix(in lab, red, red)){.trace-track{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.trace-bar{background:var(--good);border-radius:3px;min-width:2px;height:12px;position:absolute;top:0}.trace-bar.bad{background:var(--bad)}.trace-bar.k-model{background:oklch(72% .13 250)}.trace-bar.k-tool{background:oklch(74% .14 150)}.trace-bar.k-agent{background:oklch(74% .15 300)}.trace-bar.k-turn{background:oklch(78% .13 90)}.trace-bar.k-other{background:var(--soft)}@supports (color:color-mix(in lab, red, red)){.trace-bar.k-other{background:color-mix(in oklch, var(--soft), var(--panel) 30%)}}.trace-dur{color:var(--soft);text-align:right}.kind-chip{text-transform:uppercase;letter-spacing:.03em;color:var(--panel);vertical-align:middle;border-radius:3px;margin-right:6px;padding:0 5px;font-size:10px;font-weight:600;display:inline-block}.kind-chip.k-model{background:oklch(72% .13 250)}.kind-chip.k-tool{background:oklch(74% .14 150)}.kind-chip.k-agent{background:oklch(74% .15 300)}.kind-chip.k-turn{background:oklch(78% .13 90)}.transcript{flex-direction:column;gap:6px;margin:8px 0 4px;display:flex}.ts-msg{border:1px solid var(--line);border-radius:7px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.ts-msg{border:1px solid color-mix(in oklch, var(--line), transparent 30%)}}.ts-msg{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.ts-msg{background:color-mix(in oklch, var(--panel), black 4%)}}.ts-assistant{border-left:2px solid var(--good)}.ts-user{border-left:2px solid var(--line-strong)}.ts-input{border-left:2px solid var(--warn)}.ts-role{text-transform:uppercase;letter-spacing:.07em;color:var(--soft);margin-bottom:4px;font-size:10px;display:block}.ts-text{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:360px;font-size:13px;line-height:1.55;overflow:auto}.ts-think{font-size:12px}.ts-think>summary{cursor:pointer;color:var(--soft);padding:2px 0;font-style:italic;list-style:none}.ts-think>summary::-webkit-details-marker{display:none}.ts-think>summary:before{content:"✦ "}.ts-think-text{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);max-height:280px;padding:4px 0 6px 16px;font-style:italic;overflow:auto}.ts-tool-d{border:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d{border:1px solid color-mix(in oklch, var(--line), transparent 30%)}}.ts-tool-d{background:var(--panel);border-radius:7px}@supports (color:color-mix(in lab, red, red)){.ts-tool-d{background:color-mix(in oklch, var(--panel), black 6%)}}.ts-tool-d>summary.ts-row{cursor:pointer;grid-template-columns:8px minmax(110px,max-content) 1fr;align-items:center;column-gap:9px;padding:7px 11px;list-style:none;display:grid}.ts-tool-d>summary.ts-row::-webkit-details-marker{display:none}.ts-tool-d[open]>summary.ts-row{border-bottom:1px solid var(--line)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d[open]>summary.ts-row{border-bottom:1px solid color-mix(in oklch, var(--line), transparent 40%)}}.ts-tool-d>summary.ts-row:hover{background:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.ts-tool-d>summary.ts-row:hover{background:color-mix(in oklch, var(--panel-2), var(--panel) 20%)}}.ts-dot{background:var(--good);border-radius:50%;width:8px;height:8px}.ts-dot.bad{background:var(--bad)}.ts-dot.warn{background:var(--warn)}.ts-dot.pending{background:var(--soft)}.ts-tool{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;font-weight:600;overflow:hidden}.ts-preview{color:var(--soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.ts-body{flex-direction:column;gap:8px;padding:8px 11px 10px;display:flex}.ts-field .ts-k{text-transform:uppercase;letter-spacing:.05em;color:var(--soft);margin-bottom:3px;font-size:10px;display:block}.ts-error{border:1px solid var(--bad);border-radius:7px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.ts-error{border:1px solid color-mix(in oklch, var(--bad), transparent 55%)}}.ts-error{color:var(--bad);font-size:12.5px}.ts-skill{font-size:12px}.ts-raw .ts-tool{color:var(--soft)}.ts-skill .ts-text{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ts-compaction{text-align:center;color:var(--soft);text-transform:uppercase;letter-spacing:.06em;padding:2px 0;font-size:11px}pre{border:1px solid var(--line);background:var(--panel);border-radius:7px;margin:0;padding:12px}@supports (color:color-mix(in lab, red, red)){pre{background:color-mix(in oklch, var(--panel), black 8%)}}pre{color:var(--muted);overflow-wrap:anywhere;max-height:360px;font-size:12px;line-height:1.5;overflow:auto}@media (width<=760px){.topbar{padding:0 20px}.lang-switch button{min-width:40px}main{width:min(100vw - 28px,1120px);padding-top:42px}.detail{padding:18px 16px 20px}.config-strip{gap:6px}.detail-kpis{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:10px}.eval-grid-head,.eval-item{grid-template-columns:72px minmax(180px,1fr) minmax(220px,1fr) 76px 78px 72px 50px}}.modal-error{color:var(--bad);background:var(--bad);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}@supports (color:color-mix(in lab, red, red)){.modal-error{background:color-mix(in oklch, var(--bad), transparent 92%)}}.modal-error{border:1px solid var(--bad)}@supports (color:color-mix(in lab, red, red)){.modal-error{border:1px solid color-mix(in oklch, var(--bad), var(--line) 50%)}}.modal-error{white-space:pre-wrap;word-break:break-word;border-radius:8px;margin-bottom:12px;padding:8px 10px}.codeview{flex-direction:column;gap:14px;display:flex}.code-file{border:1px solid var(--line);background:var(--panel);border-radius:10px;overflow:hidden}.code-file-head{color:var(--muted);background:var(--panel-2);padding:7px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}@supports (color:color-mix(in lab, red, red)){.code-file-head{background:color-mix(in oklch, var(--panel-2), var(--line) 35%)}}.code-file-head{border-bottom:1px solid var(--line)}.code-lines{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.7;overflow-x:auto}.code-lines::-webkit-scrollbar{height:8px}.code-lines::-webkit-scrollbar-track{background:0 0}.code-lines::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:4px}.code-lines::-webkit-scrollbar-thumb:hover{background:var(--soft)}.code-line{border-left:3px solid #0000;grid-template-columns:46px 22px minmax(0,1fr) auto;align-items:center;width:max-content;min-width:100%;display:grid}.code-line.line-clickable{cursor:pointer}.code-line.line-clickable:hover{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover{background:color-mix(in oklch, var(--panel), var(--line) 45%)}}.code-line.line-send{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send{background:color-mix(in oklch, var(--blue), var(--panel) 88%)}}.code-line.line-send{border-left-color:var(--blue)}.code-line.line-send .ln{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .ln{background:color-mix(in oklch, var(--blue), var(--panel) 74%)}}.code-line.line-send .ln{color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .ln{color:color-mix(in oklch, var(--blue), var(--text) 45%)}}.code-line.line-send.line-clickable:hover{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send.line-clickable:hover{background:color-mix(in oklch, var(--blue), var(--panel) 82%)}}.code-line.is-open{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.code-line.is-open{background:color-mix(in oklch, var(--panel), var(--line) 34%)}}.code-line.line-pass{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass{background:color-mix(in oklch, var(--good), var(--panel) 58%)}}.code-line.line-pass{border-left-color:var(--good)}.code-line.line-pass .ln{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass .ln{background:color-mix(in oklch, var(--good), var(--panel) 34%)}}.code-line.line-pass .ln{color:var(--text)}.code-line.line-fail{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail{background:color-mix(in oklch, var(--bad), var(--panel) 58%)}}.code-line.line-fail{border-left-color:var(--bad)}.code-line.line-fail .ln{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail .ln{background:color-mix(in oklch, var(--bad), var(--panel) 34%)}}.code-line.line-fail .ln{color:var(--text)}.code-line.line-warn{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn{background:color-mix(in oklch, var(--warn), var(--panel) 58%)}}.code-line.line-warn{border-left-color:var(--warn)}.code-line.line-warn .ln{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn .ln{background:color-mix(in oklch, var(--warn), var(--panel) 34%)}}.code-line.line-warn .ln{color:var(--text)}.code-line.line-pass.line-clickable:hover{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.code-line.line-pass.line-clickable:hover{background:color-mix(in oklch, var(--good), var(--panel) 64%)}}.code-line.line-fail.line-clickable:hover{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.code-line.line-fail.line-clickable:hover{background:color-mix(in oklch, var(--bad), var(--panel) 64%)}}.code-line.line-warn.line-clickable:hover{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.code-line.line-warn.line-clickable:hover{background:color-mix(in oklch, var(--warn), var(--panel) 64%)}}.ln{text-align:right;color:var(--soft);-webkit-user-select:none;user-select:none;justify-content:flex-end;align-self:stretch;align-items:center;padding:1px 8px 1px 0;font-size:11px;display:flex}.gmark{justify-content:center;align-items:center;display:inline-flex}.gstat{flex-shrink:0;width:13px;height:13px}.gstat.good{color:var(--good)}.gstat.bad{color:var(--bad)}.gstat.warn{color:var(--warn)}.gstat.na{color:var(--muted,#8a8f98)}.gsend{width:13px;height:13px;color:var(--blue);flex-shrink:0}.ctext{white-space:pre;color:var(--text);padding-left:8px}.lbadges{white-space:nowrap;justify-self:end;align-items:center;gap:6px;padding-right:12px;display:inline-flex}.abadge{border:1px solid #0000;border-radius:5px;padding:0 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:650}.abadge.good{color:var(--good);border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.abadge.good{border-color:color-mix(in oklch, var(--good), var(--line) 55%)}}.abadge.good{background:var(--good)}@supports (color:color-mix(in lab, red, red)){.abadge.good{background:color-mix(in oklch, var(--good), transparent 90%)}}.abadge.bad{color:var(--bad);border-color:var(--bad)}@supports (color:color-mix(in lab, red, red)){.abadge.bad{border-color:color-mix(in oklch, var(--bad), var(--line) 55%)}}.abadge.bad{background:var(--bad)}@supports (color:color-mix(in lab, red, red)){.abadge.bad{background:color-mix(in oklch, var(--bad), transparent 90%)}}.abadge.warn{color:var(--warn);border-color:var(--warn)}@supports (color:color-mix(in lab, red, red)){.abadge.warn{border-color:color-mix(in oklch, var(--warn), var(--line) 55%)}}.abadge.warn{background:var(--warn)}@supports (color:color-mix(in lab, red, red)){.abadge.warn{background:color-mix(in oklch, var(--warn), transparent 90%)}}.abadge.na{color:var(--muted,#8a8f98);border-color:var(--line);background:var(--muted,#8a8f98)}@supports (color:color-mix(in lab, red, red)){.abadge.na{background:color-mix(in oklch, var(--muted,#8a8f98), transparent 92%)}}.abadge-th{opacity:.55;font-weight:400}.reply-hint{letter-spacing:.02em;color:var(--muted);border:1px solid var(--line-strong);font-size:10px;font-weight:650}@supports (color:color-mix(in lab, red, red)){.reply-hint{border:1px solid color-mix(in oklch, var(--line-strong), transparent 12%)}}.reply-hint{background:var(--panel);border-radius:5px;padding:1px 7px}@supports (color:color-mix(in lab, red, red)){.reply-hint{background:color-mix(in oklch, var(--panel), var(--line) 28%)}}.reply-hint{transition:color .12s,border-color .12s,background .12s}.code-line.line-send .reply-hint{color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{color:color-mix(in oklch, var(--blue), var(--text) 30%)}}.code-line.line-send .reply-hint{border-color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{border-color:color-mix(in oklch, var(--blue), var(--line) 55%)}}.code-line.line-send .reply-hint{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-send .reply-hint{background:color-mix(in oklch, var(--blue), transparent 88%)}}.code-line.line-clickable:hover .reply-hint{color:var(--text);border-color:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover .reply-hint{border-color:color-mix(in oklch, var(--blue), var(--line) 30%)}}.code-line.line-clickable:hover .reply-hint{background:var(--blue)}@supports (color:color-mix(in lab, red, red)){.code-line.line-clickable:hover .reply-hint{background:color-mix(in oklch, var(--blue), transparent 80%)}}.line-chev{width:14px;height:14px;color:var(--soft);transition:transform .12s,color .12s}.line-chev.is-open{transform:rotate(90deg)}.code-line.line-clickable:hover .line-chev{color:var(--text)}.line-detail{font-family:var(--sans,-apple-system, system-ui, "Segoe UI", sans-serif);white-space:normal;background:var(--panel);padding:10px 16px 12px 60px}@supports (color:color-mix(in lab, red, red)){.line-detail{background:color-mix(in oklch, var(--panel), var(--line) 22%)}}.line-detail{border-left:3px solid var(--line-strong);font-size:12.5px}.reply-panel{border-left-color:var(--blue);flex-direction:column;gap:9px;display:flex}@supports (color:color-mix(in lab, red, red)){.reply-panel{border-left-color:color-mix(in oklch, var(--blue), var(--line) 40%)}}.reply-role{text-transform:uppercase;letter-spacing:.05em;color:var(--blue);margin-bottom:2px;font-size:10px;display:block}.reply-text{color:var(--text);white-space:pre-wrap;word-break:break-word}.reply-think{color:var(--muted);font-size:12px}.reply-think summary{cursor:pointer;-webkit-user-select:none;user-select:none}.reply-think-text{white-space:pre-wrap;color:var(--soft);margin-top:4px;padding-left:4px}.reply-tool{color:var(--text);flex-wrap:wrap;gap:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;display:flex}.reply-tool-name{color:var(--warn)}.reply-tool-out{color:var(--muted)}.reply-err{color:var(--bad);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.reply-skill{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.reply-user .reply-text{color:var(--muted);white-space:pre-wrap;word-break:break-word}.reply-empty{color:var(--soft)}.assert-detail{flex-direction:column;gap:9px;display:flex}.assert-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:8px;display:grid}.assert-name{color:var(--text);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.assert-sev{color:var(--soft);text-transform:uppercase;letter-spacing:.04em;font-size:10px}.assert-score{color:var(--muted);white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.assert-reason{color:var(--muted);white-space:pre-wrap;grid-column:1/-1;font-size:12px}.assert-evidence{grid-column:1/-1;margin-top:2px}.assert-evidence>summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--soft);letter-spacing:.02em;font-size:11px}.assert-evidence>summary:hover{color:var(--text)}.assert-evidence-pre{color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;background:var(--panel);margin:6px 0 0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;line-height:1.5}@supports (color:color-mix(in lab, red, red)){.assert-evidence-pre{background:color-mix(in oklch, var(--panel), var(--line) 24%)}}.assert-evidence-pre{border:1px solid var(--line);border-radius:7px;max-height:260px;overflow-y:auto}.code-orphans{border:1px solid var(--line);border-radius:10px;padding:10px 12px}.code-orphans-head{color:var(--muted);margin-bottom:8px;font-size:11px}.modal-sect{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-size:11px;font-weight:660}.attempt-asserts{margin-bottom:14px}.attempt-asserts-open{border:1px solid var(--line);background:var(--panel);border-radius:10px;margin-top:6px;overflow:hidden}.attempt-asserts .assert-detail{background:0 0;border-left:0;padding:10px 12px}.assert-reason{max-height:180px;overflow-y:auto}.fail-row{border-bottom:1px solid var(--line)}.fail-row:last-child{border-bottom:0}.fail-sum{cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;padding:8px 12px;list-style:none;display:flex}.fail-sum::-webkit-details-marker{display:none}.fail-sum:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;align-self:center;width:0;height:0;transition:transform .12s}.fail-row[open]>.fail-sum:before{transform:rotate(90deg)}.fail-sum:hover{background:var(--panel)}@supports (color:color-mix(in lab, red, red)){.fail-sum:hover{background:color-mix(in oklch, var(--panel), var(--line) 30%)}}.fail-name{color:var(--text);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.fail-matcher{color:var(--muted);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px}.fail-body{flex-direction:column;gap:6px;padding:2px 12px 10px 24px;display:flex}.assert-loc{color:var(--soft);white-space:nowrap;margin-left:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.asserts-passed{margin-top:8px}.asserts-passed>summary,.asserts-passed-group>summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:12px}.asserts-passed>summary:hover,.asserts-passed-group>summary:hover{color:var(--text)}.asserts-passed-group{margin:6px 0 0 14px}.asserts-passed-group>.assert-detail{margin-top:4px}.attempt-timing{margin:14px 0}summary.timing-sum{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;list-style:none;display:flex}summary.timing-sum::-webkit-details-marker{display:none}summary.timing-sum:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;width:0;height:0;transition:transform .12s}details[open]>summary.timing-sum:before{transform:rotate(90deg)}summary.timing-sum:hover .modal-sect{color:var(--text)}.timing-sum .modal-sect{margin-bottom:0}.phase-bar{border-radius:4px;gap:1px;height:8px;margin:7px 0 8px;display:flex;overflow:hidden}.phase-seg{flex-basis:0;min-width:2px}.phase-seg-1{background:var(--series-1)}.phase-seg-2{background:var(--series-2)}.phase-seg-3{background:var(--series-3)}.phase-seg-4{background:var(--series-4)}.phase-seg-5{background:var(--series-5)}.phase-seg-6{background:var(--series-6)}.phase-seg-bad{background:var(--bad)}.phase-list,.timing-kids{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.timing-kids{margin-top:2px;padding-left:18px}.phase-row,.tnode-row{align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.7;display:flex}summary.phase-row,summary.tnode-row{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}summary.phase-row::-webkit-details-marker{display:none}summary.tnode-row::-webkit-details-marker{display:none}summary.phase-row:before,summary.tnode-row:before{content:"";border-left:4px solid var(--soft);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;flex-shrink:0;width:0;height:0;transition:transform .12s}details[open]>summary.phase-row:before,details[open]>summary.tnode-row:before{transform:rotate(90deg)}li.phase-row:before,li.tnode-row:before{content:"";flex-shrink:0;width:4px}.phase-dot{border-radius:2px;flex-shrink:0;width:8px;height:8px}.phase-dot-none{background:0 0}.phase-name{color:var(--text);white-space:nowrap;flex-shrink:0;width:168px}.phase-dur{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.phase-fail{color:var(--bad);font-weight:650}.phase-kids{color:var(--soft);border:1px solid var(--line);border-radius:999px;padding:0 6px;font-size:10px;line-height:1.5}.tnode-label{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;overflow:hidden}.tnode-meta{color:var(--soft);padding:3px 0 3px 18px;font-size:11px}.tnode-trace{margin:4px 0 6px 18px}.phase-closing{margin-top:8px}.phase-closing-head{color:var(--soft);margin-bottom:2px;font-size:11px}.meta-chips{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.meta-chip{color:var(--muted);border:1px solid var(--line);background:var(--panel);border-radius:6px;padding:3px 9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.meta-chip b{color:var(--text);font-weight:640}.tok-comment{color:var(--soft);font-style:italic}.tok-str{color:var(--lightningcss-light,#0a7d3c)var(--lightningcss-dark,#7ee787)}.tok-kw{color:var(--lightningcss-light,#9333ea)var(--lightningcss-dark,#c792ea)}.tok-num{color:var(--lightningcss-light,#b25000)var(--lightningcss-dark,#f0a36b)}.tok-fn{color:var(--lightningcss-light,#0b62d6)var(--lightningcss-dark,#82aaff)}.shell-links{align-items:center;gap:8px;margin-left:auto;display:flex}.shell-links a{color:var(--soft);align-items:center;gap:6px;padding:6px 4px;font-size:13px;text-decoration:none;display:inline-flex}.shell-links a:hover{color:var(--text)}.shell-link-icon{align-items:center;display:inline-flex}.shell-link-icon svg{fill:currentColor;width:14px;height:14px;display:block}.site-footer{color:var(--soft);flex-wrap:wrap;justify-content:center;align-items:baseline;gap:12px;padding:24px 24px 32px;font-size:12px;display:flex}.nre-page-error pre{white-space:pre-wrap}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}