@azure-id/orc 0.55.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 (449) hide show
  1. package/CHANGELOG.md +2017 -0
  2. package/README-id.md +521 -0
  3. package/README.md +485 -0
  4. package/bin/build-agents.js +86 -0
  5. package/bin/cli.js +29050 -0
  6. package/bin/mockrun-catalog.js +267 -0
  7. package/bin/onboarding-content.js +172 -0
  8. package/bin/pricing.json +200 -0
  9. package/bin/providers.json +437 -0
  10. package/bin/ui.js +95 -0
  11. package/bin/verify-contracts.js +3277 -0
  12. package/bin/verify-package.js +498 -0
  13. package/bin/webui/api.js +1163 -0
  14. package/bin/webui/app.html +198 -0
  15. package/bin/webui/css/00-tokens.css +92 -0
  16. package/bin/webui/css/01-base.css +42 -0
  17. package/bin/webui/css/02-shell.css +103 -0
  18. package/bin/webui/css/03-components.css +462 -0
  19. package/bin/webui/css/04-motion.css +91 -0
  20. package/bin/webui/css/05-tour.css +100 -0
  21. package/bin/webui/css/06-responsive.css +108 -0
  22. package/bin/webui/css/panels/boundary.css +26 -0
  23. package/bin/webui/css/panels/challenge.css +151 -0
  24. package/bin/webui/css/panels/crosslink.css +194 -0
  25. package/bin/webui/css/panels/docs.css +254 -0
  26. package/bin/webui/css/panels/experiment.css +23 -0
  27. package/bin/webui/css/panels/extra.css +536 -0
  28. package/bin/webui/css/panels/flow.css +177 -0
  29. package/bin/webui/css/panels/handoff.css +67 -0
  30. package/bin/webui/css/panels/knowledge.css +86 -0
  31. package/bin/webui/css/panels/learn.css +154 -0
  32. package/bin/webui/css/panels/maintenance.css +55 -0
  33. package/bin/webui/css/panels/mockrun.css +268 -0
  34. package/bin/webui/css/panels/overview.css +100 -0
  35. package/bin/webui/css/panels/pact.css +43 -0
  36. package/bin/webui/css/panels/runs.css +105 -0
  37. package/bin/webui/css/panels/settings.css +227 -0
  38. package/bin/webui/css/panels/stats.css +87 -0
  39. package/bin/webui/fixtures/boundary.js +92 -0
  40. package/bin/webui/fixtures/challenge.js +825 -0
  41. package/bin/webui/fixtures/crosslink.js +31 -0
  42. package/bin/webui/fixtures/docs.js +982 -0
  43. package/bin/webui/fixtures/extra.js +1934 -0
  44. package/bin/webui/fixtures/flow.js +81 -0
  45. package/bin/webui/fixtures/handoff.js +35 -0
  46. package/bin/webui/fixtures/index.js +486 -0
  47. package/bin/webui/fixtures/knowledge.js +291 -0
  48. package/bin/webui/fixtures/maintenance.js +42 -0
  49. package/bin/webui/fixtures/mockrun.js +36 -0
  50. package/bin/webui/fixtures/pact.js +111 -0
  51. package/bin/webui/fixtures/runs.js +109 -0
  52. package/bin/webui/fixtures/settings.js +78 -0
  53. package/bin/webui/fixtures/shell.js +48 -0
  54. package/bin/webui/fixtures/stats.js +104 -0
  55. package/bin/webui/i18n/TERMS.md +134 -0
  56. package/bin/webui/i18n/en/banner.json +29 -0
  57. package/bin/webui/i18n/en/boundary.json +20 -0
  58. package/bin/webui/i18n/en/challenge.json +106 -0
  59. package/bin/webui/i18n/en/common.json +69 -0
  60. package/bin/webui/i18n/en/crosslink.json +69 -0
  61. package/bin/webui/i18n/en/docs.json +175 -0
  62. package/bin/webui/i18n/en/experiment.json +17 -0
  63. package/bin/webui/i18n/en/extra.json +313 -0
  64. package/bin/webui/i18n/en/flow.json +30 -0
  65. package/bin/webui/i18n/en/handoff.json +37 -0
  66. package/bin/webui/i18n/en/knowledge.json +141 -0
  67. package/bin/webui/i18n/en/learn.json +16 -0
  68. package/bin/webui/i18n/en/maintenance.json +52 -0
  69. package/bin/webui/i18n/en/mockrun.json +19 -0
  70. package/bin/webui/i18n/en/nav.json +19 -0
  71. package/bin/webui/i18n/en/overview.json +89 -0
  72. package/bin/webui/i18n/en/pact.json +36 -0
  73. package/bin/webui/i18n/en/runs.json +51 -0
  74. package/bin/webui/i18n/en/settings.json +49 -0
  75. package/bin/webui/i18n/en/stats.json +69 -0
  76. package/bin/webui/i18n/en/tour.json +33 -0
  77. package/bin/webui/i18n/id/banner.json +29 -0
  78. package/bin/webui/i18n/id/boundary.json +20 -0
  79. package/bin/webui/i18n/id/challenge.json +106 -0
  80. package/bin/webui/i18n/id/common.json +70 -0
  81. package/bin/webui/i18n/id/crosslink.json +69 -0
  82. package/bin/webui/i18n/id/docs.json +175 -0
  83. package/bin/webui/i18n/id/experiment.json +17 -0
  84. package/bin/webui/i18n/id/extra.json +313 -0
  85. package/bin/webui/i18n/id/flow.json +30 -0
  86. package/bin/webui/i18n/id/handoff.json +37 -0
  87. package/bin/webui/i18n/id/knowledge.json +141 -0
  88. package/bin/webui/i18n/id/learn.json +16 -0
  89. package/bin/webui/i18n/id/maintenance.json +52 -0
  90. package/bin/webui/i18n/id/mockrun.json +19 -0
  91. package/bin/webui/i18n/id/nav.json +19 -0
  92. package/bin/webui/i18n/id/overview.json +89 -0
  93. package/bin/webui/i18n/id/pact.json +36 -0
  94. package/bin/webui/i18n/id/runs.json +51 -0
  95. package/bin/webui/i18n/id/settings.json +49 -0
  96. package/bin/webui/i18n/id/stats.json +69 -0
  97. package/bin/webui/i18n/id/tour.json +33 -0
  98. package/bin/webui/js/00-core.js +115 -0
  99. package/bin/webui/js/01-i18n.js +149 -0
  100. package/bin/webui/js/02-ui.js +211 -0
  101. package/bin/webui/js/03-md.js +286 -0
  102. package/bin/webui/js/04-router.js +51 -0
  103. package/bin/webui/js/05-banners.js +172 -0
  104. package/bin/webui/js/06-edit.js +183 -0
  105. package/bin/webui/js/90-tour.js +488 -0
  106. package/bin/webui/js/91-shortcuts.js +126 -0
  107. package/bin/webui/js/99-boot.js +118 -0
  108. package/bin/webui/js/panels/boundary.js +104 -0
  109. package/bin/webui/js/panels/challenge.js +781 -0
  110. package/bin/webui/js/panels/crosslink.js +654 -0
  111. package/bin/webui/js/panels/docs.js +1338 -0
  112. package/bin/webui/js/panels/experiment.js +98 -0
  113. package/bin/webui/js/panels/extra.js +3011 -0
  114. package/bin/webui/js/panels/flow.js +297 -0
  115. package/bin/webui/js/panels/handoff.js +169 -0
  116. package/bin/webui/js/panels/knowledge.js +890 -0
  117. package/bin/webui/js/panels/learn.js +220 -0
  118. package/bin/webui/js/panels/maintenance.js +235 -0
  119. package/bin/webui/js/panels/mockrun.js +227 -0
  120. package/bin/webui/js/panels/overview.js +447 -0
  121. package/bin/webui/js/panels/pact.js +189 -0
  122. package/bin/webui/js/panels/runs.js +416 -0
  123. package/bin/webui/js/panels/settings.js +573 -0
  124. package/bin/webui/js/panels/stats.js +378 -0
  125. package/bin/webui/serve.js +557 -0
  126. package/mock-run/INDEX.md +106 -0
  127. package/mock-run/a-normal-day.md +587 -0
  128. package/mock-run/context-combiner.md +100 -0
  129. package/mock-run/extra-recovery.md +330 -0
  130. package/mock-run/extra-slots.md +177 -0
  131. package/mock-run/media/README.md +43 -0
  132. package/mock-run/orc-aftermath.md +392 -0
  133. package/mock-run/orc-boundary.md +356 -0
  134. package/mock-run/orc-brainstorm.md +177 -0
  135. package/mock-run/orc-budget.md +534 -0
  136. package/mock-run/orc-challenge-council.md +262 -0
  137. package/mock-run/orc-challenge.md +416 -0
  138. package/mock-run/orc-cli.md +200 -0
  139. package/mock-run/orc-diy.md +129 -0
  140. package/mock-run/orc-doc.md +448 -0
  141. package/mock-run/orc-explain.md +86 -0
  142. package/mock-run/orc-export.md +423 -0
  143. package/mock-run/orc-extra.md +392 -0
  144. package/mock-run/orc-fast.md +106 -0
  145. package/mock-run/orc-grill.md +151 -0
  146. package/mock-run/orc-handoff.md +480 -0
  147. package/mock-run/orc-pact.md +421 -0
  148. package/mock-run/orc-pattern.md +112 -0
  149. package/mock-run/orc-plan.md +108 -0
  150. package/mock-run/orc-pr-setup.md +126 -0
  151. package/mock-run/orc-quick.md +113 -0
  152. package/mock-run/orc-route.md +93 -0
  153. package/mock-run/orc-ui.md +125 -0
  154. package/mock-run/orc-ultra.md +103 -0
  155. package/mock-run/orc.md +157 -0
  156. package/mock-run/the-example-project.md +55 -0
  157. package/package.json +39 -0
  158. package/templates/agents/MODEL-MAPPING.md +168 -0
  159. package/templates/agents/orc-advisor-fable-5.md +50 -0
  160. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
  161. package/templates/agents/orc-analyst-fable-5.md +115 -0
  162. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
  163. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
  164. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
  165. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
  166. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
  167. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
  168. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
  169. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
  170. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
  171. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
  172. package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
  173. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
  174. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
  175. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
  176. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
  177. package/templates/agents/orc-executor-haiku-4-5.md +113 -0
  178. package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
  179. package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
  180. package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
  181. package/templates/agents/orc-executor-opus-5-high.md +114 -0
  182. package/templates/agents/orc-executor-opus-5-low.md +114 -0
  183. package/templates/agents/orc-executor-opus-5-med.md +114 -0
  184. package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
  185. package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
  186. package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
  187. package/templates/agents/orc-judge-fable-5.md +79 -0
  188. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
  189. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
  190. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
  191. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
  192. package/templates/agents/orc-planner-fable-5.md +152 -0
  193. package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
  194. package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
  195. package/templates/agents/orc-planner-opus-5-med.md +160 -0
  196. package/templates/agents/orc-retro-opus-5-med.md +73 -0
  197. package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
  198. package/templates/agents/orc-reviewer-fable-5.md +57 -0
  199. package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
  200. package/templates/agents/orc-scout-opus-5-low.md +40 -0
  201. package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
  202. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
  203. package/templates/agents/orc-test-author-opus-5-med.md +71 -0
  204. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
  205. package/templates/agents/orc-verifier-opus-5-med.md +69 -0
  206. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
  207. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
  208. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
  209. package/templates/commands/orc-aftermath.md +49 -0
  210. package/templates/commands/orc-analyze.md +21 -0
  211. package/templates/commands/orc-boundary.md +46 -0
  212. package/templates/commands/orc-brainstorm.md +51 -0
  213. package/templates/commands/orc-budget.md +54 -0
  214. package/templates/commands/orc-challenge.md +58 -0
  215. package/templates/commands/orc-claude.md +14 -0
  216. package/templates/commands/orc-diy.md +13 -0
  217. package/templates/commands/orc-doc.md +128 -0
  218. package/templates/commands/orc-explain.md +20 -0
  219. package/templates/commands/orc-export.md +46 -0
  220. package/templates/commands/orc-fast.md +15 -0
  221. package/templates/commands/orc-grill.md +40 -0
  222. package/templates/commands/orc-handoff.md +52 -0
  223. package/templates/commands/orc-learn.md +17 -0
  224. package/templates/commands/orc-mini.md +12 -0
  225. package/templates/commands/orc-pact.md +44 -0
  226. package/templates/commands/orc-pattern.md +15 -0
  227. package/templates/commands/orc-plan.md +22 -0
  228. package/templates/commands/orc-poly.md +21 -0
  229. package/templates/commands/orc-pr-driver.md +30 -0
  230. package/templates/commands/orc-pr-setup.md +31 -0
  231. package/templates/commands/orc-quick.md +33 -0
  232. package/templates/commands/orc-retro.md +17 -0
  233. package/templates/commands/orc-route.md +41 -0
  234. package/templates/commands/orc-ultra.md +17 -0
  235. package/templates/commands/orc-verify.md +11 -0
  236. package/templates/commands/orc-wiki.md +42 -0
  237. package/templates/commands/orc.md +16 -0
  238. package/templates/hooks/orc-effort-guard.js +178 -0
  239. package/templates/hooks/orc-statusline.js +305 -0
  240. package/templates/hooks/orc-trace.js +471 -0
  241. package/templates/hooks/orc-update-lib.js +125 -0
  242. package/templates/skills/_shared/README.md +50 -0
  243. package/templates/skills/_shared/detecting-artifacts.md +90 -0
  244. package/templates/skills/_shared/drift-recovery.md +98 -0
  245. package/templates/skills/_shared/extra-dispatch.md +1051 -0
  246. package/templates/skills/_shared/fable5-override.md +56 -0
  247. package/templates/skills/_shared/fallback-handoff.md +42 -0
  248. package/templates/skills/_shared/gh-stack-commands.md +65 -0
  249. package/templates/skills/_shared/gotchas.md +177 -0
  250. package/templates/skills/_shared/interview.md +144 -0
  251. package/templates/skills/_shared/lane-suspend.md +82 -0
  252. package/templates/skills/_shared/opus5-only.md +131 -0
  253. package/templates/skills/_shared/pr-templates.md +106 -0
  254. package/templates/skills/_shared/read-ladder.md +54 -0
  255. package/templates/skills/_shared/return-validation.md +145 -0
  256. package/templates/skills/_shared/smoke-gate.md +28 -0
  257. package/templates/skills/_shared/stack-plan.md +135 -0
  258. package/templates/skills/_shared/untrusted-input.md +63 -0
  259. package/templates/skills/context-combiner/SKILL.md +187 -0
  260. package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
  261. package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
  262. package/templates/skills/orc/README.md +150 -0
  263. package/templates/skills/orc/SKILL.md +526 -0
  264. package/templates/skills/orc/config.md +389 -0
  265. package/templates/skills/orc/examples/full-run-mock.md +73 -0
  266. package/templates/skills/orc/references/analyst-gates.md +124 -0
  267. package/templates/skills/orc/references/effort-and-mode.md +224 -0
  268. package/templates/skills/orc/references/house-rules.md +20 -0
  269. package/templates/skills/orc/references/intake.md +120 -0
  270. package/templates/skills/orc/references/log-protocol.md +39 -0
  271. package/templates/skills/orc/references/pattern-gate.md +89 -0
  272. package/templates/skills/orc/references/plan-handoff.md +84 -0
  273. package/templates/skills/orc/references/preflight-report.md +220 -0
  274. package/templates/skills/orc/references/security-checklist.md +39 -0
  275. package/templates/skills/orc/references/stop-and-resume.md +160 -0
  276. package/templates/skills/orc/references/trace-protocol.md +314 -0
  277. package/templates/skills/orc/references/ultra-mode.md +123 -0
  278. package/templates/skills/orc/references/wave-grouping.md +121 -0
  279. package/templates/skills/orc/references/wiki-consult.md +177 -0
  280. package/templates/skills/orc/schemas/checkpoint.md +122 -0
  281. package/templates/skills/orc/schemas/intent-spec.md +42 -0
  282. package/templates/skills/orc/schemas/planning-output.md +279 -0
  283. package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
  284. package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
  285. package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
  286. package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
  287. package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
  288. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
  289. package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
  290. package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
  291. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
  292. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
  293. package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
  294. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
  295. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
  296. package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
  297. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
  298. package/templates/skills/orc-advisor/SKILL.md +60 -0
  299. package/templates/skills/orc-aftermath/SKILL.md +136 -0
  300. package/templates/skills/orc-aftermath/references/report.md +95 -0
  301. package/templates/skills/orc-analyze/SKILL.md +220 -0
  302. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
  303. package/templates/skills/orc-analyze/references/branching.md +51 -0
  304. package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
  305. package/templates/skills/orc-analyze/references/thin-input.md +77 -0
  306. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
  307. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
  308. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
  309. package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
  310. package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
  311. package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
  312. package/templates/skills/orc-boundary/SKILL.md +208 -0
  313. package/templates/skills/orc-boundary/references/card.md +78 -0
  314. package/templates/skills/orc-boundary/references/gate.md +113 -0
  315. package/templates/skills/orc-brainstorm/SKILL.md +339 -0
  316. package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
  317. package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
  318. package/templates/skills/orc-budget/SKILL.md +225 -0
  319. package/templates/skills/orc-budget/references/corpus.md +87 -0
  320. package/templates/skills/orc-challenge/README.md +142 -0
  321. package/templates/skills/orc-challenge/SKILL.md +255 -0
  322. package/templates/skills/orc-challenge/examples/code-module.md +110 -0
  323. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
  324. package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
  325. package/templates/skills/orc-challenge/references/conservation.md +107 -0
  326. package/templates/skills/orc-challenge/references/council.md +315 -0
  327. package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
  328. package/templates/skills/orc-challenge/references/dimensions.md +121 -0
  329. package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
  330. package/templates/skills/orc-challenge/references/intake.md +171 -0
  331. package/templates/skills/orc-challenge/references/kinds.md +44 -0
  332. package/templates/skills/orc-challenge/references/plain-english.md +98 -0
  333. package/templates/skills/orc-challenge/references/rubric.md +109 -0
  334. package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
  335. package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
  336. package/templates/skills/orc-claude/SKILL.md +199 -0
  337. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
  338. package/templates/skills/orc-claude/references/refresh.md +76 -0
  339. package/templates/skills/orc-claude/references/template.md +109 -0
  340. package/templates/skills/orc-diy/README.md +142 -0
  341. package/templates/skills/orc-diy/SKILL.md +70 -0
  342. package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
  343. package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
  344. package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
  345. package/templates/skills/orc-diy/references/blocks/header.md +55 -0
  346. package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
  347. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
  348. package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
  349. package/templates/skills/orc-diy/references/blocks/review.md +18 -0
  350. package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
  351. package/templates/skills/orc-diy/references/blocks/security.md +25 -0
  352. package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
  353. package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
  354. package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
  355. package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
  356. package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
  357. package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
  358. package/templates/skills/orc-diy/references/compile.md +59 -0
  359. package/templates/skills/orc-diy/references/flow-schema.md +100 -0
  360. package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
  361. package/templates/skills/orc-doc/README.md +229 -0
  362. package/templates/skills/orc-doc/SKILL.md +444 -0
  363. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
  364. package/templates/skills/orc-doc/references/chunking.md +527 -0
  365. package/templates/skills/orc-doc/references/gates.md +311 -0
  366. package/templates/skills/orc-doc/references/generation-rules.md +122 -0
  367. package/templates/skills/orc-doc/references/house-rules.md +170 -0
  368. package/templates/skills/orc-doc/references/import-targets.md +40 -0
  369. package/templates/skills/orc-doc/references/plain-language.md +66 -0
  370. package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
  371. package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
  372. package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
  373. package/templates/skills/orc-doc/references/templates/prd.md +133 -0
  374. package/templates/skills/orc-doc/references/templates/report.md +102 -0
  375. package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
  376. package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
  377. package/templates/skills/orc-explain/SKILL.md +57 -0
  378. package/templates/skills/orc-export/SKILL.md +154 -0
  379. package/templates/skills/orc-fast/SKILL.md +188 -0
  380. package/templates/skills/orc-grill/SKILL.md +207 -0
  381. package/templates/skills/orc-grill/references/grill-doc.md +105 -0
  382. package/templates/skills/orc-handoff/SKILL.md +204 -0
  383. package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
  384. package/templates/skills/orc-handoff/references/surfaces.md +88 -0
  385. package/templates/skills/orc-judge/SKILL.md +82 -0
  386. package/templates/skills/orc-learn/SKILL.md +156 -0
  387. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
  388. package/templates/skills/orc-learn/references/deepen.md +70 -0
  389. package/templates/skills/orc-learn/references/refresh.md +65 -0
  390. package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
  391. package/templates/skills/orc-learn/references/template-learning.md +67 -0
  392. package/templates/skills/orc-mini/SKILL.md +226 -0
  393. package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
  394. package/templates/skills/orc-pact/SKILL.md +218 -0
  395. package/templates/skills/orc-pact/references/gate.md +70 -0
  396. package/templates/skills/orc-pact/references/ledger.md +99 -0
  397. package/templates/skills/orc-pattern/SKILL.md +124 -0
  398. package/templates/skills/orc-pattern/references/INDEX.md +73 -0
  399. package/templates/skills/orc-pattern/references/be-django.md +80 -0
  400. package/templates/skills/orc-pattern/references/be-express.md +82 -0
  401. package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
  402. package/templates/skills/orc-pattern/references/be-go.md +96 -0
  403. package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
  404. package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
  405. package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
  406. package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
  407. package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
  408. package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
  409. package/templates/skills/orc-pattern/references/fe-react.md +83 -0
  410. package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
  411. package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
  412. package/templates/skills/orc-poly/SKILL.md +216 -0
  413. package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
  414. package/templates/skills/orc-poly/references/gather.md +70 -0
  415. package/templates/skills/orc-poly/references/poly-spec.md +84 -0
  416. package/templates/skills/orc-pr-driver/README.md +349 -0
  417. package/templates/skills/orc-pr-driver/SKILL.md +167 -0
  418. package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
  419. package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
  420. package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
  421. package/templates/skills/orc-pr-setup/README.md +436 -0
  422. package/templates/skills/orc-pr-setup/SKILL.md +184 -0
  423. package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
  424. package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
  425. package/templates/skills/orc-quick/README.md +423 -0
  426. package/templates/skills/orc-quick/SKILL.md +306 -0
  427. package/templates/skills/orc-quick/references/context-doc.md +114 -0
  428. package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
  429. package/templates/skills/orc-quick/references/gh-mode.md +127 -0
  430. package/templates/skills/orc-retro/SKILL.md +222 -0
  431. package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
  432. package/templates/skills/orc-route/SKILL.md +165 -0
  433. package/templates/skills/orc-verify/SKILL.md +86 -0
  434. package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
  435. package/templates/skills/orc-wiki/README.md +325 -0
  436. package/templates/skills/orc-wiki/SKILL.md +322 -0
  437. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
  438. package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
  439. package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
  440. package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
  441. package/templates/skills/orc-wiki/references/crosslink.md +284 -0
  442. package/templates/skills/orc-wiki/references/extra.md +79 -0
  443. package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
  444. package/templates/skills/orc-wiki/references/orientation.md +51 -0
  445. package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
  446. package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
  447. package/templates/skills/orc-wiki/references/staleness.md +288 -0
  448. package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
  449. package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
@@ -0,0 +1,198 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="referrer" content="no-referrer">
7
+ <title>orc ui</title>
8
+ <!--
9
+ THE ASSET MANIFEST. This list is the load order, and for CSS the load order is
10
+ the cascade order — which is why the files carry numeric prefixes and why
11
+ 06-responsive and 04-motion are last (both override rules from the shell AND
12
+ from panels, and several of their declarations are deliberately not
13
+ !important). One <link> per file, never @import: an @import request carries no
14
+ session token of its own and would 401.
15
+
16
+ A file that is not listed here does not run, and the test suite reads THIS
17
+ list — appJs()/appCss() in test/_helpers.js concatenate exactly what the
18
+ browser loads, so a forgotten entry cannot hide behind a passing suite.
19
+ -->
20
+ <link rel="stylesheet" href="css/00-tokens.css">
21
+ <link rel="stylesheet" href="css/01-base.css">
22
+ <link rel="stylesheet" href="css/02-shell.css">
23
+ <link rel="stylesheet" href="css/03-components.css">
24
+ <link rel="stylesheet" href="css/panels/overview.css">
25
+ <link rel="stylesheet" href="css/05-tour.css">
26
+ <link rel="stylesheet" href="css/panels/settings.css">
27
+ <link rel="stylesheet" href="css/panels/runs.css">
28
+ <link rel="stylesheet" href="css/panels/knowledge.css">
29
+ <link rel="stylesheet" href="css/panels/stats.css">
30
+ <link rel="stylesheet" href="css/panels/flow.css">
31
+ <link rel="stylesheet" href="css/panels/crosslink.css">
32
+ <link rel="stylesheet" href="css/panels/learn.css">
33
+ <link rel="stylesheet" href="css/panels/mockrun.css">
34
+ <link rel="stylesheet" href="css/panels/experiment.css">
35
+ <link rel="stylesheet" href="css/panels/maintenance.css">
36
+ <link rel="stylesheet" href="css/panels/pact.css">
37
+ <link rel="stylesheet" href="css/panels/boundary.css">
38
+ <link rel="stylesheet" href="css/panels/handoff.css">
39
+ <link rel="stylesheet" href="css/panels/challenge.css">
40
+ <link rel="stylesheet" href="css/panels/docs.css">
41
+ <link rel="stylesheet" href="css/panels/extra.css">
42
+ <link rel="stylesheet" href="css/06-responsive.css">
43
+ <link rel="stylesheet" href="css/04-motion.css">
44
+ </head>
45
+ <body>
46
+
47
+ <!--
48
+ The shell is deliberately static and small: every panel is rendered by its own
49
+ function in app.js against its own endpoint, with no shared mutable state, so
50
+ rewriting one panel cannot break another. See the plan, §9.
51
+ No inline <script> or style="" anywhere — the server sends a strict CSP.
52
+ -->
53
+
54
+ <div class="shell">
55
+
56
+ <nav class="rail" aria-label="Panels">
57
+ <div class="brand">
58
+ <span class="brand-mark" aria-hidden="true">◆</span>
59
+ <span class="brand-text">orc<span class="brand-dim">&nbsp;ui</span></span>
60
+ </div>
61
+
62
+ <!--
63
+ data-idx is the keyboard shortcut for that panel; the rail reveals the
64
+ numbers on hover so they are discoverable without a legend.
65
+ data-i18n names the string table entry: the text between the tags is the
66
+ English fallback that ships in the markup, so a failed i18n fetch renders
67
+ a readable English rail rather than a column of empty links.
68
+ -->
69
+ <ul class="nav" id="nav">
70
+ <li><a href="#/overview" data-panel="overview" data-idx="1" data-i18n="nav.overview">Overview</a></li>
71
+ <li><a href="#/settings" data-panel="settings" data-idx="2" data-i18n="nav.settings">Settings</a></li>
72
+ <li><a href="#/runs" data-panel="runs" data-idx="3" data-i18n="nav.runs">Runs</a></li>
73
+ <li><a href="#/knowledge" data-panel="knowledge" data-idx="4" data-i18n="nav.knowledge">Knowledge</a></li>
74
+ <li><a href="#/stats" data-panel="stats" data-idx="5" data-i18n="nav.stats">Stats</a></li>
75
+ <!--
76
+ v0.46.0. Promises and Boundary sit next to Knowledge because they ARE
77
+ knowledge — derived, coverage-anchored, and stale the same way a wiki doc
78
+ is. Self-serve sits last of the three: it is the only panel here aimed at
79
+ somebody who does not read code, and it is the one a developer opens
80
+ least often.
81
+ -->
82
+ <!--
83
+ v0.48.0. Docs sits directly above Challenge because that is the order
84
+ the two are used in: you write a document, then you grade it — and the
85
+ grading has to happen in a different session, which is the one thing
86
+ both panels say out loud.
87
+ -->
88
+ <li><a href="#/docs" data-panel="docs" data-idx="d" data-i18n="nav.docs">Docs</a></li>
89
+ <li><a href="#/challenge" data-panel="challenge" data-idx="c" data-i18n="nav.challenge">Challenge</a></li>
90
+ <li><a href="#/pact" data-panel="pact" data-idx="p" data-i18n="nav.pact">Promises</a></li>
91
+ <li><a href="#/boundary" data-panel="boundary" data-idx="b" data-i18n="nav.boundary">Boundary</a></li>
92
+ <li><a href="#/handoff" data-panel="handoff" data-idx="h" data-i18n="nav.handoff">Self-serve</a></li>
93
+ <!--
94
+ v0.50.0. Extra sits directly above Flow because both answer the same
95
+ question — WHERE does a task run — and this is the one that can send it
96
+ off this machine. It is the last thing above the composer for that
97
+ reason, never buried under the reading panels.
98
+ -->
99
+ <li><a href="#/extra" data-panel="extra" data-idx="e" data-i18n="nav.extra">Extra</a></li>
100
+ <li><a href="#/flow" data-panel="flow" data-idx="6" data-i18n="nav.flow">Flow</a></li>
101
+ <li><a href="#/crosslink" data-panel="crosslink" data-idx="7" data-i18n="nav.crosslink">Crosslink</a></li>
102
+ <li><a href="#/learn" data-panel="learn" data-idx="8" data-i18n="nav.learn">Learn</a></li>
103
+ <!--
104
+ Next to Learn because it is the same kind of thing: reading, not doing.
105
+ The walkthroughs ship with the package, so this panel works on a machine
106
+ with no project at all — the same as Learn and unlike every other panel.
107
+ -->
108
+ <li><a href="#/mockrun" data-panel="mockrun" data-idx="m" data-i18n="nav.mockrun">Mocked Skill Use</a></li>
109
+ <li><a href="#/experiment" data-panel="experiment" data-idx="9" data-i18n="nav.experiment">Experiment</a></li>
110
+ <li><a href="#/maintenance" data-panel="maintenance" data-idx="0" data-i18n="nav.maintenance">Maintenance</a></li>
111
+ </ul>
112
+
113
+ <div class="rail-foot">
114
+ <div class="rail-project" id="rail-project" title="">—</div>
115
+ <div class="rail-version" id="rail-version"></div>
116
+ <div class="rail-buttons">
117
+ <button class="btn btn-ghost btn-sm" id="theme-toggle" type="button">Light</button>
118
+ <button class="btn btn-ghost btn-sm" id="shortcut-hint" type="button" title="Keyboard shortcuts">?</button>
119
+ </div>
120
+ <!--
121
+ Language sits BELOW the theme row on purpose: it is the same class of
122
+ control (a per-browser display preference, never a project setting) and
123
+ it is switched far less often, so it gets the calmer position.
124
+ -->
125
+ <div class="rail-buttons">
126
+ <button class="btn btn-ghost btn-sm lang-btn" id="lang-toggle" type="button">
127
+ <span class="lang-globe" aria-hidden="true">🌐</span><span id="lang-label">English</span>
128
+ </button>
129
+ </div>
130
+ </div>
131
+ </nav>
132
+
133
+ <main class="main">
134
+ <!--
135
+ Global banner slot. The one thing that must be visible on EVERY panel is
136
+ the global-install warning: if ORC is installed globally, the skills that
137
+ actually run may be the global copy reading the global config, while this
138
+ panel edits the project one that nothing reads.
139
+ -->
140
+ <div id="banners" class="banners"></div>
141
+
142
+ <div id="panel" class="panel" aria-live="polite"></div>
143
+ </main>
144
+
145
+ </div>
146
+
147
+ <!-- Single modal host. Every confirmation and preview renders into it. -->
148
+ <div class="modal-host" id="modal-host" hidden>
149
+ <div class="modal-backdrop" id="modal-backdrop"></div>
150
+ <div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
151
+ <h2 class="modal-title" id="modal-title"></h2>
152
+ <div class="modal-body" id="modal-body"></div>
153
+ <div class="modal-foot" id="modal-foot"></div>
154
+ </div>
155
+ </div>
156
+
157
+ <!-- Transient confirmations (a committed setting, a failed write). -->
158
+ <div class="toasts" id="toasts" aria-live="polite"></div>
159
+
160
+ <!--
161
+ Classic scripts in an explicit load order — no type="module" anywhere. An ES
162
+ module `import` carries no query string, so every import would 401 against the
163
+ per-launch token unless static auth were weakened, and weakening it is not on
164
+ the table. Classic scripts also mean every top-level function and const lands
165
+ in ONE shared global scope, so the split needed no import/export and changed
166
+ no call site.
167
+
168
+ 99-boot.js is last because boot() is the one call that runs at load time.
169
+ -->
170
+ <script src="js/00-core.js"></script>
171
+ <script src="js/01-i18n.js"></script>
172
+ <script src="js/02-ui.js"></script>
173
+ <script src="js/03-md.js"></script>
174
+ <script src="js/04-router.js"></script>
175
+ <script src="js/05-banners.js"></script>
176
+ <script src="js/06-edit.js"></script>
177
+ <script src="js/panels/overview.js"></script>
178
+ <script src="js/panels/settings.js"></script>
179
+ <script src="js/panels/runs.js"></script>
180
+ <script src="js/panels/knowledge.js"></script>
181
+ <script src="js/panels/stats.js"></script>
182
+ <script src="js/panels/flow.js"></script>
183
+ <script src="js/panels/crosslink.js"></script>
184
+ <script src="js/panels/learn.js"></script>
185
+ <script src="js/panels/mockrun.js"></script>
186
+ <script src="js/panels/experiment.js"></script>
187
+ <script src="js/panels/maintenance.js"></script>
188
+ <script src="js/panels/pact.js"></script>
189
+ <script src="js/panels/boundary.js"></script>
190
+ <script src="js/panels/handoff.js"></script>
191
+ <script src="js/panels/challenge.js"></script>
192
+ <script src="js/panels/docs.js"></script>
193
+ <script src="js/panels/extra.js"></script>
194
+ <script src="js/90-tour.js"></script>
195
+ <script src="js/91-shortcuts.js"></script>
196
+ <script src="js/99-boot.js"></script>
197
+ </body>
198
+ </html>
@@ -0,0 +1,92 @@
1
+ /* 00-tokens.css — orc ui
2
+ Palette, the theme states, the type scale, spacing. Every colour token is
3
+ defined on bare :root here; the override blocks below redefine tokens ONLY.
4
+
5
+ The <link> ORDER in app.html is the cascade order, and the numeric
6
+ prefix is that order. No @import: it would carry no session token and
7
+ 401. */
8
+
9
+ /* ---------------------------------------------------------------- TOKENS -- */
10
+
11
+ :root {
12
+ /* surface ladder — deepest at the back, lightest at the front */
13
+ --bg: #0c0e12;
14
+ --bg-rail: #090a0d;
15
+ --surface: #14171d;
16
+ --surface-2: #1a1e26;
17
+ --surface-3: #212630;
18
+ --line: #262c37;
19
+ --line-soft: #1c212a;
20
+
21
+ --text: #e6e9ef;
22
+ --text-dim: #98a1b0;
23
+ --text-faint: #667084;
24
+
25
+ /* one accent; status carries the rest */
26
+ --accent: #4c9aff;
27
+ --accent-dim: #2f6fc4;
28
+ --accent-wash: rgba(76, 154, 255, .12);
29
+
30
+ --ok: #3fb950;
31
+ --ok-wash: rgba(63, 185, 80, .12);
32
+ --warn: #d8a01a;
33
+ --warn-wash: rgba(216, 160, 26, .12);
34
+ --bad: #f0533f;
35
+ --bad-wash: rgba(240, 83, 63, .12);
36
+ --idle: #6b7280;
37
+ --idle-wash: rgba(107, 114, 128, .12);
38
+
39
+ --radius: 10px;
40
+ --radius-sm: 6px;
41
+ --radius-lg: 14px;
42
+
43
+ --sp-1: 4px;
44
+ --sp-2: 8px;
45
+ --sp-3: 12px;
46
+ --sp-4: 16px;
47
+ --sp-5: 24px;
48
+ --sp-6: 32px;
49
+ --sp-7: 48px;
50
+
51
+ --dur-fast: 120ms;
52
+ --dur: 180ms;
53
+ --dur-shadow: 220ms;
54
+ --dur-slow: 320ms;
55
+ --ease: cubic-bezier(.2, .7, .3, 1);
56
+
57
+ --rail-w: 208px;
58
+
59
+ --font: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
60
+ --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
61
+
62
+ --shadow: 0 10px 30px rgba(0, 0, 0, .45);
63
+ }
64
+
65
+ :root[data-theme="light"] {
66
+ --bg: #f6f7f9;
67
+ --bg-rail: #eceef2;
68
+ --surface: #ffffff;
69
+ --surface-2: #f3f5f8;
70
+ --surface-3: #e9ecf1;
71
+ --line: #d8dde5;
72
+ --line-soft: #e6e9ee;
73
+
74
+ --text: #171a20;
75
+ --text-dim: #57616f;
76
+ --text-faint: #808a99;
77
+
78
+ --accent: #1f6feb;
79
+ --accent-dim: #1a5cc4;
80
+ --accent-wash: rgba(31, 111, 235, .10);
81
+
82
+ --ok: #1a7f37;
83
+ --ok-wash: rgba(26, 127, 55, .10);
84
+ --warn: #9a6700;
85
+ --warn-wash: rgba(154, 103, 0, .10);
86
+ --bad: #cf222e;
87
+ --bad-wash: rgba(207, 34, 46, .10);
88
+ --idle: #6b7280;
89
+ --idle-wash: rgba(107, 114, 128, .10);
90
+
91
+ --shadow: 0 10px 30px rgba(16, 24, 40, .12);
92
+ }
@@ -0,0 +1,42 @@
1
+ /* 01-base.css — orc ui
2
+ Reset, body, links, focus ring.
3
+
4
+ The <link> ORDER in app.html is the cascade order, and the numeric
5
+ prefix is that order. No @import: it would carry no session token and
6
+ 401. */
7
+
8
+ /* ----------------------------------------------------------------- RESET -- */
9
+
10
+ *, *::before, *::after { box-sizing: border-box; }
11
+
12
+ /* `scrollbar-gutter: stable` is here for the MODAL SCROLL LOCK. While a modal
13
+ is open the body stops scrolling, and a scrollbar that disappears reflows the
14
+ whole page underneath it. Reserving the gutter costs nothing and needs no
15
+ saved scroll position — cheaper and more robust than the `position: fixed` +
16
+ `top: -Npx` dance. */
17
+ html { scrollbar-gutter: stable; }
18
+ html, body { height: 100%; }
19
+
20
+ body {
21
+ margin: 0;
22
+ background: var(--bg);
23
+ color: var(--text);
24
+ font: 400 14px/1.55 var(--font);
25
+ -webkit-font-smoothing: antialiased;
26
+ }
27
+
28
+ h1, h2, h3, h4, p, ul, ol, figure, pre { margin: 0; }
29
+ ul, ol { padding: 0; list-style: none; }
30
+
31
+ a { color: var(--accent); text-decoration: none; }
32
+ a:hover { text-decoration: underline; }
33
+
34
+ button, input, select { font: inherit; color: inherit; }
35
+
36
+ code, kbd, pre, .mono { font-family: var(--mono); font-size: .92em; }
37
+
38
+ :focus-visible {
39
+ outline: 2px solid var(--accent);
40
+ outline-offset: 2px;
41
+ border-radius: var(--radius-sm);
42
+ }
@@ -0,0 +1,103 @@
1
+ /* 02-shell.css — orc ui
2
+ The rail, the main column, the banner slot, the panel container.
3
+
4
+ The <link> ORDER in app.html is the cascade order, and the numeric
5
+ prefix is that order. No @import: it would carry no session token and
6
+ 401. */
7
+
8
+ /* ---------------------------------------------------------------- LAYOUT -- */
9
+
10
+ .shell {
11
+ display: grid;
12
+ grid-template-columns: var(--rail-w) minmax(0, 1fr);
13
+ min-height: 100%;
14
+ }
15
+
16
+ .rail {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--sp-5);
20
+ padding: var(--sp-5) var(--sp-3);
21
+ background: var(--bg-rail);
22
+ border-right: 1px solid var(--line-soft);
23
+ position: sticky;
24
+ top: 0;
25
+ height: 100vh;
26
+ }
27
+
28
+ .brand {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: var(--sp-2);
32
+ padding: 0 var(--sp-2);
33
+ font-weight: 600;
34
+ letter-spacing: .02em;
35
+ }
36
+ .brand-mark { color: var(--accent); }
37
+ .brand-dim { color: var(--text-faint); font-weight: 400; }
38
+
39
+ .nav { display: flex; flex-direction: column; gap: 2px; flex: 1; }
40
+ .nav a {
41
+ display: flex;
42
+ align-items: center;
43
+ padding: 7px var(--sp-3);
44
+ border-radius: var(--radius-sm);
45
+ color: var(--text-dim);
46
+ transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease),
47
+ transform var(--dur-fast) var(--ease);
48
+ }
49
+ .nav a:hover { background: var(--surface-2); color: var(--text); text-decoration: none; transform: translateX(2px); }
50
+ .nav a[aria-current="page"] {
51
+ background: var(--accent-wash);
52
+ color: var(--text);
53
+ box-shadow: inset 2px 0 0 var(--accent);
54
+ }
55
+ /* The digit that jumps here. Hidden until you hover the rail, so the shortcuts
56
+ are discoverable without a legend taking up permanent space. */
57
+ .nav a::after {
58
+ content: attr(data-idx);
59
+ margin-left: auto;
60
+ font-family: var(--mono);
61
+ font-size: 10px;
62
+ color: var(--text-faint);
63
+ opacity: 0;
64
+ transition: opacity var(--dur) var(--ease);
65
+ }
66
+ .rail:hover .nav a::after { opacity: .65; }
67
+
68
+ .rail-buttons { display: flex; gap: var(--sp-2); }
69
+ .rail-buttons .btn { flex: 1; justify-content: center; }
70
+ #shortcut-hint { flex: 0 0 auto; min-width: 30px; }
71
+
72
+ /* The language toggle sits directly under the theme toggle: same class of
73
+ control (a per-browser display preference), same place, same weight. */
74
+ .lang-btn { gap: 6px; overflow: hidden; }
75
+ .lang-btn #lang-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
76
+ .lang-globe { flex: none; opacity: .7; font-size: 12px; }
77
+
78
+ .rail-foot {
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: var(--sp-2);
82
+ padding: 0 var(--sp-2);
83
+ font-size: 12px;
84
+ color: var(--text-faint);
85
+ }
86
+ .rail-project {
87
+ font-family: var(--mono);
88
+ font-size: 11px;
89
+ overflow: hidden;
90
+ text-overflow: ellipsis;
91
+ white-space: nowrap;
92
+ direction: rtl; /* keep the leaf folder visible when it truncates */
93
+ text-align: left;
94
+ }
95
+
96
+ .main {
97
+ min-width: 0;
98
+ padding: var(--sp-6) var(--sp-6) var(--sp-7);
99
+ max-width: 1180px;
100
+ }
101
+
102
+ .banners { display: flex; flex-direction: column; gap: var(--sp-3); }
103
+ .banners:not(:empty) { margin-bottom: var(--sp-5); }