@azure-id/orc 1.9.1 → 2.0.2

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 (224) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/README-id.md +20 -36
  3. package/README.md +24 -34
  4. package/bin/build-agents.js +206 -109
  5. package/bin/cli.js +760 -62
  6. package/bin/gotcha-import.js +1081 -0
  7. package/bin/gotcha.js +1286 -0
  8. package/bin/graph-query.js +1 -1
  9. package/bin/graph.js +717 -717
  10. package/bin/habit.js +1453 -0
  11. package/bin/mockrun-catalog.js +281 -276
  12. package/bin/onboarding-content.js +4 -4
  13. package/bin/pricing.json +207 -200
  14. package/bin/run-undo.js +398 -0
  15. package/bin/trace-write.js +657 -0
  16. package/bin/verify-contracts.js +527 -81
  17. package/bin/verify-package.js +58 -11
  18. package/bin/webui/api.js +26 -0
  19. package/bin/webui/app.html +239 -232
  20. package/bin/webui/css/00-tokens.css +110 -92
  21. package/bin/webui/css/04-motion.css +249 -152
  22. package/bin/webui/css/06-responsive.css +203 -178
  23. package/bin/webui/css/panels/behaviour.css +205 -0
  24. package/bin/webui/css/panels/knowledge.css +563 -116
  25. package/bin/webui/fixtures/behaviour.js +532 -0
  26. package/bin/webui/fixtures/extra.js +2036 -2036
  27. package/bin/webui/fixtures/hookui.js +5 -5
  28. package/bin/webui/fixtures/index.js +34 -0
  29. package/bin/webui/fixtures/knowledge.js +7 -1
  30. package/bin/webui/fixtures/settings.js +305 -305
  31. package/bin/webui/fixtures/stats.js +16 -0
  32. package/bin/webui/i18n/en/behaviour.json +143 -0
  33. package/bin/webui/i18n/en/knowledge.json +117 -2
  34. package/bin/webui/i18n/en/nav.json +25 -24
  35. package/bin/webui/i18n/en/tour.json +37 -35
  36. package/bin/webui/i18n/id/behaviour.json +143 -0
  37. package/bin/webui/i18n/id/knowledge.json +117 -2
  38. package/bin/webui/i18n/id/nav.json +25 -24
  39. package/bin/webui/i18n/id/tour.json +37 -35
  40. package/bin/webui/js/01-i18n.js +155 -154
  41. package/bin/webui/js/90-tour.js +498 -494
  42. package/bin/webui/js/91-shortcuts.js +126 -126
  43. package/bin/webui/js/99-boot.js +121 -118
  44. package/bin/webui/js/panels/behaviour.js +1022 -0
  45. package/bin/webui/js/panels/knowledge.js +552 -7
  46. package/bin/webui/js/panels/overview.js +13 -4
  47. package/mock-run/INDEX.md +109 -107
  48. package/mock-run/context-combiner.md +100 -100
  49. package/mock-run/gotcha-import.md +118 -0
  50. package/mock-run/habits.md +129 -0
  51. package/mock-run/orc-budget.md +534 -534
  52. package/mock-run/orc-challenge-council.md +262 -262
  53. package/mock-run/orc-quick.md +6 -1
  54. package/mock-run/orc-ultra.md +103 -103
  55. package/package.json +1 -1
  56. package/templates/agents/MODEL-MAPPING.md +49 -49
  57. package/templates/agents/orc-advisor-opus-5-xhigh.md +50 -56
  58. package/templates/agents/orc-analyze-mini-opus-5-med.md +55 -60
  59. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +55 -58
  60. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
  61. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
  62. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
  63. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
  64. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
  65. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
  66. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
  67. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
  68. package/templates/agents/orc-claude-writer-opus-4-8-high.md +48 -53
  69. package/templates/agents/orc-claude-writer-opus-5-med.md +48 -55
  70. package/templates/agents/orc-context-combiner-opus-5-high.md +78 -88
  71. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
  72. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
  73. package/templates/agents/orc-executor-haiku-4-5.md +14 -6
  74. package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
  75. package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
  76. package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
  77. package/templates/agents/orc-executor-opus-5-high.md +15 -7
  78. package/templates/agents/orc-executor-opus-5-low.md +15 -7
  79. package/templates/agents/orc-executor-opus-5-med.md +15 -7
  80. package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
  81. package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
  82. package/templates/agents/orc-executor-sonnet-5-high.md +14 -6
  83. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
  84. package/templates/agents/orc-judge-opus-5-xhigh.md +81 -85
  85. package/templates/agents/orc-learn-writer-opus-5-low.md +67 -73
  86. package/templates/agents/orc-pattern-codifier-opus-5-med.md +58 -65
  87. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
  88. package/templates/agents/orc-planner-mini-opus-5-med.md +4 -7
  89. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
  90. package/templates/agents/orc-planner-opus-5-med.md +157 -160
  91. package/templates/agents/orc-recon-opus-5-low.md +3 -10
  92. package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
  93. package/templates/agents/orc-retro-opus-5-med.md +8 -10
  94. package/templates/agents/orc-retro-sonnet-5-high.md +6 -7
  95. package/templates/agents/orc-reviewer-opus-5-med.md +96 -60
  96. package/templates/agents/orc-scout-opus-5-low.md +35 -40
  97. package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
  98. package/templates/agents/orc-system-analyst-opus-5-high.md +115 -120
  99. package/templates/agents/orc-test-author-opus-5-med.md +70 -71
  100. package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
  101. package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
  102. package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
  103. package/templates/agents/orc-verifier-opus-5-med.md +77 -69
  104. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +74 -79
  105. package/templates/agents/orc-wiki-scanner-opus-5-med.md +74 -81
  106. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
  107. package/templates/commands/orc-analyze.md +13 -21
  108. package/templates/commands/orc-fast.md +10 -15
  109. package/templates/commands/orc-poly.md +12 -21
  110. package/templates/commands/orc-pr-driver.md +11 -30
  111. package/templates/commands/orc-pr-setup.md +10 -31
  112. package/templates/commands/orc-route.md +11 -41
  113. package/templates/commands/orc-test.md +5 -60
  114. package/templates/commands/orc-ultra.md +17 -17
  115. package/templates/commands/orc-verify.md +11 -11
  116. package/templates/hooks/README.md +36 -2
  117. package/templates/hooks/orc-effort-guard.js +178 -178
  118. package/templates/hooks/orc-session-hook.js +264 -0
  119. package/templates/hooks/orc-statusline.js +9 -7
  120. package/templates/skills/_shared/README.md +9 -0
  121. package/templates/skills/_shared/code-graph.md +48 -56
  122. package/templates/skills/_shared/config-precedence.md +200 -198
  123. package/templates/skills/_shared/extra-dispatch.md +1331 -1346
  124. package/templates/skills/_shared/gotchas.md +228 -177
  125. package/templates/skills/_shared/habits.md +101 -0
  126. package/templates/skills/_shared/lane-contract.md +84 -0
  127. package/templates/skills/_shared/opus5-only.md +8 -8
  128. package/templates/skills/_shared/phases/README.md +142 -83
  129. package/templates/skills/_shared/phases/analyst-gates.md +125 -136
  130. package/templates/skills/_shared/phases/execution.md +8 -14
  131. package/templates/skills/_shared/phases/house-rules.md +27 -32
  132. package/templates/skills/_shared/phases/intake.md +127 -133
  133. package/templates/skills/_shared/phases/mock-example.md +46 -56
  134. package/templates/skills/_shared/phases/plan-handoff.md +91 -97
  135. package/templates/skills/_shared/phases/planning.md +7 -17
  136. package/templates/skills/_shared/phases/preflight.md +19 -42
  137. package/templates/skills/_shared/phases/review.md +23 -27
  138. package/templates/skills/_shared/phases/rules.md +18 -42
  139. package/templates/skills/_shared/phases/scoring.md +55 -65
  140. package/templates/skills/_shared/phases/security-checklist.md +46 -50
  141. package/templates/skills/_shared/phases/security.md +45 -55
  142. package/templates/skills/_shared/phases/ship.md +6 -15
  143. package/templates/skills/_shared/phases/stop-resume.md +2 -5
  144. package/templates/skills/_shared/phases/summary.md +73 -48
  145. package/templates/skills/_shared/phases/testgen.md +41 -51
  146. package/templates/skills/_shared/phases/trace-verbs.md +433 -0
  147. package/templates/skills/_shared/phases/trace.md +136 -367
  148. package/templates/skills/_shared/phases/verify.md +62 -70
  149. package/templates/skills/_shared/phases/wave-grouping.md +128 -133
  150. package/templates/skills/_shared/phases/wiki-consult.md +10 -6
  151. package/templates/skills/_shared/read-ladder.md +2 -55
  152. package/templates/skills/_shared/return-validation.md +17 -70
  153. package/templates/skills/_shared/review-slice.md +79 -0
  154. package/templates/skills/_shared/smoke-gate.md +46 -28
  155. package/templates/skills/context-combiner/SKILL.md +16 -45
  156. package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
  157. package/templates/skills/orc/README.md +2 -2
  158. package/templates/skills/orc/SKILL.md +41 -69
  159. package/templates/skills/orc/config.md +9 -9
  160. package/templates/skills/orc/examples/full-run-mock.md +73 -73
  161. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  162. package/templates/skills/orc/references/pattern-gate.md +89 -89
  163. package/templates/skills/orc/references/phases/intake.md +41 -47
  164. package/templates/skills/orc/references/phases/integration.md +13 -19
  165. package/templates/skills/orc/references/preflight-report.md +10 -11
  166. package/templates/skills/orc/references/ultra-mode.md +11 -9
  167. package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
  168. package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
  169. package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
  170. package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
  171. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
  172. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +35 -76
  173. package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
  174. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
  175. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +34 -45
  176. package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
  177. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
  178. package/templates/skills/orc-advisor/SKILL.md +56 -60
  179. package/templates/skills/orc-analyze/SKILL.md +32 -68
  180. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
  181. package/templates/skills/orc-analyze/schemas/report-audit.md +84 -83
  182. package/templates/skills/orc-analyze/schemas/report-prose.md +64 -63
  183. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
  184. package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
  185. package/templates/skills/orc-challenge/README.md +142 -142
  186. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
  187. package/templates/skills/orc-challenge/references/council.md +315 -315
  188. package/templates/skills/orc-challenge/references/intake.md +171 -171
  189. package/templates/skills/orc-claude/SKILL.md +14 -14
  190. package/templates/skills/orc-diy/README.md +174 -143
  191. package/templates/skills/orc-diy/SKILL.md +23 -74
  192. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
  193. package/templates/skills/orc-diy/references/flow-schema.md +1 -1
  194. package/templates/skills/orc-doc/README.md +229 -229
  195. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
  196. package/templates/skills/orc-doc/references/chunking.md +527 -527
  197. package/templates/skills/orc-fast/SKILL.md +45 -73
  198. package/templates/skills/orc-judge/SKILL.md +77 -82
  199. package/templates/skills/orc-learn/SKILL.md +14 -14
  200. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
  201. package/templates/skills/orc-mini/SKILL.md +65 -113
  202. package/templates/skills/orc-pattern/SKILL.md +27 -48
  203. package/templates/skills/orc-poly/SKILL.md +32 -61
  204. package/templates/skills/orc-pr-driver/SKILL.md +25 -51
  205. package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
  206. package/templates/skills/orc-pr-setup/SKILL.md +20 -45
  207. package/templates/skills/orc-quick/README.md +43 -2
  208. package/templates/skills/orc-quick/SKILL.md +76 -107
  209. package/templates/skills/orc-quick/references/dispatch-gate.md +16 -5
  210. package/templates/skills/orc-quick/references/gh-mode.md +48 -1
  211. package/templates/skills/orc-quick/references/look.md +3 -1
  212. package/templates/skills/orc-retro/SKILL.md +19 -18
  213. package/templates/skills/orc-retro/examples/retro-mock.md +1 -1
  214. package/templates/skills/orc-route/SKILL.md +25 -45
  215. package/templates/skills/orc-test/SKILL.md +16 -37
  216. package/templates/skills/orc-verify/SKILL.md +21 -39
  217. package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
  218. package/templates/skills/orc-wait/SKILL.md +156 -163
  219. package/templates/skills/orc-wiki/references/extra.md +1 -1
  220. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -6
  221. package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
  222. package/templates/skills/orc-wiki/references/phases/phase-2.md +1 -6
  223. package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
  224. package/templates/skills/orc-wiki/references/phases/phase-3c.md +1 -6
@@ -1,92 +1,110 @@
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
- }
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
+ /* seven series colours (v2.0.0 W7) — the Behaviour panel's lane mix, answer
40
+ sources and gotcha sources. Each is >= 3:1 against --surface (WCAG 1.4.11). */
41
+ --s1: #4c9aff;
42
+ --s2: #3fb950;
43
+ --s3: #d8a01a;
44
+ --s4: #b083f0;
45
+ --s5: #f0533f;
46
+ --s6: #39c5cf;
47
+ --s7: #8b949e;
48
+
49
+ --radius: 10px;
50
+ --radius-sm: 6px;
51
+ --radius-lg: 14px;
52
+
53
+ --sp-1: 4px;
54
+ --sp-2: 8px;
55
+ --sp-3: 12px;
56
+ --sp-4: 16px;
57
+ --sp-5: 24px;
58
+ --sp-6: 32px;
59
+ --sp-7: 48px;
60
+
61
+ --dur-fast: 120ms;
62
+ --dur: 180ms;
63
+ --dur-shadow: 220ms;
64
+ --dur-slow: 320ms;
65
+ --ease: cubic-bezier(.2, .7, .3, 1);
66
+
67
+ --rail-w: 208px;
68
+
69
+ --font: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
70
+ --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
71
+
72
+ --shadow: 0 10px 30px rgba(0, 0, 0, .45);
73
+ }
74
+
75
+ :root[data-theme="light"] {
76
+ --bg: #f6f7f9;
77
+ --bg-rail: #eceef2;
78
+ --surface: #ffffff;
79
+ --surface-2: #f3f5f8;
80
+ --surface-3: #e9ecf1;
81
+ --line: #d8dde5;
82
+ --line-soft: #e6e9ee;
83
+
84
+ --text: #171a20;
85
+ --text-dim: #57616f;
86
+ --text-faint: #808a99;
87
+
88
+ --accent: #1f6feb;
89
+ --accent-dim: #1a5cc4;
90
+ --accent-wash: rgba(31, 111, 235, .10);
91
+
92
+ --ok: #1a7f37;
93
+ --ok-wash: rgba(26, 127, 55, .10);
94
+ --warn: #9a6700;
95
+ --warn-wash: rgba(154, 103, 0, .10);
96
+ --bad: #cf222e;
97
+ --bad-wash: rgba(207, 34, 46, .10);
98
+ --idle: #6b7280;
99
+ --idle-wash: rgba(107, 114, 128, .10);
100
+
101
+ --s1: #1f6feb;
102
+ --s2: #1a7f37;
103
+ --s3: #9a6700;
104
+ --s4: #8250df;
105
+ --s5: #cf222e;
106
+ --s6: #1b7c83;
107
+ --s7: #6e7781;
108
+
109
+ --shadow: 0 10px 30px rgba(16, 24, 40, .12);
110
+ }
@@ -1,152 +1,249 @@
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
- /* ── the CLI Hook Interface (v1.4.1) ─────────────────────────────────────── */
41
- /* The board is a thing you BUILD, so it moves the way a thing you build moves:
42
- a chip arrives, a chip you just staged breathes once so you can find it, and
43
- a row in the part picker slides in as the list narrows under your typing.
44
- Every one of them is a FINITE animation with a real end state, so the cap in
45
- the reduced-motion block below leaves each one at rest rather than frozen
46
- part-way. */
47
- .hk-chip { animation: hk-chip-in 200ms var(--ease) backwards; }
48
- @keyframes hk-chip-in {
49
- from { opacity: 0; transform: translateY(6px) scale(0.97); }
50
- to { opacity: 1; transform: none; }
51
- }
52
- /* Staged, not written — and the one thing on the board that has to be findable
53
- the instant it appears. Three pulses and it stops: an infinite one would have
54
- to be REMOVED below rather than capped, and this one reads correctly at rest.
55
- */
56
- .hk-chip-new { animation: hk-chip-in 200ms var(--ease) backwards, hk-chip-mark 900ms var(--ease) 3; }
57
- @keyframes hk-chip-mark {
58
- 0%, 100% { box-shadow: inset 0 0 0 0 var(--accent); }
59
- 50% { box-shadow: inset 0 0 0 2px var(--accent); }
60
- }
61
- /* Position, drop marker, and the zone's own border: transitions rather than
62
- animations, so an interrupted drag never leaves a chip mid-flight. */
63
- .hk-chip, .hk-zone, .hk-add, .hk-act, .hk-pick-row, .hk-theme, .hk-sample {
64
- transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease),
65
- box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease),
66
- transform var(--dur) var(--ease);
67
- }
68
- .hk-chip:hover:not(.hk-chip-dragging) { transform: translateY(-2px); }
69
- .hk-add:hover:not(:disabled) { transform: translateY(-2px); }
70
- .hk-pick-row { animation: hk-row-in 160ms var(--ease) backwards; }
71
- @keyframes hk-row-in {
72
- from { opacity: 0; transform: translateX(-6px); }
73
- to { opacity: 1; transform: none; }
74
- }
75
- button.hk-pick-row:hover { transform: translateX(3px); }
76
-
77
- /* NOTHING ARRIVES ON A REPAINT (v1.4.2). The CLI Hook Interface rebuilds its
78
- whole panel when a change is STAGED — no request, no navigation, the same
79
- cards with one value different — and the entrance animations above replayed
80
- every time, on a 30ms stagger. With the network tab empty it read exactly
81
- like the page reloading, on every keystroke.
82
-
83
- `hk-quiet` is added by `hkPaint` from the SECOND paint onward and by the part
84
- editor before every rebuild. It removes the ENTRANCES only: the transitions
85
- further up are about the pointer rather than about arriving, so hover, the
86
- drop marker and the staged edge are untouched. It must load after the rules
87
- it switches off, which is why it is here and not in the panel's own file. */
88
- .hk-quiet > *,
89
- .hk-quiet .hk-chip,
90
- .hk-quiet .hk-chip-new,
91
- .hk-quiet .hk-pick-row {
92
- animation: none;
93
- }
94
-
95
- /* ---------------------------------------------------------- REDUCED MOTION */
96
- /* Non-negotiable: every animation and transition above is off. */
97
-
98
- @media (prefers-reduced-motion: reduce) {
99
- *, *::before, *::after {
100
- animation-duration: 1ms !important;
101
- animation-iteration-count: 1 !important;
102
- /* Load-bearing, not tidiness: the staggered entrance fills `backwards`, so
103
- a delay that survives here leaves a block sitting at opacity 0 for its
104
- whole delay — reduced motion would mean things simply do not appear. */
105
- animation-delay: 0ms !important;
106
- transition-duration: 1ms !important;
107
- scroll-behavior: auto !important;
108
- }
109
- /* Reduced motion means no movement, not fast movement — the hover and press
110
- nudges are removed outright rather than sped up. */
111
- .nav a:hover, .btn:active:not(:disabled), .action:hover,
112
- .todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
113
- /* The board's own nudges, removed rather than shortened — a chip that lifts
114
- under the pointer is an affordance, and a fast lift is still a lift. The
115
- border and box-shadow changes stay: THEY are what says where a drop lands,
116
- and a drop marker carried by motion alone would not exist here at all. */
117
- .hk-chip:hover:not(.hk-chip-dragging), .hk-add:hover:not(:disabled),
118
- button.hk-pick-row:hover { transform: none !important; }
119
- /* The vault pulse is one of two INFINITE animations on the page. Capping it to
120
- a single 1ms run would still leave a dash frozen mid-edge, so it is removed
121
- outright and the edge reads as a plain line. */
122
- .vault-pulse { display: none; }
123
- /* The other one: the looping flow sweep. `animation-iteration-count: 1` above
124
- would still fire it once and then leave the connector segment collapsed at
125
- its final keyframe, so both halves are removed outright — the rail is drawn
126
- in its resting state and the hairlines read as plain connectors. */
127
- .step, .step::before { animation: none !important; }
128
- .step-flow { display: none; }
129
- /* The cost bar grows in two dimensions (the stack's width, each segment's
130
- flex-grow). Both are removed rather than shortened, so the bar is simply
131
- drawn at its final proportions. */
132
- .bar-stack, .bar-seg { transition: none !important; }
133
- /* The challenge timeline and its convergence bar. Both are removed rather
134
- than shortened: a capped `ch-grow` leaves a segment frozen part-way, which
135
- misreports the count it is drawn from — worse than no animation at all. */
136
- .ch-rail-node, .ch-conv-seg { animation: none !important; }
137
- /* The Docs ribbon (v0.48.0). Three animations, all REMOVED rather than
138
- capped: `doc-seg-in` capped at one iteration would still leave a segment
139
- mid-`scaleY`, and the two INFINITE ones (the written sheen and the
140
- user-edited pulse) would freeze at whatever opacity the single run stopped
141
- on — a segment drawn at 40% height misreports the line count it is drawn
142
- from, which is worse than no animation at all. The wave rows and the health
143
- bars go the same way: a bar frozen part-way is a wrong number. */
144
- .doc-seg, .doc-seg-box, .doc-wave, .doc-bar-seg { animation: none !important; }
145
- /* The Extra connect pulse (v0.50.0). A probe has no known duration, so the
146
- dot loops until an answer arrives — the third INFINITE animation on the
147
- page, and removed outright for the same reason as the other two: capped at
148
- one iteration it would stop half way across the wire, which reads as a
149
- request that hung. The wire itself still turns green or red, so the RESULT
150
- of the test is never carried by motion alone. */
151
- .ex-wire-dot { display: none; }
152
- }
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
+ /* ── the CLI Hook Interface (v1.4.1) ─────────────────────────────────────── */
41
+ /* The board is a thing you BUILD, so it moves the way a thing you build moves:
42
+ a chip arrives, a chip you just staged breathes once so you can find it, and
43
+ a row in the part picker slides in as the list narrows under your typing.
44
+ Every one of them is a FINITE animation with a real end state, so the cap in
45
+ the reduced-motion block below leaves each one at rest rather than frozen
46
+ part-way. */
47
+ .hk-chip { animation: hk-chip-in 200ms var(--ease) backwards; }
48
+ @keyframes hk-chip-in {
49
+ from { opacity: 0; transform: translateY(6px) scale(0.97); }
50
+ to { opacity: 1; transform: none; }
51
+ }
52
+ /* Staged, not written — and the one thing on the board that has to be findable
53
+ the instant it appears. Three pulses and it stops: an infinite one would have
54
+ to be REMOVED below rather than capped, and this one reads correctly at rest.
55
+ */
56
+ .hk-chip-new { animation: hk-chip-in 200ms var(--ease) backwards, hk-chip-mark 900ms var(--ease) 3; }
57
+ @keyframes hk-chip-mark {
58
+ 0%, 100% { box-shadow: inset 0 0 0 0 var(--accent); }
59
+ 50% { box-shadow: inset 0 0 0 2px var(--accent); }
60
+ }
61
+ /* Position, drop marker, and the zone's own border: transitions rather than
62
+ animations, so an interrupted drag never leaves a chip mid-flight. */
63
+ .hk-chip, .hk-zone, .hk-add, .hk-act, .hk-pick-row, .hk-theme, .hk-sample {
64
+ transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease),
65
+ box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease),
66
+ transform var(--dur) var(--ease);
67
+ }
68
+ .hk-chip:hover:not(.hk-chip-dragging) { transform: translateY(-2px); }
69
+ .hk-add:hover:not(:disabled) { transform: translateY(-2px); }
70
+ .hk-pick-row { animation: hk-row-in 160ms var(--ease) backwards; }
71
+ @keyframes hk-row-in {
72
+ from { opacity: 0; transform: translateX(-6px); }
73
+ to { opacity: 1; transform: none; }
74
+ }
75
+ button.hk-pick-row:hover { transform: translateX(3px); }
76
+
77
+ /* NOTHING ARRIVES ON A REPAINT (v1.4.2). The CLI Hook Interface rebuilds its
78
+ whole panel when a change is STAGED — no request, no navigation, the same
79
+ cards with one value different — and the entrance animations above replayed
80
+ every time, on a 30ms stagger. With the network tab empty it read exactly
81
+ like the page reloading, on every keystroke.
82
+
83
+ `hk-quiet` is added by `hkPaint` from the SECOND paint onward and by the part
84
+ editor before every rebuild. It removes the ENTRANCES only: the transitions
85
+ further up are about the pointer rather than about arriving, so hover, the
86
+ drop marker and the staged edge are untouched. It must load after the rules
87
+ it switches off, which is why it is here and not in the panel's own file. */
88
+ .hk-quiet > *,
89
+ .hk-quiet .hk-chip,
90
+ .hk-quiet .hk-chip-new,
91
+ .hk-quiet .hk-pick-row {
92
+ animation: none;
93
+ }
94
+
95
+ /* ── the Behaviour panel (v2.0.0 W7) ──────────────────────────────────────── */
96
+ /* Motion is information here, not decoration: the ring filling says "this
97
+ share", a bar growing says "this proportion", the proposal breathing says
98
+ "this one needs you". EVERY animation below is FINITE and ends well inside
99
+ 5 s (WCAG 2.2.2), so the reduced-motion cap leaves each one at rest. */
100
+ .bh-portrait li { animation: bh-portrait-in 420ms var(--ease) backwards; }
101
+ @keyframes bh-portrait-in {
102
+ from { opacity: 0; transform: translateX(-10px); }
103
+ to { opacity: 1; transform: none; }
104
+ }
105
+ .bh-grow-x { transform-origin: left center; animation: bh-grow-x 700ms var(--ease) backwards; }
106
+ @keyframes bh-grow-x {
107
+ from { transform: scaleX(0); }
108
+ to { transform: scaleX(1); }
109
+ }
110
+ .bh-grow-y { transform-origin: bottom center; animation: bh-grow-y 600ms var(--ease) backwards; }
111
+ @keyframes bh-grow-y {
112
+ from { transform: scaleY(0); }
113
+ to { transform: scaleY(1); }
114
+ }
115
+ .bh-heat .c { animation: bh-cell-in 360ms var(--ease) backwards; }
116
+ @keyframes bh-cell-in {
117
+ from { opacity: 0; transform: scale(.4); }
118
+ to { opacity: 1; transform: none; }
119
+ }
120
+ /* The line draws itself. --len is set from the path's own length in the panel. */
121
+ .bh-draw { stroke-dasharray: var(--len, 2000); stroke-dashoffset: var(--len, 2000); animation: bh-draw 1100ms var(--ease) forwards; }
122
+ @keyframes bh-draw { to { stroke-dashoffset: 0; } }
123
+ .bh-fade-late { animation: bh-fade 500ms var(--ease) 700ms backwards; }
124
+ @keyframes bh-fade {
125
+ from { opacity: 0; }
126
+ to { opacity: 1; }
127
+ }
128
+ .bh-habit, .bh-lesson { animation: block-in 260ms var(--ease) backwards; }
129
+ .bh-habit { transition: border-color var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur-shadow) var(--ease); }
130
+ .bh-habit:hover { transform: translateY(-2px); }
131
+ /* A proposal is the one card that has to be FOUND: it breathes three times
132
+ and stops — the hk-chip-mark rule. */
133
+ .bh-habit[data-state="proposed"] { animation: block-in 260ms var(--ease) backwards, bh-propose 1400ms var(--ease) 400ms 3; }
134
+ @keyframes bh-propose {
135
+ 0%, 100% { box-shadow: 0 0 0 0 transparent; }
136
+ 50% { box-shadow: 0 0 0 4px var(--accent-wash), 0 0 28px -6px var(--accent); }
137
+ }
138
+ .bh-log-row { animation: bh-row-in 380ms var(--ease) backwards; }
139
+ @keyframes bh-row-in {
140
+ from { opacity: 0; transform: translateY(-8px); background: var(--accent-wash); }
141
+ to { opacity: 1; transform: none; background: transparent; }
142
+ }
143
+ /* The ring is a TRANSITION, so the reduced-motion cap already makes it instant. */
144
+ .bh-ring .fg { transition: stroke-dashoffset 900ms var(--ease); }
145
+ .bh-tab-ink { transition: left var(--dur-slow) var(--ease), width var(--dur-slow) var(--ease); }
146
+ .bh-seg button { transition: background var(--dur) var(--ease), color var(--dur) var(--ease); }
147
+ /* The rail dot: three pulses, then rest. */
148
+ .bh-dot { animation: bh-dot 1600ms var(--ease) 3; }
149
+ @keyframes bh-dot {
150
+ 0%, 100% { box-shadow: 0 0 0 0 var(--accent-wash); }
151
+ 50% { box-shadow: 0 0 0 5px transparent; }
152
+ }
153
+ /* The hero orbit: ONE slow turn (≈ 4.6 s), then rest. Never infinite. */
154
+ .bh-orbit .sat { transform-box: view-box; transform-origin: 130px 130px; animation: bh-orbit 4.6s var(--ease) 1 both; }
155
+ .bh-orbit .sat-b { animation-duration: 4.2s; animation-direction: reverse; }
156
+ @keyframes bh-orbit {
157
+ from { transform: rotate(0deg); }
158
+ to { transform: rotate(360deg); }
159
+ }
160
+ /* NOTHING ARRIVES ON A REPAINT. After a write the panel repaints with
161
+ `bh-quiet`, and every entrance above is off — the v1.4.2 hk-quiet rule. */
162
+ .bh-quiet > *,
163
+ .bh-quiet .bh-habit,
164
+ .bh-quiet .bh-lesson,
165
+ .bh-quiet .bh-log-row,
166
+ .bh-quiet .bh-portrait li,
167
+ .bh-quiet .bh-grow-x,
168
+ .bh-quiet .bh-grow-y,
169
+ .bh-quiet .bh-heat .c,
170
+ .bh-quiet .bh-fade-late,
171
+ .bh-quiet .bh-orbit .sat {
172
+ animation: none;
173
+ }
174
+
175
+ /* ---------------------------------------------------------- REDUCED MOTION */
176
+ /* Non-negotiable: every animation and transition above is off. */
177
+
178
+ @media (prefers-reduced-motion: reduce) {
179
+ *, *::before, *::after {
180
+ animation-duration: 1ms !important;
181
+ animation-iteration-count: 1 !important;
182
+ /* Load-bearing, not tidiness: the staggered entrance fills `backwards`, so
183
+ a delay that survives here leaves a block sitting at opacity 0 for its
184
+ whole delay — reduced motion would mean things simply do not appear. */
185
+ animation-delay: 0ms !important;
186
+ transition-duration: 1ms !important;
187
+ scroll-behavior: auto !important;
188
+ }
189
+ /* Reduced motion means no movement, not fast movement — the hover and press
190
+ nudges are removed outright rather than sped up. */
191
+ .nav a:hover, .btn:active:not(:disabled), .action:hover,
192
+ .todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
193
+ /* The board's own nudges, removed rather than shortened — a chip that lifts
194
+ under the pointer is an affordance, and a fast lift is still a lift. The
195
+ border and box-shadow changes stay: THEY are what says where a drop lands,
196
+ and a drop marker carried by motion alone would not exist here at all. */
197
+ .hk-chip:hover:not(.hk-chip-dragging), .hk-add:hover:not(:disabled),
198
+ button.hk-pick-row:hover { transform: none !important; }
199
+ /* The vault pulse is one of two INFINITE animations on the page. Capping it to
200
+ a single 1ms run would still leave a dash frozen mid-edge, so it is removed
201
+ outright and the edge reads as a plain line. */
202
+ .vault-pulse { display: none; }
203
+ /* The other one: the looping flow sweep. `animation-iteration-count: 1` above
204
+ would still fire it once and then leave the connector segment collapsed at
205
+ its final keyframe, so both halves are removed outright — the rail is drawn
206
+ in its resting state and the hairlines read as plain connectors. */
207
+ .step, .step::before { animation: none !important; }
208
+ .step-flow { display: none; }
209
+ /* The cost bar grows in two dimensions (the stack's width, each segment's
210
+ flex-grow). Both are removed rather than shortened, so the bar is simply
211
+ drawn at its final proportions. */
212
+ .bar-stack, .bar-seg { transition: none !important; }
213
+ /* The challenge timeline and its convergence bar. Both are removed rather
214
+ than shortened: a capped `ch-grow` leaves a segment frozen part-way, which
215
+ misreports the count it is drawn from — worse than no animation at all. */
216
+ .ch-rail-node, .ch-conv-seg { animation: none !important; }
217
+ /* The Docs ribbon (v0.48.0). Three animations, all REMOVED rather than
218
+ capped: `doc-seg-in` capped at one iteration would still leave a segment
219
+ mid-`scaleY`, and the two INFINITE ones (the written sheen and the
220
+ user-edited pulse) would freeze at whatever opacity the single run stopped
221
+ on — a segment drawn at 40% height misreports the line count it is drawn
222
+ from, which is worse than no animation at all. The wave rows and the health
223
+ bars go the same way: a bar frozen part-way is a wrong number. */
224
+ .doc-seg, .doc-seg-box, .doc-wave, .doc-bar-seg { animation: none !important; }
225
+ /* The Extra connect pulse (v0.50.0). A probe has no known duration, so the
226
+ dot loops until an answer arrives — the third INFINITE animation on the
227
+ page, and removed outright for the same reason as the other two: capped at
228
+ one iteration it would stop half way across the wire, which reads as a
229
+ request that hung. The wire itself still turns green or red, so the RESULT
230
+ of the test is never carried by motion alone. */
231
+ .ex-wire-dot { display: none; }
232
+ /* The Knowledge ▸ Code graph tab (v1.9.2). Three INFINITE animations — the
233
+ state beacon, the pipeline dots and the call-edge pulses — are REMOVED, not
234
+ capped: a capped one stops half way along its path, which reads as a dot
235
+ that belongs there. Every finite one is removed too, so each bar is drawn
236
+ at its final width at once: a bar frozen part-way is a wrong number. The
237
+ tiles already skip their count-up here (cgStill() in the panel). */
238
+ .cg-beacon, .cg-link-dot, .cg-pulse { display: none; }
239
+ .cg-step, .cg-step-line, .cg-station, .cg-file, .cg-sym, .cg-edge-line,
240
+ .cg-seg, .cg-tile, .cg-bchip, .cg-lang, .cg-read, .cg-gloss-group { animation: none !important; }
241
+ .cg-station:hover { transform: none !important; }
242
+ /* The Behaviour panel (v2.0.0 W7). The orbit satellites are REMOVED, not
243
+ capped. A line that draws itself ends drawn: a 1 ms cap on a `forwards`
244
+ fill could still leave it undrawn for a frame, so its end state is forced.
245
+ The card lift is removed outright, like every other hover nudge. */
246
+ .bh-orbit .sat { display: none; }
247
+ .bh-draw { stroke-dashoffset: 0 !important; }
248
+ .bh-habit:hover { transform: none !important; }
249
+ }