kibi-cli 2.0.0 → 2.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 (377) hide show
  1. package/dist/cli-protocol.d.ts.map +1 -1
  2. package/dist/cli-protocol.js +3 -2
  3. package/dist/cli-register-proof.d.ts.map +1 -1
  4. package/dist/cli-register-proof.js +25 -1
  5. package/dist/cli-register-reporting.d.ts.map +1 -1
  6. package/dist/cli-register-reporting.js +6 -0
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +2 -0
  9. package/dist/commands/aggregated-checks.d.ts +7 -0
  10. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  11. package/dist/commands/aggregated-checks.js +25 -1
  12. package/dist/commands/check-generated.d.ts +7 -0
  13. package/dist/commands/check-generated.d.ts.map +1 -0
  14. package/dist/commands/check-generated.js +192 -0
  15. package/dist/commands/check.d.ts.map +1 -1
  16. package/dist/commands/check.js +24 -15
  17. package/dist/commands/doctor.d.ts.map +1 -1
  18. package/dist/commands/doctor.js +227 -25
  19. package/dist/commands/engine.d.ts.map +1 -1
  20. package/dist/commands/engine.js +3 -1
  21. package/dist/commands/github-init.d.ts +1 -1
  22. package/dist/commands/github-init.d.ts.map +1 -1
  23. package/dist/commands/github-init.js +1 -1
  24. package/dist/commands/init-helpers.d.ts +17 -2
  25. package/dist/commands/init-helpers.d.ts.map +1 -1
  26. package/dist/commands/init-helpers.js +136 -30
  27. package/dist/commands/init.d.ts.map +1 -1
  28. package/dist/commands/init.js +110 -15
  29. package/dist/commands/proof-explain.d.ts +10 -0
  30. package/dist/commands/proof-explain.d.ts.map +1 -0
  31. package/dist/commands/proof-explain.js +45 -0
  32. package/dist/commands/proof-impact.d.ts +7 -0
  33. package/dist/commands/proof-impact.d.ts.map +1 -0
  34. package/dist/commands/proof-impact.js +39 -0
  35. package/dist/commands/proof-migrate-legacy.js +1 -1
  36. package/dist/commands/proof-prune.js +1 -1
  37. package/dist/commands/prove.d.ts.map +1 -1
  38. package/dist/commands/prove.js +14 -22
  39. package/dist/commands/report.d.ts.map +1 -1
  40. package/dist/commands/report.js +17 -2
  41. package/dist/commands/sync/cache.d.ts +20 -1
  42. package/dist/commands/sync/cache.d.ts.map +1 -1
  43. package/dist/commands/sync/cache.js +51 -2
  44. package/dist/commands/sync/discovery.d.ts.map +1 -1
  45. package/dist/commands/sync/discovery.js +1 -1
  46. package/dist/commands/sync/manifest.d.ts +1 -0
  47. package/dist/commands/sync/manifest.d.ts.map +1 -1
  48. package/dist/commands/sync/manifest.js +18 -16
  49. package/dist/commands/sync/persistence.d.ts.map +1 -1
  50. package/dist/commands/sync/persistence.js +14 -0
  51. package/dist/commands/sync.d.ts.map +1 -1
  52. package/dist/commands/sync.js +11 -3
  53. package/dist/engine.d.ts +29 -1
  54. package/dist/engine.d.ts.map +1 -1
  55. package/dist/engine.js +259 -89
  56. package/dist/env/bootstrap.d.ts +84 -0
  57. package/dist/env/bootstrap.d.ts.map +1 -0
  58. package/dist/env/bootstrap.js +310 -0
  59. package/dist/extractors/manifest.d.ts.map +1 -1
  60. package/dist/extractors/manifest.js +67 -29
  61. package/dist/extractors/markdown.d.ts +4 -0
  62. package/dist/extractors/markdown.d.ts.map +1 -1
  63. package/dist/extractors/markdown.js +33 -3
  64. package/dist/extractors/relationships.d.ts.map +1 -1
  65. package/dist/extractors/relationships.js +1 -0
  66. package/dist/extractors/symbols-coordinator.d.ts +8 -0
  67. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  68. package/dist/extractors/symbols-coordinator.js +40 -0
  69. package/dist/extractors/symbols-ts.d.ts +8 -19
  70. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  71. package/dist/extractors/symbols-ts.js +33 -503
  72. package/dist/intent-search.d.ts.map +1 -1
  73. package/dist/intent-search.js +68 -30
  74. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  75. package/dist/operations/bootstrap/generate.js +4 -3
  76. package/dist/operations/modeling/model-requirement.d.ts +1 -1
  77. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  78. package/dist/operations/modeling/model-requirement.js +179 -9
  79. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  80. package/dist/operations/modeling/predicate-applyplan.js +14 -2
  81. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  82. package/dist/operations/modeling/predicate-loader.js +24 -0
  83. package/dist/operations/modeling/predicate-types.d.ts +4 -0
  84. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  85. package/dist/operations/modeling/predicate-vocabulary.d.ts +54 -0
  86. package/dist/operations/modeling/predicate-vocabulary.d.ts.map +1 -0
  87. package/dist/operations/modeling/predicate-vocabulary.js +169 -0
  88. package/dist/operations/modeling/requirement-types.d.ts +5 -0
  89. package/dist/operations/modeling/requirement-types.d.ts.map +1 -1
  90. package/dist/operations/modeling/suggest-predicates.d.ts +1 -1
  91. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  92. package/dist/operations/modeling/suggest-predicates.js +30 -3
  93. package/dist/operations/modeling/vocabulary-alignment.d.ts +60 -0
  94. package/dist/operations/modeling/vocabulary-alignment.d.ts.map +1 -0
  95. package/dist/operations/modeling/vocabulary-alignment.js +178 -0
  96. package/dist/operations/mutation/contradictions.d.ts +3 -0
  97. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  98. package/dist/operations/mutation/contradictions.js +29 -0
  99. package/dist/operations/mutation/delete.d.ts.map +1 -1
  100. package/dist/operations/mutation/delete.js +33 -1
  101. package/dist/operations/mutation/predicate-vocabulary-guard.d.ts +8 -0
  102. package/dist/operations/mutation/predicate-vocabulary-guard.d.ts.map +1 -0
  103. package/dist/operations/mutation/predicate-vocabulary-guard.js +64 -0
  104. package/dist/operations/mutation/relationships.d.ts +1 -1
  105. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  106. package/dist/operations/mutation/relationships.js +1 -0
  107. package/dist/operations/mutation/saga.d.ts +5 -0
  108. package/dist/operations/mutation/saga.d.ts.map +1 -1
  109. package/dist/operations/mutation/saga.js +10 -0
  110. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  111. package/dist/operations/mutation/serialization.js +2 -0
  112. package/dist/operations/mutation/source-authoring.d.ts +6 -0
  113. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  114. package/dist/operations/mutation/source-authoring.js +65 -26
  115. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  116. package/dist/operations/mutation/strict-fact.js +5 -0
  117. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  118. package/dist/operations/mutation/symbol-granularity.js +9 -87
  119. package/dist/operations/mutation/types.d.ts +17 -0
  120. package/dist/operations/mutation/types.d.ts.map +1 -1
  121. package/dist/operations/mutation/upsert.d.ts +6 -0
  122. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  123. package/dist/operations/mutation/upsert.js +72 -4
  124. package/dist/operations/mutation/validate-upsert.d.ts.map +1 -1
  125. package/dist/operations/mutation/validate-upsert.js +24 -1
  126. package/dist/operations/mutation/validation.d.ts.map +1 -1
  127. package/dist/operations/mutation/validation.js +16 -3
  128. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  129. package/dist/operations/planning/apply-plan.js +61 -17
  130. package/dist/operations/planning/compile-intent.d.ts +49 -0
  131. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  132. package/dist/operations/planning/compile-intent.js +66 -4
  133. package/dist/operations/proof/baseline-diff.d.ts +41 -0
  134. package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
  135. package/dist/operations/proof/baseline-diff.js +153 -0
  136. package/dist/operations/proof/code-scope.d.ts +17 -0
  137. package/dist/operations/proof/code-scope.d.ts.map +1 -0
  138. package/dist/operations/proof/code-scope.js +60 -0
  139. package/dist/operations/proof/explain.d.ts +75 -0
  140. package/dist/operations/proof/explain.d.ts.map +1 -0
  141. package/dist/operations/proof/explain.js +294 -0
  142. package/dist/operations/proof/impact.d.ts +45 -0
  143. package/dist/operations/proof/impact.d.ts.map +1 -0
  144. package/dist/operations/proof/impact.js +118 -0
  145. package/dist/operations/proof/ingest-proof.d.ts +4 -2
  146. package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
  147. package/dist/operations/proof/ingest-proof.js +251 -77
  148. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -1
  149. package/dist/operations/proof/migrate-legacy-receipts.js +28 -22
  150. package/dist/operations/proof/prune-receipts.d.ts.map +1 -1
  151. package/dist/operations/proof/prune-receipts.js +8 -6
  152. package/dist/operations/proof/receipt-document.js +2 -2
  153. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  154. package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
  155. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  156. package/dist/operations/semantic-advisor/analyze-prose.js +18 -67
  157. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
  158. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
  159. package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
  160. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
  161. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
  162. package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
  163. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
  164. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
  165. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
  166. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
  167. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
  168. package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
  169. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
  170. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
  171. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
  172. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
  173. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
  174. package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
  175. package/dist/operations/semantic-advisor/types.d.ts +1 -0
  176. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  177. package/dist/plugins/compose-ontology-packs.d.ts +51 -0
  178. package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
  179. package/dist/plugins/compose-ontology-packs.js +257 -0
  180. package/dist/plugins/compose-semantic-classifier.d.ts +47 -0
  181. package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
  182. package/dist/plugins/compose-semantic-classifier.js +216 -0
  183. package/dist/plugins/compose-vocabulary-alignment.d.ts +23 -0
  184. package/dist/plugins/compose-vocabulary-alignment.d.ts.map +1 -0
  185. package/dist/plugins/compose-vocabulary-alignment.js +141 -0
  186. package/dist/plugins/external-allowlist.d.ts +17 -0
  187. package/dist/plugins/external-allowlist.d.ts.map +1 -0
  188. package/dist/plugins/external-allowlist.js +29 -0
  189. package/dist/plugins/index.d.ts +11 -0
  190. package/dist/plugins/index.d.ts.map +1 -0
  191. package/dist/plugins/index.js +37 -0
  192. package/dist/plugins/load-plugin.d.ts +19 -0
  193. package/dist/plugins/load-plugin.d.ts.map +1 -0
  194. package/dist/plugins/load-plugin.js +59 -0
  195. package/dist/plugins/project-config.d.ts +28 -0
  196. package/dist/plugins/project-config.d.ts.map +1 -0
  197. package/dist/plugins/project-config.js +90 -0
  198. package/dist/plugins/registry.d.ts +94 -0
  199. package/dist/plugins/registry.d.ts.map +1 -0
  200. package/dist/plugins/registry.js +359 -0
  201. package/dist/plugins/resolve-package.d.ts +47 -0
  202. package/dist/plugins/resolve-package.d.ts.map +1 -0
  203. package/dist/plugins/resolve-package.js +262 -0
  204. package/dist/plugins/source-analysis-service.d.ts +44 -0
  205. package/dist/plugins/source-analysis-service.d.ts.map +1 -0
  206. package/dist/plugins/source-analysis-service.js +232 -0
  207. package/dist/prolog/codec.d.ts.map +1 -1
  208. package/dist/prolog/codec.js +2 -0
  209. package/dist/prolog/janitor.d.ts.map +1 -1
  210. package/dist/prolog/janitor.js +1 -1
  211. package/dist/prolog/store-lock.d.ts +1 -1
  212. package/dist/prolog/store-lock.d.ts.map +1 -1
  213. package/dist/prolog.d.ts +36 -0
  214. package/dist/prolog.d.ts.map +1 -1
  215. package/dist/prolog.js +78 -9
  216. package/dist/proof/inspect.js +1 -1
  217. package/dist/proof/producers/playwright-case-id.js +2 -2
  218. package/dist/proof/producers/playwright-reporter.js +4 -4
  219. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  220. package/dist/public/diagnostic-usage.js +7 -25
  221. package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
  222. package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
  223. package/dist/public/extractors/symbols-coordinator.js +1 -1
  224. package/dist/public/impact/analyzer.d.ts +1 -1
  225. package/dist/public/impact/analyzer.d.ts.map +1 -1
  226. package/dist/public/impact/analyzer.js +6 -4
  227. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  228. package/dist/public/impact/full-kb-quality.js +4 -12
  229. package/dist/public/operations/catalog.d.ts +39 -7
  230. package/dist/public/operations/catalog.d.ts.map +1 -1
  231. package/dist/public/operations/check-executor.d.ts.map +1 -1
  232. package/dist/public/operations/check-executor.js +11 -3
  233. package/dist/public/operations/check-helpers.d.ts +7 -1
  234. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  235. package/dist/public/operations/check-helpers.js +22 -2
  236. package/dist/public/operations/contracts.d.ts.map +1 -1
  237. package/dist/public/operations/contracts.js +51 -12
  238. package/dist/public/operations/discovery-entities.d.ts +53 -1
  239. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  240. package/dist/public/operations/discovery-entities.js +219 -12
  241. package/dist/public/operations/discovery-executors.d.ts +1 -0
  242. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  243. package/dist/public/operations/discovery-executors.js +93 -59
  244. package/dist/public/operations/migration-plan.d.ts +2 -0
  245. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  246. package/dist/public/operations/migration-plan.js +50 -0
  247. package/dist/public/operations/predicate-schema-conformance.d.ts +41 -0
  248. package/dist/public/operations/predicate-schema-conformance.d.ts.map +1 -0
  249. package/dist/public/operations/predicate-schema-conformance.js +242 -0
  250. package/dist/public/operations/prolog-json.d.ts +1 -1
  251. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  252. package/dist/public/operations/prolog-json.js +16 -10
  253. package/dist/public/operations/result-envelope.d.ts +34 -1
  254. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  255. package/dist/public/operations/result-envelope.js +78 -2
  256. package/dist/public/operations/runtime-types.d.ts +17 -2
  257. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  258. package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
  259. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
  260. package/dist/public/operations/specs/check-rules.generated.js +9 -1
  261. package/dist/public/operations/specs/check.d.ts +1 -1
  262. package/dist/public/operations/specs/discovery.d.ts +10 -1
  263. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  264. package/dist/public/operations/specs/discovery.js +10 -1
  265. package/dist/public/operations/specs/mutation-schemas.d.ts +27 -4
  266. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  267. package/dist/public/operations/specs/mutation-schemas.js +21 -3
  268. package/dist/public/operations/specs/proof.js +1 -1
  269. package/dist/public/operations/specs/reporting.d.ts +9 -0
  270. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  271. package/dist/public/operations/specs/reporting.js +48 -17
  272. package/dist/public/operations/specs/semantic.d.ts +1 -1
  273. package/dist/public/operations/specs/semantic.d.ts.map +1 -1
  274. package/dist/public/operations/specs/semantic.js +54 -4
  275. package/dist/public/operations/specs/upsert.d.ts +28 -5
  276. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  277. package/dist/public/operations/specs/upsert.js +1 -1
  278. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  279. package/dist/public/operations/symbol-repair-plan.js +11 -4
  280. package/dist/public/operations/types.d.ts +5 -0
  281. package/dist/public/operations/types.d.ts.map +1 -1
  282. package/dist/public/proof-protocol.js +4 -4
  283. package/dist/public/schemas/entity.d.ts.map +1 -1
  284. package/dist/public/schemas/entity.js +22 -0
  285. package/dist/public/schemas/relationship.d.ts.map +1 -1
  286. package/dist/public/schemas/relationship.js +1 -0
  287. package/dist/public/skills/kibi-usage/SKILL.md +10 -3
  288. package/dist/public/skills/kibi-usage/resources/fact-lanes.md +4 -0
  289. package/dist/public/skills/kibi-usage/resources/proof.md +45 -0
  290. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +35 -17
  291. package/dist/public/skills/kibi-usage/resources/source-authoring.md +36 -0
  292. package/dist/public/skills/kibi-usage/resources/workflows.md +52 -1
  293. package/dist/public/symbol-granularity.d.ts +1 -1
  294. package/dist/public/symbol-granularity.d.ts.map +1 -1
  295. package/dist/public/symbol-granularity.generated.d.ts.map +1 -1
  296. package/dist/public/symbol-granularity.generated.js +38 -5
  297. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  298. package/dist/public/telemetry-acceptance.js +21 -5
  299. package/dist/relationships/shards.d.ts +6 -0
  300. package/dist/relationships/shards.d.ts.map +1 -1
  301. package/dist/relationships/shards.js +26 -19
  302. package/dist/report/html-report.css +1239 -281
  303. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  304. package/dist/runtime/cli-runtime.js +18 -0
  305. package/dist/schemas/entity.schema.json +32 -0
  306. package/dist/traceability/staged-diagnostics.d.ts +1 -1
  307. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  308. package/dist/traceability/staged-entity-id-style.d.ts +12 -0
  309. package/dist/traceability/staged-entity-id-style.d.ts.map +1 -0
  310. package/dist/traceability/staged-entity-id-style.js +68 -0
  311. package/dist/traceability/symbol-extract.d.ts +24 -7
  312. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  313. package/dist/traceability/symbol-extract.js +64 -208
  314. package/dist/traceability/temp-kb.d.ts.map +1 -1
  315. package/dist/traceability/temp-kb.js +8 -0
  316. package/dist/traceability/validate.js +1 -1
  317. package/dist/types/entities.d.ts +2 -0
  318. package/dist/types/entities.d.ts.map +1 -1
  319. package/dist/types/relationships.d.ts +1 -1
  320. package/dist/types/relationships.d.ts.map +1 -1
  321. package/dist/utils/entity-id-style.d.ts +27 -0
  322. package/dist/utils/entity-id-style.d.ts.map +1 -0
  323. package/dist/utils/entity-id-style.js +81 -0
  324. package/dist/utils/git-repository-context.d.ts +50 -0
  325. package/dist/utils/git-repository-context.d.ts.map +1 -0
  326. package/dist/utils/git-repository-context.js +259 -0
  327. package/dist/utils/rule-registry.d.ts +5 -0
  328. package/dist/utils/rule-registry.d.ts.map +1 -1
  329. package/dist/utils/rule-registry.generated.d.ts +42 -0
  330. package/dist/utils/rule-registry.generated.d.ts.map +1 -1
  331. package/dist/utils/rule-registry.generated.js +50 -0
  332. package/dist/utils/strict-modeling.d.ts +7 -0
  333. package/dist/utils/strict-modeling.d.ts.map +1 -1
  334. package/dist/utils/strict-modeling.js +11 -0
  335. package/package.json +14 -11
  336. package/schema/entities.pl +60 -1
  337. package/schema/relationships.pl +17 -4
  338. package/schema/validation.pl +118 -20
  339. package/src/public/diagnostic-usage.ts +16 -24
  340. package/src/public/extractors/symbols-coordinator.ts +1 -0
  341. package/src/public/impact/analyzer.ts +15 -12
  342. package/src/public/impact/full-kb-quality.ts +4 -16
  343. package/src/public/operations/check-executor.ts +13 -2
  344. package/src/public/operations/check-helpers.ts +29 -3
  345. package/src/public/operations/contracts.ts +59 -12
  346. package/src/public/operations/discovery-entities.ts +327 -12
  347. package/src/public/operations/discovery-executors.ts +110 -61
  348. package/src/public/operations/migration-plan.ts +57 -0
  349. package/src/public/operations/predicate-schema-conformance.ts +362 -0
  350. package/src/public/operations/prolog-json.ts +22 -8
  351. package/src/public/operations/result-envelope.ts +114 -2
  352. package/src/public/operations/runtime-types.ts +22 -3
  353. package/src/public/operations/specs/check-rules.generated.ts +9 -1
  354. package/src/public/operations/specs/discovery.ts +11 -1
  355. package/src/public/operations/specs/mutation-schemas.ts +23 -3
  356. package/src/public/operations/specs/proof.ts +1 -1
  357. package/src/public/operations/specs/reporting.ts +71 -24
  358. package/src/public/operations/specs/semantic.ts +79 -17
  359. package/src/public/operations/specs/upsert.ts +1 -1
  360. package/src/public/operations/symbol-repair-plan.ts +16 -7
  361. package/src/public/operations/types.ts +5 -0
  362. package/src/public/proof-fingerprint.ts +1 -1
  363. package/src/public/proof-protocol-types.d.ts +1 -1
  364. package/src/public/proof-protocol.ts +4 -4
  365. package/src/public/schemas/entity.ts +22 -0
  366. package/src/public/schemas/relationship.ts +1 -0
  367. package/src/public/skills/kibi-usage/SKILL.md +10 -3
  368. package/src/public/skills/kibi-usage/resources/fact-lanes.md +4 -0
  369. package/src/public/skills/kibi-usage/resources/proof.md +45 -0
  370. package/src/public/skills/kibi-usage/resources/relationship-directions.md +35 -17
  371. package/src/public/skills/kibi-usage/resources/source-authoring.md +36 -0
  372. package/src/public/skills/kibi-usage/resources/workflows.md +52 -1
  373. package/src/public/symbol-granularity.generated.ts +45 -12
  374. package/src/public/symbol-granularity.ts +3 -3
  375. package/src/public/telemetry-acceptance.ts +37 -6
  376. package/src/schemas/entity.schema.json +32 -0
  377. package/src/schemas/relationship.schema.json +1 -0
@@ -1,282 +1,1240 @@
1
- :root {
2
- color-scheme: dark;
3
- --bg: #090d18;
4
- --surface: rgba(20, 27, 45, .86);
5
- --surface-strong: #151d30;
6
- --line: rgba(157, 171, 206, .16);
7
- --text: #f4f7ff;
8
- --muted: #9ba7c3;
9
- --violet: #9d84ff;
10
- --cyan: #5ce1e6;
11
- --green: #62e6a7;
12
- --amber: #ffc96b;
13
- --red: #ff7d90;
14
- --shadow: 0 30px 80px rgba(0, 0, 0, .35);
15
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
16
- }
17
- * { box-sizing: border-box; }
18
- html { scroll-behavior: smooth; }
19
- body {
20
- margin: 0;
21
- min-width: 320px;
22
- color: var(--text);
23
- background:
24
- radial-gradient(circle at 12% -10%, rgba(93, 74, 190, .32), transparent 34rem),
25
- radial-gradient(circle at 88% 8%, rgba(33, 153, 166, .19), transparent 30rem),
26
- var(--bg);
27
- }
28
- body::before {
29
- position: fixed;
30
- inset: 0;
31
- z-index: -1;
32
- content: "";
33
- opacity: .18;
34
- background-image: linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
35
- background-size: 38px 38px;
36
- mask-image: linear-gradient(to bottom, black, transparent 75%);
37
- }
38
- .shell { width: min(1160px, calc(100% - 40px)); margin: 0 auto; }
39
- .topbar { display: flex; align-items: center; justify-content: space-between; padding: 34px 0 16px; }
40
- .brand { display: flex; align-items: center; gap: 12px; font-weight: 900; letter-spacing: .3em; }
41
- .brand__mark { display: grid; width: 34px; height: 34px; place-items: center; border: 1px solid rgba(157,132,255,.55); border-radius: 11px; color: var(--violet); background: rgba(157,132,255,.12); box-shadow: inset 0 0 18px rgba(157,132,255,.12); }
42
- .snapshot { color: var(--muted); font: 500 12px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; }
43
- .hero { display: grid; grid-template-columns: 1.15fr .85fr; gap: 30px; align-items: stretch; padding: 42px 0 26px; }
44
- .hero__copy, .score-card { border: 1px solid var(--line); border-radius: 28px; background: linear-gradient(145deg, rgba(25,33,54,.92), rgba(13,18,31,.82)); box-shadow: var(--shadow); }
45
- .hero__copy { padding: clamp(30px, 5vw, 62px); }
46
- .eyebrow { margin: 0 0 17px; color: var(--cyan); font-size: 12px; font-weight: 800; letter-spacing: .18em; text-transform: uppercase; }
47
- h1 { max-width: 720px; margin: 0; font-size: clamp(42px, 7vw, 76px); font-weight: 760; letter-spacing: -.055em; line-height: .98; }
48
- h1 span { display: block; color: var(--muted); font-size: .42em; font-weight: 620; letter-spacing: -.025em; line-height: 1.4; }
49
- .hero__lede { max-width: 620px; margin: 25px 0 0; color: #bdc6dc; font-size: 17px; line-height: 1.65; }
50
- .score-card { display: grid; min-height: 340px; padding: 38px; place-items: center; text-align: center; }
51
- .score-ring { --score: 0%; position: relative; display: grid; width: 220px; aspect-ratio: 1; place-items: center; border-radius: 50%; background: conic-gradient(var(--green) var(--score), rgba(255,255,255,.08) 0); box-shadow: 0 0 60px rgba(98,230,167,.12); }
52
- .score-ring::before { position: absolute; width: 178px; aspect-ratio: 1; content: ""; border: 1px solid var(--line); border-radius: inherit; background: #111827; }
53
- .score-ring__value { position: relative; font-size: 52px; font-weight: 820; letter-spacing: -.06em; }
54
- .score-ring__value span { margin-left: 2px; color: var(--muted); font-size: 22px; }
55
- .score-card p { position: relative; margin: 13px 0 0; color: var(--muted); font-size: 13px; font-weight: 750; letter-spacing: .12em; text-transform: uppercase; }
56
- .snapshot-notice { display: flex; gap: 14px; align-items: center; margin: 3px 0 23px; padding: 15px 18px; border: 1px solid rgba(255,201,107,.3); border-radius: 15px; color: #f8dfb2; background: rgba(255,201,107,.08); }
57
- .snapshot-notice strong { flex: none; color: var(--amber); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; }
58
- .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); overflow: hidden; margin: 0 0 62px; border: 1px solid var(--line); border-radius: 20px; background: rgba(18,25,42,.74); box-shadow: var(--shadow); }
59
- .metric { min-width: 0; padding: 22px 20px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
60
- .metric:last-child { border-right: 0; }
61
- .metric span { display: block; min-height: 32px; color: var(--muted); font-size: 12px; line-height: 1.35; }
62
- .metric strong { display: block; margin-top: 6px; font-size: 30px; letter-spacing: -.035em; }
63
- .metric--good strong { color: var(--green); }
64
- .metric--warn strong { color: var(--amber); }
65
- .metric--bad strong { color: var(--red); }
66
- .section-header { display: flex; gap: 24px; align-items: end; justify-content: space-between; margin-bottom: 24px; }
67
- .section-header h2 { margin: 0; font-size: clamp(29px, 4vw, 42px); letter-spacing: -.04em; }
68
- .section-header p { max-width: 590px; margin: 8px 0 0; color: var(--muted); line-height: 1.55; }
69
- .controls { position: sticky; top: 12px; z-index: 4; display: flex; gap: 12px; margin: 0 0 24px; padding: 12px; border: 1px solid var(--line); border-radius: 18px; background: rgba(9,13,24,.86); box-shadow: 0 16px 40px rgba(0,0,0,.25); backdrop-filter: blur(18px); }
70
- .search { min-width: 180px; flex: 1; padding: 12px 15px; border: 1px solid var(--line); border-radius: 12px; outline: none; color: var(--text); background: rgba(255,255,255,.045); font: inherit; }
71
- .search:focus { border-color: var(--violet); box-shadow: 0 0 0 3px rgba(157,132,255,.12); }
72
- .filters { display: flex; gap: 7px; overflow-x: auto; }
73
- .filter { padding: 10px 13px; border: 1px solid transparent; border-radius: 11px; color: var(--muted); background: transparent; cursor: pointer; font: inherit; font-size: 12px; font-weight: 650; white-space: nowrap; }
74
- .filter:hover { color: var(--text); background: rgba(255,255,255,.05); }
75
- .filter[aria-pressed="true"] { border-color: rgba(157,132,255,.38); color: #ddd5ff; background: rgba(157,132,255,.14); }
76
- .requirements { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; padding-bottom: 80px; }
77
- .requirement { position: relative; overflow: hidden; padding: 25px; border: 1px solid var(--line); border-radius: 20px; background: linear-gradient(145deg, rgba(22,30,50,.94), rgba(15,21,36,.9)); box-shadow: 0 16px 45px rgba(0,0,0,.2); }
78
- .requirement::before { position: absolute; inset: 0 auto 0 0; width: 3px; content: ""; background: var(--amber); }
79
- .requirement--proven::before { background: var(--green); }
80
- .requirement--unresolved::before { background: var(--red); }
81
- .requirement[hidden] { display: none; }
82
- .requirement__header { display: flex; gap: 18px; align-items: start; justify-content: space-between; }
83
- .requirement__id { margin-bottom: 7px; color: var(--muted); font: 700 11px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .05em; }
84
- .requirement h3 { margin: 0; font-size: 20px; line-height: 1.25; letter-spacing: -.02em; }
85
- .proof-badge { flex: none; padding: 7px 9px; border: 1px solid rgba(255,201,107,.25); border-radius: 999px; color: var(--amber); background: rgba(255,201,107,.08); font-size: 10px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; }
86
- .proof-badge--proven { border-color: rgba(98,230,167,.25); color: var(--green); background: rgba(98,230,167,.08); }
87
- .proof-badge--unresolved { border-color: rgba(255,125,144,.25); color: var(--red); background: rgba(255,125,144,.08); }
88
- .stages { display: grid; gap: 9px; margin: 24px 0 0; padding: 0; list-style: none; }
89
- .stage { display: grid; grid-template-columns: 20px minmax(100px, .7fr) 1.3fr; gap: 8px; align-items: baseline; }
90
- .stage__icon { display: grid; width: 17px; height: 17px; place-items: center; border-radius: 50%; color: #08130e; background: var(--green); font-size: 11px; font-weight: 900; }
91
- .stage--warning .stage__icon { color: #241602; background: var(--amber); }
92
- .stage--failed .stage__icon { color: #24080c; background: var(--red); }
93
- .stage--muted .stage__icon { color: var(--muted); background: rgba(255,255,255,.08); }
94
- .stage__label { font-size: 13px; font-weight: 720; }
95
- .stage__detail { color: var(--muted); font-size: 12px; line-height: 1.45; }
96
- .contradiction { margin-top: 21px; padding: 16px; border: 1px solid rgba(255,125,144,.24); border-radius: 14px; background: rgba(255,125,144,.07); }
97
- .contradiction__eyebrow { color: var(--red); font-size: 10px; font-weight: 850; letter-spacing: .1em; text-transform: uppercase; }
98
- .contradiction__values { display: flex; gap: 11px; align-items: center; margin-top: 9px; font: 750 15px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; }
99
- .contradiction__values b { color: var(--red); }
100
- .contradiction p { margin: 8px 0 0; color: #d9a9b1; font-size: 12px; line-height: 1.5; }
101
- .proof-gaps { margin-top: 18px; border-top: 1px solid var(--line); color: var(--muted); font-size: 12px; }
102
- .proof-advisories { margin-top: 12px; border-top: 1px solid var(--line); color: var(--muted); font-size: 12px; }
103
- .proof-gaps summary, .proof-advisories summary { padding-top: 14px; cursor: pointer; font-weight: 700; }
104
- .proof-gaps ul, .proof-advisories ul { columns: 2; margin: 11px 0 0; padding-left: 18px; }
105
- .proof-gaps li, .proof-advisories li { margin-bottom: 7px; break-inside: avoid; }
106
- .empty { display: none; padding: 70px 20px; border: 1px dashed var(--line); border-radius: 20px; color: var(--muted); text-align: center; }
107
- .empty[data-visible="true"] { display: block; }
108
- footer { display: flex; gap: 20px; justify-content: space-between; padding: 30px 0 48px; border-top: 1px solid var(--line); color: var(--muted); font-size: 12px; }
109
- @media (max-width: 960px) {
110
- .hero { grid-template-columns: 1fr; }
111
- .score-card { min-height: 290px; }
112
- .metrics { grid-template-columns: repeat(3, 1fr); }
113
- .metric:nth-child(3) { border-right: 0; }
114
- .metric:nth-child(-n+3) { border-bottom: 1px solid var(--line); }
115
- }
116
- @media (max-width: 760px) {
117
- .shell { width: min(100% - 24px, 1160px); }
118
- .topbar { padding-top: 22px; }
119
- .hero { padding-top: 20px; }
120
- .hero__copy, .score-card { border-radius: 22px; }
121
- .requirements { grid-template-columns: 1fr; }
122
- .section-header { align-items: start; flex-direction: column; }
123
- .controls { align-items: stretch; flex-direction: column; }
124
- .filters { padding-bottom: 2px; }
125
- footer { flex-direction: column; }
126
- }
127
- @media (max-width: 520px) {
128
- .metrics { grid-template-columns: repeat(2, 1fr); }
129
- .metric { border-bottom: 1px solid var(--line); }
130
- .metric:nth-child(2n) { border-right: 0; }
131
- .metric:nth-last-child(-n+2) { border-bottom: 0; }
132
- .stage { grid-template-columns: 20px 1fr; }
133
- .stage__detail { grid-column: 2; }
134
- .proof-gaps ul { columns: 1; }
135
- }
136
- @media print {
137
- body { background: #fff; color: #111827; }
138
- body::before, .controls { display: none; }
139
- .hero__copy, .score-card, .metrics, .requirement { border-color: #d9deea; color: #111827; background: #fff; box-shadow: none; break-inside: avoid; }
140
- .requirements { display: block; }
141
- .requirement { margin-bottom: 14px; }
142
- .hero__lede, .metric span, .stage__detail, .section-header p, footer { color: #59647a; }
143
- }
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #090d18;
4
+ --surface: rgba(20, 27, 45, 0.86);
5
+ --surface-strong: #151d30;
6
+ --line: rgba(157, 171, 206, 0.16);
7
+ --text: #f4f7ff;
8
+ --muted: #9ba7c3;
9
+ --violet: #9d84ff;
10
+ --cyan: #5ce1e6;
11
+ --green: #62e6a7;
12
+ --amber: #ffc96b;
13
+ --red: #ff7d90;
14
+ --shadow: 0 30px 80px rgba(0, 0, 0, 0.35);
15
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system,
16
+ BlinkMacSystemFont, "Segoe UI", sans-serif;
17
+ }
18
+ * {
19
+ box-sizing: border-box;
20
+ }
21
+ html {
22
+ scroll-behavior: smooth;
23
+ }
24
+ body {
25
+ margin: 0;
26
+ min-width: 320px;
27
+ color: var(--text);
28
+ background: radial-gradient(
29
+ circle at 12% -10%,
30
+ rgba(93, 74, 190, 0.32),
31
+ transparent 34rem
32
+ ),
33
+ radial-gradient(
34
+ circle at 88% 8%,
35
+ rgba(33, 153, 166, 0.19),
36
+ transparent 30rem
37
+ ), var(--bg);
38
+ }
39
+ body::before {
40
+ position: fixed;
41
+ inset: 0;
42
+ z-index: -1;
43
+ content: "";
44
+ opacity: 0.18;
45
+ background-image: linear-gradient(
46
+ rgba(255, 255, 255, 0.035) 1px,
47
+ transparent 1px
48
+ ), linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px);
49
+ background-size: 38px 38px;
50
+ mask-image: linear-gradient(to bottom, black, transparent 75%);
51
+ }
52
+ .shell {
53
+ width: min(1160px, calc(100% - 40px));
54
+ margin: 0 auto;
55
+ }
56
+ .topbar {
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: space-between;
60
+ padding: 34px 0 16px;
61
+ }
62
+ .brand {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 12px;
66
+ font-weight: 900;
67
+ letter-spacing: .3em;
68
+ }
69
+ .brand__mark {
70
+ display: grid;
71
+ width: 34px;
72
+ height: 34px;
73
+ place-items: center;
74
+ border: 1px solid rgba(157, 132, 255, 0.55);
75
+ border-radius: 11px;
76
+ color: var(--violet);
77
+ background: rgba(157, 132, 255, 0.12);
78
+ box-shadow: inset 0 0 18px rgba(157, 132, 255, 0.12);
79
+ }
80
+ .snapshot {
81
+ color: var(--muted);
82
+ font: 500 12px / 1.4 ui-monospace, SFMono-Regular, Menlo, monospace;
83
+ }
84
+ .hero {
85
+ display: grid;
86
+ grid-template-columns: 1.15fr .85fr;
87
+ gap: 30px;
88
+ align-items: stretch;
89
+ padding: 42px 0 26px;
90
+ }
91
+ .hero__copy,
92
+ .score-card {
93
+ border: 1px solid var(--line);
94
+ border-radius: 28px;
95
+ background: linear-gradient(
96
+ 145deg,
97
+ rgba(25, 33, 54, 0.92),
98
+ rgba(13, 18, 31, 0.82)
99
+ );
100
+ box-shadow: var(--shadow);
101
+ }
102
+ .hero__copy {
103
+ padding: clamp(30px, 5vw, 62px);
104
+ }
105
+ .eyebrow {
106
+ margin: 0 0 17px;
107
+ color: var(--cyan);
108
+ font-size: 12px;
109
+ font-weight: 800;
110
+ letter-spacing: .18em;
111
+ text-transform: uppercase;
112
+ }
113
+ h1 {
114
+ max-width: 720px;
115
+ margin: 0;
116
+ font-size: clamp(42px, 7vw, 76px);
117
+ font-weight: 760;
118
+ letter-spacing: -.055em;
119
+ line-height: 0.98;
120
+ }
121
+ h1 span {
122
+ display: block;
123
+ color: var(--muted);
124
+ font-size: .42em;
125
+ font-weight: 620;
126
+ letter-spacing: -.025em;
127
+ line-height: 1.4;
128
+ }
129
+ .hero__lede {
130
+ max-width: 620px;
131
+ margin: 25px 0 0;
132
+ color: #bdc6dc;
133
+ font-size: 17px;
134
+ line-height: 1.65;
135
+ }
136
+ .score-card {
137
+ display: grid;
138
+ min-height: 340px;
139
+ padding: 38px;
140
+ place-items: center;
141
+ text-align: center;
142
+ }
143
+ .score-ring {
144
+ --score: 0%;
145
+ position: relative;
146
+ display: grid;
147
+ width: 220px;
148
+ aspect-ratio: 1;
149
+ place-items: center;
150
+ border-radius: 50%;
151
+ background: conic-gradient(
152
+ var(--green) var(--score),
153
+ rgba(255, 255, 255, 0.08) 0
154
+ );
155
+ box-shadow: 0 0 60px rgba(98, 230, 167, 0.12);
156
+ }
157
+ .score-ring::before {
158
+ position: absolute;
159
+ width: 178px;
160
+ aspect-ratio: 1;
161
+ content: "";
162
+ border: 1px solid var(--line);
163
+ border-radius: inherit;
164
+ background: #111827;
165
+ }
166
+ .score-ring__value {
167
+ position: relative;
168
+ font-size: 52px;
169
+ font-weight: 820;
170
+ letter-spacing: -.06em;
171
+ }
172
+ .score-ring__value span {
173
+ margin-left: 2px;
174
+ color: var(--muted);
175
+ font-size: 22px;
176
+ }
177
+ .score-card p {
178
+ position: relative;
179
+ margin: 13px 0 0;
180
+ color: var(--muted);
181
+ font-size: 13px;
182
+ font-weight: 750;
183
+ letter-spacing: .12em;
184
+ text-transform: uppercase;
185
+ }
186
+ .snapshot-notice {
187
+ display: flex;
188
+ gap: 14px;
189
+ align-items: center;
190
+ margin: 3px 0 23px;
191
+ padding: 15px 18px;
192
+ border: 1px solid rgba(255, 201, 107, 0.3);
193
+ border-radius: 15px;
194
+ color: #f8dfb2;
195
+ background: rgba(255, 201, 107, 0.08);
196
+ }
197
+ .snapshot-notice strong {
198
+ flex: none;
199
+ color: var(--amber);
200
+ font-size: 12px;
201
+ letter-spacing: .08em;
202
+ text-transform: uppercase;
203
+ }
204
+ .metrics {
205
+ display: grid;
206
+ grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
207
+ overflow: hidden;
208
+ margin: 0 0 62px;
209
+ border: 1px solid var(--line);
210
+ border-radius: 20px;
211
+ background: rgba(18, 25, 42, 0.74);
212
+ box-shadow: var(--shadow);
213
+ }
214
+ .metric {
215
+ min-width: 0;
216
+ padding: 22px 20px;
217
+ border-right: 1px solid var(--line);
218
+ border-bottom: 1px solid var(--line);
219
+ }
220
+ .metric:last-child {
221
+ border-right: 0;
222
+ }
223
+ .metric span {
224
+ display: block;
225
+ min-height: 32px;
226
+ color: var(--muted);
227
+ font-size: 12px;
228
+ line-height: 1.35;
229
+ }
230
+ .metric strong {
231
+ display: block;
232
+ margin-top: 6px;
233
+ font-size: 30px;
234
+ letter-spacing: -.035em;
235
+ }
236
+ .metric--good strong {
237
+ color: var(--green);
238
+ }
239
+ .metric--warn strong {
240
+ color: var(--amber);
241
+ }
242
+ .metric--bad strong {
243
+ color: var(--red);
244
+ }
245
+ .section-header {
246
+ display: flex;
247
+ gap: 24px;
248
+ align-items: end;
249
+ justify-content: space-between;
250
+ margin-bottom: 24px;
251
+ }
252
+ .section-header h2 {
253
+ margin: 0;
254
+ font-size: clamp(29px, 4vw, 42px);
255
+ letter-spacing: -.04em;
256
+ }
257
+ .section-header p {
258
+ max-width: 590px;
259
+ margin: 8px 0 0;
260
+ color: var(--muted);
261
+ line-height: 1.55;
262
+ }
263
+ .controls {
264
+ position: sticky;
265
+ top: 12px;
266
+ z-index: 4;
267
+ display: flex;
268
+ gap: 12px;
269
+ margin: 0 0 24px;
270
+ padding: 12px;
271
+ border: 1px solid var(--line);
272
+ border-radius: 18px;
273
+ background: rgba(9, 13, 24, 0.86);
274
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.25);
275
+ backdrop-filter: blur(18px);
276
+ }
277
+ .search {
278
+ min-width: 180px;
279
+ flex: 1;
280
+ padding: 12px 15px;
281
+ border: 1px solid var(--line);
282
+ border-radius: 12px;
283
+ outline: none;
284
+ color: var(--text);
285
+ background: rgba(255, 255, 255, 0.045);
286
+ font: inherit;
287
+ }
288
+ .search:focus {
289
+ border-color: var(--violet);
290
+ box-shadow: 0 0 0 3px rgba(157, 132, 255, 0.12);
291
+ }
292
+ .filters {
293
+ display: flex;
294
+ gap: 7px;
295
+ overflow-x: auto;
296
+ }
297
+ .filter {
298
+ padding: 10px 13px;
299
+ border: 1px solid transparent;
300
+ border-radius: 11px;
301
+ color: var(--muted);
302
+ background: transparent;
303
+ cursor: pointer;
304
+ font: inherit;
305
+ font-size: 12px;
306
+ font-weight: 650;
307
+ white-space: nowrap;
308
+ }
309
+ .filter:hover {
310
+ color: var(--text);
311
+ background: rgba(255, 255, 255, 0.05);
312
+ }
313
+ .filter[aria-pressed="true"] {
314
+ border-color: rgba(157, 132, 255, 0.38);
315
+ color: #ddd5ff;
316
+ background: rgba(157, 132, 255, 0.14);
317
+ }
318
+ .requirements {
319
+ display: grid;
320
+ grid-template-columns: repeat(2, minmax(0, 1fr));
321
+ gap: 18px;
322
+ padding-bottom: 80px;
323
+ }
324
+ .requirement {
325
+ position: relative;
326
+ overflow: hidden;
327
+ padding: 25px;
328
+ border: 1px solid var(--line);
329
+ border-radius: 20px;
330
+ background: linear-gradient(
331
+ 145deg,
332
+ rgba(22, 30, 50, 0.94),
333
+ rgba(15, 21, 36, 0.9)
334
+ );
335
+ box-shadow: 0 16px 45px rgba(0, 0, 0, 0.2);
336
+ }
337
+ .requirement::before {
338
+ position: absolute;
339
+ inset: 0 auto 0 0;
340
+ width: 3px;
341
+ content: "";
342
+ background: var(--amber);
343
+ }
344
+ .requirement--proven::before {
345
+ background: var(--green);
346
+ }
347
+ .requirement--unresolved::before {
348
+ background: var(--red);
349
+ }
350
+ .requirement[hidden] {
351
+ display: none;
352
+ }
353
+ .requirement__header {
354
+ display: flex;
355
+ gap: 18px;
356
+ align-items: start;
357
+ justify-content: space-between;
358
+ }
359
+ .requirement__id {
360
+ margin-bottom: 7px;
361
+ color: var(--muted);
362
+ font: 700 11px / 1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
363
+ letter-spacing: .05em;
364
+ }
365
+ .requirement h3 {
366
+ margin: 0;
367
+ font-size: 20px;
368
+ line-height: 1.25;
369
+ letter-spacing: -.02em;
370
+ }
371
+ .proof-badge {
372
+ flex: none;
373
+ padding: 7px 9px;
374
+ border: 1px solid rgba(255, 201, 107, 0.25);
375
+ border-radius: 999px;
376
+ color: var(--amber);
377
+ background: rgba(255, 201, 107, 0.08);
378
+ font-size: 10px;
379
+ font-weight: 800;
380
+ letter-spacing: .07em;
381
+ text-transform: uppercase;
382
+ }
383
+ .proof-badge--proven {
384
+ border-color: rgba(98, 230, 167, 0.25);
385
+ color: var(--green);
386
+ background: rgba(98, 230, 167, 0.08);
387
+ }
388
+ .proof-badge--unresolved {
389
+ border-color: rgba(255, 125, 144, 0.25);
390
+ color: var(--red);
391
+ background: rgba(255, 125, 144, 0.08);
392
+ }
393
+ .stages {
394
+ display: grid;
395
+ gap: 9px;
396
+ margin: 24px 0 0;
397
+ padding: 0;
398
+ list-style: none;
399
+ }
400
+ .stage {
401
+ display: grid;
402
+ grid-template-columns: 20px minmax(100px, .7fr) 1.3fr;
403
+ gap: 8px;
404
+ align-items: baseline;
405
+ }
406
+ .stage__icon {
407
+ display: grid;
408
+ width: 17px;
409
+ height: 17px;
410
+ place-items: center;
411
+ border-radius: 50%;
412
+ color: #08130e;
413
+ background: var(--green);
414
+ font-size: 11px;
415
+ font-weight: 900;
416
+ }
417
+ .stage--warning .stage__icon {
418
+ color: #241602;
419
+ background: var(--amber);
420
+ }
421
+ .stage--failed .stage__icon {
422
+ color: #24080c;
423
+ background: var(--red);
424
+ }
425
+ .stage--muted .stage__icon {
426
+ color: var(--muted);
427
+ background: rgba(255, 255, 255, 0.08);
428
+ }
429
+ .stage__label {
430
+ font-size: 13px;
431
+ font-weight: 720;
432
+ }
433
+ .stage__detail {
434
+ color: var(--muted);
435
+ font-size: 12px;
436
+ line-height: 1.45;
437
+ }
438
+ .contradiction {
439
+ margin-top: 21px;
440
+ padding: 16px;
441
+ border: 1px solid rgba(255, 125, 144, 0.24);
442
+ border-radius: 14px;
443
+ background: rgba(255, 125, 144, 0.07);
444
+ }
445
+ .contradiction__eyebrow {
446
+ color: var(--red);
447
+ font-size: 10px;
448
+ font-weight: 850;
449
+ letter-spacing: .1em;
450
+ text-transform: uppercase;
451
+ }
452
+ .contradiction__values {
453
+ display: flex;
454
+ gap: 11px;
455
+ align-items: center;
456
+ margin-top: 9px;
457
+ font: 750 15px / 1.4 ui-monospace, SFMono-Regular, Menlo, monospace;
458
+ }
459
+ .contradiction__values b {
460
+ color: var(--red);
461
+ }
462
+ .contradiction p {
463
+ margin: 8px 0 0;
464
+ color: #d9a9b1;
465
+ font-size: 12px;
466
+ line-height: 1.5;
467
+ }
468
+ .proof-gaps {
469
+ margin-top: 18px;
470
+ border-top: 1px solid var(--line);
471
+ color: var(--muted);
472
+ font-size: 12px;
473
+ }
474
+ .proof-advisories {
475
+ margin-top: 12px;
476
+ border-top: 1px solid var(--line);
477
+ color: var(--muted);
478
+ font-size: 12px;
479
+ }
480
+ .proof-gaps summary,
481
+ .proof-advisories summary {
482
+ padding-top: 14px;
483
+ cursor: pointer;
484
+ font-weight: 700;
485
+ }
486
+ .proof-gaps ul,
487
+ .proof-advisories ul {
488
+ columns: 2;
489
+ margin: 11px 0 0;
490
+ padding-left: 18px;
491
+ }
492
+ .proof-gaps li,
493
+ .proof-advisories li {
494
+ margin-bottom: 7px;
495
+ break-inside: avoid;
496
+ }
497
+ .empty {
498
+ display: none;
499
+ padding: 70px 20px;
500
+ border: 1px dashed var(--line);
501
+ border-radius: 20px;
502
+ color: var(--muted);
503
+ text-align: center;
504
+ }
505
+ .empty[data-visible="true"] {
506
+ display: block;
507
+ }
508
+ footer {
509
+ display: flex;
510
+ gap: 20px;
511
+ justify-content: space-between;
512
+ padding: 30px 0 48px;
513
+ border-top: 1px solid var(--line);
514
+ color: var(--muted);
515
+ font-size: 12px;
516
+ }
517
+ @media (max-width: 960px) {
518
+ .hero {
519
+ grid-template-columns: 1fr;
520
+ }
521
+ .score-card {
522
+ min-height: 290px;
523
+ }
524
+ .metrics {
525
+ grid-template-columns: repeat(3, 1fr);
526
+ }
527
+ .metric:nth-child(3) {
528
+ border-right: 0;
529
+ }
530
+ .metric:nth-child(-n + 3) {
531
+ border-bottom: 1px solid var(--line);
532
+ }
533
+ }
534
+ @media (max-width: 760px) {
535
+ .shell {
536
+ width: min(100% - 24px, 1160px);
537
+ }
538
+ .topbar {
539
+ padding-top: 22px;
540
+ }
541
+ .hero {
542
+ padding-top: 20px;
543
+ }
544
+ .hero__copy,
545
+ .score-card {
546
+ border-radius: 22px;
547
+ }
548
+ .requirements {
549
+ grid-template-columns: 1fr;
550
+ }
551
+ .section-header {
552
+ align-items: start;
553
+ flex-direction: column;
554
+ }
555
+ .controls {
556
+ align-items: stretch;
557
+ flex-direction: column;
558
+ }
559
+ .filters {
560
+ padding-bottom: 2px;
561
+ }
562
+ footer {
563
+ flex-direction: column;
564
+ }
565
+ }
566
+ @media (max-width: 520px) {
567
+ .metrics {
568
+ grid-template-columns: repeat(2, 1fr);
569
+ }
570
+ .metric {
571
+ border-bottom: 1px solid var(--line);
572
+ }
573
+ .metric:nth-child(2n) {
574
+ border-right: 0;
575
+ }
576
+ .metric:nth-last-child(-n + 2) {
577
+ border-bottom: 0;
578
+ }
579
+ .stage {
580
+ grid-template-columns: 20px 1fr;
581
+ }
582
+ .stage__detail {
583
+ grid-column: 2;
584
+ }
585
+ .proof-gaps ul {
586
+ columns: 1;
587
+ }
588
+ }
589
+ @media print {
590
+ body {
591
+ background: #fff;
592
+ color: #111827;
593
+ }
594
+ body::before,
595
+ .controls {
596
+ display: none;
597
+ }
598
+ .hero__copy,
599
+ .score-card,
600
+ .metrics,
601
+ .requirement {
602
+ border-color: #d9deea;
603
+ color: #111827;
604
+ background: #fff;
605
+ box-shadow: none;
606
+ break-inside: avoid;
607
+ }
608
+ .requirements {
609
+ display: block;
610
+ }
611
+ .requirement {
612
+ margin-bottom: 14px;
613
+ }
614
+ .hero__lede,
615
+ .metric span,
616
+ .stage__detail,
617
+ .section-header p,
618
+ footer {
619
+ color: #59647a;
620
+ }
621
+ }
144
622
 
145
- /* Kibi proof-rail identity. Tokens mirror assets/logo.svg and assets/wordmark.svg. */
146
- :root {
147
- --carbon: __KIBI_CARBON__;
148
- --deep-carbon: __KIBI_DEEP_CARBON__;
149
- --panel: __KIBI_PANEL__;
150
- --ice: __KIBI_ICE__;
151
- --signal: __KIBI_SIGNAL__;
152
- --snow: __KIBI_SNOW__;
153
- --mist: __KIBI_MIST__;
154
- --rail: __KIBI_RAIL__;
155
- --success: __KIBI_SUCCESS__;
156
- --warning: __KIBI_WARNING__;
157
- --danger: __KIBI_DANGER__;
158
- --line: rgba(162, 211, 244, .16);
159
- --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
160
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
161
- }
162
- body { color: var(--snow); background: var(--deep-carbon); }
163
- body::before { position: fixed; inset: 0 0 auto; z-index: -1; height: 4px; content: ""; opacity: 1; background: linear-gradient(90deg, var(--ice) 0 17%, var(--signal) 17% 100%); mask-image: none; }
164
- .shell { width: min(1180px, calc(100% - 40px)); }
165
- .topbar { padding: 30px 0 20px; border-bottom: 1px solid var(--line); }
166
- .brand { gap: 13px; letter-spacing: normal; }
167
- .brand__logo { width: 42px; height: 42px; flex: none; }
168
- .brand__wordmark { width: 86px; height: auto; }
169
- .brand__product { padding-left: 14px; border-left: 1px solid var(--rail); color: var(--mist); font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
170
- .snapshot { max-width: min(52vw, 420px); overflow: hidden; color: var(--mist); font: 500 11px/1.4 var(--mono); text-align: right; text-overflow: ellipsis; }
171
- .snapshot a, .source-link, .cta { color: var(--ice); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; }
172
- .snapshot a:hover, .source-link:hover, .cta:hover { color: var(--snow); }
173
- .relative-age::before { content: " · "; }
174
- .relative-age:empty::before { content: none; }
175
- .overview { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 36px; align-items: end; padding: clamp(38px, 7vw, 76px) 0 32px; }
176
- .eyebrow { margin: 0 0 12px; color: var(--ice); font: 750 11px/1.4 var(--mono); letter-spacing: .12em; }
177
- h1 { margin: 0; font-size: clamp(38px, 6vw, 68px); font-weight: 720; letter-spacing: -.052em; line-height: 1; }
178
- .overview__copy { max-width: 700px; }
179
- .overview__copy p:last-child { max-width: 660px; margin: 19px 0 0; color: var(--mist); font-size: 16px; line-height: 1.65; }
180
- .score { min-width: 220px; padding-left: 30px; border-left: 2px solid var(--signal); text-align: right; }
181
- .score__value { color: var(--snow); font: 760 clamp(62px, 9vw, 104px)/.84 var(--mono); letter-spacing: -.09em; }
182
- .score__value span { color: var(--ice); font-size: .38em; letter-spacing: -.04em; }
183
- .score__label { margin-top: 17px; color: var(--ice); font-size: 12px; font-weight: 760; letter-spacing: .12em; text-transform: uppercase; }
184
- .score__ratio { margin-top: 6px; color: var(--mist); font: 500 12px/1.4 var(--mono); }
185
- .score__note { max-width: 260px; margin: 10px 0 0 auto; color: var(--mist); font-size: 11px; font-weight: 500; letter-spacing: 0; line-height: 1.45; text-transform: none; }
186
- .snapshot-notice { margin: 0 0 22px; padding: 14px 16px; border-color: rgba(242,184,75,.4); border-radius: 9px; color: var(--snow); background: rgba(242,184,75,.08); }
187
- .snapshot-notice strong { color: var(--warning); font: 750 11px/1.4 var(--mono); }
188
- .proof-path { margin-bottom: 20px; padding: 24px 26px 22px; border: 1px solid var(--line); border-radius: 14px; background: var(--carbon); }
189
- .proof-path__header { display: flex; gap: 24px; align-items: start; justify-content: space-between; margin-bottom: 25px; }
190
- .proof-path__header h2 { margin: 0; font-size: 19px; letter-spacing: -.02em; }
191
- .proof-path__header p { max-width: 510px; margin: 0; color: var(--mist); font-size: 12px; line-height: 1.55; text-align: right; }
192
- .proof-rail { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin: 0; padding: 0; list-style: none; }
193
- .proof-rail > li { min-width: 0; }
194
- .proof-gate { position: relative; display: block; width: 100%; min-width: 0; margin: 0; padding: 25px 18px 0 0; border: 0; border-top: 2px solid var(--signal); border-radius: 0; color: inherit; background: transparent; font: inherit; text-align: left; cursor: pointer; }
195
- .proof-gate:last-child, .proof-rail > li:last-child .proof-gate { padding-right: 0; }
196
- .proof-gate:focus-visible { outline: 2px solid var(--ice); outline-offset: 4px; }
197
- .proof-gate[aria-pressed="true"] { background: rgba(62, 142, 214, .1); }
198
- .proof-gate__node { position: absolute; top: -10px; left: 0; display: grid; width: 19px; height: 19px; place-items: center; border: 2px solid var(--ice); border-radius: 50%; color: var(--deep-carbon); background: var(--ice); font: 800 9px/1 var(--mono); }
199
- .proof-gate--blocked { border-top-color: var(--rail); }
200
- .proof-gate--blocked .proof-gate__node { border-color: var(--danger); color: var(--danger); background: var(--carbon); }
201
- .proof-gate__count { font: 750 28px/1 var(--mono); letter-spacing: -.05em; }
202
- .proof-gate__label { margin-top: 8px; font-size: 13px; font-weight: 720; }
203
- .proof-gate__drop { min-height: 17px; margin-top: 5px; color: var(--warning); font: 650 10px/1.4 var(--mono); }
204
- .proof-gate p { margin: 7px 0 0; color: var(--mist); font-size: 11px; line-height: 1.45; }
205
- .metrics { margin: 0 0 62px; border-color: var(--line); border-radius: 12px; background: var(--panel); box-shadow: none; }
206
- .metric { position: relative; padding: 18px 17px; border-color: var(--line); }
207
- .metric::before { position: absolute; top: 0; left: 17px; width: 28px; height: 2px; content: ""; background: var(--signal); }
208
- .metric span { min-height: 31px; color: var(--mist); font-size: 11px; }
209
- .metric strong { margin-top: 4px; font: 720 26px/1 var(--mono); letter-spacing: -.04em; }
210
- .metric--good strong { color: var(--success); }
211
- .metric--warn strong { color: var(--warning); }
212
- .metric--bad strong { color: var(--danger); }
213
- .section-header p { color: var(--mist); }
214
- .controls { margin-bottom: 18px; padding: 10px; border-color: var(--line); border-radius: 12px; background: rgba(17,19,24,.94); box-shadow: none; backdrop-filter: blur(14px); }
215
- .search { padding: 11px 13px; border-color: var(--rail); border-radius: 8px; color: var(--snow); background: var(--carbon); }
216
- .search:focus { border-color: var(--ice); box-shadow: 0 0 0 3px rgba(162,211,244,.1); }
217
- .filters { gap: 6px; }
218
- .filter { padding: 9px 11px; border-radius: 7px; color: var(--mist); font: 650 11px/1.4 var(--mono); }
219
- .filter:hover { color: var(--snow); background: rgba(162,211,244,.06); }
220
- .filter[aria-pressed="true"] { border-color: rgba(162,211,244,.35); color: var(--ice); background: rgba(62,142,214,.13); }
221
- .filter:focus-visible { outline: 2px solid var(--ice); outline-offset: 2px; }
222
- .cta:focus-visible, .source-link:focus-visible, .snapshot a:focus-visible { outline: 2px solid var(--ice); outline-offset: 2px; }
223
- .requirements { grid-template-columns: 1fr; gap: 13px; }
224
- .requirement { padding: 22px 24px 20px; border-color: var(--line); border-radius: 12px; background: var(--panel); box-shadow: none; }
225
- .requirement::before { background: var(--warning); }
226
- .requirement--proven::before { background: var(--success); }
227
- .requirement--unresolved::before { background: var(--danger); }
228
- .requirement__id { color: var(--ice); font: 700 10px/1.2 var(--mono); letter-spacing: .07em; }
229
- .requirement h3 { font-size: 18px; line-height: 1.3; }
230
- .proof-badge { padding: 6px 8px; border-color: rgba(242,184,75,.3); border-radius: 6px; color: var(--warning); background: rgba(242,184,75,.07); font: 800 9px/1.2 var(--mono); }
231
- .proof-badge--proven { border-color: rgba(99,201,154,.3); color: var(--success); background: rgba(99,201,154,.07); }
232
- .proof-badge--unresolved { border-color: rgba(240,113,120,.3); color: var(--danger); background: rgba(240,113,120,.07); }
233
- .stages { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; }
234
- .stage { position: relative; display: block; min-width: 0; padding: 20px 13px 0 0; border-top: 1px solid var(--rail); }
235
- .stage:last-child { padding-right: 0; }
236
- .stage__icon { position: absolute; top: -8px; left: 0; width: 16px; height: 16px; border: 1px solid var(--success); color: var(--deep-carbon); background: var(--success); font: 900 10px/1 var(--mono); }
237
- .stage--warning .stage__icon { border-color: var(--warning); color: var(--warning); background: var(--panel); }
238
- .stage--failed .stage__icon { border-color: var(--danger); color: var(--danger); background: var(--panel); }
239
- .stage--muted .stage__icon { border-color: var(--rail); color: var(--mist); background: var(--panel); }
240
- .stage__label { display: block; font-size: 12px; }
241
- .stage__detail { display: block; margin-top: 5px; color: var(--mist); font-size: 11px; }
242
- .contradiction { border-color: rgba(240,113,120,.32); border-radius: 9px; background: rgba(240,113,120,.07); }
243
- .contradiction__eyebrow, .contradiction__values b { color: var(--danger); }
244
- .contradiction p, .proof-gaps, .proof-advisories { color: var(--mist); }
245
- .proof-gaps, .proof-advisories { border-color: var(--line); }
246
- .proof-gaps ul, .proof-advisories ul { columns: 3; }
247
- .empty { border-color: var(--rail); border-radius: 12px; color: var(--mist); }
248
- footer { border-color: var(--line); color: var(--mist); font: 500 11px/1.5 var(--mono); }
249
- .filter__count { margin-left: 6px; color: var(--ice); }
250
- .requirement h3 .source-link { color: inherit; }
251
- @media (max-width: 960px) {
252
- .proof-rail { grid-template-columns: repeat(5, 180px); overflow-x: auto; padding-top: 8px; }
253
- .snapshot { max-width: 100%; }
254
- }
255
- @media (max-width: 760px) {
256
- .shell { width: min(100% - 24px, 1180px); }
257
- .topbar { align-items: start; flex-wrap: wrap; gap: 12px; }
258
- .snapshot { max-width: 100%; text-align: left; }
259
- .overview { grid-template-columns: 1fr; gap: 28px; padding-top: 38px; }
260
- .score { min-width: 0; padding: 20px 0 0; border-top: 2px solid var(--signal); border-left: 0; text-align: left; }
261
- .score__value { font-size: 66px; }
262
- .score__note { margin-left: 0; }
263
- .proof-path__header { align-items: start; flex-direction: column; }
264
- .proof-path__header p { text-align: left; }
265
- .stages { grid-template-columns: 1fr; }
266
- .stage { min-height: 66px; margin-left: 8px; padding: 0 0 18px 30px; border-top: 0; border-left: 1px solid var(--rail); }
267
- .stage__icon { top: 0; left: -8px; }
268
- .proof-gaps ul, .proof-advisories ul { columns: 2; }
269
- }
270
- @media (max-width: 520px) {
271
- .brand__product { display: none; }
272
- .proof-path { padding-inline: 18px; }
273
- .proof-gaps ul, .proof-advisories ul { columns: 1; }
274
- }
275
- @media print {
276
- :root { color-scheme: light; }
277
- body { color: #17202a; background: #fff; }
278
- .topbar, .proof-path, .metrics, .requirement { border-color: #cbd5dc; color: #17202a; background: #fff; }
279
- .proof-gate, .stage { border-color: #7b8b96; background: transparent; }
280
- .proof-gate p, .proof-path__header p, .metric span, .stage__detail, .section-header p, footer, .score__note { color: #4e606c; }
281
- .source-link, .cta, .snapshot a { color: inherit; }
282
- }
623
+ /* Kibi proof-rail identity. Tokens mirror assets/logo.svg and assets/wordmark.svg. */
624
+ :root {
625
+ --carbon: __KIBI_CARBON__;
626
+ --deep-carbon: __KIBI_DEEP_CARBON__;
627
+ --panel: __KIBI_PANEL__;
628
+ --ice: __KIBI_ICE__;
629
+ --signal: __KIBI_SIGNAL__;
630
+ --snow: __KIBI_SNOW__;
631
+ --mist: __KIBI_MIST__;
632
+ --rail: __KIBI_RAIL__;
633
+ --success: __KIBI_SUCCESS__;
634
+ --warning: __KIBI_WARNING__;
635
+ --danger: __KIBI_DANGER__;
636
+ --line: rgba(162, 211, 244, 0.16);
637
+ --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
638
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
639
+ "Segoe UI", sans-serif;
640
+ }
641
+ body {
642
+ color: var(--snow);
643
+ background: var(--deep-carbon);
644
+ }
645
+ body::before {
646
+ position: fixed;
647
+ inset: 0 0 auto;
648
+ z-index: -1;
649
+ height: 4px;
650
+ content: "";
651
+ opacity: 1;
652
+ background: linear-gradient(90deg, var(--ice) 0 17%, var(--signal) 17% 100%);
653
+ mask-image: none;
654
+ }
655
+ .shell {
656
+ width: min(1180px, calc(100% - 40px));
657
+ }
658
+ .topbar {
659
+ padding: 30px 0 20px;
660
+ border-bottom: 1px solid var(--line);
661
+ }
662
+ .brand {
663
+ gap: 13px;
664
+ letter-spacing: normal;
665
+ }
666
+ .brand__logo {
667
+ width: 42px;
668
+ height: 42px;
669
+ flex: none;
670
+ }
671
+ .brand__wordmark {
672
+ width: 86px;
673
+ height: auto;
674
+ }
675
+ .brand__product {
676
+ padding-left: 14px;
677
+ border-left: 1px solid var(--rail);
678
+ color: var(--mist);
679
+ font-size: 12px;
680
+ font-weight: 700;
681
+ letter-spacing: .08em;
682
+ text-transform: uppercase;
683
+ }
684
+ .snapshot {
685
+ max-width: min(52vw, 420px);
686
+ overflow: hidden;
687
+ color: var(--mist);
688
+ font: 500 11px / 1.4 var(--mono);
689
+ text-align: right;
690
+ text-overflow: ellipsis;
691
+ }
692
+ .snapshot a,
693
+ .source-link,
694
+ .cta {
695
+ color: var(--ice);
696
+ text-decoration: underline;
697
+ text-decoration-thickness: 1px;
698
+ text-underline-offset: 2px;
699
+ }
700
+ .snapshot a:hover,
701
+ .source-link:hover,
702
+ .cta:hover {
703
+ color: var(--snow);
704
+ }
705
+ .relative-age::before {
706
+ content: " · ";
707
+ }
708
+ .relative-age:empty::before {
709
+ content: none;
710
+ }
711
+ .overview {
712
+ display: grid;
713
+ grid-template-columns: minmax(0, 1fr) auto;
714
+ gap: 36px;
715
+ align-items: end;
716
+ padding: clamp(38px, 7vw, 76px) 0 32px;
717
+ }
718
+ .eyebrow {
719
+ margin: 0 0 12px;
720
+ color: var(--ice);
721
+ font: 750 11px / 1.4 var(--mono);
722
+ letter-spacing: .12em;
723
+ }
724
+ h1 {
725
+ margin: 0;
726
+ font-size: clamp(38px, 6vw, 68px);
727
+ font-weight: 720;
728
+ letter-spacing: -.052em;
729
+ line-height: 1;
730
+ }
731
+ .overview__copy {
732
+ max-width: 700px;
733
+ }
734
+ .overview__copy p:last-child {
735
+ max-width: 660px;
736
+ margin: 19px 0 0;
737
+ color: var(--mist);
738
+ font-size: 16px;
739
+ line-height: 1.65;
740
+ }
741
+ .score {
742
+ min-width: 220px;
743
+ padding-left: 30px;
744
+ border-left: 2px solid var(--signal);
745
+ text-align: right;
746
+ }
747
+ .score__value {
748
+ color: var(--snow);
749
+ font: 760 clamp(62px, 9vw, 104px) / 0.84 var(--mono);
750
+ letter-spacing: -.09em;
751
+ }
752
+ .score__value span {
753
+ color: var(--ice);
754
+ font-size: .38em;
755
+ letter-spacing: -.04em;
756
+ }
757
+ .score__label {
758
+ margin-top: 17px;
759
+ color: var(--ice);
760
+ font-size: 12px;
761
+ font-weight: 760;
762
+ letter-spacing: .12em;
763
+ text-transform: uppercase;
764
+ }
765
+ .score__ratio {
766
+ margin-top: 6px;
767
+ color: var(--mist);
768
+ font: 500 12px / 1.4 var(--mono);
769
+ }
770
+ .score__note {
771
+ max-width: 260px;
772
+ margin: 10px 0 0 auto;
773
+ color: var(--mist);
774
+ font-size: 11px;
775
+ font-weight: 500;
776
+ letter-spacing: 0;
777
+ line-height: 1.45;
778
+ text-transform: none;
779
+ }
780
+ .snapshot-notice {
781
+ margin: 0 0 22px;
782
+ padding: 14px 16px;
783
+ border-color: rgba(242, 184, 75, 0.4);
784
+ border-radius: 9px;
785
+ color: var(--snow);
786
+ background: rgba(242, 184, 75, 0.08);
787
+ }
788
+ .snapshot-notice strong {
789
+ color: var(--warning);
790
+ font: 750 11px / 1.4 var(--mono);
791
+ }
792
+ .proof-path {
793
+ margin-bottom: 20px;
794
+ padding: 24px 26px 22px;
795
+ border: 1px solid var(--line);
796
+ border-radius: 14px;
797
+ background: var(--carbon);
798
+ }
799
+ .proof-path__header {
800
+ display: flex;
801
+ gap: 24px;
802
+ align-items: start;
803
+ justify-content: space-between;
804
+ margin-bottom: 25px;
805
+ }
806
+ .proof-path__header h2 {
807
+ margin: 0;
808
+ font-size: 19px;
809
+ letter-spacing: -.02em;
810
+ }
811
+ .proof-path__header p {
812
+ max-width: 510px;
813
+ margin: 0;
814
+ color: var(--mist);
815
+ font-size: 12px;
816
+ line-height: 1.55;
817
+ text-align: right;
818
+ }
819
+ .proof-rail {
820
+ display: grid;
821
+ grid-template-columns: repeat(5, minmax(0, 1fr));
822
+ margin: 0;
823
+ padding: 0;
824
+ list-style: none;
825
+ }
826
+ .proof-rail > li {
827
+ min-width: 0;
828
+ }
829
+ .proof-gate {
830
+ position: relative;
831
+ display: block;
832
+ width: 100%;
833
+ min-width: 0;
834
+ margin: 0;
835
+ padding: 25px 18px 0 0;
836
+ border: 0;
837
+ border-top: 2px solid var(--signal);
838
+ border-radius: 0;
839
+ color: inherit;
840
+ background: transparent;
841
+ font: inherit;
842
+ text-align: left;
843
+ cursor: pointer;
844
+ }
845
+ .proof-gate:last-child,
846
+ .proof-rail > li:last-child .proof-gate {
847
+ padding-right: 0;
848
+ }
849
+ .proof-gate:focus-visible {
850
+ outline: 2px solid var(--ice);
851
+ outline-offset: 4px;
852
+ }
853
+ .proof-gate[aria-pressed="true"] {
854
+ background: rgba(62, 142, 214, 0.1);
855
+ }
856
+ .proof-gate__node {
857
+ position: absolute;
858
+ top: -10px;
859
+ left: 0;
860
+ display: grid;
861
+ width: 19px;
862
+ height: 19px;
863
+ place-items: center;
864
+ border: 2px solid var(--ice);
865
+ border-radius: 50%;
866
+ color: var(--deep-carbon);
867
+ background: var(--ice);
868
+ font: 800 9px / 1 var(--mono);
869
+ }
870
+ .proof-gate--blocked {
871
+ border-top-color: var(--rail);
872
+ }
873
+ .proof-gate--blocked .proof-gate__node {
874
+ border-color: var(--danger);
875
+ color: var(--danger);
876
+ background: var(--carbon);
877
+ }
878
+ .proof-gate__count {
879
+ font: 750 28px / 1 var(--mono);
880
+ letter-spacing: -.05em;
881
+ }
882
+ .proof-gate__label {
883
+ margin-top: 8px;
884
+ font-size: 13px;
885
+ font-weight: 720;
886
+ }
887
+ .proof-gate__drop {
888
+ min-height: 17px;
889
+ margin-top: 5px;
890
+ color: var(--warning);
891
+ font: 650 10px / 1.4 var(--mono);
892
+ }
893
+ .proof-gate p {
894
+ margin: 7px 0 0;
895
+ color: var(--mist);
896
+ font-size: 11px;
897
+ line-height: 1.45;
898
+ }
899
+ .metrics {
900
+ margin: 0 0 62px;
901
+ border-color: var(--line);
902
+ border-radius: 12px;
903
+ background: var(--panel);
904
+ box-shadow: none;
905
+ }
906
+ .metric {
907
+ position: relative;
908
+ padding: 18px 17px;
909
+ border-color: var(--line);
910
+ }
911
+ .metric::before {
912
+ position: absolute;
913
+ top: 0;
914
+ left: 17px;
915
+ width: 28px;
916
+ height: 2px;
917
+ content: "";
918
+ background: var(--signal);
919
+ }
920
+ .metric span {
921
+ min-height: 31px;
922
+ color: var(--mist);
923
+ font-size: 11px;
924
+ }
925
+ .metric strong {
926
+ margin-top: 4px;
927
+ font: 720 26px / 1 var(--mono);
928
+ letter-spacing: -.04em;
929
+ }
930
+ .metric--good strong {
931
+ color: var(--success);
932
+ }
933
+ .metric--warn strong {
934
+ color: var(--warning);
935
+ }
936
+ .metric--bad strong {
937
+ color: var(--danger);
938
+ }
939
+ .section-header p {
940
+ color: var(--mist);
941
+ }
942
+ .controls {
943
+ margin-bottom: 18px;
944
+ padding: 10px;
945
+ border-color: var(--line);
946
+ border-radius: 12px;
947
+ background: rgba(17, 19, 24, 0.94);
948
+ box-shadow: none;
949
+ backdrop-filter: blur(14px);
950
+ }
951
+ .search {
952
+ padding: 11px 13px;
953
+ border-color: var(--rail);
954
+ border-radius: 8px;
955
+ color: var(--snow);
956
+ background: var(--carbon);
957
+ }
958
+ .search:focus {
959
+ border-color: var(--ice);
960
+ box-shadow: 0 0 0 3px rgba(162, 211, 244, 0.1);
961
+ }
962
+ .filters {
963
+ gap: 6px;
964
+ }
965
+ .filter {
966
+ padding: 9px 11px;
967
+ border-radius: 7px;
968
+ color: var(--mist);
969
+ font: 650 11px / 1.4 var(--mono);
970
+ }
971
+ .filter:hover {
972
+ color: var(--snow);
973
+ background: rgba(162, 211, 244, 0.06);
974
+ }
975
+ .filter[aria-pressed="true"] {
976
+ border-color: rgba(162, 211, 244, 0.35);
977
+ color: var(--ice);
978
+ background: rgba(62, 142, 214, 0.13);
979
+ }
980
+ .filter:focus-visible {
981
+ outline: 2px solid var(--ice);
982
+ outline-offset: 2px;
983
+ }
984
+ .cta:focus-visible,
985
+ .source-link:focus-visible,
986
+ .snapshot a:focus-visible {
987
+ outline: 2px solid var(--ice);
988
+ outline-offset: 2px;
989
+ }
990
+ .requirements {
991
+ grid-template-columns: 1fr;
992
+ gap: 13px;
993
+ }
994
+ .requirement {
995
+ padding: 22px 24px 20px;
996
+ border-color: var(--line);
997
+ border-radius: 12px;
998
+ background: var(--panel);
999
+ box-shadow: none;
1000
+ }
1001
+ .requirement::before {
1002
+ background: var(--warning);
1003
+ }
1004
+ .requirement--proven::before {
1005
+ background: var(--success);
1006
+ }
1007
+ .requirement--unresolved::before {
1008
+ background: var(--danger);
1009
+ }
1010
+ .requirement__id {
1011
+ color: var(--ice);
1012
+ font: 700 10px / 1.2 var(--mono);
1013
+ letter-spacing: .07em;
1014
+ }
1015
+ .requirement h3 {
1016
+ font-size: 18px;
1017
+ line-height: 1.3;
1018
+ }
1019
+ .proof-badge {
1020
+ padding: 6px 8px;
1021
+ border-color: rgba(242, 184, 75, 0.3);
1022
+ border-radius: 6px;
1023
+ color: var(--warning);
1024
+ background: rgba(242, 184, 75, 0.07);
1025
+ font: 800 9px / 1.2 var(--mono);
1026
+ }
1027
+ .proof-badge--proven {
1028
+ border-color: rgba(99, 201, 154, 0.3);
1029
+ color: var(--success);
1030
+ background: rgba(99, 201, 154, 0.07);
1031
+ }
1032
+ .proof-badge--unresolved {
1033
+ border-color: rgba(240, 113, 120, 0.3);
1034
+ color: var(--danger);
1035
+ background: rgba(240, 113, 120, 0.07);
1036
+ }
1037
+ .stages {
1038
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1039
+ gap: 0;
1040
+ }
1041
+ .stage {
1042
+ position: relative;
1043
+ display: block;
1044
+ min-width: 0;
1045
+ padding: 20px 13px 0 0;
1046
+ border-top: 1px solid var(--rail);
1047
+ }
1048
+ .stage:last-child {
1049
+ padding-right: 0;
1050
+ }
1051
+ .stage__icon {
1052
+ position: absolute;
1053
+ top: -8px;
1054
+ left: 0;
1055
+ width: 16px;
1056
+ height: 16px;
1057
+ border: 1px solid var(--success);
1058
+ color: var(--deep-carbon);
1059
+ background: var(--success);
1060
+ font: 900 10px / 1 var(--mono);
1061
+ }
1062
+ .stage--warning .stage__icon {
1063
+ border-color: var(--warning);
1064
+ color: var(--warning);
1065
+ background: var(--panel);
1066
+ }
1067
+ .stage--failed .stage__icon {
1068
+ border-color: var(--danger);
1069
+ color: var(--danger);
1070
+ background: var(--panel);
1071
+ }
1072
+ .stage--muted .stage__icon {
1073
+ border-color: var(--rail);
1074
+ color: var(--mist);
1075
+ background: var(--panel);
1076
+ }
1077
+ .stage__label {
1078
+ display: block;
1079
+ font-size: 12px;
1080
+ }
1081
+ .stage__detail {
1082
+ display: block;
1083
+ margin-top: 5px;
1084
+ color: var(--mist);
1085
+ font-size: 11px;
1086
+ }
1087
+ .contradiction {
1088
+ border-color: rgba(240, 113, 120, 0.32);
1089
+ border-radius: 9px;
1090
+ background: rgba(240, 113, 120, 0.07);
1091
+ }
1092
+ .contradiction__eyebrow,
1093
+ .contradiction__values b {
1094
+ color: var(--danger);
1095
+ }
1096
+ .contradiction p,
1097
+ .proof-gaps,
1098
+ .proof-advisories {
1099
+ color: var(--mist);
1100
+ }
1101
+ .proof-gaps,
1102
+ .proof-advisories {
1103
+ border-color: var(--line);
1104
+ }
1105
+ .proof-gaps ul,
1106
+ .proof-advisories ul {
1107
+ columns: 3;
1108
+ }
1109
+ .empty {
1110
+ border-color: var(--rail);
1111
+ border-radius: 12px;
1112
+ color: var(--mist);
1113
+ }
1114
+ footer {
1115
+ border-color: var(--line);
1116
+ color: var(--mist);
1117
+ font: 500 11px / 1.5 var(--mono);
1118
+ }
1119
+ .filter__count {
1120
+ margin-left: 6px;
1121
+ color: var(--ice);
1122
+ }
1123
+ .requirement h3 .source-link {
1124
+ color: inherit;
1125
+ }
1126
+ @media (max-width: 960px) {
1127
+ .proof-rail {
1128
+ grid-template-columns: repeat(5, 180px);
1129
+ overflow-x: auto;
1130
+ padding-top: 8px;
1131
+ }
1132
+ .snapshot {
1133
+ max-width: 100%;
1134
+ }
1135
+ }
1136
+ @media (max-width: 760px) {
1137
+ .shell {
1138
+ width: min(100% - 24px, 1180px);
1139
+ }
1140
+ .topbar {
1141
+ align-items: start;
1142
+ flex-wrap: wrap;
1143
+ gap: 12px;
1144
+ }
1145
+ .snapshot {
1146
+ max-width: 100%;
1147
+ text-align: left;
1148
+ }
1149
+ .overview {
1150
+ grid-template-columns: 1fr;
1151
+ gap: 28px;
1152
+ padding-top: 38px;
1153
+ }
1154
+ .score {
1155
+ min-width: 0;
1156
+ padding: 20px 0 0;
1157
+ border-top: 2px solid var(--signal);
1158
+ border-left: 0;
1159
+ text-align: left;
1160
+ }
1161
+ .score__value {
1162
+ font-size: 66px;
1163
+ }
1164
+ .score__note {
1165
+ margin-left: 0;
1166
+ }
1167
+ .proof-path__header {
1168
+ align-items: start;
1169
+ flex-direction: column;
1170
+ }
1171
+ .proof-path__header p {
1172
+ text-align: left;
1173
+ }
1174
+ .stages {
1175
+ grid-template-columns: 1fr;
1176
+ }
1177
+ .stage {
1178
+ min-height: 66px;
1179
+ margin-left: 8px;
1180
+ padding: 0 0 18px 30px;
1181
+ border-top: 0;
1182
+ border-left: 1px solid var(--rail);
1183
+ }
1184
+ .stage__icon {
1185
+ top: 0;
1186
+ left: -8px;
1187
+ }
1188
+ .proof-gaps ul,
1189
+ .proof-advisories ul {
1190
+ columns: 2;
1191
+ }
1192
+ }
1193
+ @media (max-width: 520px) {
1194
+ .brand__product {
1195
+ display: none;
1196
+ }
1197
+ .proof-path {
1198
+ padding-inline: 18px;
1199
+ }
1200
+ .proof-gaps ul,
1201
+ .proof-advisories ul {
1202
+ columns: 1;
1203
+ }
1204
+ }
1205
+ @media print {
1206
+ :root {
1207
+ color-scheme: light;
1208
+ }
1209
+ body {
1210
+ color: #17202a;
1211
+ background: #fff;
1212
+ }
1213
+ .topbar,
1214
+ .proof-path,
1215
+ .metrics,
1216
+ .requirement {
1217
+ border-color: #cbd5dc;
1218
+ color: #17202a;
1219
+ background: #fff;
1220
+ }
1221
+ .proof-gate,
1222
+ .stage {
1223
+ border-color: #7b8b96;
1224
+ background: transparent;
1225
+ }
1226
+ .proof-gate p,
1227
+ .proof-path__header p,
1228
+ .metric span,
1229
+ .stage__detail,
1230
+ .section-header p,
1231
+ footer,
1232
+ .score__note {
1233
+ color: #4e606c;
1234
+ }
1235
+ .source-link,
1236
+ .cta,
1237
+ .snapshot a {
1238
+ color: inherit;
1239
+ }
1240
+ }