gentle-pi 3.7.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/README.md +155 -10
  2. package/assets/agents/gentle-ai-explore.md +13 -6
  3. package/assets/agents/gentle-ai-verify.md +27 -6
  4. package/assets/agents/gentle-ai-worker.md +13 -15
  5. package/assets/install-wizard/index.html +47 -0
  6. package/assets/install-wizard/wizard.css +1279 -0
  7. package/assets/install-wizard/wizard.js +951 -0
  8. package/assets/orchestrator-delegation.md +75 -169
  9. package/assets/orchestrator-memory.md +12 -26
  10. package/assets/orchestrator-prompts.md +48 -0
  11. package/assets/orchestrator-skills.md +1 -1
  12. package/assets/orchestrator-tracking.md +53 -0
  13. package/assets/orchestrator-verification.md +28 -0
  14. package/assets/orchestrator-writer.md +38 -0
  15. package/assets/orchestrator.md +30 -38
  16. package/assets/sounds/LICENSE.md +52 -0
  17. package/assets/sounds/attention.wav +0 -0
  18. package/assets/sounds/error.wav +0 -0
  19. package/assets/sounds/success.wav +0 -0
  20. package/assets/support/strict-tdd-verify.md +4 -266
  21. package/assets/support/strict-tdd.md +8 -360
  22. package/bin/engram-guard +9 -0
  23. package/bin/gentle-shell-install.mjs +302 -0
  24. package/bin/gentle-shell.mjs +956 -50
  25. package/contracts/review-provider-contract-mirror/provider-contract.lock.json +7 -7
  26. package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/manifest.json +2 -2
  27. package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/orchestration/pi.md +16 -4
  28. package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/generated/provider-capabilities.baseline.json +2 -2
  29. package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/generated/provider-roles.baseline.json +1 -1
  30. package/docs/bundled-install.md +397 -0
  31. package/docs/delegated-verification.md +27 -4
  32. package/docs/gentle-agents-activity.md +537 -0
  33. package/docs/gentle-shell-uninstall.md +136 -0
  34. package/docs/gentle-shell.md +165 -51
  35. package/docs/install-wizard.md +2040 -0
  36. package/docs/native-authority-architecture.md +3 -3
  37. package/docs/permission-modes.md +82 -0
  38. package/docs/prompt-history.md +280 -0
  39. package/docs/readme-reference.md +364 -231
  40. package/docs/render-cache-performance.md +28 -0
  41. package/docs/sound-notifications-proposal.md +191 -0
  42. package/docs/sound-notifications.md +114 -0
  43. package/docs/telemetry.md +1 -1
  44. package/docs/yolo-mode.md +86 -0
  45. package/extensions/child-context.ts +35 -0
  46. package/extensions/child-safety.ts +25 -0
  47. package/extensions/codegraph-tools.ts +18 -5
  48. package/extensions/gentle-agents.ts +1093 -326
  49. package/extensions/gentle-ai.ts +1636 -890
  50. package/extensions/gentle-herdr-activity.ts +81 -0
  51. package/extensions/gentle-notifications.ts +104 -0
  52. package/extensions/gentle-shell.ts +1619 -136
  53. package/extensions/gentle-stats.ts +101 -0
  54. package/extensions/gentle-todo.ts +126 -20
  55. package/extensions/history/atomic-write.ts +38 -0
  56. package/extensions/history/hide-prompts.ts +183 -0
  57. package/extensions/history/index.ts +1424 -0
  58. package/extensions/history/load-shared-history.ts +39 -0
  59. package/extensions/history/selector-helpers.ts +538 -0
  60. package/extensions/history/session-scan.ts +233 -0
  61. package/extensions/history/store.ts +1119 -0
  62. package/extensions/nan-provider.ts +6 -0
  63. package/extensions/pi-pretty.ts +39 -3
  64. package/extensions/quiet-tools.ts +254 -92
  65. package/extensions/resume-hint.ts +60 -0
  66. package/extensions/skill-registry.ts +191 -58
  67. package/extensions/startup-banner.ts +71 -33
  68. package/lib/agent-assets.ts +604 -0
  69. package/lib/agent-home.ts +10 -1
  70. package/lib/agent-model-resolution.ts +80 -0
  71. package/lib/agent-profile-pin.ts +12 -0
  72. package/lib/agent-profiles.ts +13 -3
  73. package/lib/agents-completion-delivery.ts +11 -3
  74. package/lib/agents-message-delivery.ts +181 -0
  75. package/lib/agents-messaging.ts +1 -1
  76. package/lib/agents-protocol.ts +99 -0
  77. package/lib/agents-runner.ts +180 -107
  78. package/lib/agents-view.ts +26 -3
  79. package/lib/agents-widget.ts +16 -9
  80. package/lib/append-system-prompt.ts +21 -0
  81. package/lib/auto-permission-classifier.ts +280 -0
  82. package/lib/auto-permission-runtime.ts +268 -0
  83. package/lib/background-jobs-tools.ts +202 -0
  84. package/lib/background-jobs.ts +253 -0
  85. package/lib/background-monitor.ts +154 -0
  86. package/lib/bounded-writer-admission.ts +220 -0
  87. package/lib/builtin-codemode-optout.ts +166 -0
  88. package/lib/card-content-policy.ts +85 -0
  89. package/lib/card-style-policy.ts +60 -0
  90. package/lib/child-context-files.ts +166 -0
  91. package/lib/child-package-injection.ts +62 -0
  92. package/lib/codemode-renderer.ts +195 -0
  93. package/lib/command-palette-catalog.ts +5 -10
  94. package/lib/command-palette.ts +25 -14
  95. package/lib/context-threshold.ts +26 -0
  96. package/lib/destructive-command-guard.ts +144 -0
  97. package/lib/gentle-ai-binary.ts +109 -4
  98. package/lib/gentle-ai-elapsed-store.ts +87 -0
  99. package/lib/gentle-ai-renderer.ts +196 -39
  100. package/lib/gentle-shell-bundled.ts +517 -0
  101. package/lib/gentle-shell-launcher.ts +89 -27
  102. package/lib/gentle-shell-resume-hint.ts +176 -0
  103. package/lib/gentle-shell-startup-flow.ts +54 -0
  104. package/lib/gentle-shell-startup-update.ts +92 -0
  105. package/lib/gentle-shell-uninstall.ts +840 -0
  106. package/lib/gentle-shell-update-panel.ts +231 -0
  107. package/lib/herdr-activity.ts +183 -0
  108. package/lib/history-capture-policy.ts +95 -0
  109. package/lib/inprocess-reviewer.ts +3 -0
  110. package/lib/jobs-sidebar-state.ts +20 -0
  111. package/lib/jobs-view.ts +161 -0
  112. package/lib/model-price-ratio.ts +83 -0
  113. package/lib/model-routing-authority.ts +5 -1
  114. package/lib/nan-provider.ts +249 -0
  115. package/lib/native-review-cli.ts +242 -180
  116. package/lib/notification-audio-native.ts +162 -0
  117. package/lib/notification-audio-windows.ts +399 -0
  118. package/lib/notification-audio.ts +332 -0
  119. package/lib/notification-customize.ts +241 -0
  120. package/lib/notification-events.ts +113 -0
  121. package/lib/notification-policy.ts +148 -0
  122. package/lib/notification-pulse-client.ts +367 -0
  123. package/lib/notification-pulse-protocol.ts +305 -0
  124. package/lib/notification-pulse-stream.ts +213 -0
  125. package/lib/notification-pulse-worker.ts +66 -0
  126. package/lib/notification-scheduler.ts +173 -0
  127. package/lib/notification-service.ts +202 -0
  128. package/lib/notification-ui.ts +87 -0
  129. package/lib/odd-phase-inference.ts +231 -0
  130. package/lib/odd-phase.ts +141 -0
  131. package/lib/orchestrator-alias.ts +20 -0
  132. package/lib/orchestrator-catalog.ts +79 -0
  133. package/lib/orchestrator-consultation.ts +61 -0
  134. package/lib/orchestrator-discovery.ts +49 -0
  135. package/lib/orchestrator-helper-consent.ts +122 -0
  136. package/lib/orchestrator-helper.ts +167 -0
  137. package/lib/orchestrator-message-card.ts +105 -0
  138. package/lib/orchestrator-presence.ts +115 -14
  139. package/lib/orchestrator-scope.ts +80 -0
  140. package/lib/orchestrator-state.ts +107 -0
  141. package/lib/orchestrator-tool-card.ts +280 -0
  142. package/lib/orchestrator-work-search.ts +218 -0
  143. package/lib/orchestrator-work.ts +79 -0
  144. package/lib/overlay-repaint.ts +26 -0
  145. package/lib/permission-mode-policy.ts +59 -0
  146. package/lib/pi-tui-keys.ts +53 -0
  147. package/lib/review-candidate-view-owner.ts +73 -21
  148. package/lib/review-candidate-view.ts +115 -27
  149. package/lib/review-compact-contract.ts +2 -2
  150. package/lib/review-host-relay.ts +7 -2
  151. package/lib/review-integration-v2.ts +100 -22
  152. package/lib/review-publication-gate.ts +1 -1
  153. package/lib/review-reminder-receipt.ts +48 -8
  154. package/lib/review-risk-assessment.ts +227 -56
  155. package/lib/review-sidebar-state.ts +224 -0
  156. package/lib/review-transaction.ts +72 -3
  157. package/lib/runtime-metrics-children.ts +1 -1
  158. package/lib/runtime-metrics-native.ts +3 -2
  159. package/lib/selection-engine.ts +527 -0
  160. package/lib/session-change-capture.ts +5 -4
  161. package/lib/session-changes.ts +27 -22
  162. package/lib/session-messaging-grants.ts +135 -0
  163. package/lib/session-profile-binding.ts +83 -0
  164. package/lib/session-profile-freeze.ts +266 -0
  165. package/lib/session-worktree-registry.ts +87 -9
  166. package/lib/shell-bar.ts +215 -30
  167. package/lib/shell-card.ts +287 -18
  168. package/lib/shell-changes-view.ts +42 -14
  169. package/lib/shell-changes.ts +86 -71
  170. package/lib/shell-prompt.ts +102 -6
  171. package/lib/shell-sidebar-layout.ts +83 -15
  172. package/lib/shell-sidebar.ts +15 -1
  173. package/lib/shell-todo.ts +84 -31
  174. package/lib/shell-usage-view.ts +9 -4
  175. package/lib/shell-usage.ts +70 -13
  176. package/lib/stats-collector.ts +381 -0
  177. package/lib/stats-view.ts +431 -0
  178. package/lib/status-timing-diagnostics.ts +201 -0
  179. package/lib/telemetry-trigger.ts +3 -1
  180. package/lib/theme-customization.ts +52 -0
  181. package/lib/vim-editor-adapter.ts +383 -0
  182. package/lib/vim-normal-engine.ts +154 -0
  183. package/lib/vim-operator-engine.ts +416 -0
  184. package/lib/vim-policy.ts +49 -0
  185. package/lib/vim-visual-engine.ts +107 -0
  186. package/lib/visual-customization-policy.ts +119 -0
  187. package/lib/visual-customize-view.ts +481 -0
  188. package/lib/visual-profiles.ts +228 -0
  189. package/lib/writer-surfaces.ts +162 -0
  190. package/lib/yolo-session-policy.ts +317 -0
  191. package/package.json +20 -8
  192. package/runtime/child-package-injection.mjs +63 -0
  193. package/runtime/gentle-ai-binary.mjs +109 -4
  194. package/runtime/gentle-shell-bundled.mjs +518 -0
  195. package/runtime/gentle-shell-launcher.mjs +87 -25
  196. package/runtime/gentle-shell-resume-hint.mjs +177 -0
  197. package/runtime/gentle-shell-startup-flow.mjs +55 -0
  198. package/runtime/gentle-shell-startup-update.mjs +93 -0
  199. package/runtime/gentle-shell-uninstall.mjs +841 -0
  200. package/runtime/gentle-shell-update-panel.mjs +232 -0
  201. package/runtime/native-review-cli.mjs +239 -177
  202. package/runtime/review-integration-v2.mjs +100 -22
  203. package/runtime/review-risk-assessment.mjs +225 -54
  204. package/runtime/status-timing-diagnostics.mjs +202 -0
  205. package/runtime/telemetry-trigger.mjs +3 -1
  206. package/scripts/bootstrap.cmd +255 -0
  207. package/scripts/bootstrap.sh +168 -0
  208. package/scripts/build-distribution.mjs +157 -0
  209. package/scripts/build-installer-bundles.mjs +136 -0
  210. package/scripts/build-runtime-modules.mjs +8 -0
  211. package/scripts/bundled-install.mjs +1308 -0
  212. package/scripts/bundled-wizard.mjs +399 -0
  213. package/scripts/check-types.mjs +4 -6
  214. package/scripts/gentle-ai-installer.mjs +83 -35
  215. package/scripts/install-gentle-ai.mjs +48 -1
  216. package/scripts/install-tui-mode-setting.mjs +10 -1
  217. package/scripts/install-wizard-preview.mjs +154 -0
  218. package/scripts/installer-downloads.mjs +648 -0
  219. package/scripts/installer-preflight.mjs +387 -0
  220. package/scripts/installer-probes.mjs +564 -0
  221. package/scripts/installer-runner.mjs +1102 -0
  222. package/scripts/installer-server.mjs +881 -0
  223. package/scripts/installer-windows-artifacts.json +15 -0
  224. package/scripts/installer-windows.mjs +752 -0
  225. package/scripts/main-channel.mjs +452 -0
  226. package/scripts/mirror-odd-routing.mjs +2 -2
  227. package/scripts/npm-pack-result.mjs +31 -0
  228. package/scripts/render-cache-performance-worker.mjs +205 -0
  229. package/scripts/render-cache-performance.mjs +115 -0
  230. package/scripts/run-test-suite.mjs +90 -0
  231. package/scripts/test-installer-acceptance.sh +161 -0
  232. package/scripts/test-packed-runner.mjs +54 -19
  233. package/scripts/types-baseline.json +2 -92
  234. package/scripts/verify-package-files.mjs +91 -38
  235. package/skills/branch-pr/SKILL.md +24 -52
  236. package/skills/chained-pr/SKILL.md +31 -15
  237. package/skills/chained-pr/references/chaining-details.md +31 -20
  238. package/skills/gentle-ai/SKILL.md +16 -21
  239. package/skills/issue-creation/SKILL.md +8 -2
  240. package/skills/issue-creation/references/delegated-workflow-actions.md +19 -0
  241. package/skills/work-unit-commits/SKILL.md +4 -3
  242. package/tests/agent-home.test.ts +56 -3
  243. package/tests/agent-model-resolution.test.ts +113 -0
  244. package/tests/agent-profiles.test.ts +30 -0
  245. package/tests/agent-risk-escalation.test.ts +123 -0
  246. package/tests/agents-completion-delivery.test.ts +17 -0
  247. package/tests/agents-fake-child.ts +2 -2
  248. package/tests/agents-message-delivery.test.ts +106 -0
  249. package/tests/agents-protocol.test.ts +97 -0
  250. package/tests/agents-queries.test.ts +9 -9
  251. package/tests/agents-runner-process.test.ts +31 -0
  252. package/tests/agents-runner.test.ts +467 -93
  253. package/tests/agents-view-thread-identity.test.ts +169 -0
  254. package/tests/agents-view.test.ts +8 -2
  255. package/tests/agents-widget.test.ts +154 -15
  256. package/tests/append-system-prompt-route.test.ts +160 -0
  257. package/tests/append-system-prompt.test.ts +46 -0
  258. package/tests/artifact-language.test.ts +19 -213
  259. package/tests/ask-user-question.test.ts +44 -1
  260. package/tests/asset-installation-runtime.test.ts +5 -16
  261. package/tests/auto-mode-invariants.test.ts +258 -0
  262. package/tests/auto-mode-sdk.test.ts +57 -0
  263. package/tests/auto-mode.test.ts +49 -0
  264. package/tests/auto-permission-classifier.test.ts +283 -0
  265. package/tests/auto-permission-runtime.test.ts +196 -0
  266. package/tests/autonomous-guard.test.ts +69 -1
  267. package/tests/background-cache-warming.test.ts +2 -1
  268. package/tests/background-jobs.test.ts +227 -0
  269. package/tests/background-monitor.test.ts +195 -0
  270. package/tests/background-subagents-default-mode.test.ts +28 -5
  271. package/tests/bounded-stop-contract.test.ts +85 -0
  272. package/tests/bounded-writer-admission.test.ts +146 -0
  273. package/tests/branch-pr-skill.test.ts +43 -0
  274. package/tests/bridge-wake-lifecycle.test.ts +129 -0
  275. package/tests/bridge-wake-rendering.test.ts +56 -0
  276. package/tests/build-distribution.test.ts +269 -0
  277. package/tests/builtin-codemode-optout.test.ts +242 -0
  278. package/tests/bundled-install.test.ts +1319 -0
  279. package/tests/bundled-wizard.test.ts +505 -0
  280. package/tests/card-content-policy.test.ts +68 -0
  281. package/tests/card-style-policy.test.ts +87 -0
  282. package/tests/chained-pr-skill.test.ts +124 -0
  283. package/tests/child-codegraph-bootstrap.test.ts +74 -0
  284. package/tests/child-context-files.test.ts +255 -0
  285. package/tests/child-package-entrypoints.test.ts +65 -0
  286. package/tests/child-package-injection.test.ts +74 -0
  287. package/tests/child-safety.test.ts +94 -0
  288. package/tests/child-web-package.test.ts +224 -0
  289. package/tests/codegraph-tools.test.ts +35 -0
  290. package/tests/codemode-rendering.test.ts +596 -0
  291. package/tests/command-palette.test.ts +43 -7
  292. package/tests/context-threshold.test.ts +31 -0
  293. package/tests/delegate-for-reason-contract.test.ts +327 -0
  294. package/tests/delegated-key-learnings-contract.test.ts +3 -78
  295. package/tests/destructive-command-guard.test.ts +84 -0
  296. package/tests/devbinary/native-review-parity.devtest.ts +171 -3
  297. package/tests/devbinary/non-git-subagent-bootstrap.devtest.ts +193 -0
  298. package/tests/devbinary/pi-host-relay.devtest.ts +173 -3
  299. package/tests/engram-safety.test.ts +288 -0
  300. package/tests/fixtures/stats/sessions/--work-alpha--/2026-09-28T10-00-00-000Z_aaa.jsonl +7 -0
  301. package/tests/fixtures/stats/sessions/--work-alpha--/2026-09-29T23-00-00-000Z_bbb.jsonl +3 -0
  302. package/tests/fixtures/stats/sessions/--work-alpha--/2026-09-30T08-00-00-000Z_ddd.jsonl +2 -0
  303. package/tests/fixtures/stats/sessions/--work-alpha--/2026-09-30T09-00-00-000Z_eee.jsonl +3 -0
  304. package/tests/fixtures/stats/sessions/--work-alpha--/run-1/session.jsonl +2 -0
  305. package/tests/fixtures/stats/sessions/--work-beta--/2026-09-01T12-00-00-000Z_ccc.jsonl +2 -0
  306. package/tests/fixtures/stats/user-pi/sessions/--work-alpha--/2026-09-28T10-00-00-000Z_aaa.jsonl +2 -0
  307. package/tests/fixtures/stats/user-pi/sessions/--work-alpha--/2026-09-29T23-00-00-000Z_bbb.jsonl +4 -0
  308. package/tests/fixtures/stats/user-pi/sessions/--work-gamma--/2026-09-20T09-00-00-000Z_fff.jsonl +3 -0
  309. package/tests/generic-agent-tools.test.ts +69 -0
  310. package/tests/gentle-agents.test.ts +2804 -346
  311. package/tests/gentle-ai-binary-isolation.test.ts +135 -0
  312. package/tests/gentle-ai-binary.test.ts +21 -4
  313. package/tests/gentle-ai-child-guards.test.ts +202 -0
  314. package/tests/gentle-ai-dev-binary-surfacing.test.ts +125 -15
  315. package/tests/gentle-ai-elapsed-store.test.ts +68 -0
  316. package/tests/gentle-ai-installer.test.ts +566 -62
  317. package/tests/gentle-ai-prompt-model-routing.test.ts +123 -0
  318. package/tests/gentle-ai-renderer.test.ts +493 -14
  319. package/tests/gentle-ai.test.ts +1427 -236
  320. package/tests/gentle-card-text.ts +2 -1
  321. package/tests/gentle-herdr-activity.test.ts +100 -0
  322. package/tests/gentle-notifications.test.ts +427 -0
  323. package/tests/gentle-shell-bin.test.ts +896 -115
  324. package/tests/gentle-shell-bundled.test.ts +1002 -0
  325. package/tests/gentle-shell-launcher.test.ts +333 -65
  326. package/tests/gentle-shell-resume-hint.test.ts +270 -0
  327. package/tests/gentle-shell-startup-flow.test.ts +75 -0
  328. package/tests/gentle-shell-startup-update.test.ts +85 -0
  329. package/tests/gentle-shell-uninstall.test.ts +978 -0
  330. package/tests/gentle-shell-update-panel.test.ts +158 -0
  331. package/tests/gentle-shell.test.ts +4216 -119
  332. package/tests/gentle-stats.test.ts +152 -0
  333. package/tests/gentle-theme.test.ts +4 -1
  334. package/tests/gentle-todo.test.ts +333 -10
  335. package/tests/herdr-activity.test.ts +243 -0
  336. package/tests/history-agent-home.test.ts +81 -0
  337. package/tests/history-atomic-write.test.ts +57 -0
  338. package/tests/history-capture-policy.test.ts +102 -0
  339. package/tests/history-child-guard.test.ts +70 -0
  340. package/tests/history-command-registration.test.ts +164 -0
  341. package/tests/history-dedupe-entries.test.ts +123 -0
  342. package/tests/history-delete-backfill.test.ts +190 -0
  343. package/tests/history-delete-confirm.test.ts +460 -0
  344. package/tests/history-dispatch.test.ts +180 -0
  345. package/tests/history-drain-hidden.test.ts +110 -0
  346. package/tests/history-drain-order.test.ts +98 -0
  347. package/tests/history-expanded-globals.test.ts +62 -0
  348. package/tests/history-gc.test.ts +832 -0
  349. package/tests/history-header-layout.test.ts +265 -0
  350. package/tests/history-hide-prompts.test.ts +275 -0
  351. package/tests/history-lazy-windowing.test.ts +508 -0
  352. package/tests/history-legacy-migrate-v2.test.ts +297 -0
  353. package/tests/history-load-shared-history.test.ts +53 -0
  354. package/tests/history-max-results-cap.test.ts +76 -0
  355. package/tests/history-multi-reader.test.ts +203 -0
  356. package/tests/history-off-path.test.ts +170 -0
  357. package/tests/history-openflow-integration.test.ts +173 -0
  358. package/tests/history-overlay-margin.test.ts +326 -0
  359. package/tests/history-preview-layout.test.ts +93 -0
  360. package/tests/history-registry.test.ts +143 -0
  361. package/tests/history-scope-delete.test.ts +411 -0
  362. package/tests/history-search-caret-keys.test.ts +142 -0
  363. package/tests/history-seed-bootstrap.test.ts +170 -0
  364. package/tests/history-seed-regen.test.ts +129 -0
  365. package/tests/history-selector-windowing.test.ts +94 -0
  366. package/tests/history-session-scan-directory.test.ts +87 -0
  367. package/tests/history-session-scan-extract.test.ts +583 -0
  368. package/tests/history-session-writer.test.ts +351 -0
  369. package/tests/history-store-paths.test.ts +79 -0
  370. package/tests/history-tombstone-exact.test.ts +139 -0
  371. package/tests/history-wheel-mouse.test.ts +242 -0
  372. package/tests/inprocess-reviewer.test.ts +49 -19
  373. package/tests/install-gentle-ai-failure.test.ts +69 -0
  374. package/tests/install-tui-mode-setting.test.ts +15 -0
  375. package/tests/install-wizard.test.ts +1223 -0
  376. package/tests/installer-bundles.test.ts +122 -0
  377. package/tests/installer-posix-bootstrap.test.ts +1201 -0
  378. package/tests/installer-preflight.test.ts +750 -0
  379. package/tests/installer-probes.test.ts +1106 -0
  380. package/tests/installer-runner.test.ts +2158 -0
  381. package/tests/installer-server.test.ts +1567 -0
  382. package/tests/installer-windows-bootstrap.test.ts +2410 -0
  383. package/tests/issue-creation-skill.test.ts +61 -0
  384. package/tests/jobs-view.test.ts +160 -0
  385. package/tests/main-channel-upgrade.test.ts +389 -0
  386. package/tests/main-channel.test.ts +344 -0
  387. package/tests/maintainer/provider-relay.maintest.ts +13 -12
  388. package/tests/model-price-ratio.test.ts +116 -0
  389. package/tests/model-profiles-preservation.test.ts +153 -0
  390. package/tests/model-routing-authority.test.ts +16 -0
  391. package/tests/model-routing-package.test.ts +10 -0
  392. package/tests/nan-provider-runtime.test.ts +156 -0
  393. package/tests/nan-provider.test.ts +481 -0
  394. package/tests/native-binary-gate.test.ts +2 -0
  395. package/tests/native-review-capability-contract.test.ts +13 -1
  396. package/tests/native-review-cli.test.ts +239 -118
  397. package/tests/native-review-consent.test.ts +2 -2
  398. package/tests/native-review-parity-runtime.test.ts +101 -4
  399. package/tests/native-review-parity.test.ts +12 -48
  400. package/tests/native-risk-evidence-parity.test.ts +21 -0
  401. package/tests/no-self-pause-contract.test.ts +87 -0
  402. package/tests/notification-audio-native.test.ts +281 -0
  403. package/tests/notification-audio-windows.test.ts +581 -0
  404. package/tests/notification-audio.test.ts +548 -0
  405. package/tests/notification-customize.test.ts +655 -0
  406. package/tests/notification-events.test.ts +115 -0
  407. package/tests/notification-policy.test.ts +201 -0
  408. package/tests/notification-pulse-client.test.ts +356 -0
  409. package/tests/notification-pulse-protocol.test.ts +213 -0
  410. package/tests/notification-pulse-stream.test.ts +320 -0
  411. package/tests/notification-scheduler.test.ts +258 -0
  412. package/tests/notification-ui.test.ts +157 -0
  413. package/tests/npm-pack-result.test.ts +41 -0
  414. package/tests/odd-integration.test.ts +76 -0
  415. package/tests/odd-phase-inference.test.ts +213 -0
  416. package/tests/odd-phase-loader.test.ts +253 -0
  417. package/tests/odd-phase.test.ts +307 -0
  418. package/tests/odd-routing-canonical-ratchet.test.ts +60 -14
  419. package/tests/odd-routing-contract.test.ts +158 -50
  420. package/tests/orchestrator-budget.test.ts +43 -45
  421. package/tests/orchestrator-catalog.test.ts +146 -0
  422. package/tests/orchestrator-consultation-sdk.test.ts +614 -0
  423. package/tests/orchestrator-consultation.test.ts +111 -0
  424. package/tests/orchestrator-discovery.test.ts +241 -0
  425. package/tests/orchestrator-helper-consent.test.ts +171 -0
  426. package/tests/orchestrator-helper.test.ts +297 -0
  427. package/tests/orchestrator-message-card.test.ts +190 -0
  428. package/tests/orchestrator-presence.test.ts +23 -0
  429. package/tests/orchestrator-rdd-ownership.test.ts +8 -7
  430. package/tests/orchestrator-scope.test.ts +107 -0
  431. package/tests/orchestrator-state.test.ts +114 -0
  432. package/tests/orchestrator-status-publication-contract.test.ts +34 -0
  433. package/tests/orchestrator-tool-card.test.ts +398 -0
  434. package/tests/orchestrator-work-search.test.ts +318 -0
  435. package/tests/orchestrator-work.test.ts +147 -0
  436. package/tests/overlay-repaint.test.ts +74 -0
  437. package/tests/package-manifest.test.ts +344 -123
  438. package/tests/packed-runner-owned-path.test.ts +80 -0
  439. package/tests/parallel-reason-contract.test.ts +21 -0
  440. package/tests/parallel-writer-admission.test.ts +210 -0
  441. package/tests/permission-mode-policy.test.ts +194 -0
  442. package/tests/persona-single-channel.test.ts +10 -18
  443. package/tests/pi-pretty.test.ts +56 -0
  444. package/tests/provider-defect-handoff.test.ts +7 -14
  445. package/tests/quiet-bash-runtime.test.ts +76 -0
  446. package/tests/quiet-tool-rendering.test.ts +569 -187
  447. package/tests/rdd-aware-verification-contract.test.ts +103 -40
  448. package/tests/rdd-status-line.test.ts +9 -4
  449. package/tests/render-cache-performance.test.ts +48 -0
  450. package/tests/resume-hint-extension.test.ts +122 -0
  451. package/tests/review-agent-end-preflight.test.ts +237 -21
  452. package/tests/review-candidate-owner-retry.test.ts +22 -1
  453. package/tests/review-candidate-view.test.ts +399 -12
  454. package/tests/review-contract-prompt.test.ts +138 -44
  455. package/tests/review-controller-lock-status.test.ts +0 -1
  456. package/tests/review-controller-native-recovery.test.ts +327 -17
  457. package/tests/review-controller-native-routing.test.ts +866 -6
  458. package/tests/review-controller-workspace-root.test.ts +206 -6
  459. package/tests/review-controller.test.ts +2 -2
  460. package/tests/review-correction-lifecycle.test.ts +2 -1
  461. package/tests/review-gate.test.ts +7 -4
  462. package/tests/review-graph-schema.test.ts +2 -2
  463. package/tests/review-host-relay-routing.test.ts +342 -4
  464. package/tests/review-host-relay.test.ts +49 -2
  465. package/tests/review-integration-v2-forward.test.ts +221 -1
  466. package/tests/review-json-arguments.test.ts +167 -0
  467. package/tests/review-last-event-closure.test.ts +157 -8
  468. package/tests/review-ledger-contract.test.ts +14 -37
  469. package/tests/review-policy-judgment-day.test.ts +1 -1
  470. package/tests/review-policy-ordinary.test.ts +2 -2
  471. package/tests/review-relay-transport-agent.test.ts +66 -1
  472. package/tests/review-reminder-receipt.test.ts +47 -1
  473. package/tests/review-risk-assessment.test.ts +594 -26
  474. package/tests/review-session-standing-permission-controller.test.ts +16 -17
  475. package/tests/review-session-standing-permission-ipc.test.ts +6 -5
  476. package/tests/review-sidebar-state.test.ts +402 -0
  477. package/tests/review-test-fixtures.ts +7 -1
  478. package/tests/review-transaction.test.ts +18 -1
  479. package/tests/run-test-suite.test.ts +202 -0
  480. package/tests/runtime-harness.mjs +186 -800
  481. package/tests/runtime-metrics-children.test.ts +16 -23
  482. package/tests/runtime-metrics-extension.test.ts +1 -1
  483. package/tests/runtime-metrics-native.test.ts +31 -1
  484. package/tests/selection-engine.test.ts +451 -0
  485. package/tests/session-change-capture.test.ts +10 -10
  486. package/tests/session-changes-shell.test.ts +242 -48
  487. package/tests/session-changes.test.ts +17 -24
  488. package/tests/session-messaging-grants.test.ts +255 -0
  489. package/tests/session-profile-binding.test.ts +163 -0
  490. package/tests/session-profile-freeze.test.ts +381 -0
  491. package/tests/session-subject-routing-contract.test.ts +34 -0
  492. package/tests/session-worktree-registry.test.ts +134 -2
  493. package/tests/shell-bar.test.ts +422 -1
  494. package/tests/shell-card.test.ts +353 -1
  495. package/tests/shell-changes-view.test.ts +135 -32
  496. package/tests/shell-changes.test.ts +61 -62
  497. package/tests/shell-prompt.test.ts +94 -2
  498. package/tests/shell-render-cache-runtime.test.ts +69 -0
  499. package/tests/shell-render-cache.test.ts +129 -0
  500. package/tests/shell-sidebar-layout.test.ts +351 -22
  501. package/tests/shell-sidebar-scroll-benchmark.test.ts +255 -0
  502. package/tests/shell-todo.test.ts +207 -3
  503. package/tests/shell-usage-view.test.ts +28 -1
  504. package/tests/shell-usage.test.ts +108 -0
  505. package/tests/short-check-routing-contract.test.ts +49 -0
  506. package/tests/skill-registry-watcher.test.ts +119 -0
  507. package/tests/skill-registry.test.ts +357 -2
  508. package/tests/startup-banner.test.ts +246 -4
  509. package/tests/startup-home-repo.test.ts +170 -0
  510. package/tests/stats-collector.test.ts +195 -0
  511. package/tests/stats-view.test.ts +202 -0
  512. package/tests/status-timing-diagnostics.test.ts +283 -0
  513. package/tests/support/orchestrator-modules.ts +19 -0
  514. package/tests/task-size-routing-contract.test.ts +241 -0
  515. package/tests/telemetry-trigger.test.ts +107 -20
  516. package/tests/test-strength-contract.test.ts +124 -0
  517. package/tests/theme-customization.test.ts +72 -0
  518. package/tests/verify-agent-contract.test.ts +90 -0
  519. package/tests/verify-first-launch-contract.test.ts +139 -0
  520. package/tests/verify-package-files.test.ts +56 -0
  521. package/tests/vim-editor-adapter-host-resolution.test.ts +37 -0
  522. package/tests/vim-editor-adapter.test.ts +804 -0
  523. package/tests/vim-normal-engine.test.ts +101 -0
  524. package/tests/vim-operator-engine.test.ts +215 -0
  525. package/tests/vim-policy.test.ts +19 -0
  526. package/tests/vim-visual-engine.test.ts +52 -0
  527. package/tests/visual-customization-policy.test.ts +139 -0
  528. package/tests/visual-customize-view.test.ts +696 -0
  529. package/tests/visual-profiles.test.ts +87 -0
  530. package/tests/writer-edit-surface-scope.test.ts +59 -2
  531. package/tests/writer-surfaces.test.ts +199 -0
  532. package/tests/yolo-customize.test.ts +271 -0
  533. package/tests/yolo-mode-runtime.test.ts +188 -0
  534. package/tests/yolo-mode.test.ts +289 -0
  535. package/tests/yolo-session-policy.test.ts +59 -0
  536. package/themes/Gentle.json +2 -1
  537. package/themes/Gentleman-Cute.json +2 -1
  538. package/themes/Gentleman-Sexy.json +2 -1
  539. package/assets/agents/sdd-apply.md +0 -159
  540. package/assets/agents/sdd-archive.md +0 -228
  541. package/assets/agents/sdd-design.md +0 -49
  542. package/assets/agents/sdd-explore.md +0 -48
  543. package/assets/agents/sdd-init.md +0 -56
  544. package/assets/agents/sdd-onboard.md +0 -52
  545. package/assets/agents/sdd-proposal.md +0 -64
  546. package/assets/agents/sdd-remediate.md +0 -37
  547. package/assets/agents/sdd-research.md +0 -49
  548. package/assets/agents/sdd-spec.md +0 -192
  549. package/assets/agents/sdd-status.md +0 -54
  550. package/assets/agents/sdd-tasks.md +0 -108
  551. package/assets/agents/sdd-verify.md +0 -124
  552. package/assets/chains/sdd-full.chain.md +0 -83
  553. package/assets/chains/sdd-plan.chain.md +0 -56
  554. package/assets/chains/sdd-verify.chain.md +0 -43
  555. package/assets/sdd-orchestrator-workflow.md +0 -319
  556. package/assets/support/sdd-status-contract.md +0 -77
  557. package/docs/assets/diagrams/sdd-cycle.svg +0 -14
  558. package/extensions/sdd-init.ts +0 -816
  559. package/lib/openspec-deltas.ts +0 -156
  560. package/lib/sdd-preflight.ts +0 -1066
  561. package/lib/sdd-research-capabilities.ts +0 -94
  562. package/lib/sdd-status.ts +0 -26
  563. package/tests/fixtures/legacy/sdd-research-v2.5.0.md +0 -54
  564. package/tests/fixtures/native-review-cli/v2.1.3/bind-sdd.json +0 -25
  565. package/tests/fixtures/v0.10.7/assets/agents/sdd-apply.md +0 -132
  566. package/tests/openspec-deltas.test.ts +0 -209
  567. package/tests/sdd-agent-tools.test.ts +0 -156
  568. package/tests/sdd-archive-replay.test.ts +0 -82
  569. package/tests/sdd-classical-continuation.test.ts +0 -74
  570. package/tests/sdd-execution-routing-contract.test.ts +0 -44
  571. package/tests/sdd-managed-runtime-settlement.test.ts +0 -155
  572. package/tests/sdd-native-managed-uptake.test.ts +0 -243
  573. package/tests/sdd-no-attempts-contract.test.ts +0 -15
  574. package/tests/sdd-odd-integration.test.ts +0 -33
  575. package/tests/sdd-optional-research.test.ts +0 -124
  576. package/tests/sdd-planning-routing-contract.test.ts +0 -45
  577. package/tests/sdd-preflight-rpc-input.test.ts +0 -125
  578. package/tests/sdd-preflight.test.ts +0 -541
  579. package/tests/sdd-research-capabilities.test.ts +0 -114
  580. package/tests/sdd-research-live.test.ts +0 -241
  581. package/tests/sdd-selection-transport.test.ts +0 -653
  582. package/tests/sdd-status.test.ts +0 -9
  583. package/tests/sdd-task-truth.test.ts +0 -43
  584. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/README.md +0 -0
  585. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/schemas/lens.schema.json +0 -0
  586. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/schemas/refuter.schema.json +0 -0
  587. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/schemas/targeted-validator.schema.json +0 -0
  588. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/vectors/lens.json +0 -0
  589. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/vectors/refuter.json +0 -0
  590. /package/contracts/review-provider-contract-mirror/{v1.2.0 → v1.3.0}/bundle/vectors/targeted-validator.json +0 -0
@@ -0,0 +1,1279 @@
1
+ /* Gentle Shell installation wizard.
2
+ Dark only, local font stacks only (no web fonts, no external resources):
3
+ the host serves this file under `default-src 'self'`. Colors follow the
4
+ gentlemanprogramming.com tokens; every state also has a text label. */
5
+
6
+ :root {
7
+ color-scheme: dark;
8
+ --bg: #1a1218;
9
+ --bg-deep: #000000;
10
+ --surface: #20161e;
11
+ --surface-1: #241822;
12
+ --surface-2: #342230;
13
+ --border: #342230;
14
+ --border-soft: #ffffff17;
15
+ --text: #f6eff3;
16
+ --text-muted: #a78e9b;
17
+ --text-faint: #76616b;
18
+ --accent: #f095c8;
19
+ --accent-strong: #ff76c3;
20
+ --accent-soft: #ffb1dd;
21
+ --success: #b4e7c7;
22
+ --warning: #e0c27a;
23
+ --error: #ff718f;
24
+ --info: #a9c7ee;
25
+ --radius-sm: 8px;
26
+ --radius-md: 12px;
27
+ --radius-lg: 16px;
28
+ --radius-pill: 999px;
29
+ --ease: cubic-bezier(.4, 0, .2, 1);
30
+ --glow: 0 10px 30px #f095c84d;
31
+ --glow-hover: 0 14px 36px #f095c86b;
32
+ --shadow-panel: 0 24px 60px #00000073, 0 0 40px #f095c81a;
33
+ --font-sans: Inter, "SF Pro Text", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
34
+ --font-mono: "IosevkaTerm NF", "Iosevka Term", "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, "DejaVu Sans Mono", monospace;
35
+ }
36
+
37
+ *,
38
+ *::before,
39
+ *::after {
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ html {
44
+ background: var(--bg);
45
+ -webkit-text-size-adjust: 100%;
46
+ text-size-adjust: 100%;
47
+ }
48
+
49
+ body {
50
+ margin: 0;
51
+ min-height: 100vh;
52
+ display: flex;
53
+ flex-direction: column;
54
+ background: var(--bg);
55
+ color: var(--text);
56
+ font: 16px/1.6 var(--font-sans);
57
+ -webkit-font-smoothing: antialiased;
58
+ -moz-osx-font-smoothing: grayscale;
59
+ scrollbar-color: var(--surface-2) transparent;
60
+ }
61
+
62
+ ::selection {
63
+ background: #f095c84d;
64
+ color: var(--text);
65
+ }
66
+
67
+ :focus-visible {
68
+ outline: 2px solid var(--accent);
69
+ outline-offset: 2px;
70
+ }
71
+
72
+ a {
73
+ color: var(--accent);
74
+ }
75
+
76
+ p {
77
+ margin: 0 0 12px;
78
+ }
79
+
80
+ p:last-child {
81
+ margin-bottom: 0;
82
+ }
83
+
84
+ code {
85
+ font-family: var(--font-mono);
86
+ font-size: .9em;
87
+ color: var(--accent-soft);
88
+ background: #ffffff0f;
89
+ border: 1px solid var(--border-soft);
90
+ border-radius: 6px;
91
+ padding: .08em .4em;
92
+ white-space: nowrap;
93
+ }
94
+
95
+ .sr-only {
96
+ position: absolute;
97
+ width: 1px;
98
+ height: 1px;
99
+ padding: 0;
100
+ margin: -1px;
101
+ overflow: hidden;
102
+ clip: rect(0 0 0 0);
103
+ white-space: nowrap;
104
+ border: 0;
105
+ }
106
+
107
+ .skip-link {
108
+ position: absolute;
109
+ top: -100px;
110
+ left: 16px;
111
+ z-index: 10;
112
+ padding: 10px 16px;
113
+ border-radius: var(--radius-sm);
114
+ background: var(--accent);
115
+ color: var(--bg);
116
+ font-weight: 600;
117
+ text-decoration: none;
118
+ }
119
+
120
+ .skip-link:focus {
121
+ top: 12px;
122
+ }
123
+
124
+ /* Hero glow and a faint dot grid behind everything. */
125
+ /* Faint dot grid behind everything; the hero glow lives behind the panel (.view::before). */
126
+ .backdrop {
127
+ position: fixed;
128
+ inset: 0;
129
+ z-index: -1;
130
+ pointer-events: none;
131
+ }
132
+
133
+ .backdrop::after {
134
+ content: "";
135
+ position: absolute;
136
+ inset: 0;
137
+ background-image: radial-gradient(#ffffff0d 1px, #0000 1px);
138
+ background-size: 26px 26px;
139
+ -webkit-mask-image: linear-gradient(180deg, #000 0%, #0000 70%);
140
+ mask-image: linear-gradient(180deg, #000 0%, #0000 70%);
141
+ }
142
+
143
+ /* Top bar */
144
+
145
+ .topbar,
146
+ main,
147
+ .footer {
148
+ width: min(1040px, 100% - 32px);
149
+ margin-inline: auto;
150
+ }
151
+
152
+ .topbar {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ gap: 16px;
157
+ padding: 24px 0 8px;
158
+ }
159
+
160
+ .wordmark {
161
+ display: inline-flex;
162
+ align-items: center;
163
+ gap: 10px;
164
+ margin: 0;
165
+ font-size: 18px;
166
+ font-weight: 800;
167
+ letter-spacing: -.02em;
168
+ }
169
+
170
+ .wordmark-mark {
171
+ display: inline-grid;
172
+ place-items: center;
173
+ width: 34px;
174
+ height: 34px;
175
+ border: 1px solid #f095c866;
176
+ border-radius: var(--radius-sm);
177
+ background: linear-gradient(140deg, #f095c829, #f095c80a);
178
+ color: var(--accent);
179
+ font: 700 14px/1 var(--font-mono);
180
+ box-shadow: 0 6px 18px #f095c826;
181
+ }
182
+
183
+ .wordmark-accent {
184
+ color: var(--accent);
185
+ }
186
+
187
+ .topbar-note {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ gap: 8px;
191
+ margin: 0;
192
+ padding: 5px 12px;
193
+ border: 1px solid var(--border-soft);
194
+ border-radius: var(--radius-pill);
195
+ background: #ffffff08;
196
+ color: var(--text-muted);
197
+ font: 500 12px/1.4 var(--font-mono);
198
+ letter-spacing: .08em;
199
+ text-transform: uppercase;
200
+ }
201
+
202
+ .dot {
203
+ width: 8px;
204
+ height: 8px;
205
+ border-radius: 50%;
206
+ background: var(--success);
207
+ box-shadow: 0 0 0 3px #b4e7c726;
208
+ }
209
+
210
+ main {
211
+ flex: 1;
212
+ padding: 24px 0 56px;
213
+ }
214
+
215
+ /* Stage indicator */
216
+
217
+ .stages-nav {
218
+ margin-bottom: 24px;
219
+ }
220
+
221
+ .stages {
222
+ display: flex;
223
+ gap: 8px;
224
+ margin: 0;
225
+ padding: 0;
226
+ list-style: none;
227
+ counter-reset: stage;
228
+ }
229
+
230
+ .stage {
231
+ display: flex;
232
+ flex: 1;
233
+ align-items: center;
234
+ gap: 10px;
235
+ min-width: 0;
236
+ color: var(--text-muted);
237
+ font: 600 12px/1.2 var(--font-mono);
238
+ letter-spacing: .1em;
239
+ text-transform: uppercase;
240
+ }
241
+
242
+ .stage:not(:last-child)::after {
243
+ content: "";
244
+ flex: 1;
245
+ height: 1px;
246
+ min-width: 12px;
247
+ background: var(--border);
248
+ }
249
+
250
+ .stage-done:not(:last-child)::after {
251
+ background: linear-gradient(90deg, #b4e7c799, #f095c866);
252
+ }
253
+
254
+ .stage-dot {
255
+ display: inline-grid;
256
+ flex: none;
257
+ place-items: center;
258
+ width: 28px;
259
+ height: 28px;
260
+ border: 1px solid var(--border);
261
+ border-radius: 50%;
262
+ background: var(--surface);
263
+ font-size: 12px;
264
+ letter-spacing: 0;
265
+ }
266
+
267
+ .stage-current {
268
+ color: var(--text);
269
+ }
270
+
271
+ .stage-current .stage-dot {
272
+ border-color: var(--accent);
273
+ background: var(--accent);
274
+ color: var(--bg);
275
+ box-shadow: 0 0 0 4px #f095c826, var(--glow);
276
+ }
277
+
278
+ .stage-done {
279
+ color: var(--success);
280
+ }
281
+
282
+ .stage-done .stage-dot {
283
+ border-color: #b4e7c799;
284
+ background: #b4e7c726;
285
+ color: var(--success);
286
+ }
287
+
288
+ .stage-issue {
289
+ color: var(--warning);
290
+ }
291
+
292
+ .stage-issue .stage-dot {
293
+ border-color: #e0c27a99;
294
+ background: #e0c27a26;
295
+ color: var(--warning);
296
+ }
297
+
298
+ /* Panel and typography */
299
+
300
+ /* Hero glow from the reference site, behind the panel. Decorative and static:
301
+ a pseudo-element is not in the accessibility tree and never takes input. */
302
+ .view {
303
+ position: relative;
304
+ isolation: isolate;
305
+ }
306
+
307
+ .view::before {
308
+ content: "";
309
+ position: absolute;
310
+ /* Wider than the panel on large screens, never wider than the viewport:
311
+ the side inset stops 16px inside the page edge. */
312
+ inset: -120px max(-12%, calc((100% - 100vw) / 2 + 16px)) -40px;
313
+ z-index: -1;
314
+ pointer-events: none;
315
+ background:
316
+ radial-gradient(38% 50% at 30% 30%, #f095c838, #0000 70%),
317
+ radial-gradient(30% 40% at 75% 40%, #b4e7c71f, #0000 70%);
318
+ filter: blur(32px);
319
+ }
320
+
321
+ .panel {
322
+ position: relative;
323
+ overflow: hidden;
324
+ padding: clamp(24px, 4.2vw, 52px);
325
+ border: 1px solid var(--border);
326
+ border-radius: var(--radius-lg);
327
+ background: linear-gradient(180deg, #241822f2, #20161ef2);
328
+ box-shadow: var(--shadow-panel);
329
+ animation: rise .35s var(--ease) both;
330
+ }
331
+
332
+ .panel::before {
333
+ content: "";
334
+ position: absolute;
335
+ inset: 0 0 auto;
336
+ height: 2px;
337
+ background: linear-gradient(90deg, #0000, var(--accent), #0000);
338
+ opacity: .7;
339
+ }
340
+
341
+ .panel-success::before {
342
+ background: linear-gradient(90deg, #0000, var(--success), var(--accent), #0000);
343
+ }
344
+
345
+ .panel-warning::before {
346
+ background: linear-gradient(90deg, #0000, var(--warning), #0000);
347
+ }
348
+
349
+ .panel-error::before {
350
+ background: linear-gradient(90deg, #0000, var(--error), #0000);
351
+ }
352
+
353
+ .eyebrow {
354
+ margin: 0 0 12px;
355
+ color: var(--accent);
356
+ font: 600 12px/1.4 var(--font-mono);
357
+ letter-spacing: .12em;
358
+ text-transform: uppercase;
359
+ }
360
+
361
+ h1 {
362
+ max-width: 22ch;
363
+ margin: 0 0 16px;
364
+ font-size: clamp(34px, 4.6vw, 58px);
365
+ font-weight: 800;
366
+ line-height: 1.08;
367
+ letter-spacing: -.022em;
368
+ color: var(--text);
369
+ background: linear-gradient(100deg, var(--text) 20%, var(--accent));
370
+ -webkit-background-clip: text;
371
+ background-clip: text;
372
+ -webkit-text-fill-color: transparent;
373
+ }
374
+
375
+ /* Each new step moves focus to its heading so screen readers announce it. The
376
+ heading is not interactive, so it shows no ring; every control keeps its
377
+ :focus-visible outline. */
378
+ h1[tabindex="-1"]:focus {
379
+ outline: none;
380
+ }
381
+
382
+ h2 {
383
+ margin: 0;
384
+ }
385
+
386
+ .lead {
387
+ max-width: 62ch;
388
+ margin-bottom: 0;
389
+ color: var(--text-muted);
390
+ font-size: clamp(17px, 1.6vw, 18px);
391
+ }
392
+
393
+ .block {
394
+ margin-top: 36px;
395
+ }
396
+
397
+ .section-title {
398
+ margin: 0 0 14px;
399
+ font-size: 18px;
400
+ font-weight: 700;
401
+ letter-spacing: -.01em;
402
+ }
403
+
404
+ .grid {
405
+ display: grid;
406
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
407
+ gap: 16px;
408
+ }
409
+
410
+ /* Cards and pills */
411
+
412
+ .card {
413
+ padding: 22px 24px;
414
+ border: 1px solid var(--border);
415
+ border-radius: var(--radius-md);
416
+ background: var(--surface);
417
+ transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
418
+ }
419
+
420
+ .card p {
421
+ color: var(--text-muted);
422
+ font-size: 15px;
423
+ }
424
+
425
+ .disclosure-changes {
426
+ border-color: #f095c859;
427
+ background: linear-gradient(180deg, #f095c80d, #0000 60%), var(--surface);
428
+ box-shadow: inset 0 1px 0 #f095c81f;
429
+ }
430
+
431
+ .card-head {
432
+ display: flex;
433
+ flex-wrap: wrap;
434
+ align-items: center;
435
+ justify-content: space-between;
436
+ gap: 8px 12px;
437
+ margin-bottom: 10px;
438
+ }
439
+
440
+ .card-title {
441
+ font-size: 16px;
442
+ font-weight: 700;
443
+ }
444
+
445
+ .detail {
446
+ margin-top: 12px;
447
+ }
448
+
449
+ .detail code {
450
+ display: block;
451
+ white-space: normal;
452
+ overflow-wrap: anywhere;
453
+ padding: 8px 12px;
454
+ border-color: var(--border);
455
+ border-radius: var(--radius-sm);
456
+ background: var(--bg-deep);
457
+ color: var(--text);
458
+ font-size: 13px;
459
+ }
460
+
461
+ .pill {
462
+ display: inline-flex;
463
+ align-items: center;
464
+ gap: 6px;
465
+ padding: 3px 10px;
466
+ border: 1px solid var(--border-soft);
467
+ border-radius: var(--radius-pill);
468
+ font: 600 12px/1.4 var(--font-mono);
469
+ letter-spacing: .02em;
470
+ white-space: nowrap;
471
+ }
472
+
473
+ .pill-accent {
474
+ border-color: #f095c84d;
475
+ background: #f095c81f;
476
+ color: var(--accent-soft);
477
+ }
478
+
479
+ .pill-muted {
480
+ background: #ffffff0a;
481
+ color: var(--text-muted);
482
+ }
483
+
484
+ /* Plan steps */
485
+
486
+ .plan-steps,
487
+ .next-steps {
488
+ margin: 0;
489
+ padding: 0;
490
+ list-style: none;
491
+ counter-reset: item;
492
+ }
493
+
494
+ .plan-steps li,
495
+ .next-steps li {
496
+ display: flex;
497
+ align-items: flex-start;
498
+ gap: 14px;
499
+ padding: 12px 0;
500
+ border-bottom: 1px solid var(--border-soft);
501
+ counter-increment: item;
502
+ }
503
+
504
+ .plan-steps li:last-child,
505
+ .next-steps li:last-child {
506
+ border-bottom: 0;
507
+ }
508
+
509
+ .plan-steps li::before,
510
+ .next-steps li::before {
511
+ content: counter(item, decimal-leading-zero);
512
+ display: inline-grid;
513
+ flex: none;
514
+ place-items: center;
515
+ width: 32px;
516
+ height: 26px;
517
+ border: 1px solid #f095c84d;
518
+ border-radius: 6px;
519
+ background: #f095c812;
520
+ color: var(--accent);
521
+ font: 600 12px/1 var(--font-mono);
522
+ }
523
+
524
+ .plan-step-text {
525
+ padding-top: 1px;
526
+ }
527
+
528
+ /* Consent */
529
+
530
+ .channel {
531
+ display: grid;
532
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
533
+ gap: 12px;
534
+ margin: 0 0 8px;
535
+ padding: 0;
536
+ border: 0;
537
+ }
538
+
539
+ .channel > legend {
540
+ grid-column: 1 / -1;
541
+ padding: 0;
542
+ }
543
+
544
+ .channel-option {
545
+ display: grid;
546
+ grid-template-columns: auto 1fr;
547
+ column-gap: 12px;
548
+ padding: 16px 18px;
549
+ border: 1px solid var(--border);
550
+ border-radius: var(--radius-md);
551
+ background: var(--surface-1);
552
+ transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
553
+ }
554
+
555
+ .channel-option:has(.channel-input:checked) {
556
+ border-color: #f095c88c;
557
+ box-shadow: 0 0 0 3px #f095c81a;
558
+ }
559
+
560
+ .channel-option .hint {
561
+ grid-column: 2;
562
+ }
563
+
564
+ .channel-input {
565
+ width: 20px;
566
+ height: 20px;
567
+ margin: 1px 0 0;
568
+ accent-color: var(--accent);
569
+ cursor: pointer;
570
+ }
571
+
572
+ .channel-label {
573
+ font-weight: 600;
574
+ cursor: pointer;
575
+ }
576
+
577
+ .consent {
578
+ display: flex;
579
+ align-items: flex-start;
580
+ gap: 14px;
581
+ margin-top: 32px;
582
+ padding: 18px 20px;
583
+ border: 1px solid var(--border);
584
+ border-radius: var(--radius-md);
585
+ background: var(--surface-1);
586
+ transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
587
+ }
588
+
589
+ .consent:has(.consent-input:checked) {
590
+ border-color: #f095c88c;
591
+ box-shadow: 0 0 0 3px #f095c81a;
592
+ }
593
+
594
+ .consent:has(.consent-input[aria-invalid="true"]) {
595
+ border-color: var(--error);
596
+ box-shadow: 0 0 0 3px #ff718f1f;
597
+ }
598
+
599
+ .consent-input {
600
+ flex: none;
601
+ width: 22px;
602
+ height: 22px;
603
+ margin: 1px 0 0;
604
+ accent-color: var(--accent);
605
+ cursor: pointer;
606
+ }
607
+
608
+ .consent-label {
609
+ display: block;
610
+ font-weight: 600;
611
+ cursor: pointer;
612
+ }
613
+
614
+ .hint {
615
+ margin: 4px 0 0;
616
+ color: var(--text-muted);
617
+ font-size: 14px;
618
+ }
619
+
620
+ /* Buttons */
621
+
622
+ .actions {
623
+ display: flex;
624
+ flex-wrap: wrap;
625
+ align-items: center;
626
+ gap: 12px;
627
+ margin-top: 28px;
628
+ }
629
+
630
+ .button {
631
+ display: inline-flex;
632
+ align-items: center;
633
+ justify-content: center;
634
+ gap: 8px;
635
+ min-height: 46px;
636
+ padding: 13px 24px;
637
+ border: 1px solid transparent;
638
+ border-radius: var(--radius-sm);
639
+ font: 600 15px/1.2 var(--font-sans);
640
+ cursor: pointer;
641
+ transition: transform .2s var(--ease), box-shadow .2s var(--ease), border-color .2s var(--ease), background-color .2s var(--ease),
642
+ color .2s var(--ease);
643
+ }
644
+
645
+ .button-primary {
646
+ background: var(--accent);
647
+ color: var(--bg);
648
+ box-shadow: var(--glow);
649
+ }
650
+
651
+ .button-primary:hover:not(:disabled) {
652
+ transform: translateY(-2px);
653
+ box-shadow: var(--glow-hover);
654
+ }
655
+
656
+ .button-primary:active:not(:disabled) {
657
+ transform: translateY(0);
658
+ background: var(--accent-strong);
659
+ }
660
+
661
+ .button-secondary,
662
+ .button-ghost {
663
+ background: transparent;
664
+ color: var(--text);
665
+ border-color: var(--border);
666
+ }
667
+
668
+ .button-ghost {
669
+ border-color: var(--border-soft);
670
+ color: var(--text-muted);
671
+ }
672
+
673
+ .button-secondary:hover:not(:disabled),
674
+ .button-ghost:hover:not(:disabled) {
675
+ border-color: var(--accent);
676
+ color: var(--accent-soft);
677
+ }
678
+
679
+ .button:disabled {
680
+ opacity: .55;
681
+ cursor: not-allowed;
682
+ box-shadow: none;
683
+ }
684
+
685
+ /* Alerts */
686
+
687
+ .alert-region:not(:empty) {
688
+ margin-bottom: 16px;
689
+ }
690
+
691
+ .alert {
692
+ padding: 16px 20px;
693
+ border: 1px solid var(--border);
694
+ border-left: 3px solid var(--info);
695
+ border-radius: var(--radius-md);
696
+ background: var(--surface);
697
+ }
698
+
699
+ .alert .actions {
700
+ margin-top: 14px;
701
+ }
702
+
703
+ .alert-title {
704
+ margin: 0 0 4px;
705
+ font-weight: 700;
706
+ }
707
+
708
+ .alert-success {
709
+ border-left-color: var(--success);
710
+ }
711
+
712
+ .alert-success .alert-title {
713
+ color: var(--success);
714
+ }
715
+
716
+ .alert-warning {
717
+ border-left-color: var(--warning);
718
+ }
719
+
720
+ .alert-warning .alert-title {
721
+ color: var(--warning);
722
+ }
723
+
724
+ .alert-error {
725
+ border-left-color: var(--error);
726
+ box-shadow: 0 10px 30px #ff718f14;
727
+ }
728
+
729
+ .alert-error .alert-title {
730
+ color: var(--error);
731
+ }
732
+
733
+ .panel > .alert {
734
+ margin-top: 28px;
735
+ }
736
+
737
+ .blockers {
738
+ display: grid;
739
+ gap: 12px;
740
+ margin: 28px 0 0;
741
+ padding: 0;
742
+ list-style: none;
743
+ }
744
+
745
+ .blockers .alert-title {
746
+ font-size: 16px;
747
+ }
748
+
749
+ .meta {
750
+ color: var(--text-muted);
751
+ font-size: 13px;
752
+ }
753
+
754
+ /* Progress */
755
+
756
+ .progress {
757
+ margin-top: 32px;
758
+ padding: 18px 20px 20px;
759
+ border: 1px solid var(--border);
760
+ border-radius: var(--radius-md);
761
+ background: var(--surface);
762
+ }
763
+
764
+ .progress-head {
765
+ display: flex;
766
+ align-items: baseline;
767
+ justify-content: space-between;
768
+ gap: 12px;
769
+ margin-bottom: 12px;
770
+ }
771
+
772
+ .progress-label {
773
+ color: var(--text-muted);
774
+ font: 600 12px/1.4 var(--font-mono);
775
+ letter-spacing: .12em;
776
+ text-transform: uppercase;
777
+ }
778
+
779
+ .progress-count {
780
+ font: 600 14px/1.4 var(--font-mono);
781
+ }
782
+
783
+ progress {
784
+ display: block;
785
+ width: 100%;
786
+ height: 10px;
787
+ border: 0;
788
+ border-radius: var(--radius-pill);
789
+ overflow: hidden;
790
+ background: #ffffff0d;
791
+ -webkit-appearance: none;
792
+ appearance: none;
793
+ }
794
+
795
+ progress::-webkit-progress-bar {
796
+ border-radius: var(--radius-pill);
797
+ background: #ffffff0d;
798
+ }
799
+
800
+ progress::-webkit-progress-value {
801
+ border-radius: var(--radius-pill);
802
+ background: linear-gradient(90deg, var(--info), var(--accent-soft));
803
+ box-shadow: 0 0 16px #ffb1dd66;
804
+ transition: inline-size .4s var(--ease);
805
+ }
806
+
807
+ progress::-moz-progress-bar {
808
+ border-radius: var(--radius-pill);
809
+ background: linear-gradient(90deg, var(--info), var(--accent-soft));
810
+ }
811
+
812
+ .progress-body {
813
+ display: grid;
814
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
815
+ gap: 24px;
816
+ align-items: start;
817
+ margin-top: 8px;
818
+ }
819
+
820
+ .progress-body .block {
821
+ margin-top: 24px;
822
+ }
823
+
824
+ .steps {
825
+ display: grid;
826
+ gap: 4px;
827
+ margin: 0;
828
+ padding: 0;
829
+ list-style: none;
830
+ }
831
+
832
+ .step {
833
+ display: grid;
834
+ grid-template-columns: 26px 1fr auto;
835
+ align-items: center;
836
+ gap: 12px;
837
+ padding: 9px 12px;
838
+ border: 1px solid transparent;
839
+ border-radius: 10px;
840
+ }
841
+
842
+ .step-icon {
843
+ display: grid;
844
+ place-items: center;
845
+ width: 24px;
846
+ height: 24px;
847
+ border: 1.5px solid var(--border);
848
+ border-radius: 50%;
849
+ font: 700 12px/1 var(--font-mono);
850
+ }
851
+
852
+ .step-label {
853
+ min-width: 0;
854
+ font-size: 15px;
855
+ }
856
+
857
+ .step-status {
858
+ color: var(--text-muted);
859
+ font: 600 11px/1.4 var(--font-mono);
860
+ letter-spacing: .08em;
861
+ text-transform: uppercase;
862
+ white-space: nowrap;
863
+ }
864
+
865
+ .step-done .step-icon {
866
+ border-color: #b4e7c799;
867
+ background: #b4e7c733;
868
+ color: var(--success);
869
+ }
870
+
871
+ .step-done .step-status {
872
+ color: var(--success);
873
+ }
874
+
875
+ .step-running {
876
+ border-color: #f095c833;
877
+ background: #f095c80f;
878
+ }
879
+
880
+ .step-running .step-icon {
881
+ border-color: #ffffff1f;
882
+ border-top-color: var(--accent);
883
+ animation: spin .9s linear infinite;
884
+ }
885
+
886
+ .step-running .step-status {
887
+ color: var(--accent-soft);
888
+ }
889
+
890
+ .step-failed {
891
+ border-color: #ff718f40;
892
+ background: #ff718f0f;
893
+ }
894
+
895
+ .step-failed .step-icon {
896
+ border-color: #ff718f80;
897
+ background: #ff718f1f;
898
+ color: var(--error);
899
+ }
900
+
901
+ .step-failed .step-status {
902
+ color: var(--error);
903
+ }
904
+
905
+ .step-blocked .step-icon {
906
+ border-color: #e0c27a80;
907
+ background: #e0c27a1f;
908
+ color: var(--warning);
909
+ }
910
+
911
+ .step-blocked .step-status {
912
+ color: var(--warning);
913
+ }
914
+
915
+ .step-pending .step-icon {
916
+ border-style: dashed;
917
+ border-color: var(--text-faint);
918
+ }
919
+
920
+ .step-pending .step-label,
921
+ .step-skipped .step-label {
922
+ color: var(--text-muted);
923
+ }
924
+
925
+ .step-skipped .step-icon {
926
+ color: var(--text-muted);
927
+ }
928
+
929
+ /* Terminal-style log */
930
+
931
+ .log {
932
+ overflow: hidden;
933
+ border: 1px solid var(--border);
934
+ border-radius: var(--radius-md);
935
+ background: var(--bg-deep);
936
+ box-shadow: inset 0 1px 0 #ffffff0a;
937
+ }
938
+
939
+ .progress-body > .log {
940
+ margin-top: 24px;
941
+ }
942
+
943
+ .log-head {
944
+ display: flex;
945
+ align-items: center;
946
+ gap: 12px;
947
+ padding: 10px 14px;
948
+ border-bottom: 1px solid var(--border-soft);
949
+ background: #ffffff06;
950
+ }
951
+
952
+ .log-dots {
953
+ display: inline-flex;
954
+ gap: 6px;
955
+ }
956
+
957
+ .log-dots span {
958
+ width: 10px;
959
+ height: 10px;
960
+ border-radius: 50%;
961
+ background: #ff718f8c;
962
+ }
963
+
964
+ .log-dots span:nth-child(2) {
965
+ background: #e0c27a8c;
966
+ }
967
+
968
+ .log-dots span:nth-child(3) {
969
+ background: #b4e7c78c;
970
+ }
971
+
972
+ .log-title {
973
+ color: var(--text-muted);
974
+ font: 600 12px/1.4 var(--font-mono);
975
+ letter-spacing: .12em;
976
+ text-transform: uppercase;
977
+ }
978
+
979
+ .log-body {
980
+ max-height: 360px;
981
+ overflow: auto;
982
+ padding: 12px 14px 14px;
983
+ font: 13px/1.7 var(--font-mono);
984
+ }
985
+
986
+ .log-lines {
987
+ margin: 0;
988
+ padding: 0;
989
+ list-style: none;
990
+ }
991
+
992
+ .log-line {
993
+ display: grid;
994
+ grid-template-columns: 4ch 8ch 1fr;
995
+ gap: 0 1ch;
996
+ }
997
+
998
+ .log-seq {
999
+ color: var(--text-muted);
1000
+ }
1001
+
1002
+ .log-status {
1003
+ color: var(--info);
1004
+ }
1005
+
1006
+ .log-done .log-status {
1007
+ color: var(--success);
1008
+ }
1009
+
1010
+ .log-failed .log-status {
1011
+ color: var(--error);
1012
+ }
1013
+
1014
+ .log-blocked .log-status {
1015
+ color: var(--warning);
1016
+ }
1017
+
1018
+ .log-step {
1019
+ color: var(--text);
1020
+ overflow-wrap: anywhere;
1021
+ }
1022
+
1023
+ .log-reason {
1024
+ grid-column: 3;
1025
+ color: var(--text-muted);
1026
+ }
1027
+
1028
+ .log-empty {
1029
+ margin: 0;
1030
+ color: var(--text-muted);
1031
+ }
1032
+
1033
+ .log-empty::after {
1034
+ content: "▍";
1035
+ margin-left: 4px;
1036
+ color: var(--accent);
1037
+ animation: blink 1.1s steps(1) infinite;
1038
+ }
1039
+
1040
+ [hidden] {
1041
+ display: none !important;
1042
+ }
1043
+
1044
+ /* Outcome */
1045
+
1046
+ .command {
1047
+ display: flex;
1048
+ align-items: center;
1049
+ gap: 12px;
1050
+ margin-top: 16px;
1051
+ padding: 12px 12px 12px 18px;
1052
+ border: 1px solid var(--border);
1053
+ border-radius: var(--radius-md);
1054
+ background: var(--bg-deep);
1055
+ font: 16px/1.4 var(--font-mono);
1056
+ }
1057
+
1058
+ .command-prompt {
1059
+ color: var(--accent);
1060
+ }
1061
+
1062
+ .command .command-text {
1063
+ padding: 0;
1064
+ border: 0;
1065
+ background: none;
1066
+ color: var(--text);
1067
+ font-size: 16px;
1068
+ }
1069
+
1070
+ .command .button {
1071
+ min-height: 36px;
1072
+ margin-left: auto;
1073
+ padding: 6px 14px;
1074
+ font-size: 14px;
1075
+ }
1076
+
1077
+ .notes,
1078
+ .facts {
1079
+ margin: 20px 0 0;
1080
+ padding-left: 20px;
1081
+ color: var(--text-muted);
1082
+ font-size: 15px;
1083
+ }
1084
+
1085
+ .facts {
1086
+ padding: 0;
1087
+ list-style: none;
1088
+ }
1089
+
1090
+ .completed {
1091
+ margin-top: 24px;
1092
+ padding-top: 16px;
1093
+ border-top: 1px solid var(--border-soft);
1094
+ }
1095
+
1096
+ .completed summary {
1097
+ width: fit-content;
1098
+ font-weight: 600;
1099
+ cursor: pointer;
1100
+ }
1101
+
1102
+ .completed ul {
1103
+ margin: 12px 0 0;
1104
+ padding: 0;
1105
+ list-style: none;
1106
+ color: var(--text-muted);
1107
+ font-size: 15px;
1108
+ }
1109
+
1110
+ .completed ul [aria-hidden="true"] {
1111
+ color: var(--success);
1112
+ }
1113
+
1114
+ .completed .log {
1115
+ margin-top: 12px;
1116
+ }
1117
+
1118
+ /* Loading */
1119
+
1120
+ .loader {
1121
+ display: flex;
1122
+ gap: 8px;
1123
+ margin-top: 32px;
1124
+ }
1125
+
1126
+ .loader span {
1127
+ width: 10px;
1128
+ height: 10px;
1129
+ border-radius: 50%;
1130
+ background: var(--accent);
1131
+ animation: pulse 1.2s var(--ease) infinite;
1132
+ }
1133
+
1134
+ .loader span:nth-child(2) {
1135
+ animation-delay: .15s;
1136
+ }
1137
+
1138
+ .loader span:nth-child(3) {
1139
+ animation-delay: .3s;
1140
+ }
1141
+
1142
+ noscript .alert {
1143
+ margin-top: 24px;
1144
+ }
1145
+
1146
+ /* Footer */
1147
+
1148
+ .footer {
1149
+ padding: 20px 0 32px;
1150
+ border-top: 1px solid var(--border-soft);
1151
+ color: var(--text-muted);
1152
+ font-size: 13px;
1153
+ }
1154
+
1155
+ .footer strong {
1156
+ color: var(--text);
1157
+ font-weight: 600;
1158
+ }
1159
+
1160
+ /* Motion */
1161
+
1162
+ @keyframes rise {
1163
+ from {
1164
+ opacity: 0;
1165
+ transform: translateY(8px);
1166
+ }
1167
+ to {
1168
+ opacity: 1;
1169
+ transform: none;
1170
+ }
1171
+ }
1172
+
1173
+ @keyframes spin {
1174
+ to {
1175
+ transform: rotate(360deg);
1176
+ }
1177
+ }
1178
+
1179
+ @keyframes pulse {
1180
+ 0%,
1181
+ 100% {
1182
+ opacity: .25;
1183
+ transform: scale(.8);
1184
+ }
1185
+ 50% {
1186
+ opacity: 1;
1187
+ transform: scale(1);
1188
+ }
1189
+ }
1190
+
1191
+ @keyframes blink {
1192
+ 50% {
1193
+ opacity: 0;
1194
+ }
1195
+ }
1196
+
1197
+ @media (prefers-reduced-motion: reduce) {
1198
+ *,
1199
+ *::before,
1200
+ *::after {
1201
+ animation-duration: .001ms !important;
1202
+ animation-iteration-count: 1 !important;
1203
+ transition-duration: .001ms !important;
1204
+ scroll-behavior: auto !important;
1205
+ }
1206
+
1207
+ .button-primary:hover:not(:disabled) {
1208
+ transform: none;
1209
+ }
1210
+
1211
+ .loader span {
1212
+ opacity: .7;
1213
+ }
1214
+ }
1215
+
1216
+ /* Small screens */
1217
+
1218
+ @media (max-width: 600px) {
1219
+ .topbar {
1220
+ padding-top: 16px;
1221
+ }
1222
+
1223
+ .topbar-note {
1224
+ padding: 4px 10px;
1225
+ font-size: 11px;
1226
+ }
1227
+
1228
+ .stage {
1229
+ gap: 6px;
1230
+ }
1231
+
1232
+ /* Visually hidden, still read: only the current stage shows its name. */
1233
+ .stage:not(.stage-current) .stage-label {
1234
+ position: absolute;
1235
+ width: 1px;
1236
+ height: 1px;
1237
+ overflow: hidden;
1238
+ clip: rect(0 0 0 0);
1239
+ white-space: nowrap;
1240
+ }
1241
+
1242
+ .actions .button {
1243
+ flex: 1 1 100%;
1244
+ }
1245
+
1246
+ .step {
1247
+ gap: 10px;
1248
+ padding: 8px 10px;
1249
+ }
1250
+
1251
+ .step-label {
1252
+ font-size: 14px;
1253
+ }
1254
+
1255
+ .step-status {
1256
+ font-size: 10px;
1257
+ letter-spacing: .06em;
1258
+ }
1259
+
1260
+ .command .button {
1261
+ flex: none;
1262
+ }
1263
+ }
1264
+
1265
+ /* Windows High Contrast and other forced palettes */
1266
+
1267
+ @media (forced-colors: active) {
1268
+ h1 {
1269
+ background: none;
1270
+ -webkit-text-fill-color: currentColor;
1271
+ }
1272
+
1273
+ .button,
1274
+ .card,
1275
+ .alert,
1276
+ .panel {
1277
+ border: 1px solid CanvasText;
1278
+ }
1279
+ }