eduevidence 5.2.0 → 6.2.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 (386) hide show
  1. package/CONTRIBUTING.md +105 -0
  2. package/README.md +142 -75
  3. package/README.zh-CN.md +73 -30
  4. package/SKILL.md +397 -131
  5. package/agents/openai.yaml +4 -0
  6. package/assets/readme/controlled-execution.svg +34 -0
  7. package/assets/readme/landing-tour.gif +0 -0
  8. package/assets/readme/logo.png +0 -0
  9. package/assets/readme/research-workflow.svg +56 -0
  10. package/assets/readme/studio-graph.png +0 -0
  11. package/assets/readme/studio-overview.png +0 -0
  12. package/assets/readme/studio-reports.png +0 -0
  13. package/assets/readme/studio-tour.gif +0 -0
  14. package/autoevolve/config.yaml +17 -0
  15. package/autoevolve/program.md +25 -0
  16. package/autoevolve/protected.manifest.yaml +34 -0
  17. package/benchmarks/adversarial/cases.jsonl +7 -0
  18. package/benchmarks/evidence-library.json +5268 -0
  19. package/benchmarks/partitions.json +8 -0
  20. package/bin/eduevidence.js +2 -1
  21. package/docs/architecture.md +496 -0
  22. package/docs/autoresearch-evolution-plan.md +2903 -0
  23. package/docs/autoresearch-implementation-status.md +101 -0
  24. package/docs/demo-storyboard.md +20 -0
  25. package/docs/demo-workplace-ai.md +92 -0
  26. package/docs/demo.md +32 -0
  27. package/docs/install-guide.md +150 -0
  28. package/docs/orchestration-role-model.md +1254 -0
  29. package/docs/release-closeout/README.md +17 -0
  30. package/docs/release-closeout/frontend-acceptance.md +23 -0
  31. package/docs/release-closeout/issues.md +19 -0
  32. package/docs/release-closeout/verification.md +28 -0
  33. package/docs/release-contract.md +108 -0
  34. package/docs/research-studio-guide.zh-CN.md +166 -0
  35. package/docs/sciverse-api.md +125 -0
  36. package/eduevidence_cli.py +29 -13
  37. package/engine/_resources.py +13 -0
  38. package/engine/autoevolve/__init__.py +3 -0
  39. package/engine/autoevolve/agent_view.py +167 -0
  40. package/engine/autoevolve/core.py +357 -0
  41. package/engine/autoevolve/events.py +11 -0
  42. package/engine/autoevolve/git_workspace.py +77 -0
  43. package/engine/autoevolve/projection.py +23 -0
  44. package/engine/autoevolve/runner.py +413 -0
  45. package/engine/autoevolve/trust.py +146 -0
  46. package/engine/autoresearch/__init__.py +6 -0
  47. package/engine/autoresearch/commit.py +132 -0
  48. package/engine/autoresearch/contracts.py +126 -0
  49. package/engine/autoresearch/controller.py +207 -0
  50. package/engine/autoresearch/events.py +12 -0
  51. package/engine/autoresearch/gap_priority.py +168 -0
  52. package/engine/autoresearch/projection.py +30 -0
  53. package/engine/autoresearch/research_memory.py +59 -0
  54. package/engine/autoresearch/saturation.py +91 -0
  55. package/engine/briefs.py +2 -1
  56. package/engine/capabilities.py +1 -0
  57. package/engine/contracts.py +3 -1
  58. package/engine/decision_policy.py +96 -0
  59. package/engine/evidence_graph.py +14 -10
  60. package/engine/evidencecore.py +7 -5
  61. package/engine/gaps.py +132 -73
  62. package/engine/ids.py +2 -0
  63. package/engine/judge_pack.py +65 -0
  64. package/engine/library.py +6 -2
  65. package/engine/library_builtin.py +3 -1
  66. package/engine/living.py +36 -5
  67. package/engine/meta_synthesis.py +3 -1
  68. package/engine/migration.py +88 -3
  69. package/engine/orchestration.py +460 -0
  70. package/engine/paths.py +2 -0
  71. package/engine/pilot.py +36 -33
  72. package/engine/project.py +2 -2
  73. package/engine/research_service.py +113 -0
  74. package/engine/studio_read_model.py +400 -0
  75. package/engine/taxonomy.py +211 -0
  76. package/engine/tribunal.py +44 -33
  77. package/engine/update.py +1 -0
  78. package/engine/versions.py +1 -1
  79. package/engine/worker_result.py +109 -0
  80. package/engine/workflows.py +70 -0
  81. package/examples/ai-coding-assistant-evidence/EduEvidence_Report.html +2934 -0
  82. package/examples/ai-coding-assistant-evidence/artifact_manifest.json +15 -0
  83. package/examples/ai-coding-assistant-evidence/citation_check.json +79 -0
  84. package/examples/ai-coding-assistant-evidence/claims.jsonl +12 -0
  85. package/examples/ai-coding-assistant-evidence/evaluation.json +35 -0
  86. package/examples/ai-coding-assistant-evidence/evidence.jsonl +12 -0
  87. package/examples/ai-coding-assistant-evidence/final_verdict.json +107 -0
  88. package/examples/ai-coding-assistant-evidence/frame.json +48 -0
  89. package/examples/ai-coding-assistant-evidence/gate_report.json +101 -0
  90. package/examples/ai-coding-assistant-evidence/intervention.json +51 -0
  91. package/examples/ai-coding-assistant-evidence/methodology.json +36 -0
  92. package/examples/ai-coding-assistant-evidence/raw_verdict.json +86 -0
  93. package/examples/ai-coding-assistant-evidence/report_spec.json +230 -0
  94. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_academic.html +2934 -0
  95. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_claude.html +2934 -0
  96. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab-dark.html +2934 -0
  97. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_datalab.html +2934 -0
  98. package/examples/ai-coding-assistant-evidence/reports-5themes/EduEvidence_Report_presentation.html +2934 -0
  99. package/examples/ai-coding-assistant-evidence/reports-5themes/report_academic.html +2934 -0
  100. package/examples/ai-coding-assistant-evidence/reports-5themes/report_claude.html +2934 -0
  101. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab-dark.html +2934 -0
  102. package/examples/ai-coding-assistant-evidence/reports-5themes/report_datalab.html +2934 -0
  103. package/examples/ai-coding-assistant-evidence/reports-5themes/report_presentation.html +2934 -0
  104. package/examples/ai-coding-assistant-evidence/result.json +1457 -0
  105. package/examples/ai-coding-assistant-evidence/result.zh.json +1457 -0
  106. package/examples/ai-coding-assistant-evidence/skeptic.json +72 -0
  107. package/examples/ai-coding-assistant-evidence/sources.jsonl +8 -0
  108. package/examples/ai-coding-assistant-evidence/verdict.json +107 -0
  109. package/examples/spaced-retrieval-practice/applicability.json +14 -0
  110. package/examples/spaced-retrieval-practice/artifact_manifest.json +15 -0
  111. package/examples/spaced-retrieval-practice/claims.jsonl +3 -0
  112. package/examples/spaced-retrieval-practice/evidence.jsonl +6 -0
  113. package/examples/spaced-retrieval-practice/final_verdict.json +93 -0
  114. package/examples/spaced-retrieval-practice/frame.json +58 -0
  115. package/examples/spaced-retrieval-practice/gate_report.json +101 -0
  116. package/examples/spaced-retrieval-practice/methodology.json +78 -0
  117. package/examples/spaced-retrieval-practice/report_spec.json +212 -0
  118. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_academic.html +2728 -0
  119. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_claude.html +2728 -0
  120. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab-dark.html +2728 -0
  121. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_datalab.html +2728 -0
  122. package/examples/spaced-retrieval-practice/reports-5themes/EduEvidence_Report_presentation.html +2728 -0
  123. package/examples/spaced-retrieval-practice/reports-5themes/report_academic.html +2728 -0
  124. package/examples/spaced-retrieval-practice/reports-5themes/report_claude.html +2728 -0
  125. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab-dark.html +2728 -0
  126. package/examples/spaced-retrieval-practice/reports-5themes/report_datalab.html +2728 -0
  127. package/examples/spaced-retrieval-practice/reports-5themes/report_presentation.html +2728 -0
  128. package/examples/spaced-retrieval-practice/result.json +942 -0
  129. package/examples/spaced-retrieval-practice/result.zh.json +942 -0
  130. package/examples/spaced-retrieval-practice/skeptic.json +70 -0
  131. package/examples/spaced-retrieval-practice/sources.jsonl +7 -0
  132. package/examples/spaced-retrieval-practice/verdict.json +93 -0
  133. package/examples/workplace-ai-assistant/artifact_manifest.json +15 -0
  134. package/examples/workplace-ai-assistant/claims.jsonl +4 -0
  135. package/examples/workplace-ai-assistant/evaluation.json +19 -0
  136. package/examples/workplace-ai-assistant/evidence.jsonl +4 -0
  137. package/examples/workplace-ai-assistant/evidence_graph.json +444 -0
  138. package/examples/workplace-ai-assistant/final_verdict.json +78 -0
  139. package/examples/workplace-ai-assistant/frame.json +41 -0
  140. package/examples/workplace-ai-assistant/gate_report.json +101 -0
  141. package/examples/workplace-ai-assistant/intervention.json +27 -0
  142. package/examples/workplace-ai-assistant/legacy-link-check.json +16 -0
  143. package/examples/workplace-ai-assistant/methodology.json +60 -0
  144. package/examples/workplace-ai-assistant/report_spec.json +224 -0
  145. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_academic.html +2814 -0
  146. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_claude.html +2814 -0
  147. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab-dark.html +2814 -0
  148. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_datalab.html +2814 -0
  149. package/examples/workplace-ai-assistant/reports-5themes/EduEvidence_Report_presentation.html +2814 -0
  150. package/examples/workplace-ai-assistant/reports-5themes/report_academic.html +2814 -0
  151. package/examples/workplace-ai-assistant/reports-5themes/report_claude.html +2814 -0
  152. package/examples/workplace-ai-assistant/reports-5themes/report_datalab-dark.html +2814 -0
  153. package/examples/workplace-ai-assistant/reports-5themes/report_datalab.html +2814 -0
  154. package/examples/workplace-ai-assistant/reports-5themes/report_presentation.html +2814 -0
  155. package/examples/workplace-ai-assistant/result.json +615 -0
  156. package/examples/workplace-ai-assistant/result.zh.json +615 -0
  157. package/examples/workplace-ai-assistant/search_log.json +19 -0
  158. package/examples/workplace-ai-assistant/skeptic.json +72 -0
  159. package/examples/workplace-ai-assistant/sources.jsonl +3 -0
  160. package/examples/workplace-ai-assistant/validation_result.json +9 -0
  161. package/examples/workplace-ai-assistant/verdict.json +78 -0
  162. package/install.sh +7 -7
  163. package/integrations/agent_mcp.py +2 -2
  164. package/integrations/orchestration_dispatch.py +146 -0
  165. package/package.json +46 -3
  166. package/pyproject.toml +14 -22
  167. package/references/autoresearch.md +30 -0
  168. package/references/evaluation-policy.md +24 -0
  169. package/references/orchestration.md +22 -0
  170. package/references/report-copy-style.md +67 -0
  171. package/references/retrieval-compliance.md +75 -0
  172. package/references/retrieval-protocol.md +20 -0
  173. package/references/scientific-invariants.md +19 -0
  174. package/retrieval/audit.py +178 -0
  175. package/retrieval/fetch.py +96 -0
  176. package/retrieval/sciverse.py +398 -0
  177. package/retrieval/search.py +47 -7
  178. package/schemas/applicability.schema.json +94 -0
  179. package/schemas/chart-spec.schema.json +10 -3
  180. package/schemas/evidence.schema.json +316 -43
  181. package/schemas/fetch-result.schema.json +2 -1
  182. package/schemas/intervention.schema.json +106 -21
  183. package/schemas/report-result.schema.json +12 -4
  184. package/schemas/report-spec.schema.json +98 -100
  185. package/schemas/skeptic.schema.json +86 -0
  186. package/schemas/source.schema.json +21 -2
  187. package/schemas/v2/finding.schema.json +5 -1
  188. package/schemas/v2/methodology-audit.schema.json +5 -1
  189. package/schemas/v2/outcome.schema.json +28 -5
  190. package/schemas/v2/project.schema.json +2 -2
  191. package/schemas/v2/run.schema.json +1 -1
  192. package/schemas/v2/study.schema.json +5 -1
  193. package/schemas/vNext/autoevolve-session.schema.json +34 -0
  194. package/schemas/vNext/eval-snapshot.schema.json +77 -0
  195. package/schemas/vNext/execution-plan.schema.json +50 -0
  196. package/schemas/vNext/gap-priority.schema.json +54 -0
  197. package/schemas/vNext/negative-search-record.schema.json +68 -0
  198. package/schemas/vNext/research-iteration.schema.json +87 -0
  199. package/schemas/vNext/research-strategy.schema.json +62 -0
  200. package/schemas/vNext/skill-experiment.schema.json +90 -0
  201. package/schemas/vNext/task-spec.schema.json +156 -0
  202. package/schemas/vNext/worker-result.schema.json +60 -0
  203. package/schemas/verdict.schema.json +164 -28
  204. package/scripts/benchmark_judge.py +2 -2
  205. package/scripts/benchmark_v3.py +26 -43
  206. package/scripts/build_esl_artifacts.py +4 -4
  207. package/scripts/build_evidence_library.py +2 -2
  208. package/scripts/build_gh_pages.py +98 -0
  209. package/scripts/build_readme_diagrams.py +72 -0
  210. package/scripts/build_report_variants.py +101 -0
  211. package/scripts/build_result.py +74 -9
  212. package/scripts/check_autoresearch_invariants.py +95 -0
  213. package/scripts/check_package_parity.py +85 -0
  214. package/scripts/check_protocol_alignment.py +375 -0
  215. package/scripts/check_versioned_schemas.py +254 -0
  216. package/scripts/claim_audit.py +13 -8
  217. package/scripts/compute_confidence.py +10 -0
  218. package/scripts/daily_evolve.py +30 -0
  219. package/scripts/dashboard_server.py +130 -101
  220. package/scripts/did_regression.py +17 -32
  221. package/scripts/enrich_projects_human_and_lieflat.py +1 -1
  222. package/scripts/evidence_score.py +5 -2
  223. package/scripts/generate_metrics.py +4 -3
  224. package/scripts/generate_new_projects.py +5 -5
  225. package/scripts/orchestrator.py +286 -36
  226. package/scripts/pre_verdict_gate.py +224 -26
  227. package/scripts/quickstart.py +18 -2
  228. package/scripts/rebake_all_5themes.py +1 -2
  229. package/scripts/research_auto_cli.py +475 -0
  230. package/scripts/run_workspace.py +24 -8
  231. package/scripts/search_provenance.py +64 -0
  232. package/scripts/serve_web.py +9 -10
  233. package/scripts/skill_lint.py +1 -1
  234. package/scripts/skill_payload.py +81 -0
  235. package/scripts/test_adversarial_empirical.py +26 -19
  236. package/scripts/validate_schema.py +46 -2
  237. package/scripts/vnext_cli.py +133 -0
  238. package/setup.py +12 -0
  239. package/skill/agents/evaluation-designer.md +20 -4
  240. package/skill/agents/evidence-analyst.md +19 -3
  241. package/skill/agents/evidence-judge.md +50 -2
  242. package/skill/agents/evidence-retriever.md +20 -3
  243. package/skill/agents/intervention-designer.md +20 -4
  244. package/skill/agents/method-reviewer.md +18 -2
  245. package/skill/agents/{education-planner.md → research-planner.md} +19 -3
  246. package/skill/agents/skeptic.md +18 -2
  247. package/skill/roles/registry.yaml +45 -0
  248. package/skill/sub-skills/aihot-trend-analysis/SKILL.md +28 -9
  249. package/skill/sub-skills/contradiction-analysis/SKILL.md +31 -11
  250. package/skill/sub-skills/data-analysis/SKILL.md +34 -15
  251. package/skill/sub-skills/ethics-review/SKILL.md +33 -10
  252. package/skill/sub-skills/evidence-extraction/SKILL.md +29 -11
  253. package/skill/sub-skills/evidence-review/SKILL.md +31 -12
  254. package/skill/sub-skills/gap-analysis/SKILL.md +31 -9
  255. package/skill/sub-skills/literature-review/SKILL.md +35 -14
  256. package/skill/sub-skills/methodology-audit/SKILL.md +29 -12
  257. package/skill/sub-skills/report-generation/SKILL.md +40 -6
  258. package/skill/sub-skills/research-planning/SKILL.md +41 -14
  259. package/skill/sub-skills/study-design/SKILL.md +30 -9
  260. package/skill/task-briefs/adjudicate.md +32 -7
  261. package/skill/task-briefs/applicability.md +38 -0
  262. package/skill/task-briefs/audit.md +32 -7
  263. package/skill/task-briefs/challenge.md +34 -5
  264. package/skill/task-briefs/evaluate.md +30 -5
  265. package/skill/task-briefs/extract.md +31 -8
  266. package/skill/task-briefs/frame.md +39 -10
  267. package/skill/task-briefs/intervene.md +32 -6
  268. package/skill/task-briefs/present.md +32 -8
  269. package/skill/task-briefs/projection.md +37 -0
  270. package/skill/task-briefs/retrieve.md +36 -6
  271. package/skill/workflows/decision-and-pilot.md +85 -0
  272. package/skill/workflows/evaluate-and-update.md +93 -0
  273. package/skill/workflows/evidence-review.md +117 -0
  274. package/visualization/eduevidence-report/assets/base.css +2 -2
  275. package/visualization/eduevidence-report/assets/reader.css +752 -0
  276. package/visualization/eduevidence-report/assets/reader.js +132 -0
  277. package/visualization/eduevidence-report/references/chart-selection-catalog.md +109 -0
  278. package/visualization/eduevidence-report/references/lieflat-composition.md +3 -1
  279. package/visualization/eduevidence-report/scripts/build_figures.py +25 -3
  280. package/visualization/eduevidence-report/scripts/build_infographics.py +5 -1
  281. package/visualization/eduevidence-report/scripts/build_report.py +561 -121
  282. package/visualization/eduevidence-report/scripts/charts_data.py +2 -0
  283. package/visualization/eduevidence-report/scripts/lieflat_engine.py +371 -136
  284. package/visualization/eduevidence-report/scripts/zh_labels.py +80 -1
  285. package/visualization/eduevidence-report/themes/academic.css +1 -1
  286. package/visualization/eduevidence-report/themes/claude.css +1 -1
  287. package/visualization/eduevidence-report/themes/datalab-dark.css +2 -2
  288. package/visualization/eduevidence-report/themes/datalab.css +2 -2
  289. package/visualization/eduevidence-report/themes/presentation.css +2 -2
  290. package/web/README.md +18 -0
  291. package/web/architecture.html +14885 -0
  292. package/web/index.html +53 -0
  293. package/web/studio/THIRD_PARTY_LICENSES.txt +146 -0
  294. package/web/studio/assets/index-B8tkF44Q.css +1 -0
  295. package/web/studio/assets/index-CQ6Keoyc.js +230 -0
  296. package/web/studio/config.json +1 -0
  297. package/web/studio/index.html +14 -0
  298. package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
  299. package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
  300. package/engine/__pycache__/bias.cpython-312.pyc +0 -0
  301. package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
  302. package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
  303. package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
  304. package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
  305. package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
  306. package/engine/__pycache__/events.cpython-312.pyc +0 -0
  307. package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
  308. package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
  309. package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
  310. package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
  311. package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
  312. package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
  313. package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
  314. package/engine/__pycache__/ids.cpython-312.pyc +0 -0
  315. package/engine/__pycache__/library.cpython-312.pyc +0 -0
  316. package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
  317. package/engine/__pycache__/living.cpython-312.pyc +0 -0
  318. package/engine/__pycache__/log.cpython-312.pyc +0 -0
  319. package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
  320. package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
  321. package/engine/__pycache__/migration.cpython-312.pyc +0 -0
  322. package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
  323. package/engine/__pycache__/paths.cpython-312.pyc +0 -0
  324. package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
  325. package/engine/__pycache__/planner.cpython-312.pyc +0 -0
  326. package/engine/__pycache__/project.cpython-312.pyc +0 -0
  327. package/engine/__pycache__/projections.cpython-312.pyc +0 -0
  328. package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
  329. package/engine/__pycache__/run.cpython-312.pyc +0 -0
  330. package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
  331. package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
  332. package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
  333. package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
  334. package/engine/__pycache__/update.cpython-312.pyc +0 -0
  335. package/engine/__pycache__/versions.cpython-312.pyc +0 -0
  336. package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
  337. package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
  338. package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
  339. package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
  340. package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
  341. package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
  342. package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
  343. package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
  344. package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
  345. package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
  346. package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
  347. package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  348. package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
  349. package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
  350. package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
  351. package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
  352. package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
  353. package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
  354. package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
  355. package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
  356. package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
  357. package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
  358. package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
  359. package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
  360. package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
  361. package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
  362. package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
  363. package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
  364. package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
  365. package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
  366. package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
  367. package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
  368. package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
  369. package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
  370. package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
  371. package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
  372. package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
  373. package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
  374. package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
  375. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
  376. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
  377. package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
  378. package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
  379. package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
  380. package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
  381. package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
  382. package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
  383. package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
  384. package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
  385. package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
  386. package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
package/web/index.html ADDED
@@ -0,0 +1,53 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>EduEvidence Research Studio · Build unavailable</title>
7
+ <style>
8
+ :root { color-scheme: light dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
9
+ * { box-sizing: border-box; }
10
+ body { margin: 0; min-height: 100vh; display: grid; place-items: center; background: #f7f6f3; color: #242321; padding: 24px; }
11
+ main { width: min(680px, 100%); background: #fff; border: 1px solid #dedbd5; border-radius: 18px; padding: clamp(28px, 6vw, 52px); box-shadow: 0 16px 55px rgba(42, 37, 31, .08); }
12
+ .eyebrow { margin: 0 0 18px; font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: #827d74; }
13
+ h1 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: clamp(2rem, 7vw, 3.4rem); line-height: 1.02; font-weight: 500; letter-spacing: -.035em; }
14
+ p { margin: 22px 0 0; max-width: 56ch; line-height: 1.8; color: #625e57; }
15
+ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .9em; background: #f2f0ec; border-radius: 6px; padding: .15em .4em; color: #393631; }
16
+ .actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 28px; }
17
+ a { display: inline-flex; align-items: center; min-height: 42px; padding: 0 15px; border-radius: 9px; border: 1px solid #ccc7bf; color: inherit; text-decoration: none; font-weight: 650; font-size: 14px; }
18
+ a.primary { background: #242321; color: #fff; border-color: #242321; }
19
+ small { display: block; margin-top: 30px; color: #8b867e; line-height: 1.65; }
20
+ @media (prefers-color-scheme: dark) {
21
+ body { background: #181817; color: #efede8; }
22
+ main { background: #211f1d; border-color: #3b3833; box-shadow: none; }
23
+ p, small, .eyebrow { color: #aaa49a; }
24
+ code { background: #302d29; color: #eeeae3; }
25
+ a { border-color: #504b44; }
26
+ a.primary { background: #efede8; color: #211f1d; border-color: #efede8; }
27
+ }
28
+ </style>
29
+ </head>
30
+ <body>
31
+ <main>
32
+ <p class="eyebrow">EduEvidence · Compatibility boundary</p>
33
+ <h1>Research Studio build unavailable.</h1>
34
+ <p>
35
+ 旧版 v5 三页控制台已经退出正式产品路径。看到这个页面说明当前分发目录缺少
36
+ <code>web/studio/</code> 的可复现构建产物;服务不会再静默降级到旧控制台。
37
+ </p>
38
+ <p>
39
+ 开发仓库请运行 <code>npm ci --prefix studio</code> 与
40
+ <code>npm run build --prefix studio</code>,然后重新启动本地 Python 服务。
41
+ 正常入口始终是 <code>/studio/</code>。
42
+ </p>
43
+ <div class="actions">
44
+ <a class="primary" href="/studio/">重新检查 Research Studio</a>
45
+ <a href="/api/studio/catalog">检查只读数据接口</a>
46
+ </div>
47
+ <small>
48
+ This page is intentionally a fail-closed compatibility tombstone. It contains no research UI,
49
+ no legacy dashboard runtime, and no scientific fallback data.
50
+ </small>
51
+ </main>
52
+ </body>
53
+ </html>
@@ -0,0 +1,146 @@
1
+ EduEvidence Research Studio - runtime dependency notices
2
+
3
+ react 19.2.8
4
+ ======================================================================
5
+ MIT License
6
+
7
+ Copyright (c) Meta Platforms, Inc. and affiliates.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+
28
+ react-dom 19.2.8
29
+ ======================================================================
30
+ MIT License
31
+
32
+ Copyright (c) Meta Platforms, Inc. and affiliates.
33
+
34
+ Permission is hereby granted, free of charge, to any person obtaining a copy
35
+ of this software and associated documentation files (the "Software"), to deal
36
+ in the Software without restriction, including without limitation the rights
37
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+ copies of the Software, and to permit persons to whom the Software is
39
+ furnished to do so, subject to the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be included in all
42
+ copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
50
+ SOFTWARE.
51
+
52
+
53
+ scheduler 0.27.0
54
+ ======================================================================
55
+ MIT License
56
+
57
+ Copyright (c) Meta Platforms, Inc. and affiliates.
58
+
59
+ Permission is hereby granted, free of charge, to any person obtaining a copy
60
+ of this software and associated documentation files (the "Software"), to deal
61
+ in the Software without restriction, including without limitation the rights
62
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
63
+ copies of the Software, and to permit persons to whom the Software is
64
+ furnished to do so, subject to the following conditions:
65
+
66
+ The above copyright notice and this permission notice shall be included in all
67
+ copies or substantial portions of the Software.
68
+
69
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
70
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
72
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
73
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
74
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
75
+ SOFTWARE.
76
+
77
+
78
+ @tanstack/react-query 5.102.8
79
+ ======================================================================
80
+ MIT License
81
+
82
+ Copyright (c) 2021-present Tanner Linsley
83
+
84
+ Permission is hereby granted, free of charge, to any person obtaining a copy
85
+ of this software and associated documentation files (the "Software"), to deal
86
+ in the Software without restriction, including without limitation the rights
87
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
88
+ copies of the Software, and to permit persons to whom the Software is
89
+ furnished to do so, subject to the following conditions:
90
+
91
+ The above copyright notice and this permission notice shall be included in all
92
+ copies or substantial portions of the Software.
93
+
94
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
95
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
96
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
97
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
98
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
99
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
100
+ SOFTWARE.
101
+
102
+
103
+ @tanstack/query-core 5.102.8
104
+ ======================================================================
105
+ MIT License
106
+
107
+ Copyright (c) 2021-present Tanner Linsley
108
+
109
+ Permission is hereby granted, free of charge, to any person obtaining a copy
110
+ of this software and associated documentation files (the "Software"), to deal
111
+ in the Software without restriction, including without limitation the rights
112
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
113
+ copies of the Software, and to permit persons to whom the Software is
114
+ furnished to do so, subject to the following conditions:
115
+
116
+ The above copyright notice and this permission notice shall be included in all
117
+ copies or substantial portions of the Software.
118
+
119
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
120
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
121
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
122
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
123
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
124
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
125
+ SOFTWARE.
126
+
127
+
128
+ lucide-react 0.468.0
129
+ ======================================================================
130
+ ISC License
131
+
132
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
133
+
134
+ Permission to use, copy, modify, and/or distribute this software for any
135
+ purpose with or without fee is hereby granted, provided that the above
136
+ copyright notice and this permission notice appear in all copies.
137
+
138
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
139
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
140
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
141
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
142
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
143
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
144
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
145
+
146
+
@@ -0,0 +1 @@
1
+ @layer reset,base,components,responsive;@layer reset{*,*:before,*:after{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed}svg{flex-shrink:0}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin-top:0}button{color:inherit}table{border-collapse:collapse}dialog:not([open]){display:none}[hidden]{display:none!important}}@layer base{:root{color-scheme:light;--canvas: #faf9f6;--surface: #fff;--surface-alt: #f5f3ef;--rail: #f0eee9;--ambient-ink: 112, 86, 66;--ambient-glow: 174, 112, 71;--ink: #282722;--muted: #69665f;--faint: #a19c91;--line: #e5e2da;--line-strong: #d5d0c5;--accent: #a85539;--accent-soft: #f4e7df;--success: #2c7255;--success-soft: #e8f2eb;--warn: #886022;--warn-soft: #f6edde;--danger: #a34442;--danger-soft: #f6e8e6;--shadow: 0 3px 15px #33301f04;--font: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Noto Sans CJK SC", sans-serif;--editorial: Georgia, "Songti SC", "STSong", serif;--mono: ui-monospace, "SF Mono", Consolas, monospace;font-family:var(--font);font-size:14px;color:var(--ink);background:var(--canvas)}:root[data-appearance=dark]{color-scheme:dark;--canvas: #191b1c;--surface: #222526;--surface-alt: #292c2c;--rail: #151718;--ambient-ink: 205, 185, 162;--ambient-glow: 209, 161, 126;--ink: #e9e6df;--muted: #b3b0a7;--faint: #83837d;--line: #353837;--line-strong: #4c504c;--accent: #e3a188;--accent-soft: #392d28;--success: #a1cfb5;--success-soft: #253930;--warn: #e2c18c;--warn-soft: #3a3327;--danger: #ecaaa3;--danger-soft: #412c2b;--shadow: none}body{line-height:1.6;-webkit-font-smoothing:antialiased}button,input,select{font-size:13px}button{border:0;background:none}button:disabled{opacity:.5}input,select{min-width:0;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:7px;min-height:36px;padding:7px 11px}input::placeholder{color:var(--muted)}select{max-width:100%}p{overflow-wrap:anywhere}h1,h2,h3{line-height:1.4;font-weight:560}h2{font-size:18px}h3{font-size:15px}code,kbd{font-family:var(--mono);font-size:11px;overflow-wrap:anywhere}pre{white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--mono);font-size:11px;line-height:1.8}summary{cursor:pointer}a,button{transition:background-color .16s,color .16s,border-color .16s}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:4px}::selection{background:var(--accent-soft)}.muted{color:var(--muted)}.prose{line-height:1.85;white-space:pre-line;max-width:78ch}.eyebrow{font-size:10px;font-weight:650;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin-bottom:13px}.sep{color:var(--faint);padding:0 6px}.count-label{font-family:var(--mono);font-size:11px;color:var(--muted);white-space:nowrap}.chart-note{font-size:12px;color:var(--muted);margin:15px 0 0}.button{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:40px;border:1px solid var(--line-strong);background:var(--surface);border-radius:7px;padding:8px 16px;font-size:12px;font-weight:550}.button:hover{background:var(--surface-alt)}.button.primary{background:var(--ink);border-color:var(--ink);color:var(--canvas)}.button.primary:hover{opacity:.86}.small-button{min-height:34px;padding:6px 11px;font-size:11px}.icon-button{display:inline-flex;align-items:center;justify-content:center;min-width:34px;min-height:34px;border-radius:6px;color:var(--muted)}.icon-button:hover{background:var(--surface-alt);color:var(--ink)}.text-link{display:inline-flex;align-items:center;gap:7px;color:var(--accent);font-size:12px;font-weight:560}.text-link:hover{text-decoration:underline}.row-badges{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.row-badges .muted{font-size:12px}.badge{font-size:11px;display:inline-flex;align-items:center;gap:5px;line-height:1.4;padding:4px 7px;border-radius:4px;color:var(--muted);background:var(--surface-alt);white-space:nowrap}.badge-dot{width:4px;height:4px;border-radius:50%;background:currentColor}.badge.pilot,.badge.uncertain,.badge.stale,.badge.retest{color:var(--warn);background:var(--warn-soft)}.badge.adopt,.badge.support,.badge.supported,.badge.completed,.badge.keep,.badge.active{color:var(--success);background:var(--success-soft)}.badge.reject,.badge.contradict,.badge.failed,.badge.invalid,.badge.retracted{color:var(--danger);background:var(--danger-soft)}.badge.quiet{background:transparent;border:1px solid var(--line);color:var(--muted)}}@layer components{.app-shell{min-height:100vh}.sidebar{isolation:isolate;position:fixed;inset:0 auto 0 0;width:230px;background:var(--rail);border-right:1px solid var(--line);padding:30px 17px 18px;display:flex;flex-direction:column;z-index:30}.brand{display:flex;gap:10px;align-items:center;padding:0 10px 27px}.brand-mark{position:relative;display:grid;place-items:center;width:32px;height:34px;background:var(--accent);color:#fff;border-radius:9px 9px 9px 2px;font-family:var(--editorial);font-size:29px;line-height:1}.brand-mark span{position:absolute;right:4px;top:5px;width:4px;height:4px;border-radius:50%;background:#f4d0aa}.brand strong{font-size:15px;letter-spacing:-.035em}.brand div>span{display:block;font-size:8px;letter-spacing:.16em;color:var(--muted);margin-top:1px}.sidebar-search{display:flex;align-items:center;gap:7px;color:var(--muted);border:1px solid var(--line-strong);border-radius:7px;background:var(--canvas);min-height:35px;padding:5px 9px;font-size:11px;text-align:left}.sidebar-search span{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-search kbd{font-size:8px;padding:1px 3px;border:1px solid var(--line);border-radius:3px;white-space:nowrap}.nav-label{padding:24px 12px 8px;font-size:10px;color:var(--muted);margin:0}.sidebar nav{display:grid;gap:3px;interpolate-size:allow-keywords}.sidebar nav>a{position:relative;isolation:isolate;width:fit-content;min-height:42px;display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:7px;font-size:12px;color:var(--muted);transition:color .18s ease,width .38s cubic-bezier(.22,1,.36,1)}.sidebar nav>a:before{content:"";position:absolute;top:3px;right:0;bottom:3px;left:0;z-index:-1;border-radius:inherit;background:var(--surface);transition:left .38s cubic-bezier(.22,1,.36,1),right .38s cubic-bezier(.22,1,.36,1),top .38s cubic-bezier(.22,1,.36,1),bottom .38s cubic-bezier(.22,1,.36,1),box-shadow .22s ease}.sidebar nav>a:hover:before{left:-4px;right:-4px}.sidebar nav>a:hover{color:var(--ink)}.sidebar nav>a[aria-current=page]{color:var(--ink);width:100%}.sidebar nav>a[aria-current=page]:before{top:0;bottom:0;left:0;right:0;box-shadow:var(--shadow)}.sidebar nav>a[aria-current=page]>svg{color:var(--accent)}.active-dot{width:4px;height:4px;border-radius:50%;background:var(--accent);margin-left:auto}.sidebar-bottom{margin-top:auto;padding:22px 11px 0}.read-only-label{display:flex;gap:7px;align-items:center;font-size:11px;color:var(--muted)}.sidebar-bottom p{color:var(--muted);font-size:10px;line-height:1.8;margin:10px 0 25px}.sidebar-version{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;padding-top:12px;border-top:1px solid var(--line)}.main-shell{position:relative;isolation:isolate;margin-left:230px;min-width:0}.ambient-field,.ambient-glow{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;overflow:hidden}.ambient-field canvas{display:block;width:100%;height:100%}.ambient-glow{position:fixed;opacity:0;contain:strict}.ambient-glow i{position:absolute;left:-110px;top:-110px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(var(--ambient-glow),.065),transparent 72%)}.ambient-glow i:nth-child(2){left:-220px;top:-220px;width:440px;height:440px;background:radial-gradient(circle,rgba(var(--ambient-glow),.035),transparent 72%)}.ambient-glow i:nth-child(3){left:-340px;top:-340px;width:680px;height:680px;background:radial-gradient(circle,rgba(var(--ambient-glow),.025),transparent 72%)}.topbar{position:sticky;top:0;z-index:20;height:62px;display:flex;justify-content:space-between;align-items:center;padding:0 38px;background:var(--canvas);border-bottom:1px solid var(--line)}.breadcrumb{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--muted)}.breadcrumb strong{color:var(--ink);font-weight:500}.topbar-actions{display:flex;align-items:center;gap:8px}.connection{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:10px;margin-right:12px}.connection>span{width:5px;height:5px;background:var(--success);border-radius:50%}.language-button{font-size:11px;color:var(--muted);border-left:1px solid var(--line);padding-left:13px}.main-content{max-width:1600px;margin:auto;padding:46px clamp(24px,3.5vw,62px) 60px;min-height:calc(100vh - 114px);outline:none}.app-footer{border-top:1px solid var(--line);margin:0 38px;padding:17px 0 22px;color:var(--muted);display:flex;justify-content:space-between;font-size:9px}.app-footer span{display:flex;align-items:center;gap:6px}.page-heading{display:flex;gap:20px;justify-content:space-between;align-items:flex-end;margin-bottom:34px}.page-heading h1{font-family:var(--editorial);font-weight:450;font-size:clamp(27px,2.7vw,40px);line-height:1.35;letter-spacing:-.025em;margin:0 0 11px}.page-lead{font-size:13px;color:var(--muted);margin:0;max-width:75ch}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-radius:10px;background:var(--surface);margin-bottom:30px}.stat{padding:20px 25px;display:flex;flex-direction:column}.stats-grid>.stat+.stat{border-left:1px solid var(--line)}.stat>span{font-size:11px;color:var(--muted);margin-bottom:7px}.stat>strong{font-size:27px;font-weight:450;letter-spacing:-.04em;line-height:1.25;font-variant-numeric:tabular-nums}.stat>small{font-size:10px;color:var(--muted)}.feature-grid{display:grid;grid-template-columns:minmax(0,2.1fr) minmax(240px,1fr);gap:22px;margin-bottom:44px}.feature-case{position:relative;border:1px solid var(--line);border-radius:10px;padding:27px 30px 26px;background:var(--surface);overflow:hidden}.feature-case>.eyebrow{display:flex;align-items:center;justify-content:space-between;color:var(--accent)}.feature-case>h2{font-family:var(--editorial);font-size:clamp(20px,1.8vw,27px);font-weight:500;line-height:1.55;max-width:34em;margin:0 0 17px}.mini-trace{height:126px;display:flex;align-items:center;max-width:530px;color:var(--muted);padding:20px 8px;margin:12px 0}.trace-column{display:flex;flex-direction:column;gap:10px;flex-shrink:0}.trace-column span{font:9px var(--mono);display:grid;place-items:center;width:22px;height:22px;border:1px solid var(--line-strong);border-radius:4px;background:var(--canvas)}.mini-trace svg:not(.lucide){min-width:10px;flex:1;height:90px;overflow:visible}.mini-trace path{fill:none;stroke:var(--line-strong);stroke-width:1.1}.trace-center{display:grid;place-items:center;flex-shrink:0;width:60px;height:60px;border-radius:15px;border:1px solid var(--line-strong);background:var(--canvas);outline:6px solid var(--surface);color:var(--accent)}.trace-outcome{font-size:10px;letter-spacing:.07em;flex-shrink:0;max-width:130px;padding:10px 14px;background:var(--warn-soft);border:1px solid var(--line);border-radius:5px;color:var(--warn)}.principle-card{display:flex;flex-direction:column;align-items:flex-start;border-radius:10px;border:1px solid var(--line);padding:30px;background:var(--surface-alt)}.principle-card>svg{color:var(--accent);margin-bottom:25px}.principle-card .eyebrow{font-size:9px;margin-bottom:11px}.principle-card h2{font-family:var(--editorial);font-size:25px;font-weight:400;line-height:1.55;margin:0 0 13px}.principle-card>p:not(.eyebrow){color:var(--muted);font-size:12px;line-height:1.9}.principle-card .text-link{margin:6px 0 25px}.principle-caption{margin-top:auto;font-family:var(--editorial);font-size:13px;color:var(--muted);font-style:italic;line-height:1.7}.section-heading{display:flex;justify-content:space-between;align-items:center;gap:14px;margin:0 0 18px}.section-heading h2{margin:0;font-size:16px;font-weight:580}.section-heading .eyebrow{margin-bottom:6px}.library-toolbar{display:flex;gap:14px;align-items:center;margin:0 0 20px;flex-wrap:wrap}.segmented{display:inline-flex;padding:3px;border:1px solid var(--line);border-radius:7px;background:var(--surface-alt)}.segmented button{font-size:11px;padding:6px 12px;border-radius:4px;white-space:nowrap;color:var(--muted)}.segmented button[aria-pressed=true]{background:var(--surface);box-shadow:0 1px 3px #00000009;color:var(--ink)}.search-field{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:0 10px;min-height:36px;min-width:160px;flex:1;color:var(--muted)}.search-field input{border:0;padding:7px 0;background:transparent;width:100%;outline:none}.search-field:focus-within{outline:2px solid var(--accent);outline-offset:2px}.search-field input:focus-visible{outline:none}.library-toolbar>select{font-size:11px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.project-card{border:1px solid var(--line);border-radius:9px;background:var(--surface);padding:22px 24px 15px;box-shadow:var(--shadow);display:flex;flex-direction:column}.project-card:hover{border-color:var(--line-strong)}.project-card-top{display:flex;align-items:center;gap:10px;justify-content:space-between;margin-bottom:15px}.project-symbol{width:29px;height:29px;background:var(--surface-alt);border:1px solid var(--line);border-radius:7px;display:grid;place-items:center;color:var(--muted)}.origin-label{font-size:9px;color:var(--muted);padding:3px 6px;border:1px solid var(--line);border-radius:4px}.project-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex:1;margin:0 0 18px}.project-title h3{font-size:14px;line-height:1.7;margin:0;font-weight:560}.project-title>svg{margin-top:5px;color:var(--faint)}.project-title:hover h3{color:var(--accent)}.project-card-footer{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:14px;margin-top:19px;font-size:10px;color:var(--muted)}.project-card-footer time{font-size:9px}.back-link{display:inline-flex;gap:7px;align-items:center;font-size:11px;color:var(--muted);margin-bottom:24px}.back-link:hover{color:var(--accent)}.project-heading h1{font-family:var(--editorial);font-size:clamp(24px,2.4vw,34px);font-weight:400;line-height:1.5;margin:15px 0 13px;max-width:43em}.project-heading .eyebrow{margin:0}.project-heading>p{font-size:10px}.project-tabs{display:flex;align-items:center;gap:25px;overflow:auto;border-bottom:1px solid var(--line);margin:27px 0;scrollbar-width:thin}.project-tabs a{position:relative;white-space:nowrap;font-size:12px;padding:13px 0;color:var(--muted);border-bottom:2px solid transparent}.project-tabs a[aria-current=page]{color:var(--accent);border-bottom-color:var(--accent)}.decision-surface{display:grid;grid-template-columns:minmax(0,1fr) 230px;border:1px solid var(--line);border-radius:10px;background:var(--surface);margin-bottom:25px}.decision-main{padding:30px 32px}.decision-main h2{font-family:var(--editorial);font-size:33px;font-weight:400;margin:0 0 13px;color:var(--accent)}.decision-main>.prose{font-size:13px;margin-top:20px}.decision-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));background:var(--surface-alt);border-left:1px solid var(--line);border-radius:0 10px 10px 0;align-content:center}.decision-facts .stat{padding:20px}.decision-facts .stat>strong{font-size:24px}.decision-facts .stat>span{font-size:10px}.takeaway-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:23px}.takeaway{padding:24px;border:1px solid var(--line);border-top:2px solid var(--success);border-radius:7px;background:var(--surface)}.takeaway.uncertain{border-top-color:var(--warn)}.takeaway ol{padding-left:18px;margin-bottom:0;font-size:12px;line-height:1.9}.takeaway li+li{margin-top:12px}.takeaway li::marker{color:var(--muted);font-size:10px}.takeaway details{font-size:12px;color:var(--muted);margin-top:14px}.section{margin-top:30px;min-width:0}.boundary-box{background:var(--surface);padding:22px 25px;border:1px solid var(--line);border-radius:8px}.definition{margin:0;min-width:0}.definition>div{display:grid;grid-template-columns:minmax(90px,.6fr) minmax(0,2fr);gap:20px;border-bottom:1px solid var(--line);padding:12px 0}.definition>div:last-child{border:0}.definition dt{font-size:11px;color:var(--muted);overflow-wrap:anywhere}.definition dd{font-size:12px;white-space:pre-line;margin:0;overflow-wrap:anywhere;line-height:1.85}.overview-bottom{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:24px}.empty{text-align:center;color:var(--muted);border:1px dashed var(--line-strong);border-radius:8px;padding:40px 25px;background:var(--surface)}.empty>svg{color:var(--faint);margin-bottom:12px}.empty h3{font-size:13px;color:var(--ink);margin-bottom:8px}.empty p{font-size:12px;line-height:1.8;max-width:45em;margin:0 auto}.empty .button{margin-top:16px}.error-state{padding:45px;text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:9px}.error-state>svg{color:var(--danger)}.error-state p{color:var(--muted);font-size:12px}.loading{padding:60px;text-align:center;color:var(--muted);font-size:13px}.loader{display:block;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:22px;height:22px;margin:0 auto 15px;animation:spin .8s linear infinite}.spinning{animation:spin 1s linear infinite}.skeleton{height:15px;background:var(--surface-alt);max-width:500px;border-radius:6px;margin:25px auto 0}.skeleton.short{width:60%;margin-top:12px}.diagnostic{border:1px solid var(--line-strong);background:var(--warn-soft);border-radius:7px;padding:12px 16px;margin-bottom:23px;font-size:12px}.diagnostic summary{display:flex;gap:8px;align-items:center}.diagnostic summary>span{margin-left:auto}.diagnostic li{padding:5px 0}.filter-bar{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:0 0 17px}.filter-bar label:not(.search-field){display:flex;align-items:center;gap:9px;font-size:10px;color:var(--muted)}.filter-bar select{font-size:11px;max-width:270px}.table-scroll{overflow:auto;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.evidence-table{width:100%;font-size:12px;min-width:820px}.evidence-table th{text-align:left;font-size:10px;font-weight:500;color:var(--muted);background:var(--surface-alt);padding:12px 17px;border-bottom:1px solid var(--line)}.evidence-table td{padding:15px 17px;vertical-align:top;border-bottom:1px solid var(--line);font-size:11px;max-width:380px}.evidence-table tr:last-child td{border:0}.evidence-table tbody tr:hover{background:var(--surface-alt)}.evidence-title{text-align:left;display:flex;flex-direction:column;padding:0;gap:6px}.evidence-title>code{color:var(--accent);font-size:10px}.evidence-title>strong{font-size:12px;font-weight:500;line-height:1.7}.evidence-title>small{font-size:10px;color:var(--muted)}.numeric-cell{font-family:var(--mono)}.sources-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.source-item{display:flex;align-items:flex-start;gap:12px;padding:23px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.source-item>svg{color:var(--accent);margin-top:5px}.source-item h3{font-size:12px;line-height:1.8;margin:8px 0 12px}.source-item code{font-size:9px;color:var(--muted)}.source-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:9px;color:var(--muted);margin-bottom:13px;overflow-wrap:anywhere}.forest-svg{display:block;min-width:730px;width:100%;padding:18px 0}.zero-line{stroke:var(--faint);stroke-dasharray:3 3;stroke-width:1}.ci-line{stroke:var(--accent);stroke-width:1.5}.effect-dot{fill:var(--accent)}.forest-label{font:11px var(--mono);fill:var(--muted)}.graph-panel{border:1px solid var(--line);background:var(--surface);border-radius:9px;overflow:hidden}.graph-toolbar{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line)}.graph-toolbar>p{font-size:11px;color:var(--muted);margin:0}.button-group{display:flex}.graph-scroll{overflow:auto}.graph-scroll>svg{display:block;width:100%;color:var(--muted)}.graph-label{font:11px var(--font);fill:var(--muted)}.graph-edge{stroke:var(--line-strong);stroke-width:1.4}.graph-edge.support{stroke:var(--success)}.graph-edge.contradict{stroke:var(--danger);stroke-dasharray:4 3}.graph-node{cursor:pointer}.graph-node:focus{outline:none}.graph-node .graph-focus-ring{display:none}.graph-node:focus-visible .graph-focus-ring{display:block;fill:none;stroke:var(--accent);stroke-width:1.5;stroke-dasharray:3 2}.graph-flow{stroke:var(--accent);stroke-width:2;stroke-dasharray:16 84;stroke-linecap:round;opacity:.65;pointer-events:none;animation:relationship-flow 3.5s linear infinite}.graph-panel.compact{position:relative}.compact-flow-toggle{position:absolute;top:5px;right:5px;z-index:1;background:var(--surface)}.graph-flow.support{stroke:var(--success)}.graph-flow.contradict{stroke:var(--danger)}@keyframes relationship-flow{0%{stroke-dashoffset:100}to{stroke-dashoffset:0}}@media(prefers-reduced-motion:reduce){.graph-flow{display:none;animation:none}}@media print{.ambient-field,.ambient-glow,.graph-flow{display:none}}.graph-node rect{fill:var(--surface-alt);stroke:var(--line-strong);stroke-width:1}.graph-node.finding rect{fill:var(--accent-soft);stroke:var(--accent)}.graph-node.claim rect{fill:var(--success-soft);stroke:var(--success)}.graph-node.selected rect{stroke-width:3}.node-letter{fill:var(--ink);font:9px var(--mono)}.node-id{fill:var(--muted);font:8px var(--mono)}.graph-panel>.chart-note{padding:0 16px 16px}.graph-node-index{padding:12px 16px;display:flex;gap:5px;flex-wrap:wrap;border-top:1px solid var(--line)}.graph-node-index button{font:9px var(--mono);border:1px solid var(--line);padding:3px 5px;border-radius:3px;color:var(--muted)}.graph-node-index button.active{background:var(--accent-soft);color:var(--accent)}.graph-workspace{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:20px;align-items:start}.graph-inspector{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px;position:sticky;top:80px}.graph-inspector>h3{font-size:12px;line-height:1.8;margin-top:13px}.graph-inspector>p:not(.eyebrow){font-size:11px}.graph-inspector>p>code{display:block;font-size:9px}.graph-inspector>p>small{display:block;color:var(--muted)}.run-row{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin-bottom:10px}.run-row>summary{display:flex;align-items:center;gap:13px;padding:17px 19px}.run-row summary>div{flex:1;min-width:0}.run-row strong{display:block;font-size:12px;font-weight:550}.run-row small{display:block;font-size:9px;color:var(--muted);overflow-wrap:anywhere}.run-icon{color:var(--muted)}.run-body{border-top:1px solid var(--line);padding:16px 22px}.stage-track{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px}.stage-track>div{display:flex;flex-direction:column;align-items:flex-start;gap:5px;font-size:10px;background:var(--surface-alt);padding:10px;border-radius:5px}.event-list{list-style:none;margin:0;padding:5px 0}.event-list>li{display:grid;grid-template-columns:12px minmax(0,1fr);gap:16px;position:relative;padding:0 0 24px}.event-list>li:before{content:"";position:absolute;top:15px;bottom:0;left:3px;border-left:1px solid var(--line)}.event-dot{width:7px;height:7px;background:var(--accent);border-radius:50%;margin-top:7px}.event-header{display:flex;justify-content:space-between;gap:12px}.event-header strong{font-size:12px;font-weight:550}.event-header time{font-size:9px;color:var(--muted)}.raw-record{font-size:11px;margin-top:12px}.raw-record summary{color:var(--muted)}.raw-record pre{background:var(--surface-alt);padding:14px;border-radius:5px;max-height:350px;overflow:auto}.artifact-list>div{display:flex;align-items:flex-start;gap:12px;padding:18px 0;border-bottom:1px solid var(--line)}.artifact-list strong{display:block;font-size:12px}.artifact-list code{display:block;font-size:9px;color:var(--muted)}.artifact-list .raw-record{margin-left:auto}.revision-list>div{display:flex;gap:15px;align-items:center;padding:20px;background:var(--surface);border:1px solid var(--line);border-radius:8px;margin-bottom:10px}.revision-list strong{font-size:14px;font-weight:550;flex:1}.revision-list svg{color:var(--accent)}.snapshot{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:20px;margin-bottom:12px}.snapshot summary{display:flex;gap:15px;align-items:center;justify-content:space-between}.snapshot>p{font-size:11px;margin:15px 0}.theme-gallery{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin:24px 0}.theme-card{border:1px solid var(--line);border-radius:8px;padding:8px 8px 13px;background:var(--surface);text-align:left;min-width:0}.theme-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.theme-card>strong{display:block;font-size:11px;font-weight:580;margin:10px 5px 3px;overflow-wrap:anywhere}.theme-card>span{display:block;font-size:9px;line-height:1.7;margin:0 5px;color:var(--muted)}.theme-miniature{aspect-ratio:1.35;padding:14px;background:#f7f4ed;border:1px solid #e3dacf;border-radius:4px;--mini-ink: #94654c;--mini-muted: #d8cdbf}.theme-academic .theme-miniature{background:#fff;--mini-ink: #234b57;--mini-muted: #c9ced0;border-radius:0}.theme-datalab .theme-miniature{background:#eef2f8;--mini-ink: #2563eb;--mini-muted: #c5d1e2}.theme-datalab-dark .theme-miniature{background:#151c2a;--mini-ink: #7b9fff;--mini-muted: #354461;border-color:#333f58}.theme-presentation .theme-miniature{background:#161b23;--mini-ink: #e8a87c;--mini-muted: #45403e;border-color:#393e43}.mini-kicker{font-size:5px;letter-spacing:.13em;color:var(--mini-ink);margin-bottom:11px}.mini-heading{height:5px;width:88%;background:var(--mini-ink);opacity:.8;margin-bottom:5px;border-radius:1px}.mini-heading.small{width:55%}.mini-rule{border-top:1px solid var(--mini-muted);margin:11px 0}.mini-decision{position:relative;border:1px solid var(--mini-muted);padding:8px;margin-bottom:9px}.mini-decision span{display:block;width:38%;height:5px;background:var(--mini-ink);margin-bottom:5px}.mini-decision div,.mini-lines i{display:block;width:90%;height:2px;background:var(--mini-muted);margin-top:3px}.mini-lines{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.theme-academic .mini-decision{border-width:1px 0}.theme-presentation .mini-decision{padding:12px 8px;border-radius:3px}.theme-datalab .mini-lines i,.theme-datalab-dark .mini-lines i{height:9px}.reader{border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--surface)}.reader-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 17px;border-bottom:1px solid var(--line);background:var(--surface)}.reader-toolbar>span{display:flex;align-items:center;gap:8px;font-size:11px}.reader-toolbar>div{display:flex;gap:7px}.reader iframe{display:block;width:100%;height:78vh;min-height:550px;border:0;background:var(--canvas)}.reader-loading{padding:100px 25px;text-align:center;font-size:12px;color:var(--muted)}.project-select{display:flex;align-items:center;gap:20px;color:var(--muted);font-size:12px}.project-select select{max-width:760px;flex:1}.policy-strip{display:flex;align-items:center;gap:16px;border:1px solid var(--line);background:var(--surface-alt);padding:23px;border-radius:8px;margin-bottom:24px;font-size:13px}.policy-strip>.badge{margin-left:auto}.experiment-list{display:grid;gap:15px}.flow-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.flow-grid>article{padding:30px;background:var(--surface);border:1px solid var(--line);border-radius:9px}.flow-number{font:italic 36px var(--editorial);color:var(--accent);display:block;margin-bottom:26px}.flow-grid h2{font-family:var(--editorial);font-size:22px;font-weight:450}.flow-grid p{font-size:12px;color:var(--muted);line-height:1.9;margin:0}.protocol-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:9px;overflow:hidden}.protocol-grid>div{display:grid;grid-template-columns:30px 1fr;gap:5px 12px;background:var(--surface);padding:24px}.protocol-grid code{color:var(--accent);grid-row:span 2}.protocol-grid strong{font-weight:500;font-size:13px}.protocol-grid span{font-size:10px;color:var(--muted)}.principles{margin-top:28px;padding:28px;background:var(--surface-alt);border-radius:9px;border:1px solid var(--line)}.principles p{display:flex;align-items:center;gap:13px;font-size:12px;margin-bottom:16px}.principles p:last-child{margin:0}.principles svg{color:var(--accent)}.inspector{position:fixed;inset:0 0 0 auto;margin:0;max-height:100dvh;height:100dvh;width:min(540px,100%);max-width:100vw;background:var(--surface);color:var(--ink);border:0;border-left:1px solid var(--line);padding:27px 32px;box-shadow:-10px 0 50px #00000010;overflow:auto}.inspector::backdrop,.command-palette::backdrop{background:#17181565;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.inspector-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:28px}.inspector-top .eyebrow{margin:0}.entity-id{color:var(--accent)}.inspector h2{font-family:var(--editorial);font-size:24px;line-height:1.6;font-weight:400;margin:15px 0 20px}.inspector>.prose{margin-top:22px;font-size:13px}.source-callout{display:flex;gap:12px;background:var(--surface-alt);padding:20px;border-radius:7px;margin:22px 0}.source-callout h3{font-size:12px;line-height:1.8}.source-callout>svg{color:var(--accent);margin-top:3px}.command-palette{width:min(640px,92vw);background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:0;margin:14vh auto auto;max-height:68vh;overflow:hidden;box-shadow:0 30px 100px #00000024}.command-input{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line)}.command-input input{border:0;flex:1}.command-results{padding:10px;max-height:55vh;overflow:auto}.command-results>button{display:flex;align-items:center;gap:13px;width:100%;text-align:left;padding:14px 12px;font-size:12px;line-height:1.8;border-radius:7px}.command-results>button>span{flex:1}.command-results>button:hover{background:var(--surface-alt)}.command-results>button>svg{color:var(--muted)}.skip-link{position:fixed;left:250px;top:-100px;padding:10px 20px;background:var(--surface);z-index:100;border:1px solid var(--accent);border-radius:5px}.skip-link:focus{top:10px}.mobile-menu,.sidebar-shade{display:none}@keyframes spin{to{transform:rotate(360deg)}}}@layer responsive{@media(min-width:1700px){.project-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:1200px){.sidebar{width:205px;padding-left:12px;padding-right:12px}.main-shell{margin-left:205px}.main-content{padding:32px 28px 50px}.topbar{padding:0 28px}.feature-grid{grid-template-columns:minmax(0,1.8fr) minmax(210px,1fr)}.feature-case{padding:23px}.principle-card{padding:24px}.principle-card h2{font-size:22px}.graph-workspace{grid-template-columns:minmax(0,1fr)}.graph-inspector{position:static}.decision-surface{grid-template-columns:minmax(0,1fr) 180px}.decision-facts .stat{padding:15px}.theme-gallery{gap:8px}.theme-miniature{padding:10px}.theme-card>span{font-size:8px}.overview-bottom{grid-template-columns:minmax(0,1fr)}}@media(max-width:900px){.feature-grid{grid-template-columns:minmax(0,1fr)}.principle-card{display:none}.project-grid,.sources-grid,.takeaway-grid,.flow-grid{grid-template-columns:minmax(0,1fr)}.flow-grid>article{display:grid;grid-template-columns:48px 1fr;gap:10px 20px}.flow-number{grid-row:span 2;margin:0}.flow-grid h2{margin:0}.theme-gallery{grid-template-columns:repeat(3,minmax(0,1fr))}.theme-miniature{aspect-ratio:1.7}.reader-toolbar{align-items:flex-start;flex-direction:column}.reader-toolbar>div{flex-wrap:wrap}.filter-bar{align-items:stretch}.filter-bar .search-field{flex-basis:100%}.stat{padding:17px}.protocol-grid>div{padding:17px}}@media(max-width:680px){.sidebar{width:240px;transform:translate(-100%);visibility:hidden;z-index:50}.sidebar.is-open{visibility:visible;transform:none}.sidebar-shade{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:40}.main-shell{margin-left:0}.topbar{height:56px;padding:0 14px}.mobile-menu{display:inline-flex}.breadcrumb{gap:7px;font-size:10px}.topbar-actions{gap:3px}.connection{display:none}.language-button{padding:0 8px;font-size:10px}.main-content{padding:28px 19px 40px}.page-heading{margin-bottom:24px}.page-heading h1{font-size:28px;line-height:1.5}.page-lead{font-size:12px}.eyebrow{font-size:9px}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:20px}.stats-grid>.stat:nth-child(3){border-left:0;border-top:1px solid var(--line)}.stats-grid>.stat:nth-child(4){border-top:1px solid var(--line)}.stat{padding:16px 19px}.stat>strong{font-size:26px}.stat>span{font-size:10px}.feature-grid{margin-bottom:30px}.feature-case{padding:23px 20px}.feature-case>h2{font-size:22px;line-height:1.65}.mini-trace{height:110px;padding-left:0;padding-right:0}.trace-center{height:44px;width:44px;border-radius:12px}.trace-outcome{padding:8px;font-size:9px;max-width:90px}.library-toolbar{gap:10px}.library-toolbar>.segmented{width:100%}.segmented button{flex:1;padding:6px 9px}.project-card{padding:21px 20px 15px}.project-title h3{font-size:14px}.project-card-footer{font-size:9px}.project-heading h1{font-size:24px}.project-tabs{gap:21px;margin:23px 0}.project-tabs a{font-size:11px}.project-heading>p{font-size:9px}.decision-surface{grid-template-columns:minmax(0,1fr)}.decision-main{padding:25px 22px}.decision-main h2{font-size:29px}.decision-facts{grid-template-columns:repeat(4,minmax(0,1fr));border:0;border-top:1px solid var(--line);border-radius:0 0 10px 10px}.decision-facts .stat{padding:15px 10px;text-align:center}.decision-facts .stat>span{font-size:9px}.decision-facts .stat>strong{font-size:22px}.takeaway{padding:23px 21px}.takeaway-grid{gap:16px}.boundary-box{padding:18px}.definition>div{grid-template-columns:minmax(75px,.6fr) minmax(0,1.8fr);gap:13px}.definition dt{font-size:10px}.definition dd{font-size:11px}.filter-bar label:not(.search-field){flex:1;flex-direction:column;align-items:stretch;gap:5px}.filter-bar select{max-width:100%;width:100%}.theme-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.theme-card:last-child{grid-column:auto}.theme-miniature{aspect-ratio:1.4;padding:13px}.theme-card>span{font-size:9px}.project-select{flex-direction:column;align-items:stretch;gap:8px}.project-select select{width:100%;font-size:12px}.reader-toolbar{padding:12px}.reader-toolbar .button{font-size:10px;padding:6px 8px}.reader iframe{min-height:500px;height:75vh}.run-row>summary{padding:15px 12px;gap:9px}.run-row strong{font-size:11px}.run-row small{font-size:8px}.run-body{padding:15px}.stage-track{grid-template-columns:repeat(2,minmax(0,1fr))}.graph-toolbar{gap:10px;padding:10px}.graph-toolbar>p{font-size:10px}.graph-node-index{max-height:130px;overflow:auto}.protocol-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.flow-grid>article{padding:24px 20px}.policy-strip{padding:18px;flex-wrap:wrap}.policy-strip>span:not(.badge){font-size:11px}.policy-strip>.badge{margin:0}.principles{padding:22px 19px}.principles p{align-items:flex-start;font-size:11px}.principles svg{margin-top:3px}.inspector{padding:23px}.inspector h2{font-size:23px}.app-footer{margin:0 19px;font-size:8px}.skip-link{left:15px}.error-state{padding:30px 20px}.loading{padding:45px 20px}.empty{padding:30px 20px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media print{.sidebar,.topbar,.app-footer,.project-tabs,.icon-button{display:none!important}.main-shell{margin:0}.main-content{padding:0}.project-card,.takeaway,.decision-surface{break-inside:avoid}:root{color-scheme:light;--canvas: #fff;--surface: #fff;--ink: #111;--muted: #555;--line: #bbb;--surface-alt: #f6f6f6}}}