eduevidence 5.2.0 → 6.0.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 (276) hide show
  1. package/README.md +54 -42
  2. package/README.zh-CN.md +51 -28
  3. package/SKILL.md +390 -133
  4. package/agents/openai.yaml +4 -0
  5. package/assets/readme/controlled-execution.svg +34 -0
  6. package/assets/readme/logo.png +0 -0
  7. package/assets/readme/research-workflow.svg +56 -0
  8. package/assets/readme/studio-graph.png +0 -0
  9. package/assets/readme/studio-overview.png +0 -0
  10. package/assets/readme/studio-reports.png +0 -0
  11. package/autoevolve/config.yaml +17 -0
  12. package/autoevolve/program.md +25 -0
  13. package/autoevolve/protected.manifest.yaml +34 -0
  14. package/benchmarks/adversarial/cases.jsonl +7 -0
  15. package/benchmarks/evidence-library.json +5268 -0
  16. package/benchmarks/partitions.json +8 -0
  17. package/docs/architecture.md +220 -0
  18. package/docs/autoresearch-evolution-plan.md +2903 -0
  19. package/docs/autoresearch-implementation-status.md +101 -0
  20. package/docs/demo-storyboard.md +20 -0
  21. package/docs/demo-workplace-ai.md +92 -0
  22. package/docs/demo.md +32 -0
  23. package/docs/install-guide.md +150 -0
  24. package/docs/orchestration-role-model.md +1254 -0
  25. package/docs/release-closeout/README.md +17 -0
  26. package/docs/release-closeout/frontend-acceptance.md +23 -0
  27. package/docs/release-closeout/issues.md +19 -0
  28. package/docs/release-closeout/verification.md +28 -0
  29. package/docs/release-contract.md +108 -0
  30. package/docs/research-studio-guide.zh-CN.md +166 -0
  31. package/eduevidence_cli.py +17 -11
  32. package/engine/_resources.py +13 -0
  33. package/engine/autoevolve/__init__.py +3 -0
  34. package/engine/autoevolve/agent_view.py +167 -0
  35. package/engine/autoevolve/core.py +357 -0
  36. package/engine/autoevolve/events.py +11 -0
  37. package/engine/autoevolve/git_workspace.py +77 -0
  38. package/engine/autoevolve/projection.py +23 -0
  39. package/engine/autoevolve/runner.py +413 -0
  40. package/engine/autoevolve/trust.py +146 -0
  41. package/engine/autoresearch/__init__.py +6 -0
  42. package/engine/autoresearch/commit.py +132 -0
  43. package/engine/autoresearch/contracts.py +126 -0
  44. package/engine/autoresearch/controller.py +207 -0
  45. package/engine/autoresearch/events.py +12 -0
  46. package/engine/autoresearch/gap_priority.py +168 -0
  47. package/engine/autoresearch/projection.py +30 -0
  48. package/engine/autoresearch/research_memory.py +59 -0
  49. package/engine/autoresearch/saturation.py +91 -0
  50. package/engine/briefs.py +2 -1
  51. package/engine/capabilities.py +1 -0
  52. package/engine/contracts.py +3 -1
  53. package/engine/evidencecore.py +7 -5
  54. package/engine/gaps.py +90 -51
  55. package/engine/judge_pack.py +65 -0
  56. package/engine/library_builtin.py +3 -1
  57. package/engine/living.py +2 -1
  58. package/engine/meta_synthesis.py +3 -1
  59. package/engine/orchestration.py +460 -0
  60. package/engine/pilot.py +2 -1
  61. package/engine/project.py +2 -2
  62. package/engine/research_service.py +113 -0
  63. package/engine/studio_read_model.py +400 -0
  64. package/engine/tribunal.py +1 -2
  65. package/engine/update.py +1 -0
  66. package/engine/versions.py +1 -1
  67. package/engine/worker_result.py +109 -0
  68. package/engine/workflows.py +70 -0
  69. package/examples/ai-coding-assistant-evidence/EduEvidence_Report.html +1720 -0
  70. package/examples/ai-coding-assistant-evidence/artifact_manifest.json +15 -0
  71. package/examples/ai-coding-assistant-evidence/citation_check.json +79 -0
  72. package/examples/ai-coding-assistant-evidence/claims.jsonl +12 -0
  73. package/examples/ai-coding-assistant-evidence/evaluation.json +35 -0
  74. package/examples/ai-coding-assistant-evidence/evidence.jsonl +12 -0
  75. package/examples/ai-coding-assistant-evidence/frame.json +48 -0
  76. package/examples/ai-coding-assistant-evidence/intervention.json +51 -0
  77. package/examples/ai-coding-assistant-evidence/methodology.json +36 -0
  78. package/examples/ai-coding-assistant-evidence/raw_verdict.json +86 -0
  79. package/examples/ai-coding-assistant-evidence/report_spec.json +219 -0
  80. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_academic.html +2614 -0
  81. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_claude.html +2614 -0
  82. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab-dark.html +2614 -0
  83. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab.html +2614 -0
  84. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_presentation.html +2614 -0
  85. package/examples/ai-coding-assistant-evidence/reports-5themes/report_academic.html +1720 -0
  86. package/examples/ai-coding-assistant-evidence/reports-5themes/report_claude.html +1720 -0
  87. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab-dark.html +1720 -0
  88. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab.html +1720 -0
  89. package/examples/ai-coding-assistant-evidence/reports-5themes/report_presentation.html +1720 -0
  90. package/examples/ai-coding-assistant-evidence/result.json +1453 -0
  91. package/examples/ai-coding-assistant-evidence/result.zh.json +1453 -0
  92. package/examples/ai-coding-assistant-evidence/sources.jsonl +8 -0
  93. package/examples/ai-coding-assistant-evidence/verdict.json +103 -0
  94. package/examples/workplace-ai-assistant/claims.jsonl +4 -0
  95. package/examples/workplace-ai-assistant/evaluation.json +19 -0
  96. package/examples/workplace-ai-assistant/evidence.jsonl +4 -0
  97. package/examples/workplace-ai-assistant/evidence_graph.json +444 -0
  98. package/examples/workplace-ai-assistant/frame.json +41 -0
  99. package/examples/workplace-ai-assistant/intervention.json +27 -0
  100. package/examples/workplace-ai-assistant/legacy-link-check.json +16 -0
  101. package/examples/workplace-ai-assistant/methodology.json +60 -0
  102. package/examples/workplace-ai-assistant/report_spec.json +55 -0
  103. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_academic.html +2484 -0
  104. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_claude.html +2484 -0
  105. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab-dark.html +2484 -0
  106. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab.html +2484 -0
  107. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_presentation.html +2484 -0
  108. package/examples/workplace-ai-assistant/result.json +553 -0
  109. package/examples/workplace-ai-assistant/result.zh.json +553 -0
  110. package/examples/workplace-ai-assistant/search_log.json +19 -0
  111. package/examples/workplace-ai-assistant/sources.jsonl +3 -0
  112. package/examples/workplace-ai-assistant/validation_result.json +9 -0
  113. package/examples/workplace-ai-assistant/verdict.json +52 -0
  114. package/install.sh +7 -7
  115. package/integrations/orchestration_dispatch.py +146 -0
  116. package/package.json +37 -3
  117. package/pyproject.toml +11 -20
  118. package/references/autoresearch.md +30 -0
  119. package/references/evaluation-policy.md +24 -0
  120. package/references/orchestration.md +22 -0
  121. package/references/scientific-invariants.md +19 -0
  122. package/retrieval/audit.py +154 -0
  123. package/schemas/intervention.schema.json +106 -21
  124. package/schemas/report-result.schema.json +9 -1
  125. package/schemas/v2/project.schema.json +2 -2
  126. package/schemas/v2/run.schema.json +1 -1
  127. package/schemas/vNext/autoevolve-session.schema.json +1 -0
  128. package/schemas/vNext/eval-snapshot.schema.json +1 -0
  129. package/schemas/vNext/execution-plan.schema.json +1 -0
  130. package/schemas/vNext/gap-priority.schema.json +1 -0
  131. package/schemas/vNext/negative-search-record.schema.json +1 -0
  132. package/schemas/vNext/research-iteration.schema.json +1 -0
  133. package/schemas/vNext/research-strategy.schema.json +1 -0
  134. package/schemas/vNext/skill-experiment.schema.json +1 -0
  135. package/schemas/vNext/task-spec.schema.json +1 -0
  136. package/schemas/vNext/worker-result.schema.json +1 -0
  137. package/scripts/benchmark_judge.py +2 -2
  138. package/scripts/benchmark_v3.py +26 -43
  139. package/scripts/build_esl_artifacts.py +2 -2
  140. package/scripts/build_evidence_library.py +2 -2
  141. package/scripts/build_gh_pages.py +98 -0
  142. package/scripts/build_readme_diagrams.py +72 -0
  143. package/scripts/build_report_variants.py +85 -0
  144. package/scripts/check_autoresearch_invariants.py +95 -0
  145. package/scripts/daily_evolve.py +30 -0
  146. package/scripts/dashboard_server.py +130 -101
  147. package/scripts/did_regression.py +5 -30
  148. package/scripts/enrich_projects_human_and_lieflat.py +1 -1
  149. package/scripts/generate_metrics.py +4 -3
  150. package/scripts/generate_new_projects.py +1 -1
  151. package/scripts/orchestrator.py +172 -18
  152. package/scripts/rebake_all_5themes.py +1 -2
  153. package/scripts/research_auto_cli.py +475 -0
  154. package/scripts/run_workspace.py +17 -7
  155. package/scripts/search_provenance.py +64 -0
  156. package/scripts/serve_web.py +9 -10
  157. package/scripts/skill_lint.py +1 -1
  158. package/scripts/skill_payload.py +78 -0
  159. package/scripts/validate_schema.py +15 -1
  160. package/scripts/vnext_cli.py +133 -0
  161. package/setup.py +12 -0
  162. package/skill/roles/registry.yaml +45 -0
  163. package/skill/sub-skills/report-generation/SKILL.md +12 -6
  164. package/skill/task-briefs/applicability.md +3 -0
  165. package/skill/task-briefs/projection.md +3 -0
  166. package/skill/workflows/decision-and-pilot.md +10 -0
  167. package/skill/workflows/evaluate-and-update.md +10 -0
  168. package/skill/workflows/evidence-review.md +13 -0
  169. package/visualization/eduevidence-report/assets/base.css +2 -2
  170. package/visualization/eduevidence-report/assets/reader.css +752 -0
  171. package/visualization/eduevidence-report/assets/reader.js +132 -0
  172. package/visualization/eduevidence-report/references/chart-selection-catalog.md +109 -0
  173. package/visualization/eduevidence-report/references/lieflat-composition.md +3 -1
  174. package/visualization/eduevidence-report/scripts/build_report.py +58 -65
  175. package/visualization/eduevidence-report/scripts/lieflat_engine.py +24 -100
  176. package/visualization/eduevidence-report/themes/academic.css +1 -1
  177. package/visualization/eduevidence-report/themes/claude.css +1 -1
  178. package/visualization/eduevidence-report/themes/datalab-dark.css +2 -2
  179. package/visualization/eduevidence-report/themes/datalab.css +2 -2
  180. package/visualization/eduevidence-report/themes/presentation.css +2 -2
  181. package/web/README.md +18 -0
  182. package/web/index.html +53 -0
  183. package/web/studio/THIRD_PARTY_LICENSES.txt +146 -0
  184. package/web/studio/assets/index-CzXocaGv.css +1 -0
  185. package/web/studio/assets/index-pa7jD7n4.js +230 -0
  186. package/web/studio/config.json +1 -0
  187. package/web/studio/index.html +14 -0
  188. package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
  189. package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
  190. package/engine/__pycache__/bias.cpython-312.pyc +0 -0
  191. package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
  192. package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
  193. package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
  194. package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
  195. package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
  196. package/engine/__pycache__/events.cpython-312.pyc +0 -0
  197. package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
  198. package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
  199. package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
  200. package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
  201. package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
  202. package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
  203. package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
  204. package/engine/__pycache__/ids.cpython-312.pyc +0 -0
  205. package/engine/__pycache__/library.cpython-312.pyc +0 -0
  206. package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
  207. package/engine/__pycache__/living.cpython-312.pyc +0 -0
  208. package/engine/__pycache__/log.cpython-312.pyc +0 -0
  209. package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
  210. package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
  211. package/engine/__pycache__/migration.cpython-312.pyc +0 -0
  212. package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
  213. package/engine/__pycache__/paths.cpython-312.pyc +0 -0
  214. package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
  215. package/engine/__pycache__/planner.cpython-312.pyc +0 -0
  216. package/engine/__pycache__/project.cpython-312.pyc +0 -0
  217. package/engine/__pycache__/projections.cpython-312.pyc +0 -0
  218. package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
  219. package/engine/__pycache__/run.cpython-312.pyc +0 -0
  220. package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
  221. package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
  222. package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
  223. package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
  224. package/engine/__pycache__/update.cpython-312.pyc +0 -0
  225. package/engine/__pycache__/versions.cpython-312.pyc +0 -0
  226. package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
  227. package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
  228. package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
  229. package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
  230. package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
  231. package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
  232. package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
  233. package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
  234. package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
  235. package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
  236. package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
  237. package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  238. package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
  239. package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
  240. package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
  241. package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
  242. package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
  243. package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
  244. package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
  245. package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
  246. package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
  247. package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
  248. package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
  249. package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
  250. package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
  251. package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
  252. package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
  253. package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
  254. package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
  255. package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
  256. package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
  257. package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
  258. package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
  259. package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
  260. package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
  261. package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
  262. package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
  263. package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
  264. package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
  265. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
  266. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
  267. package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
  268. package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
  269. package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
  270. package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
  271. package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
  272. package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
  273. package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
  274. package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
  275. package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
  276. package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
@@ -0,0 +1,752 @@
1
+ /* Reading system: shared semantics; the five original theme identities remain. */
2
+ :root {
3
+ --reader-line: color-mix(in srgb, var(--text) 14%, transparent);
4
+ --reader-muted: color-mix(in srgb, var(--text) 74%, var(--bg));
5
+ }
6
+ html {
7
+ scroll-padding-top: 100px;
8
+ }
9
+ html,
10
+ body {
11
+ overflow-x: clip;
12
+ }
13
+ button,
14
+ a,
15
+ input,
16
+ select,
17
+ summary {
18
+ -webkit-tap-highlight-color: transparent;
19
+ }
20
+ button:focus-visible,
21
+ a:focus-visible,
22
+ summary:focus-visible,
23
+ input:focus-visible,
24
+ select:focus-visible,
25
+ [tabindex]:focus-visible {
26
+ outline: 2px solid var(--primary);
27
+ outline-offset: 4px;
28
+ }
29
+ .reader-progress {
30
+ position: fixed;
31
+ top: 0;
32
+ left: 0;
33
+ right: 0;
34
+ height: 3px;
35
+ z-index: 80;
36
+ pointer-events: none;
37
+ }
38
+ .reader-progress > span {
39
+ display: block;
40
+ width: 100%;
41
+ height: 100%;
42
+ background: var(--primary);
43
+ transform: scaleX(0);
44
+ transform-origin: left;
45
+ }
46
+ :root[data-theme] .controls.reader-toolbar {
47
+ position: sticky;
48
+ top: 0;
49
+ z-index: 60;
50
+ display: flex;
51
+ justify-content: space-between;
52
+ gap: 16px;
53
+ align-items: center;
54
+ width: 100%;
55
+ max-width: none;
56
+ min-height: 70px;
57
+ margin: 0;
58
+ padding: 12px clamp(18px, 4vw, 60px);
59
+ border: 0;
60
+ border-bottom: 1px solid var(--reader-line);
61
+ border-radius: 0;
62
+ background: var(--bg);
63
+ box-shadow: none;
64
+ backdrop-filter: none;
65
+ }
66
+ .reader-home {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 14px;
70
+ color: var(--text);
71
+ text-decoration: none;
72
+ font-family: var(--font-head);
73
+ font-size: 17px;
74
+ font-weight: 600;
75
+ }
76
+ .reader-home .generated-theme {
77
+ font: 10px var(--font-ui);
78
+ letter-spacing: 0.03em;
79
+ font-weight: 400;
80
+ color: var(--reader-muted);
81
+ padding-left: 14px;
82
+ border-left: 1px solid var(--reader-line);
83
+ }
84
+ .reader-tools,
85
+ .reader-view-controls {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: 8px;
89
+ }
90
+ .reader-tools .lang-switcher {
91
+ gap: 4px;
92
+ }
93
+ .reader-tools .lang-switcher > span {
94
+ display: none;
95
+ }
96
+ .reader-print {
97
+ font: 12px var(--font-ui);
98
+ padding: 7px 10px;
99
+ background: transparent;
100
+ color: var(--text);
101
+ border: 1px solid var(--reader-line);
102
+ border-radius: var(--radius-sm);
103
+ cursor: pointer;
104
+ }
105
+ .reader-view-controls {
106
+ padding: 3px;
107
+ background: var(--surface2);
108
+ border: 1px solid var(--reader-line);
109
+ border-radius: var(--radius-sm);
110
+ }
111
+ :root[data-theme] .reader-view-controls .report-view-btn {
112
+ margin: 0;
113
+ border: 0;
114
+ border-radius: calc(var(--radius-sm) / 2);
115
+ background: transparent;
116
+ color: var(--reader-muted);
117
+ padding: 7px 14px;
118
+ font: 12px var(--font-ui);
119
+ min-height: 32px;
120
+ cursor: pointer;
121
+ }
122
+ :root[data-theme] .reader-view-controls .report-view-btn.active {
123
+ background: var(--surface);
124
+ color: var(--text);
125
+ box-shadow: 0 1px 3px #0000000a;
126
+ }
127
+ :root[data-theme] .report-shell {
128
+ padding-top: 52px;
129
+ padding-bottom: 80px;
130
+ }
131
+ :root[data-theme] .report-header {
132
+ width: 100%;
133
+ max-width: 100%;
134
+ margin: 0 auto 36px;
135
+ border-bottom: 1px solid var(--reader-line);
136
+ padding: 0 0 30px;
137
+ background: transparent;
138
+ box-shadow: none;
139
+ border-top: 0;
140
+ border-left: 0;
141
+ border-right: 0;
142
+ border-radius: 0;
143
+ }
144
+ :root[data-theme] .report-header h1 {
145
+ font-size: clamp(1.65rem, 2.7vw, 2.55rem);
146
+ line-height: 1.43;
147
+ letter-spacing: -0.02em;
148
+ max-width: 1020px;
149
+ text-wrap: pretty;
150
+ margin: 18px 0;
151
+ font-weight: 500;
152
+ }
153
+ :root[data-theme] .report-brand-row {
154
+ gap: 12px;
155
+ }
156
+ .report-brand {
157
+ font-size: 11px;
158
+ letter-spacing: 0.12em;
159
+ }
160
+ :root[data-theme] .generated-theme-chip {
161
+ display: none;
162
+ }
163
+ :root[data-theme] .data-origin-chip {
164
+ font-size: 10px;
165
+ font-family: var(--font-ui);
166
+ font-weight: 400;
167
+ background: var(--surface2);
168
+ border: 1px solid var(--reader-line);
169
+ color: var(--reader-muted);
170
+ border-radius: var(--radius-sm);
171
+ }
172
+ :root[data-theme] .report-header .meta {
173
+ font: 12px/1.9 var(--font-ui);
174
+ color: var(--reader-muted);
175
+ margin: 0;
176
+ }
177
+ :root[data-theme] .report-header .report-view-switcher {
178
+ display: none;
179
+ }
180
+ :root[data-theme] .report-page-brief {
181
+ display: grid;
182
+ grid-template-columns: 160px minmax(0, 1fr);
183
+ gap: 40px;
184
+ align-items: start;
185
+ }
186
+ :root[data-theme] .report-page[hidden] {
187
+ display: none !important;
188
+ }
189
+ .brief-navigation {
190
+ position: sticky;
191
+ top: 102px;
192
+ display: flex;
193
+ flex-direction: column;
194
+ gap: 6px;
195
+ font: 12px/1.6 var(--font-ui);
196
+ padding-top: 8px;
197
+ }
198
+ .brief-navigation a {
199
+ display: flex;
200
+ gap: 10px;
201
+ color: var(--reader-muted);
202
+ text-decoration: none;
203
+ padding: 10px 8px;
204
+ border-left: 2px solid transparent;
205
+ }
206
+ .brief-navigation a > span {
207
+ flex: 0 0 auto;
208
+ min-width: 18px;
209
+ white-space: nowrap;
210
+ font: 10px/1.9 var(--font-mono);
211
+ opacity: 0.8;
212
+ }
213
+ .brief-navigation a:hover,
214
+ .brief-navigation a.active {
215
+ color: var(--primary);
216
+ background: var(--surface2);
217
+ border-left-color: var(--primary);
218
+ }
219
+ .brief-reading-content {
220
+ min-width: 0;
221
+ }
222
+ :root[data-theme] .brief-block {
223
+ max-width: none;
224
+ width: 100%;
225
+ margin: 0 0 60px;
226
+ border: 0;
227
+ padding: 0;
228
+ box-shadow: none;
229
+ background: transparent;
230
+ grid-column: auto;
231
+ }
232
+ :root[data-theme] .brief-block-header {
233
+ max-width: none;
234
+ padding: 0 0 16px;
235
+ margin: 0 0 22px;
236
+ border-bottom: 1px solid var(--reader-line);
237
+ }
238
+ :root[data-theme] .brief-block-header h2 {
239
+ font-family: var(--font-head);
240
+ font-size: 1.35rem;
241
+ font-weight: 500;
242
+ margin: 0 0 7px;
243
+ }
244
+ :root[data-theme] .brief-block-header p {
245
+ font-size: 13px;
246
+ line-height: 1.85;
247
+ max-width: 76ch;
248
+ color: var(--reader-muted);
249
+ }
250
+ :root[data-theme] .brief-block .brief-block-body {
251
+ width: 100%;
252
+ margin: 0;
253
+ transform: none;
254
+ }
255
+ :root[data-theme] .brief-decision .brief-block-header {
256
+ display: none;
257
+ }
258
+ :root[data-theme] .decision-hero {
259
+ padding: 26px;
260
+ border: 1px solid var(--reader-line);
261
+ border-radius: var(--radius);
262
+ background: var(--surface);
263
+ box-shadow: none;
264
+ }
265
+ :root[data-theme] .hero-decision {
266
+ align-items: center;
267
+ gap: 10px 16px;
268
+ flex-wrap: wrap;
269
+ }
270
+ :root[data-theme] .hero-decision .eyebrow {
271
+ font-size: 10px;
272
+ letter-spacing: 0.1em;
273
+ color: var(--reader-muted);
274
+ }
275
+ :root[data-theme] .decision-value {
276
+ font-size: 1.65rem;
277
+ line-height: 1.35;
278
+ }
279
+ :root[data-theme] .confidence-badge {
280
+ font-size: 11px;
281
+ color: var(--text);
282
+ border: 1px solid var(--reader-line);
283
+ background: var(--uncertain-soft, var(--surface2));
284
+ padding: 4px 9px;
285
+ }
286
+ :root[data-theme] .hero-rationale {
287
+ font-size: 14px;
288
+ line-height: 1.9;
289
+ margin: 20px 0;
290
+ max-width: 78ch;
291
+ }
292
+ :root[data-theme] .hero-insights {
293
+ display: grid;
294
+ grid-template-columns: repeat(2, minmax(0, 1fr));
295
+ gap: 0;
296
+ border: 0;
297
+ border-top: 1px solid var(--reader-line);
298
+ }
299
+ :root[data-theme] .hero-insight {
300
+ border: 0;
301
+ border-radius: 0;
302
+ padding: 20px 0 12px;
303
+ min-height: 0;
304
+ background: transparent;
305
+ box-shadow: none;
306
+ }
307
+ :root[data-theme] .hero-insight:nth-child(2n + 1) {
308
+ padding-right: 22px;
309
+ }
310
+ :root[data-theme] .hero-insight:nth-child(2n) {
311
+ padding-left: 22px;
312
+ border-left: 1px solid var(--reader-line);
313
+ }
314
+ :root[data-theme] .hero-insight > span {
315
+ font: 11px/1.6 var(--font-ui);
316
+ letter-spacing: 0.03em;
317
+ color: var(--reader-muted);
318
+ margin-bottom: 9px;
319
+ }
320
+ :root[data-theme] .hero-insight-text {
321
+ font-size: 13px;
322
+ line-height: 1.85;
323
+ }
324
+ :root[data-theme] .hero-provenance {
325
+ border-top: 1px solid var(--reader-line);
326
+ padding-top: 16px;
327
+ margin-bottom: 0;
328
+ font-size: 11px;
329
+ color: var(--reader-muted);
330
+ }
331
+ :root[data-theme] .tribunal-grid {
332
+ display: grid;
333
+ grid-template-columns: repeat(2, minmax(0, 1fr));
334
+ gap: 14px;
335
+ }
336
+ :root[data-theme] .tribunal-card {
337
+ border: 1px solid var(--reader-line);
338
+ border-top: 2px solid var(--border);
339
+ padding: 20px;
340
+ border-radius: var(--radius-sm);
341
+ box-shadow: none;
342
+ }
343
+ :root[data-theme] .tribunal-card.supported {
344
+ border-top-color: var(--support);
345
+ }
346
+ :root[data-theme] .tribunal-card.uncertain,
347
+ :root[data-theme] .tribunal-card.missing {
348
+ border-top-color: var(--uncertain);
349
+ }
350
+ :root[data-theme] .tribunal-card.contradicted {
351
+ border-top-color: var(--contradict);
352
+ }
353
+ :root[data-theme] .tribunal-card p {
354
+ line-height: 1.9;
355
+ }
356
+ .tribunal-card li + li {
357
+ margin-top: 12px;
358
+ }
359
+ :root[data-theme] .dir {
360
+ border-radius: var(--radius-sm);
361
+ font-size: 11px;
362
+ border: 1px solid var(--reader-line);
363
+ }
364
+ :root[data-theme] .dir.pos {
365
+ background: color-mix(in srgb, var(--support) 14%, var(--surface));
366
+ color: var(--text);
367
+ }
368
+ :root[data-theme] .dir.neg {
369
+ background: color-mix(in srgb, var(--contradict) 14%, var(--surface));
370
+ color: var(--text);
371
+ }
372
+ :root[data-theme] .dir.neu {
373
+ background: color-mix(in srgb, var(--uncertain) 14%, var(--surface));
374
+ color: var(--text);
375
+ }
376
+ :root[data-theme] .full-report-layout {
377
+ display: grid;
378
+ grid-template-columns: 180px minmax(0, 1fr);
379
+ gap: 36px;
380
+ }
381
+ :root[data-theme] .full-report-intro {
382
+ margin: 0 0 30px 216px;
383
+ max-width: none;
384
+ }
385
+ :root[data-theme] .full-report-toc {
386
+ top: 102px;
387
+ max-height: calc(100vh - 125px);
388
+ overflow-y: auto;
389
+ }
390
+ :root[data-theme] .full-report-content {
391
+ min-width: 0;
392
+ width: 100%;
393
+ max-width: none;
394
+ overflow-wrap: anywhere;
395
+ }
396
+ :root[data-theme] .report-section {
397
+ margin-bottom: 56px;
398
+ }
399
+ .report-section {
400
+ scroll-margin-top: 100px;
401
+ }
402
+ :root[data-theme] .full-report-content .section-data > .table-wrap,
403
+ :root[data-theme] .full-report-content .section-data > .matrix-controls,
404
+ :root[data-theme] .full-report-content .section-data > .trace-chain,
405
+ :root[data-theme] .full-report-content .section-data > .outcome-separation {
406
+ width: 100%;
407
+ margin-left: 0;
408
+ transform: none;
409
+ }
410
+ :root[data-theme] .report-section p,
411
+ :root[data-theme] .report-section li {
412
+ line-height: 1.9;
413
+ }
414
+ :root[data-theme] .table-wrap {
415
+ border: 1px solid var(--reader-line);
416
+ border-radius: var(--radius-sm);
417
+ overflow-x: auto;
418
+ overscroll-behavior-inline: contain;
419
+ }
420
+ :root[data-theme] .data-table {
421
+ font-size: 12px;
422
+ line-height: 1.75;
423
+ }
424
+ :root[data-theme] .data-table th {
425
+ font-size: 11px;
426
+ font-weight: 600;
427
+ color: var(--reader-muted);
428
+ }
429
+ :root[data-theme] .data-table td,
430
+ :root[data-theme] .data-table th {
431
+ border-color: var(--reader-line);
432
+ padding: 12px;
433
+ }
434
+ :root[data-theme] .matrix-controls input,
435
+ :root[data-theme] .matrix-controls select {
436
+ background: var(--surface);
437
+ color: var(--text);
438
+ border: 1px solid var(--reader-line);
439
+ border-radius: var(--radius-sm);
440
+ padding: 10px 12px;
441
+ font: 12px var(--font-ui);
442
+ max-width: 100%;
443
+ }
444
+ .reader-filter-count {
445
+ font: 11px var(--font-mono);
446
+ padding: 8px 0;
447
+ color: var(--reader-muted);
448
+ }
449
+ :root[data-theme] .detail-expander summary,
450
+ :root[data-theme] .expandable-text summary {
451
+ font-size: 12px;
452
+ cursor: pointer;
453
+ }
454
+ :root[data-theme] .lieflat-suppressed {
455
+ font-size: 11px;
456
+ color: var(--reader-muted);
457
+ padding: 14px;
458
+ }
459
+ :root[data-theme] .lieflat-suppressed ul {
460
+ margin-bottom: 0;
461
+ }
462
+ :root[data-theme] .brief-source {
463
+ padding: 18px;
464
+ border: 1px solid var(--reader-line);
465
+ border-radius: var(--radius-sm);
466
+ }
467
+ :root[data-theme] .brief-source h3 {
468
+ font-size: 14px;
469
+ line-height: 1.7;
470
+ }
471
+ :root[data-theme] .report-footer {
472
+ margin-top: 44px;
473
+ font-size: 11px;
474
+ line-height: 1.8;
475
+ color: var(--reader-muted);
476
+ }
477
+ :root[data-theme="datalab"] .report-page-brief,
478
+ :root[data-theme="datalab-dark"] .report-page-brief {
479
+ grid-template-columns: 190px minmax(0, 1fr);
480
+ }
481
+
482
+ :root[data-theme="academic"] .controls.reader-toolbar {
483
+ font-family: var(--font-ui);
484
+ border-bottom: 1px solid #222;
485
+ }
486
+ :root[data-theme="academic"] .report-header {
487
+ border-bottom: 2px solid #222;
488
+ padding-bottom: 24px;
489
+ }
490
+ :root[data-theme="academic"] .report-header h1 {
491
+ font-size: clamp(1.5rem, 2.5vw, 2.1rem);
492
+ text-align: center;
493
+ }
494
+ :root[data-theme="academic"] .report-shell {
495
+ max-width: 1200px;
496
+ }
497
+ :root[data-theme="academic"] .brief-block-header h2 {
498
+ font-variant: small-caps;
499
+ }
500
+ :root[data-theme="academic"] .hero-insight,
501
+ :root[data-theme="academic"] .tribunal-card {
502
+ font-family: var(--font-ui);
503
+ }
504
+ :root[data-theme="academic"] .decision-hero {
505
+ border-color: #444;
506
+ }
507
+ :root[data-theme="datalab"] .report-shell,
508
+ :root[data-theme="datalab-dark"] .report-shell {
509
+ max-width: 1440px;
510
+ }
511
+ :root[data-theme="datalab"] .brief-block,
512
+ :root[data-theme="datalab-dark"] .brief-block {
513
+ margin-bottom: 36px;
514
+ }
515
+ :root[data-theme="datalab"] .brief-block-header h2,
516
+ :root[data-theme="datalab-dark"] .brief-block-header h2 {
517
+ font-size: 1.14rem;
518
+ font-weight: 600;
519
+ }
520
+ :root[data-theme="datalab"] .brief-navigation,
521
+ :root[data-theme="datalab-dark"] .brief-navigation {
522
+ border: 1px solid var(--reader-line);
523
+ border-radius: var(--radius-sm);
524
+ padding: 8px;
525
+ background: var(--surface);
526
+ }
527
+ :root[data-theme="presentation"] .report-shell {
528
+ max-width: 1320px;
529
+ }
530
+ :root[data-theme="presentation"] .report-header h1 {
531
+ font-size: clamp(1.85rem, 3.5vw, 3rem);
532
+ line-height: 1.4;
533
+ max-width: 1000px;
534
+ }
535
+ :root[data-theme="presentation"] .brief-decision .decision-hero {
536
+ padding: 36px;
537
+ border-left: 3px solid var(--primary);
538
+ }
539
+ :root[data-theme="presentation"] .decision-value {
540
+ font-size: 2.1rem;
541
+ }
542
+ :root[data-theme="presentation"] .brief-block {
543
+ margin-bottom: 72px;
544
+ }
545
+ :root[data-theme="presentation"] .brief-block-header h2 {
546
+ font-size: 1.7rem;
547
+ }
548
+ @media (max-width: 1050px) {
549
+ :root[data-theme] .report-page-brief {
550
+ grid-template-columns: minmax(0, 1fr);
551
+ gap: 24px;
552
+ }
553
+ .brief-navigation {
554
+ position: static;
555
+ flex-direction: row;
556
+ flex-wrap: wrap;
557
+ gap: 3px;
558
+ padding: 0;
559
+ }
560
+ .brief-navigation a {
561
+ border-left: 0;
562
+ border-bottom: 2px solid transparent;
563
+ padding: 8px;
564
+ font-size: 11px;
565
+ }
566
+ .brief-navigation a.active {
567
+ border-bottom-color: var(--primary);
568
+ border-left: 0;
569
+ }
570
+ :root[data-theme] .full-report-layout {
571
+ grid-template-columns: minmax(0, 1fr);
572
+ gap: 24px;
573
+ }
574
+ :root[data-theme] .full-report-intro {
575
+ margin: 0 0 24px;
576
+ }
577
+ :root[data-theme] .full-report-toc {
578
+ position: static;
579
+ max-height: none;
580
+ }
581
+ .reader-home .generated-theme {
582
+ display: none;
583
+ }
584
+ }
585
+ @media (max-width: 640px) {
586
+ :root[data-theme] .controls.reader-toolbar {
587
+ gap: 8px;
588
+ min-height: 60px;
589
+ padding: 10px 12px;
590
+ flex-wrap: wrap;
591
+ }
592
+ .reader-home {
593
+ font-size: 14px;
594
+ }
595
+ .reader-print {
596
+ display: none;
597
+ }
598
+ :root[data-theme] .reader-view-controls .report-view-btn {
599
+ font-size: 11px;
600
+ padding: 5px 8px;
601
+ }
602
+ .reader-tools .lang-btn {
603
+ padding: 5px 8px;
604
+ min-height: 32px;
605
+ }
606
+ :root[data-theme] .report-shell {
607
+ padding: 28px 16px 60px;
608
+ }
609
+ :root[data-theme] .report-header {
610
+ padding-bottom: 22px;
611
+ margin-bottom: 20px;
612
+ }
613
+ :root[data-theme] .report-header h1 {
614
+ font-size: 1.6rem;
615
+ line-height: 1.5;
616
+ margin: 14px 0;
617
+ }
618
+ :root[data-theme] .report-header .meta {
619
+ font-size: 11px;
620
+ }
621
+ :root[data-theme] .decision-hero,
622
+ :root[data-theme="presentation"] .brief-decision .decision-hero {
623
+ padding: 20px 18px;
624
+ }
625
+ :root[data-theme] .hero-insights {
626
+ grid-template-columns: minmax(0, 1fr);
627
+ }
628
+ :root[data-theme] .hero-insight:nth-child(n) {
629
+ padding: 16px 0;
630
+ border: 0;
631
+ border-bottom: 1px solid var(--reader-line);
632
+ }
633
+ :root[data-theme] .hero-insight:last-child {
634
+ border: 0;
635
+ }
636
+ :root[data-theme] .hero-insight-text {
637
+ font-size: 13px;
638
+ }
639
+ :root[data-theme] .tribunal-grid {
640
+ grid-template-columns: minmax(0, 1fr);
641
+ }
642
+ :root[data-theme] .brief-block {
643
+ margin-bottom: 40px;
644
+ }
645
+ :root[data-theme] .report-section {
646
+ margin-bottom: 40px;
647
+ }
648
+ :root[data-theme] .brief-source {
649
+ padding: 16px;
650
+ }
651
+ :root[data-theme] .report-page-brief {
652
+ gap: 20px;
653
+ }
654
+ .brief-navigation a {
655
+ padding: 7px 6px;
656
+ font-size: 10px;
657
+ }
658
+ .brief-navigation a > span {
659
+ display: none;
660
+ }
661
+ }
662
+ @media (max-width: 359px) {
663
+ .reader-home {
664
+ display: none;
665
+ }
666
+ :root[data-theme] .report-header h1 {
667
+ font-size: 1.45rem;
668
+ }
669
+ }
670
+ @media (prefers-reduced-motion: reduce) {
671
+ html {
672
+ scroll-behavior: auto;
673
+ }
674
+ .reader-progress > span {
675
+ transition: none;
676
+ }
677
+ }
678
+ @media print {
679
+ .reader-toolbar,
680
+ .reader-progress,
681
+ .brief-navigation,
682
+ .reader-filter-count,
683
+ .reader-print {
684
+ display: none !important;
685
+ }
686
+ :root[data-theme] .report-shell {
687
+ max-width: none;
688
+ padding: 0;
689
+ }
690
+ :root[data-theme] .report-page-brief {
691
+ display: block;
692
+ }
693
+ :root[data-theme] .hero-insights {
694
+ grid-template-columns: repeat(2, minmax(0, 1fr));
695
+ }
696
+ :root[data-theme] .brief-block {
697
+ break-inside: auto;
698
+ }
699
+ details .detail-body {
700
+ display: block;
701
+ }
702
+ }
703
+ .reader-view-controls,
704
+ .reader-tools,
705
+ .reader-tools .lang-switcher {
706
+ flex-shrink: 0;
707
+ }
708
+ :root[data-theme] .reader-view-controls .report-view-btn {
709
+ white-space: nowrap;
710
+ }
711
+ @media (max-width: 450px) {
712
+ .reader-home {
713
+ font-size: 12px;
714
+ }
715
+ .reader-tools .lang-btn {
716
+ font-size: 11px;
717
+ padding: 5px 7px;
718
+ }
719
+ }
720
+ /* Keep warm terracotta / cool slate identities at readable text contrast. */
721
+ :root[data-theme="claude"] {
722
+ --text-muted: #69655d;
723
+ --primary: #9c5238;
724
+ }
725
+ :root[data-theme="datalab"] {
726
+ --text-muted: #5c6573;
727
+ }
728
+ :root[data-theme] .reader-home .generated-theme {
729
+ color: var(--reader-muted);
730
+ }
731
+ .brief-navigation a > span {
732
+ opacity: 1;
733
+ }
734
+ :root[data-theme] .full-report-intro {
735
+ width: auto;
736
+ }
737
+ :root[data-theme] .evidence-to-action {
738
+ max-width: 100%;
739
+ flex-wrap: wrap;
740
+ overflow: visible;
741
+ }
742
+ :root[data-theme] .evidence-to-action .action-node {
743
+ flex: 1 1 140px;
744
+ min-width: 0;
745
+ overflow-wrap: anywhere;
746
+ }
747
+ :root[data-theme="claude"] {
748
+ --insufficient: #69655d;
749
+ }
750
+ :root[data-theme="datalab"] {
751
+ --insufficient: #5c6573;
752
+ }