@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.
- package/CHANGELOG.md +2017 -0
- package/README-id.md +521 -0
- package/README.md +485 -0
- package/bin/build-agents.js +86 -0
- package/bin/cli.js +29050 -0
- package/bin/mockrun-catalog.js +267 -0
- package/bin/onboarding-content.js +172 -0
- package/bin/pricing.json +200 -0
- package/bin/providers.json +437 -0
- package/bin/ui.js +95 -0
- package/bin/verify-contracts.js +3277 -0
- package/bin/verify-package.js +498 -0
- package/bin/webui/api.js +1163 -0
- package/bin/webui/app.html +198 -0
- package/bin/webui/css/00-tokens.css +92 -0
- package/bin/webui/css/01-base.css +42 -0
- package/bin/webui/css/02-shell.css +103 -0
- package/bin/webui/css/03-components.css +462 -0
- package/bin/webui/css/04-motion.css +91 -0
- package/bin/webui/css/05-tour.css +100 -0
- package/bin/webui/css/06-responsive.css +108 -0
- package/bin/webui/css/panels/boundary.css +26 -0
- package/bin/webui/css/panels/challenge.css +151 -0
- package/bin/webui/css/panels/crosslink.css +194 -0
- package/bin/webui/css/panels/docs.css +254 -0
- package/bin/webui/css/panels/experiment.css +23 -0
- package/bin/webui/css/panels/extra.css +536 -0
- package/bin/webui/css/panels/flow.css +177 -0
- package/bin/webui/css/panels/handoff.css +67 -0
- package/bin/webui/css/panels/knowledge.css +86 -0
- package/bin/webui/css/panels/learn.css +154 -0
- package/bin/webui/css/panels/maintenance.css +55 -0
- package/bin/webui/css/panels/mockrun.css +268 -0
- package/bin/webui/css/panels/overview.css +100 -0
- package/bin/webui/css/panels/pact.css +43 -0
- package/bin/webui/css/panels/runs.css +105 -0
- package/bin/webui/css/panels/settings.css +227 -0
- package/bin/webui/css/panels/stats.css +87 -0
- package/bin/webui/fixtures/boundary.js +92 -0
- package/bin/webui/fixtures/challenge.js +825 -0
- package/bin/webui/fixtures/crosslink.js +31 -0
- package/bin/webui/fixtures/docs.js +982 -0
- package/bin/webui/fixtures/extra.js +1934 -0
- package/bin/webui/fixtures/flow.js +81 -0
- package/bin/webui/fixtures/handoff.js +35 -0
- package/bin/webui/fixtures/index.js +486 -0
- package/bin/webui/fixtures/knowledge.js +291 -0
- package/bin/webui/fixtures/maintenance.js +42 -0
- package/bin/webui/fixtures/mockrun.js +36 -0
- package/bin/webui/fixtures/pact.js +111 -0
- package/bin/webui/fixtures/runs.js +109 -0
- package/bin/webui/fixtures/settings.js +78 -0
- package/bin/webui/fixtures/shell.js +48 -0
- package/bin/webui/fixtures/stats.js +104 -0
- package/bin/webui/i18n/TERMS.md +134 -0
- package/bin/webui/i18n/en/banner.json +29 -0
- package/bin/webui/i18n/en/boundary.json +20 -0
- package/bin/webui/i18n/en/challenge.json +106 -0
- package/bin/webui/i18n/en/common.json +69 -0
- package/bin/webui/i18n/en/crosslink.json +69 -0
- package/bin/webui/i18n/en/docs.json +175 -0
- package/bin/webui/i18n/en/experiment.json +17 -0
- package/bin/webui/i18n/en/extra.json +313 -0
- package/bin/webui/i18n/en/flow.json +30 -0
- package/bin/webui/i18n/en/handoff.json +37 -0
- package/bin/webui/i18n/en/knowledge.json +141 -0
- package/bin/webui/i18n/en/learn.json +16 -0
- package/bin/webui/i18n/en/maintenance.json +52 -0
- package/bin/webui/i18n/en/mockrun.json +19 -0
- package/bin/webui/i18n/en/nav.json +19 -0
- package/bin/webui/i18n/en/overview.json +89 -0
- package/bin/webui/i18n/en/pact.json +36 -0
- package/bin/webui/i18n/en/runs.json +51 -0
- package/bin/webui/i18n/en/settings.json +49 -0
- package/bin/webui/i18n/en/stats.json +69 -0
- package/bin/webui/i18n/en/tour.json +33 -0
- package/bin/webui/i18n/id/banner.json +29 -0
- package/bin/webui/i18n/id/boundary.json +20 -0
- package/bin/webui/i18n/id/challenge.json +106 -0
- package/bin/webui/i18n/id/common.json +70 -0
- package/bin/webui/i18n/id/crosslink.json +69 -0
- package/bin/webui/i18n/id/docs.json +175 -0
- package/bin/webui/i18n/id/experiment.json +17 -0
- package/bin/webui/i18n/id/extra.json +313 -0
- package/bin/webui/i18n/id/flow.json +30 -0
- package/bin/webui/i18n/id/handoff.json +37 -0
- package/bin/webui/i18n/id/knowledge.json +141 -0
- package/bin/webui/i18n/id/learn.json +16 -0
- package/bin/webui/i18n/id/maintenance.json +52 -0
- package/bin/webui/i18n/id/mockrun.json +19 -0
- package/bin/webui/i18n/id/nav.json +19 -0
- package/bin/webui/i18n/id/overview.json +89 -0
- package/bin/webui/i18n/id/pact.json +36 -0
- package/bin/webui/i18n/id/runs.json +51 -0
- package/bin/webui/i18n/id/settings.json +49 -0
- package/bin/webui/i18n/id/stats.json +69 -0
- package/bin/webui/i18n/id/tour.json +33 -0
- package/bin/webui/js/00-core.js +115 -0
- package/bin/webui/js/01-i18n.js +149 -0
- package/bin/webui/js/02-ui.js +211 -0
- package/bin/webui/js/03-md.js +286 -0
- package/bin/webui/js/04-router.js +51 -0
- package/bin/webui/js/05-banners.js +172 -0
- package/bin/webui/js/06-edit.js +183 -0
- package/bin/webui/js/90-tour.js +488 -0
- package/bin/webui/js/91-shortcuts.js +126 -0
- package/bin/webui/js/99-boot.js +118 -0
- package/bin/webui/js/panels/boundary.js +104 -0
- package/bin/webui/js/panels/challenge.js +781 -0
- package/bin/webui/js/panels/crosslink.js +654 -0
- package/bin/webui/js/panels/docs.js +1338 -0
- package/bin/webui/js/panels/experiment.js +98 -0
- package/bin/webui/js/panels/extra.js +3011 -0
- package/bin/webui/js/panels/flow.js +297 -0
- package/bin/webui/js/panels/handoff.js +169 -0
- package/bin/webui/js/panels/knowledge.js +890 -0
- package/bin/webui/js/panels/learn.js +220 -0
- package/bin/webui/js/panels/maintenance.js +235 -0
- package/bin/webui/js/panels/mockrun.js +227 -0
- package/bin/webui/js/panels/overview.js +447 -0
- package/bin/webui/js/panels/pact.js +189 -0
- package/bin/webui/js/panels/runs.js +416 -0
- package/bin/webui/js/panels/settings.js +573 -0
- package/bin/webui/js/panels/stats.js +378 -0
- package/bin/webui/serve.js +557 -0
- package/mock-run/INDEX.md +106 -0
- package/mock-run/a-normal-day.md +587 -0
- package/mock-run/context-combiner.md +100 -0
- package/mock-run/extra-recovery.md +330 -0
- package/mock-run/extra-slots.md +177 -0
- package/mock-run/media/README.md +43 -0
- package/mock-run/orc-aftermath.md +392 -0
- package/mock-run/orc-boundary.md +356 -0
- package/mock-run/orc-brainstorm.md +177 -0
- package/mock-run/orc-budget.md +534 -0
- package/mock-run/orc-challenge-council.md +262 -0
- package/mock-run/orc-challenge.md +416 -0
- package/mock-run/orc-cli.md +200 -0
- package/mock-run/orc-diy.md +129 -0
- package/mock-run/orc-doc.md +448 -0
- package/mock-run/orc-explain.md +86 -0
- package/mock-run/orc-export.md +423 -0
- package/mock-run/orc-extra.md +392 -0
- package/mock-run/orc-fast.md +106 -0
- package/mock-run/orc-grill.md +151 -0
- package/mock-run/orc-handoff.md +480 -0
- package/mock-run/orc-pact.md +421 -0
- package/mock-run/orc-pattern.md +112 -0
- package/mock-run/orc-plan.md +108 -0
- package/mock-run/orc-pr-setup.md +126 -0
- package/mock-run/orc-quick.md +113 -0
- package/mock-run/orc-route.md +93 -0
- package/mock-run/orc-ui.md +125 -0
- package/mock-run/orc-ultra.md +103 -0
- package/mock-run/orc.md +157 -0
- package/mock-run/the-example-project.md +55 -0
- package/package.json +39 -0
- package/templates/agents/MODEL-MAPPING.md +168 -0
- package/templates/agents/orc-advisor-fable-5.md +50 -0
- package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
- package/templates/agents/orc-analyst-fable-5.md +115 -0
- package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
- package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
- package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
- package/templates/agents/orc-executor-haiku-4-5.md +113 -0
- package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
- package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
- package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-low.md +114 -0
- package/templates/agents/orc-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
- package/templates/agents/orc-judge-fable-5.md +79 -0
- package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
- package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
- package/templates/agents/orc-planner-fable-5.md +152 -0
- package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
- package/templates/agents/orc-planner-opus-5-med.md +160 -0
- package/templates/agents/orc-retro-opus-5-med.md +73 -0
- package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
- package/templates/agents/orc-reviewer-fable-5.md +57 -0
- package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
- package/templates/agents/orc-scout-opus-5-low.md +40 -0
- package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
- package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
- package/templates/agents/orc-test-author-opus-5-med.md +71 -0
- package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
- package/templates/agents/orc-verifier-opus-5-med.md +69 -0
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
- package/templates/commands/orc-aftermath.md +49 -0
- package/templates/commands/orc-analyze.md +21 -0
- package/templates/commands/orc-boundary.md +46 -0
- package/templates/commands/orc-brainstorm.md +51 -0
- package/templates/commands/orc-budget.md +54 -0
- package/templates/commands/orc-challenge.md +58 -0
- package/templates/commands/orc-claude.md +14 -0
- package/templates/commands/orc-diy.md +13 -0
- package/templates/commands/orc-doc.md +128 -0
- package/templates/commands/orc-explain.md +20 -0
- package/templates/commands/orc-export.md +46 -0
- package/templates/commands/orc-fast.md +15 -0
- package/templates/commands/orc-grill.md +40 -0
- package/templates/commands/orc-handoff.md +52 -0
- package/templates/commands/orc-learn.md +17 -0
- package/templates/commands/orc-mini.md +12 -0
- package/templates/commands/orc-pact.md +44 -0
- package/templates/commands/orc-pattern.md +15 -0
- package/templates/commands/orc-plan.md +22 -0
- package/templates/commands/orc-poly.md +21 -0
- package/templates/commands/orc-pr-driver.md +30 -0
- package/templates/commands/orc-pr-setup.md +31 -0
- package/templates/commands/orc-quick.md +33 -0
- package/templates/commands/orc-retro.md +17 -0
- package/templates/commands/orc-route.md +41 -0
- package/templates/commands/orc-ultra.md +17 -0
- package/templates/commands/orc-verify.md +11 -0
- package/templates/commands/orc-wiki.md +42 -0
- package/templates/commands/orc.md +16 -0
- package/templates/hooks/orc-effort-guard.js +178 -0
- package/templates/hooks/orc-statusline.js +305 -0
- package/templates/hooks/orc-trace.js +471 -0
- package/templates/hooks/orc-update-lib.js +125 -0
- package/templates/skills/_shared/README.md +50 -0
- package/templates/skills/_shared/detecting-artifacts.md +90 -0
- package/templates/skills/_shared/drift-recovery.md +98 -0
- package/templates/skills/_shared/extra-dispatch.md +1051 -0
- package/templates/skills/_shared/fable5-override.md +56 -0
- package/templates/skills/_shared/fallback-handoff.md +42 -0
- package/templates/skills/_shared/gh-stack-commands.md +65 -0
- package/templates/skills/_shared/gotchas.md +177 -0
- package/templates/skills/_shared/interview.md +144 -0
- package/templates/skills/_shared/lane-suspend.md +82 -0
- package/templates/skills/_shared/opus5-only.md +131 -0
- package/templates/skills/_shared/pr-templates.md +106 -0
- package/templates/skills/_shared/read-ladder.md +54 -0
- package/templates/skills/_shared/return-validation.md +145 -0
- package/templates/skills/_shared/smoke-gate.md +28 -0
- package/templates/skills/_shared/stack-plan.md +135 -0
- package/templates/skills/_shared/untrusted-input.md +63 -0
- package/templates/skills/context-combiner/SKILL.md +187 -0
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
- package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
- package/templates/skills/orc/README.md +150 -0
- package/templates/skills/orc/SKILL.md +526 -0
- package/templates/skills/orc/config.md +389 -0
- package/templates/skills/orc/examples/full-run-mock.md +73 -0
- package/templates/skills/orc/references/analyst-gates.md +124 -0
- package/templates/skills/orc/references/effort-and-mode.md +224 -0
- package/templates/skills/orc/references/house-rules.md +20 -0
- package/templates/skills/orc/references/intake.md +120 -0
- package/templates/skills/orc/references/log-protocol.md +39 -0
- package/templates/skills/orc/references/pattern-gate.md +89 -0
- package/templates/skills/orc/references/plan-handoff.md +84 -0
- package/templates/skills/orc/references/preflight-report.md +220 -0
- package/templates/skills/orc/references/security-checklist.md +39 -0
- package/templates/skills/orc/references/stop-and-resume.md +160 -0
- package/templates/skills/orc/references/trace-protocol.md +314 -0
- package/templates/skills/orc/references/ultra-mode.md +123 -0
- package/templates/skills/orc/references/wave-grouping.md +121 -0
- package/templates/skills/orc/references/wiki-consult.md +177 -0
- package/templates/skills/orc/schemas/checkpoint.md +122 -0
- package/templates/skills/orc/schemas/intent-spec.md +42 -0
- package/templates/skills/orc/schemas/planning-output.md +279 -0
- package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
- package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
- package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
- package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
- package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
- package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
- package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
- package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
- package/templates/skills/orc-advisor/SKILL.md +60 -0
- package/templates/skills/orc-aftermath/SKILL.md +136 -0
- package/templates/skills/orc-aftermath/references/report.md +95 -0
- package/templates/skills/orc-analyze/SKILL.md +220 -0
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
- package/templates/skills/orc-analyze/references/branching.md +51 -0
- package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
- package/templates/skills/orc-analyze/references/thin-input.md +77 -0
- package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
- package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
- package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
- package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
- package/templates/skills/orc-boundary/SKILL.md +208 -0
- package/templates/skills/orc-boundary/references/card.md +78 -0
- package/templates/skills/orc-boundary/references/gate.md +113 -0
- package/templates/skills/orc-brainstorm/SKILL.md +339 -0
- package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
- package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
- package/templates/skills/orc-budget/SKILL.md +225 -0
- package/templates/skills/orc-budget/references/corpus.md +87 -0
- package/templates/skills/orc-challenge/README.md +142 -0
- package/templates/skills/orc-challenge/SKILL.md +255 -0
- package/templates/skills/orc-challenge/examples/code-module.md +110 -0
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
- package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
- package/templates/skills/orc-challenge/references/conservation.md +107 -0
- package/templates/skills/orc-challenge/references/council.md +315 -0
- package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
- package/templates/skills/orc-challenge/references/dimensions.md +121 -0
- package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
- package/templates/skills/orc-challenge/references/intake.md +171 -0
- package/templates/skills/orc-challenge/references/kinds.md +44 -0
- package/templates/skills/orc-challenge/references/plain-english.md +98 -0
- package/templates/skills/orc-challenge/references/rubric.md +109 -0
- package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
- package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
- package/templates/skills/orc-claude/SKILL.md +199 -0
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
- package/templates/skills/orc-claude/references/refresh.md +76 -0
- package/templates/skills/orc-claude/references/template.md +109 -0
- package/templates/skills/orc-diy/README.md +142 -0
- package/templates/skills/orc-diy/SKILL.md +70 -0
- package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
- package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
- package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
- package/templates/skills/orc-diy/references/blocks/header.md +55 -0
- package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
- package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
- package/templates/skills/orc-diy/references/blocks/review.md +18 -0
- package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
- package/templates/skills/orc-diy/references/blocks/security.md +25 -0
- package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
- package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
- package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
- package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
- package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
- package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
- package/templates/skills/orc-diy/references/compile.md +59 -0
- package/templates/skills/orc-diy/references/flow-schema.md +100 -0
- package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
- package/templates/skills/orc-doc/README.md +229 -0
- package/templates/skills/orc-doc/SKILL.md +444 -0
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
- package/templates/skills/orc-doc/references/chunking.md +527 -0
- package/templates/skills/orc-doc/references/gates.md +311 -0
- package/templates/skills/orc-doc/references/generation-rules.md +122 -0
- package/templates/skills/orc-doc/references/house-rules.md +170 -0
- package/templates/skills/orc-doc/references/import-targets.md +40 -0
- package/templates/skills/orc-doc/references/plain-language.md +66 -0
- package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
- package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
- package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
- package/templates/skills/orc-doc/references/templates/prd.md +133 -0
- package/templates/skills/orc-doc/references/templates/report.md +102 -0
- package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
- package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
- package/templates/skills/orc-explain/SKILL.md +57 -0
- package/templates/skills/orc-export/SKILL.md +154 -0
- package/templates/skills/orc-fast/SKILL.md +188 -0
- package/templates/skills/orc-grill/SKILL.md +207 -0
- package/templates/skills/orc-grill/references/grill-doc.md +105 -0
- package/templates/skills/orc-handoff/SKILL.md +204 -0
- package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
- package/templates/skills/orc-handoff/references/surfaces.md +88 -0
- package/templates/skills/orc-judge/SKILL.md +82 -0
- package/templates/skills/orc-learn/SKILL.md +156 -0
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
- package/templates/skills/orc-learn/references/deepen.md +70 -0
- package/templates/skills/orc-learn/references/refresh.md +65 -0
- package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
- package/templates/skills/orc-learn/references/template-learning.md +67 -0
- package/templates/skills/orc-mini/SKILL.md +226 -0
- package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
- package/templates/skills/orc-pact/SKILL.md +218 -0
- package/templates/skills/orc-pact/references/gate.md +70 -0
- package/templates/skills/orc-pact/references/ledger.md +99 -0
- package/templates/skills/orc-pattern/SKILL.md +124 -0
- package/templates/skills/orc-pattern/references/INDEX.md +73 -0
- package/templates/skills/orc-pattern/references/be-django.md +80 -0
- package/templates/skills/orc-pattern/references/be-express.md +82 -0
- package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
- package/templates/skills/orc-pattern/references/be-go.md +96 -0
- package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
- package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
- package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
- package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
- package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
- package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
- package/templates/skills/orc-pattern/references/fe-react.md +83 -0
- package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
- package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
- package/templates/skills/orc-poly/SKILL.md +216 -0
- package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
- package/templates/skills/orc-poly/references/gather.md +70 -0
- package/templates/skills/orc-poly/references/poly-spec.md +84 -0
- package/templates/skills/orc-pr-driver/README.md +349 -0
- package/templates/skills/orc-pr-driver/SKILL.md +167 -0
- package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
- package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
- package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
- package/templates/skills/orc-pr-setup/README.md +436 -0
- package/templates/skills/orc-pr-setup/SKILL.md +184 -0
- package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
- package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
- package/templates/skills/orc-quick/README.md +423 -0
- package/templates/skills/orc-quick/SKILL.md +306 -0
- package/templates/skills/orc-quick/references/context-doc.md +114 -0
- package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
- package/templates/skills/orc-quick/references/gh-mode.md +127 -0
- package/templates/skills/orc-retro/SKILL.md +222 -0
- package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
- package/templates/skills/orc-route/SKILL.md +165 -0
- package/templates/skills/orc-verify/SKILL.md +86 -0
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
- package/templates/skills/orc-wiki/README.md +325 -0
- package/templates/skills/orc-wiki/SKILL.md +322 -0
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
- package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
- package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
- package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
- package/templates/skills/orc-wiki/references/crosslink.md +284 -0
- package/templates/skills/orc-wiki/references/extra.md +79 -0
- package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
- package/templates/skills/orc-wiki/references/orientation.md +51 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
- package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
- package/templates/skills/orc-wiki/references/staleness.md +288 -0
- package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
- package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/* 03-components.css — orc ui
|
|
2
|
+
Shared furniture: page-head, stack, card, grid, stat tile, kv list, chip,
|
|
3
|
+
button, scroll-x, pre, table, note, empty, banner, changelog entry,
|
|
4
|
+
skeleton, toast, modal, the busy veil, kbd.
|
|
5
|
+
|
|
6
|
+
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
7
|
+
prefix is that order. No @import: it would carry no session token and
|
|
8
|
+
401. */
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/* ------------------------------------------------------------ COMPONENTS -- */
|
|
12
|
+
|
|
13
|
+
.page-head {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: flex-end;
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
gap: var(--sp-4);
|
|
18
|
+
flex-wrap: wrap;
|
|
19
|
+
margin-bottom: var(--sp-5);
|
|
20
|
+
}
|
|
21
|
+
.page-head h1 { font-size: 20px; font-weight: 600; letter-spacing: -.01em; }
|
|
22
|
+
.page-sub { color: var(--text-dim); font-size: 13px; margin-top: 2px; }
|
|
23
|
+
|
|
24
|
+
/* SPACING IS OWNED BY THE CONTAINER, never by adjacent-sibling pairs.
|
|
25
|
+
The original model spaced `.card + .card` — which only ever matched two cards
|
|
26
|
+
in a row. A `.grid` of stat tiles followed by a card, a `.tier` followed by a
|
|
27
|
+
card, a `.run-list` followed by a card: all of those are the COMMON sequences
|
|
28
|
+
in these panels, none of them matched, and every one of them collided. A rule
|
|
29
|
+
that has to be re-stated for each new pair of block types is a rule that will
|
|
30
|
+
be forgotten the next time a panel gains a block type.
|
|
31
|
+
|
|
32
|
+
`.stack` is that container. Every panel body and async slot carries it, so
|
|
33
|
+
spacing holds for any mix of children, in any order, forever. Because the gap
|
|
34
|
+
belongs to the parent, NO block type may carry its own outer margin — that is
|
|
35
|
+
what would double up. */
|
|
36
|
+
.stack { display: flex; flex-direction: column; gap: var(--sp-4); min-width: 0; }
|
|
37
|
+
.stack-sm { gap: var(--sp-3); }
|
|
38
|
+
/* A flex column child will not shrink below its content without this, which is
|
|
39
|
+
how a wide table or a long path escapes its card. */
|
|
40
|
+
.stack > * { min-width: 0; }
|
|
41
|
+
|
|
42
|
+
.card {
|
|
43
|
+
background: var(--surface);
|
|
44
|
+
border: 1px solid var(--line);
|
|
45
|
+
border-radius: var(--radius);
|
|
46
|
+
padding: var(--sp-4) var(--sp-5);
|
|
47
|
+
}
|
|
48
|
+
/* Card internals get the same treatment: a card holds a head, then any mix of
|
|
49
|
+
notes, tables, lists and action rows, and those collided too. */
|
|
50
|
+
.card > * + * { margin-top: var(--sp-3); }
|
|
51
|
+
.card-head {
|
|
52
|
+
display: flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
justify-content: space-between;
|
|
55
|
+
gap: var(--sp-3);
|
|
56
|
+
}
|
|
57
|
+
.card-head h2 { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: .07em; color: var(--text-dim); }
|
|
58
|
+
|
|
59
|
+
.grid { display: grid; gap: var(--sp-4); }
|
|
60
|
+
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
|
|
61
|
+
.grid-3 { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
|
|
62
|
+
|
|
63
|
+
.stat { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: var(--sp-4); }
|
|
64
|
+
.stat-label { font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-faint); }
|
|
65
|
+
.stat-value { font-size: 26px; font-weight: 600; line-height: 1.2; margin-top: 4px; letter-spacing: -.02em; }
|
|
66
|
+
.stat-value .chip { vertical-align: middle; margin-left: var(--sp-2); }
|
|
67
|
+
.stat-note { font-size: 10px; color: var(--text-dim); margin-top: 2px; }
|
|
68
|
+
.stat-ok { color: var(--ok); }
|
|
69
|
+
.stat-warn { color: var(--warn); }
|
|
70
|
+
.stat-bad { color: var(--bad); }
|
|
71
|
+
/* The version tile answers over the network, so it has a waiting state. It
|
|
72
|
+
dims rather than moves: a tile that reflows when the answer lands shifts the
|
|
73
|
+
three tiles beside it. */
|
|
74
|
+
.stat-pending .stat-value { color: var(--text-faint); font-size: 18px; }
|
|
75
|
+
.stat-pending { animation: breathe 1.6s ease-in-out infinite; }
|
|
76
|
+
@keyframes breathe {
|
|
77
|
+
0%, 100% { opacity: 1; }
|
|
78
|
+
50% { opacity: .62; }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* A tile that LEADS somewhere says so by moving; a tile that leads nowhere is a
|
|
82
|
+
plain div and never reacts. `text-align: left` because it is a <button> now
|
|
83
|
+
and would otherwise centre its own text. */
|
|
84
|
+
.stat-link {
|
|
85
|
+
text-align: left;
|
|
86
|
+
width: 100%;
|
|
87
|
+
font: inherit;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
position: relative;
|
|
90
|
+
transition: border-color var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease),
|
|
91
|
+
background var(--dur-fast) var(--ease);
|
|
92
|
+
}
|
|
93
|
+
.stat-link::after {
|
|
94
|
+
content: "→";
|
|
95
|
+
position: absolute;
|
|
96
|
+
top: var(--sp-3);
|
|
97
|
+
right: var(--sp-3);
|
|
98
|
+
color: var(--text-faint);
|
|
99
|
+
opacity: 0;
|
|
100
|
+
transform: translateX(-4px);
|
|
101
|
+
transition: opacity var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);
|
|
102
|
+
}
|
|
103
|
+
.stat-link:hover { border-color: var(--accent-dim); background: var(--surface-2); transform: translateY(-2px); }
|
|
104
|
+
.stat-link:hover::after { opacity: 1; transform: none; }
|
|
105
|
+
|
|
106
|
+
.kv { display: grid; grid-template-columns: minmax(120px, max-content) minmax(0, 1fr); gap: 6px var(--sp-4); }
|
|
107
|
+
.kv dt { color: var(--text-faint); font-size: 12px; }
|
|
108
|
+
.kv dd { margin: 0; font-family: var(--mono); font-size: 12px; word-break: break-all; }
|
|
109
|
+
/* A copy button that is always visible turns a value list into a row of
|
|
110
|
+
buttons, so it fades in with the row it belongs to. It stays reachable by
|
|
111
|
+
keyboard regardless — :focus-within, not hover alone. */
|
|
112
|
+
.kv-copy { display: flex; align-items: baseline; gap: var(--sp-2); }
|
|
113
|
+
.copy-btn {
|
|
114
|
+
border: 1px solid var(--line);
|
|
115
|
+
background: var(--surface-2);
|
|
116
|
+
color: var(--text-dim);
|
|
117
|
+
border-radius: 4px;
|
|
118
|
+
padding: 0 6px;
|
|
119
|
+
font-size: 10px;
|
|
120
|
+
font-family: var(--font);
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
opacity: 0;
|
|
123
|
+
flex: none;
|
|
124
|
+
transition: opacity var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease),
|
|
125
|
+
border-color var(--dur-fast) var(--ease);
|
|
126
|
+
}
|
|
127
|
+
.kv-copy:hover .copy-btn, .copy-btn:focus-visible { opacity: 1; }
|
|
128
|
+
.copy-btn:hover { color: var(--accent); border-color: var(--accent-dim); }
|
|
129
|
+
|
|
130
|
+
.chip {
|
|
131
|
+
display: inline-flex;
|
|
132
|
+
align-items: center;
|
|
133
|
+
gap: 6px;
|
|
134
|
+
padding: 2px 9px;
|
|
135
|
+
border-radius: 100px;
|
|
136
|
+
font-size: 11px;
|
|
137
|
+
font-weight: 600;
|
|
138
|
+
letter-spacing: .04em;
|
|
139
|
+
text-transform: uppercase;
|
|
140
|
+
background: var(--idle-wash);
|
|
141
|
+
color: var(--text-dim);
|
|
142
|
+
border: 1px solid transparent;
|
|
143
|
+
}
|
|
144
|
+
.chip-ok { background: var(--ok-wash); color: var(--ok); }
|
|
145
|
+
.chip-warn { background: var(--warn-wash); color: var(--warn); }
|
|
146
|
+
.chip-bad { background: var(--bad-wash); color: var(--bad); }
|
|
147
|
+
.chip-info { background: var(--accent-wash); color: var(--accent); }
|
|
148
|
+
|
|
149
|
+
/* STALE gets a slow pulse; FRESH is static. Motion here is information. */
|
|
150
|
+
.chip-bad.chip-pulse { animation: pulse 2.4s ease-in-out infinite; }
|
|
151
|
+
@keyframes pulse {
|
|
152
|
+
0%, 100% { box-shadow: 0 0 0 0 var(--bad-wash); }
|
|
153
|
+
50% { box-shadow: 0 0 0 5px transparent; }
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.btn {
|
|
157
|
+
display: inline-flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
gap: 6px;
|
|
160
|
+
padding: 6px 13px;
|
|
161
|
+
border: 1px solid var(--line);
|
|
162
|
+
border-radius: var(--radius-sm);
|
|
163
|
+
background: var(--surface-2);
|
|
164
|
+
color: var(--text);
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), opacity var(--dur-fast);
|
|
167
|
+
}
|
|
168
|
+
.btn:hover:not(:disabled) { background: var(--surface-3); border-color: var(--accent-dim); }
|
|
169
|
+
/* A press that moves confirms the click landed — the one bit of feedback that
|
|
170
|
+
is never wrong, even when the request behind it is slow. */
|
|
171
|
+
.btn:active:not(:disabled) { transform: translateY(1px); }
|
|
172
|
+
.btn:disabled { opacity: .45; cursor: not-allowed; }
|
|
173
|
+
.btn-sm { padding: 3px 9px; font-size: 12px; }
|
|
174
|
+
.btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; }
|
|
175
|
+
.btn-primary:hover:not(:disabled) { background: var(--accent-dim); border-color: var(--accent-dim); }
|
|
176
|
+
.btn-danger { background: var(--bad-wash); border-color: var(--bad); color: var(--bad); }
|
|
177
|
+
.btn-danger:hover:not(:disabled) { background: var(--bad); color: #fff; }
|
|
178
|
+
.btn-ghost { background: transparent; }
|
|
179
|
+
|
|
180
|
+
.row-actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
|
|
181
|
+
|
|
182
|
+
/* Wide content scrolls in its OWN container — the page body never scrolls
|
|
183
|
+
horizontally.
|
|
184
|
+
|
|
185
|
+
THE SCROLLBAR IS PART OF THE PICTURE (v0.44.0). The default platform bar is
|
|
186
|
+
an opaque grey slab with its own track colour, and under the flow stepper it
|
|
187
|
+
cut a hard band across the bottom of the rail — the loudest thing on a card
|
|
188
|
+
whose whole job is to be read as a diagram. So: no track at all (the card's
|
|
189
|
+
own background shows through), a thin rounded thumb in the panel's line
|
|
190
|
+
colour, and full contrast only on hover. It is quiet until you reach for it.
|
|
191
|
+
|
|
192
|
+
Both syntaxes are given because they are not interchangeable: Firefox reads
|
|
193
|
+
`scrollbar-width`/`scrollbar-color`, WebKit and Chromium read the
|
|
194
|
+
pseudo-elements, and neither falls back to the other. */
|
|
195
|
+
.scroll-x { overflow-x: auto; }
|
|
196
|
+
|
|
197
|
+
.scroll-x, .file-list, .block, .modal, .run-detail, pre {
|
|
198
|
+
scrollbar-width: thin;
|
|
199
|
+
scrollbar-color: var(--line) transparent;
|
|
200
|
+
}
|
|
201
|
+
.scroll-x::-webkit-scrollbar,
|
|
202
|
+
.file-list::-webkit-scrollbar,
|
|
203
|
+
.block::-webkit-scrollbar,
|
|
204
|
+
.modal::-webkit-scrollbar,
|
|
205
|
+
pre::-webkit-scrollbar { height: 9px; width: 9px; }
|
|
206
|
+
/* Transparent TRACK, transparent corner — the card behind it is the background,
|
|
207
|
+
so a scrolling box no longer announces itself with a grey gutter. */
|
|
208
|
+
.scroll-x::-webkit-scrollbar-track,
|
|
209
|
+
.file-list::-webkit-scrollbar-track,
|
|
210
|
+
.block::-webkit-scrollbar-track,
|
|
211
|
+
.modal::-webkit-scrollbar-track,
|
|
212
|
+
pre::-webkit-scrollbar-track { background: transparent; }
|
|
213
|
+
.scroll-x::-webkit-scrollbar-corner,
|
|
214
|
+
.file-list::-webkit-scrollbar-corner,
|
|
215
|
+
.block::-webkit-scrollbar-corner,
|
|
216
|
+
.modal::-webkit-scrollbar-corner,
|
|
217
|
+
pre::-webkit-scrollbar-corner { background: transparent; }
|
|
218
|
+
.scroll-x::-webkit-scrollbar-thumb,
|
|
219
|
+
.file-list::-webkit-scrollbar-thumb,
|
|
220
|
+
.block::-webkit-scrollbar-thumb,
|
|
221
|
+
.modal::-webkit-scrollbar-thumb,
|
|
222
|
+
pre::-webkit-scrollbar-thumb {
|
|
223
|
+
background: var(--line);
|
|
224
|
+
border-radius: 999px;
|
|
225
|
+
/* A transparent border with `background-clip: content-box` is what keeps the
|
|
226
|
+
thumb visually THINNER than the track it needs for a comfortable hit area. */
|
|
227
|
+
border: 2px solid transparent;
|
|
228
|
+
background-clip: content-box;
|
|
229
|
+
transition: background var(--dur-fast) var(--ease);
|
|
230
|
+
}
|
|
231
|
+
.scroll-x:hover::-webkit-scrollbar-thumb,
|
|
232
|
+
.file-list:hover::-webkit-scrollbar-thumb,
|
|
233
|
+
.block:hover::-webkit-scrollbar-thumb,
|
|
234
|
+
.modal:hover::-webkit-scrollbar-thumb,
|
|
235
|
+
pre:hover::-webkit-scrollbar-thumb { background: var(--accent-dim); background-clip: content-box; }
|
|
236
|
+
.scroll-x::-webkit-scrollbar-thumb:active,
|
|
237
|
+
.file-list::-webkit-scrollbar-thumb:active,
|
|
238
|
+
.block::-webkit-scrollbar-thumb:active,
|
|
239
|
+
.modal::-webkit-scrollbar-thumb:active,
|
|
240
|
+
pre::-webkit-scrollbar-thumb:active { background: var(--accent); background-clip: content-box; }
|
|
241
|
+
|
|
242
|
+
table { border-collapse: collapse; width: 100%; font-size: 13px; }
|
|
243
|
+
th, td { text-align: left; padding: 7px var(--sp-3); border-bottom: 1px solid var(--line-soft); vertical-align: top; }
|
|
244
|
+
th { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-faint); font-weight: 600; }
|
|
245
|
+
tbody tr:last-child td { border-bottom: 0; }
|
|
246
|
+
tbody tr:hover { background: var(--surface-2); }
|
|
247
|
+
|
|
248
|
+
pre.block {
|
|
249
|
+
background: var(--surface-2);
|
|
250
|
+
border: 1px solid var(--line-soft);
|
|
251
|
+
border-radius: var(--radius-sm);
|
|
252
|
+
padding: var(--sp-3);
|
|
253
|
+
overflow-x: auto;
|
|
254
|
+
font-size: 12px;
|
|
255
|
+
line-height: 1.5;
|
|
256
|
+
white-space: pre;
|
|
257
|
+
color: var(--text-dim);
|
|
258
|
+
}
|
|
259
|
+
pre.block.wrap { white-space: pre-wrap; word-break: break-word; }
|
|
260
|
+
|
|
261
|
+
.note { color: var(--text-dim); font-size: 12.5px; }
|
|
262
|
+
.note + .note { margin-top: var(--sp-2); }
|
|
263
|
+
/* `note bad` was written by six panels and styled by NONE of them (found at
|
|
264
|
+
v0.50.0): a malformed boundary card, a rejected house rule and an unpriced
|
|
265
|
+
band all rendered in the same grey as the sentence explaining them. The class
|
|
266
|
+
was always the intent; this is the rule that was missing. */
|
|
267
|
+
.note.bad { color: var(--bad); }
|
|
268
|
+
.note.warn { color: var(--warn); }
|
|
269
|
+
.empty {
|
|
270
|
+
padding: var(--sp-6) var(--sp-4);
|
|
271
|
+
text-align: center;
|
|
272
|
+
color: var(--text-dim);
|
|
273
|
+
border: 1px dashed var(--line);
|
|
274
|
+
border-radius: var(--radius);
|
|
275
|
+
}
|
|
276
|
+
/* The reason a read failed, in the CLI's own output. Left-aligned inside a
|
|
277
|
+
centred box on purpose: it is a transcript, not a sentence. */
|
|
278
|
+
.empty .fail-detail {
|
|
279
|
+
margin-top: var(--sp-3);
|
|
280
|
+
text-align: left;
|
|
281
|
+
max-height: 220px;
|
|
282
|
+
overflow: auto;
|
|
283
|
+
font-size: 12px;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.banner {
|
|
287
|
+
display: flex;
|
|
288
|
+
gap: var(--sp-3);
|
|
289
|
+
padding: var(--sp-3) var(--sp-4);
|
|
290
|
+
border-radius: var(--radius);
|
|
291
|
+
border: 1px solid var(--warn);
|
|
292
|
+
background: var(--warn-wash);
|
|
293
|
+
font-size: 13px;
|
|
294
|
+
}
|
|
295
|
+
.banner-bad { border-color: var(--bad); background: var(--bad-wash); }
|
|
296
|
+
.banner strong { display: block; margin-bottom: 2px; }
|
|
297
|
+
.banner-fix { display: flex; align-items: center; gap: var(--sp-2); margin-top: var(--sp-2); flex-wrap: wrap; }
|
|
298
|
+
|
|
299
|
+
/* The update banner is a button: "what changed" is the useful question, and it
|
|
300
|
+
should not require leaving for GitHub to answer it. */
|
|
301
|
+
.banner-update {
|
|
302
|
+
width: 100%;
|
|
303
|
+
align-items: center;
|
|
304
|
+
border-color: var(--accent);
|
|
305
|
+
background: var(--accent-wash);
|
|
306
|
+
color: inherit;
|
|
307
|
+
cursor: pointer;
|
|
308
|
+
text-align: left;
|
|
309
|
+
font: inherit;
|
|
310
|
+
transition: background var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);
|
|
311
|
+
animation: banner-drop var(--dur-slow) var(--ease);
|
|
312
|
+
}
|
|
313
|
+
.banner-update:hover { background: var(--surface-3); transform: translateY(-1px); }
|
|
314
|
+
.banner-update .note { color: var(--text-dim); }
|
|
315
|
+
/* All three children on ONE vertical centre line (v0.44.1). The badge used to
|
|
316
|
+
be `align-self: flex-start` while the row was `align-items: center` and the
|
|
317
|
+
CTA sat on the centre — three items, three different alignments, in a row
|
|
318
|
+
that is 69px tall. Nothing about a "NEW" pill wants to be pinned to the top
|
|
319
|
+
of a two-line message. */
|
|
320
|
+
.banner-badge {
|
|
321
|
+
flex: none;
|
|
322
|
+
background: var(--accent);
|
|
323
|
+
color: #fff;
|
|
324
|
+
border-radius: 100px;
|
|
325
|
+
padding: 1px 8px;
|
|
326
|
+
font-size: 10px;
|
|
327
|
+
font-weight: 700;
|
|
328
|
+
letter-spacing: .08em;
|
|
329
|
+
}
|
|
330
|
+
.banner-more { margin-left: auto; flex: none; color: var(--accent); font-size: 12px; white-space: nowrap; }
|
|
331
|
+
@keyframes banner-drop {
|
|
332
|
+
from { opacity: 0; transform: translateY(-10px); }
|
|
333
|
+
to { opacity: 1; transform: none; }
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.cl-entry { border-left: 2px solid var(--line); padding-left: var(--sp-3); }
|
|
337
|
+
.cl-head { display: flex; align-items: baseline; gap: var(--sp-2); flex-wrap: wrap; }
|
|
338
|
+
.cl-version { font-family: var(--mono); font-size: 13px; color: var(--accent); font-weight: 600; }
|
|
339
|
+
.cl-date { font-size: 11px; color: var(--text-faint); margin-left: auto; }
|
|
340
|
+
.cl-title { font-size: 13px; font-weight: 600; margin-top: 2px; }
|
|
341
|
+
/* `pre-wrap` is still right — the body carries real paragraph breaks — but the
|
|
342
|
+
text reaching it has been REFLOWED first (see `reflowMd`), so a paragraph is
|
|
343
|
+
one long line that wraps to this box instead of the README's 78-column
|
|
344
|
+
hard wraps ending raggedly in the middle of it. */
|
|
345
|
+
.cl-body { font-size: 12.5px; color: var(--text-dim); white-space: pre-wrap; margin-top: var(--sp-2); line-height: 1.6; overflow-wrap: anywhere; }
|
|
346
|
+
|
|
347
|
+
/* Loading is a skeleton shimmer, never a spinner. */
|
|
348
|
+
.skeleton {
|
|
349
|
+
height: 12px;
|
|
350
|
+
border-radius: 4px;
|
|
351
|
+
background: linear-gradient(90deg, var(--surface-2) 25%, var(--surface-3) 37%, var(--surface-2) 63%);
|
|
352
|
+
background-size: 400% 100%;
|
|
353
|
+
animation: shimmer 1.3s ease-in-out infinite;
|
|
354
|
+
}
|
|
355
|
+
.skeleton.w-60 { width: 60%; }
|
|
356
|
+
.skeleton.w-40 { width: 40%; }
|
|
357
|
+
.skeleton.tall { height: 56px; }
|
|
358
|
+
@keyframes shimmer {
|
|
359
|
+
from { background-position: 100% 0; }
|
|
360
|
+
to { background-position: 0 0; }
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.toasts {
|
|
364
|
+
position: fixed;
|
|
365
|
+
right: var(--sp-5);
|
|
366
|
+
bottom: var(--sp-5);
|
|
367
|
+
display: flex;
|
|
368
|
+
flex-direction: column;
|
|
369
|
+
gap: var(--sp-2);
|
|
370
|
+
z-index: 40;
|
|
371
|
+
}
|
|
372
|
+
.toast {
|
|
373
|
+
background: var(--surface-3);
|
|
374
|
+
border: 1px solid var(--line);
|
|
375
|
+
border-left: 3px solid var(--accent);
|
|
376
|
+
border-radius: var(--radius-sm);
|
|
377
|
+
padding: var(--sp-3) var(--sp-4);
|
|
378
|
+
box-shadow: var(--shadow);
|
|
379
|
+
font-size: 13px;
|
|
380
|
+
max-width: 460px;
|
|
381
|
+
animation: toast-in var(--dur) var(--ease);
|
|
382
|
+
}
|
|
383
|
+
.toast-ok { border-left-color: var(--ok); }
|
|
384
|
+
.toast-bad { border-left-color: var(--bad); }
|
|
385
|
+
.toast pre { margin-top: 6px; font-size: 11px; color: var(--text-dim); white-space: pre-wrap; }
|
|
386
|
+
@keyframes toast-in {
|
|
387
|
+
from { opacity: 0; transform: translateX(12px); }
|
|
388
|
+
to { opacity: 1; transform: none; }
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* v0.52.0 — A MODAL MUST NOT SCROLL THE PAGE BEHIND IT, and this was every
|
|
392
|
+
modal in the app rather than an Extra defect. Two things were missing and
|
|
393
|
+
neither existed anywhere in bin/webui/: the modal's own scroll CHAINED to
|
|
394
|
+
<body> the moment it reached either end, and a wheel over the backdrop — most
|
|
395
|
+
of the screen — was never the modal's to begin with, so the page moved
|
|
396
|
+
immediately. `overscroll-behavior: contain` stops the chain; `body.modal-open`
|
|
397
|
+
stops the rest. The scroll position is preserved by `scrollbar-gutter: stable`
|
|
398
|
+
on <html> (01-base.css), so nothing here has to remember a number. */
|
|
399
|
+
.modal-host { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: var(--sp-4); overscroll-behavior: contain; }
|
|
400
|
+
body.modal-open { overflow: hidden; }
|
|
401
|
+
/* A LOCKED modal: the backdrop is not a button, so it must not look like one. */
|
|
402
|
+
.modal-host.modal-locked .modal-backdrop { cursor: default; }
|
|
403
|
+
.modal-host[hidden] { display: none; }
|
|
404
|
+
.modal-backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, .55); }
|
|
405
|
+
.modal {
|
|
406
|
+
position: relative;
|
|
407
|
+
width: min(720px, 100%);
|
|
408
|
+
max-height: 84vh;
|
|
409
|
+
overflow-y: auto;
|
|
410
|
+
overscroll-behavior: contain;
|
|
411
|
+
background: var(--surface);
|
|
412
|
+
border: 1px solid var(--line);
|
|
413
|
+
border-radius: var(--radius-lg);
|
|
414
|
+
box-shadow: var(--shadow);
|
|
415
|
+
padding: var(--sp-5);
|
|
416
|
+
animation: modal-in var(--dur) var(--ease);
|
|
417
|
+
}
|
|
418
|
+
@keyframes modal-in {
|
|
419
|
+
from { opacity: 0; transform: translateY(10px) scale(.99); }
|
|
420
|
+
to { opacity: 1; transform: none; }
|
|
421
|
+
}
|
|
422
|
+
.modal-title { font-size: 16px; font-weight: 600; margin-bottom: var(--sp-3); }
|
|
423
|
+
.modal-body { display: flex; flex-direction: column; gap: var(--sp-3); font-size: 13px; }
|
|
424
|
+
.modal-foot { display: flex; justify-content: flex-end; gap: var(--sp-2); margin-top: var(--sp-5); }
|
|
425
|
+
|
|
426
|
+
/* The whole UI goes read-only while a mutation runs (single-flight). */
|
|
427
|
+
body.busy .btn:not(.btn-allow-busy) { pointer-events: none; opacity: .45; }
|
|
428
|
+
body.busy .setting-control { pointer-events: none; opacity: .5; }
|
|
429
|
+
/* …and it SAYS so. A frozen panel with no explanation reads as a hang; a moving
|
|
430
|
+
bar at the top edge reads as "something of mine is running". */
|
|
431
|
+
body.busy::before {
|
|
432
|
+
content: "";
|
|
433
|
+
position: fixed;
|
|
434
|
+
inset: 0 0 auto 0;
|
|
435
|
+
height: 2px;
|
|
436
|
+
z-index: 60;
|
|
437
|
+
background: linear-gradient(90deg, transparent, var(--accent), transparent);
|
|
438
|
+
background-size: 40% 100%;
|
|
439
|
+
background-repeat: no-repeat;
|
|
440
|
+
animation: busy-sweep 1.1s var(--ease) infinite;
|
|
441
|
+
}
|
|
442
|
+
@keyframes busy-sweep {
|
|
443
|
+
from { background-position: -40% 0; }
|
|
444
|
+
to { background-position: 140% 0; }
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/* Cards lift slightly on hover ONLY where they are interactive. A static card
|
|
448
|
+
that reacts to the pointer promises a click that does not exist. */
|
|
449
|
+
.run-card:hover, .action:hover { transform: translateY(-1px); }
|
|
450
|
+
.action { transition: border-color var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease); }
|
|
451
|
+
.action:hover { border-color: var(--accent-dim); }
|
|
452
|
+
|
|
453
|
+
kbd {
|
|
454
|
+
background: var(--surface-3);
|
|
455
|
+
border: 1px solid var(--line);
|
|
456
|
+
border-bottom-width: 2px;
|
|
457
|
+
border-radius: 4px;
|
|
458
|
+
padding: 1px 6px;
|
|
459
|
+
font-size: 11px;
|
|
460
|
+
color: var(--text);
|
|
461
|
+
white-space: nowrap;
|
|
462
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* 04-motion.css — orc ui
|
|
2
|
+
The panel entrance, the staggered block entrance, and THE ONE
|
|
3
|
+
@media (prefers-reduced-motion) block.
|
|
4
|
+
|
|
5
|
+
LOADED LAST, and that is load-bearing. Several reduced-motion rules are
|
|
6
|
+
plain declarations rather than !important (.vault-pulse and .step-flow are
|
|
7
|
+
removed with `display: none`, because capping an infinite animation to one
|
|
8
|
+
iteration freezes it mid-cycle). An equal-specificity rule in a panel file
|
|
9
|
+
loading afterwards would win on order and quietly switch the animation back
|
|
10
|
+
on. A test asserts this media query appears here and in no panels/*.css.
|
|
11
|
+
|
|
12
|
+
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
13
|
+
prefix is that order. No @import: it would carry no session token and
|
|
14
|
+
401. */
|
|
15
|
+
|
|
16
|
+
/* Panel swap: 180ms slide + fade, ease-out. */
|
|
17
|
+
.panel { animation: panel-in var(--dur) var(--ease); }
|
|
18
|
+
@keyframes panel-in {
|
|
19
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
20
|
+
to { opacity: 1; transform: none; }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Staggered entrance. The blocks of a panel arrive in reading order rather than
|
|
24
|
+
all at once, which makes a panel of six cards parse as a sequence instead of
|
|
25
|
+
a flash. Capped at 8 so a long list never becomes a slow one — every child
|
|
26
|
+
past the cap shares the last delay. */
|
|
27
|
+
.stack > * { animation: block-in var(--dur) var(--ease) backwards; }
|
|
28
|
+
.stack > *:nth-child(1) { animation-delay: 0ms; }
|
|
29
|
+
.stack > *:nth-child(2) { animation-delay: 30ms; }
|
|
30
|
+
.stack > *:nth-child(3) { animation-delay: 60ms; }
|
|
31
|
+
.stack > *:nth-child(4) { animation-delay: 90ms; }
|
|
32
|
+
.stack > *:nth-child(5) { animation-delay: 120ms; }
|
|
33
|
+
.stack > *:nth-child(6) { animation-delay: 150ms; }
|
|
34
|
+
.stack > *:nth-child(7) { animation-delay: 180ms; }
|
|
35
|
+
.stack > *:nth-child(n+8) { animation-delay: 210ms; }
|
|
36
|
+
@keyframes block-in {
|
|
37
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
38
|
+
to { opacity: 1; transform: none; }
|
|
39
|
+
}
|
|
40
|
+
/* ---------------------------------------------------------- REDUCED MOTION */
|
|
41
|
+
/* Non-negotiable: every animation and transition above is off. */
|
|
42
|
+
|
|
43
|
+
@media (prefers-reduced-motion: reduce) {
|
|
44
|
+
*, *::before, *::after {
|
|
45
|
+
animation-duration: 1ms !important;
|
|
46
|
+
animation-iteration-count: 1 !important;
|
|
47
|
+
/* Load-bearing, not tidiness: the staggered entrance fills `backwards`, so
|
|
48
|
+
a delay that survives here leaves a block sitting at opacity 0 for its
|
|
49
|
+
whole delay — reduced motion would mean things simply do not appear. */
|
|
50
|
+
animation-delay: 0ms !important;
|
|
51
|
+
transition-duration: 1ms !important;
|
|
52
|
+
scroll-behavior: auto !important;
|
|
53
|
+
}
|
|
54
|
+
/* Reduced motion means no movement, not fast movement — the hover and press
|
|
55
|
+
nudges are removed outright rather than sped up. */
|
|
56
|
+
.nav a:hover, .btn:active:not(:disabled), .action:hover,
|
|
57
|
+
.todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
|
|
58
|
+
/* The vault pulse is one of two INFINITE animations on the page. Capping it to
|
|
59
|
+
a single 1ms run would still leave a dash frozen mid-edge, so it is removed
|
|
60
|
+
outright and the edge reads as a plain line. */
|
|
61
|
+
.vault-pulse { display: none; }
|
|
62
|
+
/* The other one: the looping flow sweep. `animation-iteration-count: 1` above
|
|
63
|
+
would still fire it once and then leave the connector segment collapsed at
|
|
64
|
+
its final keyframe, so both halves are removed outright — the rail is drawn
|
|
65
|
+
in its resting state and the hairlines read as plain connectors. */
|
|
66
|
+
.step, .step::before { animation: none !important; }
|
|
67
|
+
.step-flow { display: none; }
|
|
68
|
+
/* The cost bar grows in two dimensions (the stack's width, each segment's
|
|
69
|
+
flex-grow). Both are removed rather than shortened, so the bar is simply
|
|
70
|
+
drawn at its final proportions. */
|
|
71
|
+
.bar-stack, .bar-seg { transition: none !important; }
|
|
72
|
+
/* The challenge timeline and its convergence bar. Both are removed rather
|
|
73
|
+
than shortened: a capped `ch-grow` leaves a segment frozen part-way, which
|
|
74
|
+
misreports the count it is drawn from — worse than no animation at all. */
|
|
75
|
+
.ch-rail-node, .ch-conv-seg { animation: none !important; }
|
|
76
|
+
/* The Docs ribbon (v0.48.0). Three animations, all REMOVED rather than
|
|
77
|
+
capped: `doc-seg-in` capped at one iteration would still leave a segment
|
|
78
|
+
mid-`scaleY`, and the two INFINITE ones (the written sheen and the
|
|
79
|
+
user-edited pulse) would freeze at whatever opacity the single run stopped
|
|
80
|
+
on — a segment drawn at 40% height misreports the line count it is drawn
|
|
81
|
+
from, which is worse than no animation at all. The wave rows and the health
|
|
82
|
+
bars go the same way: a bar frozen part-way is a wrong number. */
|
|
83
|
+
.doc-seg, .doc-seg-box, .doc-wave, .doc-bar-seg { animation: none !important; }
|
|
84
|
+
/* The Extra connect pulse (v0.50.0). A probe has no known duration, so the
|
|
85
|
+
dot loops until an answer arrives — the third INFINITE animation on the
|
|
86
|
+
page, and removed outright for the same reason as the other two: capped at
|
|
87
|
+
one iteration it would stop half way across the wire, which reads as a
|
|
88
|
+
request that hung. The wire itself still turns green or red, so the RESULT
|
|
89
|
+
of the test is never carried by motion alone. */
|
|
90
|
+
.ex-wire-dot { display: none; }
|
|
91
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/* 05-tour.css — orc ui
|
|
2
|
+
The spotlight ring, .tour-block, and the z-index ladder.
|
|
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
|
+
/* --- the tour ------------------------------------------------------------ */
|
|
9
|
+
/* The spotlight is a RING, not a dimming overlay over a cut-out: the page stays
|
|
10
|
+
fully READABLE underneath, so a step can point at a real control and you can
|
|
11
|
+
see what it is pointing at.
|
|
12
|
+
It is not, however, clickable during the guided tour. `.tour-block` sits above
|
|
13
|
+
everything except the popover and swallows every click, so Next and Skip are
|
|
14
|
+
the only live controls on screen. The upgrade spotlight opts out of the
|
|
15
|
+
blocker (`interactive: true`) because its whole design is that clicking the
|
|
16
|
+
thing dismisses it. */
|
|
17
|
+
|
|
18
|
+
/* `display: contents` is load-bearing. This wrapper used to be `position:
|
|
19
|
+
fixed`, which ALWAYS creates a stacking context — so the ring and the popover
|
|
20
|
+
were trapped at the layer's own z-index and the highlighted element (46)
|
|
21
|
+
painted straight over both. Step one targets the sticky rail, which is why
|
|
22
|
+
the very first spotlight appeared underneath the sidebar. Generating no box
|
|
23
|
+
at all lets each child stack against the page directly, while still being one
|
|
24
|
+
node to remove on cleanup. */
|
|
25
|
+
.tour-layer { display: contents; }
|
|
26
|
+
|
|
27
|
+
/* The ladder, in paint order: scrim/ring 45 → the highlighted element 46 (so it
|
|
28
|
+
stays lit) → the click blocker 47 → the popover 48 (always readable and
|
|
29
|
+
always the only live thing) → modals 50.
|
|
30
|
+
The blocker sits ABOVE the highlighted element on purpose: lifting the target
|
|
31
|
+
to 46 is what keeps it visible through the scrim, and a blocker underneath it
|
|
32
|
+
would leave that one element clickable — which is precisely the click that
|
|
33
|
+
navigates away mid-tour. */
|
|
34
|
+
.tour-block {
|
|
35
|
+
position: fixed;
|
|
36
|
+
inset: 0;
|
|
37
|
+
z-index: 47;
|
|
38
|
+
/* Fully transparent: the scrim is already drawn by the ring's outward shadow,
|
|
39
|
+
and a second dimming layer would double it. This element exists only to
|
|
40
|
+
receive clicks. */
|
|
41
|
+
background: transparent;
|
|
42
|
+
cursor: not-allowed;
|
|
43
|
+
}
|
|
44
|
+
.tour-ring {
|
|
45
|
+
position: fixed;
|
|
46
|
+
border: 2px solid var(--accent);
|
|
47
|
+
border-radius: var(--radius);
|
|
48
|
+
/* The scrim is thrown OUTWARD from the ring, so the target itself is never
|
|
49
|
+
covered by anything. */
|
|
50
|
+
z-index: 45;
|
|
51
|
+
box-shadow: 0 0 0 4px var(--accent-wash), 0 0 0 9999px rgba(0, 0, 0, .55);
|
|
52
|
+
pointer-events: none;
|
|
53
|
+
transition: top var(--dur-slow) var(--ease), left var(--dur-slow) var(--ease),
|
|
54
|
+
width var(--dur-slow) var(--ease), height var(--dur-slow) var(--ease);
|
|
55
|
+
animation: ring-in var(--dur) var(--ease);
|
|
56
|
+
}
|
|
57
|
+
:root[data-theme="light"] .tour-ring { box-shadow: 0 0 0 4px var(--accent-wash), 0 0 0 9999px rgba(16, 24, 40, .38); }
|
|
58
|
+
@keyframes ring-in {
|
|
59
|
+
from { opacity: 0; transform: scale(1.04); }
|
|
60
|
+
to { opacity: 1; transform: none; }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.tour-pop {
|
|
64
|
+
position: fixed;
|
|
65
|
+
z-index: 48;
|
|
66
|
+
width: min(340px, calc(100vw - 16px));
|
|
67
|
+
background: var(--surface);
|
|
68
|
+
border: 1px solid var(--accent-dim);
|
|
69
|
+
border-radius: var(--radius);
|
|
70
|
+
box-shadow: var(--shadow);
|
|
71
|
+
padding: var(--sp-4);
|
|
72
|
+
pointer-events: auto;
|
|
73
|
+
animation: pop-in var(--dur) var(--ease);
|
|
74
|
+
}
|
|
75
|
+
@keyframes pop-in {
|
|
76
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
77
|
+
to { opacity: 1; transform: none; }
|
|
78
|
+
}
|
|
79
|
+
.tour-title { font-size: 14px; font-weight: 600; margin-bottom: var(--sp-2); }
|
|
80
|
+
.tour-text { font-size: 12.5px; color: var(--text-dim); line-height: 1.6; }
|
|
81
|
+
.tour-foot { display: flex; align-items: center; gap: var(--sp-2); margin-top: var(--sp-4); }
|
|
82
|
+
.tour-count { font-size: 11px; color: var(--text-faint); margin-right: auto; font-variant-numeric: tabular-nums; }
|
|
83
|
+
.tour-waiting { font-size: 11px; color: var(--accent); margin-left: auto; }
|
|
84
|
+
/* The highlighted element rides above the scrim so it stays LIT. During the
|
|
85
|
+
guided tour it is not clickable — `.tour-block` is above it — which is the
|
|
86
|
+
point: it is being explained, not operated.
|
|
87
|
+
z-index ONLY — forcing `position: relative` here broke the sticky rail, which
|
|
88
|
+
is a positioned element already. The relative fallback is applied separately,
|
|
89
|
+
and only to targets that are actually static. */
|
|
90
|
+
.tour-target { z-index: 46; }
|
|
91
|
+
.tour-target-rel { position: relative; }
|
|
92
|
+
|
|
93
|
+
/* While a spotlight is up, the panel's entrance animations are FROZEN (v0.44.0).
|
|
94
|
+
`panel-in` and `block-in` both animate `transform`, and an element with a
|
|
95
|
+
running transform animation is a stacking context — so for the ~300ms a panel
|
|
96
|
+
takes to arrive, `.tour-target`'s z-index is trapped inside `.panel` and the
|
|
97
|
+
ladder above is decided by whether the spotlight landed before or after the
|
|
98
|
+
animation finished. Freezing them makes the ladder the only thing that
|
|
99
|
+
orders these layers, at any timing. */
|
|
100
|
+
body.tour-on .panel, body.tour-on .stack > * { animation: none !important; }
|