@tea-agent/loop-agent 0.36.4-beta.0 → 0.38.0-next.1

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 (126) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +56 -67
  3. package/README.md +12 -0
  4. package/dist/build-stamp.json +3 -3
  5. package/dist/infrastructure/harness/atomic-write.js +1 -2
  6. package/dist/task/contract/project.js +4 -0
  7. package/dist/task/frontend-project-capability.js +12 -162
  8. package/dist/task/source-prepare/completeness.js +36 -0
  9. package/dist/task/source-prepare/parse-intent.js +67 -11
  10. package/dist/task/source-prepare/prepare.js +102 -5
  11. package/dist/worker/console/chat/chat-event-store.js +91 -0
  12. package/dist/worker/console/chat/pi-runtime.js +25 -0
  13. package/dist/worker/console/chat/routes.js +7 -2
  14. package/dist/worker/console/chat/semantic-activity.js +7 -1
  15. package/dist/worker/console/chat/session-store.js +6 -1
  16. package/dist/worker/console/chat/turn-process.js +119 -12
  17. package/dist/worker/console/operator-actions.js +18 -1
  18. package/dist/worker/console/static/assets/abnfDiagram-N423BO3Z-DSvF6RXQ.js +1 -0
  19. package/dist/worker/console/static/assets/arc-DuI4ogtJ.js +1 -0
  20. package/dist/worker/console/static/assets/architectureDiagram-T3A2C74G-DdBbgD4y.js +36 -0
  21. package/dist/worker/console/static/assets/blockDiagram-VBNYF7ZC-xQC2HELm.js +132 -0
  22. package/dist/worker/console/static/assets/c4Diagram-5PPSVZJV-DPMSgwIZ.js +10 -0
  23. package/dist/worker/console/static/assets/channel-DLVz9TYW.js +1 -0
  24. package/dist/worker/console/static/assets/chunk-2GRJ4B5K-WTEKTxin.js +1 -0
  25. package/dist/worker/console/static/assets/chunk-2Q5K7J3B-B6vZ0Pv_.js +1 -0
  26. package/dist/worker/console/static/assets/chunk-5RXB4S5H-BrerNAix.js +231 -0
  27. package/dist/worker/console/static/assets/chunk-5VM5RSS4-D_ch2aaI.js +15 -0
  28. package/dist/worker/console/static/assets/chunk-6Q2QTUOP-VvfacNrq.js +88 -0
  29. package/dist/worker/console/static/assets/chunk-GF5L2VYU-B-uGFIg2.js +206 -0
  30. package/dist/worker/console/static/assets/chunk-JWPE2WC7-BlysCtod.js +1 -0
  31. package/dist/worker/console/static/assets/chunk-KBJHAD2P-BjAUAfcT.js +1 -0
  32. package/dist/worker/console/static/assets/chunk-RYQCIY6F-BeZnBmb-.js +1 -0
  33. package/dist/worker/console/static/assets/chunk-XXDRQBXY-Bbfe3UJG.js +1 -0
  34. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BeAuGcO9.js +1 -0
  35. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BeAuGcO9.js +1 -0
  36. package/dist/worker/console/static/assets/cose-bilkent-JH36ORCC-BKJQnYVM.js +1 -0
  37. package/dist/worker/console/static/assets/cynefin-VYW2F7L2-B1wtI3hU.js +166 -0
  38. package/dist/worker/console/static/assets/cynefinDiagram-MW4NZA55-DCF6DBSu.js +62 -0
  39. package/dist/worker/console/static/assets/cytoscape.esm-yzknjiTM.js +321 -0
  40. package/dist/worker/console/static/assets/dagre-VZM6K2ZE-BJyNGRlP.js +4 -0
  41. package/dist/worker/console/static/assets/defaultLocale-DX6XiGOO.js +1 -0
  42. package/dist/worker/console/static/assets/diagram-7IWD3JNH-B7j1-VsZ.js +30 -0
  43. package/dist/worker/console/static/assets/diagram-B4RE2ZJO-BREJ140a.js +3 -0
  44. package/dist/worker/console/static/assets/diagram-LBJQPF4R-CDPHmHGH.js +24 -0
  45. package/dist/worker/console/static/assets/diagram-Q27KOJAE-BtZLrez1.js +24 -0
  46. package/dist/worker/console/static/assets/diagram-UB23O5K3-mzybu8oU.js +41 -0
  47. package/dist/worker/console/static/assets/ebnfDiagram-BXEA7PRR-Dk3I2uO6.js +1 -0
  48. package/dist/worker/console/static/assets/erDiagram-JOGREHBK-BT97u_tQ.js +85 -0
  49. package/dist/worker/console/static/assets/flowDiagram-UKHOOZJN-CMOtYzui.js +156 -0
  50. package/dist/worker/console/static/assets/ganttDiagram-PKOTCBZU-DiNydkuY.js +292 -0
  51. package/dist/worker/console/static/assets/gitGraphDiagram-DS77QQ5N-Cwt6fLkl.js +106 -0
  52. package/dist/worker/console/static/assets/graph-DOmOIIwC.js +1 -0
  53. package/dist/worker/console/static/assets/index-DQxiso1w.js +325 -0
  54. package/dist/worker/console/static/assets/index-_j0Hzo69.css +1 -0
  55. package/dist/worker/console/static/assets/infoDiagram-6WML65LV-AsGIGKKB.js +2 -0
  56. package/dist/worker/console/static/assets/init-Gi6I4Gst.js +1 -0
  57. package/dist/worker/console/static/assets/ishikawaDiagram-WSZJBQD7-BL8ITZh3.js +70 -0
  58. package/dist/worker/console/static/assets/journeyDiagram-NVQOT4AX-VPKAUX8M.js +139 -0
  59. package/dist/worker/console/static/assets/kanban-definition-27J2QSJJ-BL56hfGp.js +89 -0
  60. package/dist/worker/console/static/assets/layout-D-LzfAck.js +1 -0
  61. package/dist/worker/console/static/assets/linear-BmSG3nIZ.js +1 -0
  62. package/dist/worker/console/static/assets/map-DxJ2ADlA.js +1 -0
  63. package/dist/worker/console/static/assets/mermaid.core-DWGK9kwP.js +308 -0
  64. package/dist/worker/console/static/assets/mindmap-definition-FAOFIHXS--vvKLjo0.js +96 -0
  65. package/dist/worker/console/static/assets/ordinal-Cboi1Yqb.js +1 -0
  66. package/dist/worker/console/static/assets/pegDiagram-VL7TDLO6-B41mxb2-.js +1 -0
  67. package/dist/worker/console/static/assets/pieDiagram-7S7Q4E2Y-DTlu77sw.js +39 -0
  68. package/dist/worker/console/static/assets/quadrantDiagram-CIZ2JOQS-Bk5A7alv.js +7 -0
  69. package/dist/worker/console/static/assets/railroadDiagram-AXF67PYL-Csf9jzQy.js +1 -0
  70. package/dist/worker/console/static/assets/requirementDiagram-LRYGKXZP-CeptoSNx.js +84 -0
  71. package/dist/worker/console/static/assets/sankeyDiagram-W5VNT64P-A-DLCLer.js +40 -0
  72. package/dist/worker/console/static/assets/sequenceDiagram-SI44F4Z6-22VbPdOI.js +162 -0
  73. package/dist/worker/console/static/assets/sizeCapture-X5ZJPWSS-DWvAyBC9.js +1 -0
  74. package/dist/worker/console/static/assets/stateDiagram-OKZ733FA-qICZ75yT.js +1 -0
  75. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DzKvfHTX.js +1 -0
  76. package/dist/worker/console/static/assets/swimlanes-SLNWSIFB-xi7lcMyp.js +2 -0
  77. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Cxqr_qM1.js +8 -0
  78. package/dist/worker/console/static/assets/timeline-definition-Z64GVDOM-Bu6Nl6O2.js +120 -0
  79. package/dist/worker/console/static/assets/vennDiagram-T6HMQDX7-BzMz4Bn9.js +34 -0
  80. package/dist/worker/console/static/assets/wardleyDiagram-T6FBY63Y-CxaJnzc5.js +78 -0
  81. package/dist/worker/console/static/assets/xychartDiagram-ELKLHX3M-5JK-omQK.js +7 -0
  82. package/dist/worker/console/static/fonts/katex/KaTeX_AMS-Regular.woff2 +0 -0
  83. package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Bold.woff2 +0 -0
  84. package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Regular.woff2 +0 -0
  85. package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Bold.woff2 +0 -0
  86. package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Regular.woff2 +0 -0
  87. package/dist/worker/console/static/fonts/katex/KaTeX_Main-Bold.woff2 +0 -0
  88. package/dist/worker/console/static/fonts/katex/KaTeX_Main-BoldItalic.woff2 +0 -0
  89. package/dist/worker/console/static/fonts/katex/KaTeX_Main-Italic.woff2 +0 -0
  90. package/dist/worker/console/static/fonts/katex/KaTeX_Main-Regular.woff2 +0 -0
  91. package/dist/worker/console/static/fonts/katex/KaTeX_Math-BoldItalic.woff2 +0 -0
  92. package/dist/worker/console/static/fonts/katex/KaTeX_Math-Italic.woff2 +0 -0
  93. package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Bold.woff2 +0 -0
  94. package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Italic.woff2 +0 -0
  95. package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Regular.woff2 +0 -0
  96. package/dist/worker/console/static/fonts/katex/KaTeX_Script-Regular.woff2 +0 -0
  97. package/dist/worker/console/static/fonts/katex/KaTeX_Size1-Regular.woff2 +0 -0
  98. package/dist/worker/console/static/fonts/katex/KaTeX_Size2-Regular.woff2 +0 -0
  99. package/dist/worker/console/static/fonts/katex/KaTeX_Size3-Regular.woff2 +0 -0
  100. package/dist/worker/console/static/fonts/katex/KaTeX_Size4-Regular.woff2 +0 -0
  101. package/dist/worker/console/static/fonts/katex/KaTeX_Typewriter-Regular.woff2 +0 -0
  102. package/dist/worker/console/static/index.html +2 -2
  103. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +25 -0
  104. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +37 -2
  105. package/dist/worker/observe/static/operator-chrome.js +4 -2
  106. package/dist/workflows/dag/failure-routing.js +4 -9
  107. package/dist/workflows/dag/frontend-prewrite-gate.js +8 -37
  108. package/dist/workflows/dag/init-hybrid.js +4 -73
  109. package/dist/workflows/dag/lifecycle.js +0 -4
  110. package/dist/workflows/dag/node-execution.js +6 -16
  111. package/dist/workflows/dag/report.js +0 -6
  112. package/dist/workflows/dag/retry-policy.js +0 -11
  113. package/dist/workflows/dag/runner.js +19 -3
  114. package/dist/workflows/dag/types.js +0 -2
  115. package/dist/workflows/dag/validate.js +2 -7
  116. package/docs/README.md +2 -0
  117. package/docs/operations/README.md +2 -1
  118. package/docs/templates/frontend-design-contract.md +14 -34
  119. package/docs/templates/frontend-task-constraints.md +13 -33
  120. package/docs/templates/frontend-task-requirement.md +20 -54
  121. package/package.json +6 -1
  122. package/skills/loop-agent/references/command-reference.md +4 -1
  123. package/skills/loop-agent/references/harness-policy.md +1 -1
  124. package/skills/loop-agent/references/task-workflow.md +1 -1
  125. package/dist/worker/console/static/assets/index-D83DYAFG.css +0 -1
  126. package/dist/worker/console/static/assets/index-IXm7oYjL.js +0 -59
@@ -1,104 +1,70 @@
1
1
  # 前端任务需求模板
2
2
 
3
- 本模板只承载**通用编写协议 + 三要素 + fail-closed 规则**,不包含任何具体业务组件名、项目专属路径或项目专属命令。填写时每一节都要给出「**要写什么** / **DAG 如何消费** / **缺失/冲突时 fail-closed**」三要素;缺节、空占位或与验收标准冲突时必须阻塞,不得由模型猜测补写。
4
-
5
3
  ## 用户目标
6
4
 
7
- - **要写什么**:以用户视角写清本次要交付的前端行为与用户价值——用户能完成什么、为什么需要它、成功后的可观察结果。必须可验证(可被界面状态或交互断言覆盖),不得只写技术动作或孤立关键词。
8
- - **DAG 如何消费**:`frontend-contract-pi` 把它映射为 Scope 与 `requirements[].expectedOutcome`,`frontend-plan-pi` 据它安排实现步骤并映射验收标准。
9
- - **缺失/冲突时 fail-closed**:缺失用户目标,或用户目标与验收标准互相矛盾时阻塞(`request-revision`/blocked),不得猜测补写或改写为技术实现描述。
5
+ TODO
10
6
 
11
7
  ## 目标页面/组件/路由
12
8
 
13
- - **要写什么**:明确本次交付涉及的目标路由、页面入口与组件范围,逐条列出路径/名称与职责边界;相关但超出范围的页面写清「不做」。
14
- - **DAG 如何消费**:对齐 `docs/runtime/frontend-implementation-workflow.md` §「需求.md 应包含」的「目标路由/页面/组件」,`frontend-contract-pi` 据它确定 `targets.files` / `targets.routes`,`frontend-plan-pi` 据它划定 writeSet 与实现步骤。
15
- - **缺失/冲突时 fail-closed**:无法确定目标路由/页面/组件,或范围与验收标准不一致时阻塞;只写泛化名词(如「页面」「组件」)而不给具体范围视为缺失。
9
+ TODO
16
10
 
17
11
  ## 用户流程
18
12
 
19
- - **要写什么**:写清端到端用户路径,从入口到结果,逐步列出触发动作、顺序与关键分支;涉及多页面/多状态时把每条路径分开写。
20
- - **DAG 如何消费**:`frontend-contract-pi` 据它抽取 `interactions[]`(每条带 `trigger` 与 `expectedBehavior`),`frontend-plan-pi` 据它安排组件/状态/交互实现步骤。
21
- - **缺失/冲突时 fail-closed**:缺少可执行的端到端路径、流程与验收标准冲突或关键分支未写时阻塞,不得只写「用户进入页面即可」。
13
+ TODO
22
14
 
23
15
  ## 必须状态
24
16
 
25
- 每个适用状态必须写清该状态的触发条件与预期界面表现;不适用状态必须写 `N/A` 并给出非空理由(对齐 runtime 的 `uiStates` / N/A state 规则)。
26
-
27
17
  ### loading
28
18
 
29
- - **要写什么**:loading 状态出现与结束的触发条件、展示内容(骨架/文案/禁用交互)与超时/失败转移。
30
- - **DAG 如何消费**:进入 implementation contract 的 `uiStates[]`(`name: "loading"`),`frontend-implement-pi` 按它实现,verify 用它的 `verificationTargetIds` 断言。
31
- - **缺失/冲突时 fail-closed**:适用但缺失预期行为时阻塞;不适用必须写 `N/A` 并给非空理由,只写 `N/A` 不带理由同样阻塞。
19
+ TODO
32
20
 
33
21
  ### empty
34
22
 
35
- - **要写什么**:无数据/无结果状态的触发条件与展示(空态文案/引导动作/是否可刷新)。
36
- - **DAG 如何消费**:进入 `uiStates[]`(`name: "empty"`),verify 断言空态展示与引导。
37
- - **缺失/冲突时 fail-closed**:适用但缺失预期行为、或与 success/error 展示冲突时阻塞;不适用写 `N/A` + 非空理由。
23
+ TODO
38
24
 
39
25
  ### error
40
26
 
41
- - **要写什么**:失败状态(请求失败/校验失败/权限失败)的触发条件、错误展示与可恢复动作。
42
- - **DAG 如何消费**:进入 `uiStates[]`(`name: "error"`),verify 断言错误展示与重试/回退行为。
43
- - **缺失/冲突时 fail-closed**:适用但缺失错误预期、或错误态会覆盖用户数据时阻塞;不适用写 `N/A` + 非空理由。
27
+ TODO
44
28
 
45
29
  ### success
46
30
 
47
- - **要写什么**:成功状态的触发条件与展示(数据呈现/确认反馈/后续入口)。
48
- - **DAG 如何消费**:进入 `uiStates[]`(`name: "success"`),verify 断言成功展示与验收标准对应。
49
- - **缺失/冲突时 fail-closed**:成功态与验收标准不一致、或缺失成功结果时阻塞;不适用写 `N/A` + 非空理由。
31
+ TODO
50
32
 
51
33
  ### disabled
52
34
 
53
- - **要写什么**:禁用/不可交互状态的触发条件(权限/前置未满足/进行中)与视觉/交互表现。
54
- - **DAG 如何消费**:进入 `uiStates[]`(`name: "disabled"`),verify 断言禁用态不会被误触。
55
- - **缺失/冲突时 fail-closed**:适用但缺失禁用条件、或禁用态与交互要求冲突时阻塞;不适用写 `N/A` + 非空理由。
35
+ TODO
56
36
 
57
37
  ## 目标运行环境
58
38
 
59
- 每个环境必须声明适用性;不适用环境写 `N/A` 并给非空理由。
60
-
61
39
  ### desktop
62
40
 
63
- - **要写什么**:desktop 视口下的适用性声明与关键布局/交互差异(断点、栅格、悬停等)。
64
- - **DAG 如何消费**:进入 contract 的 target runtime environment,`frontend-plan-pi` 据它决定响应式范围与样式策略。
65
- - **缺失/冲突时 fail-closed**:适用但缺失断点/布局说明,或与响应式要求冲突时阻塞;不适用写 `N/A` + 非空理由。
41
+ TODO
66
42
 
67
43
  ### mobile
68
44
 
69
- - **要写什么**:mobile 视口下的适用性声明与触控/布局/安全区差异。
70
- - **DAG 如何消费**:进入 target runtime environment,`frontend-plan-pi` 据它决定响应式范围与组件策略。
71
- - **缺失/冲突时 fail-closed**:适用但缺失移动端表现,或与交互要求冲突时阻塞;不适用写 `N/A` + 非空理由。
45
+ TODO
72
46
 
73
47
  ### tablet
74
48
 
75
- - **要写什么**:tablet 视口下的适用性声明与中间断点表现。
76
- - **DAG 如何消费**:进入 target runtime environment,`frontend-plan-pi` 据它决定响应式策略。
77
- - **缺失/冲突时 fail-closed**:适用但缺失 tablet 表现时阻塞;不适用写 `N/A` + 非空理由。
49
+ TODO
78
50
 
79
51
  ## 交互要求
80
52
 
81
- - **要写什么**:逐条写清每个可交互元素的触发动作与预期行为(点击/输入/提交/滚动/键盘等),可被自动化断言覆盖。
82
- - **DAG 如何消费**:对齐 §「需求.md 应包含」的「交互要求」,`frontend-contract-pi` 抽取 `interactions[]`(`trigger` + `expectedBehavior`),verify 用行为命令断言。
83
- - **缺失/冲突时 fail-closed**:交互触发或预期行为缺失、与 UI 状态冲突、或不可自动化断言时阻塞,不得用「用户可正常操作」这类空话。
53
+ TODO
84
54
 
85
55
  ## 接口与 Mock 输入
86
56
 
87
- - **接口文档/schema — 要写什么**:引用接口文档或任务附件路径与版本,声明请求/响应 schema 来源。**DAG 如何消费**:`frontend-plan-pi` 据此选择 Mock 策略并冻结 endpoint/fixture 映射。**缺失/冲突时 fail-closed**:涉及接口但未引用文档或 schema 时阻塞,不得自行发明字段。
88
- - **endpoint、method、关键请求/响应字段 — 要写什么**:逐条列出 method、path 与关键字段及含义。**DAG 如何消费**:写入 `mockApi.endpoints[]`(method/path/fixture/consumer)。**缺失/冲突时 fail-closed**:字段缺失、与接口文档冲突或路径不合法时阻塞。
89
- - **是否允许依赖真实后端 — 要写什么**:明确声明真实后端当前是否可调用、是否允许生产/预览依赖真实请求。**DAG 如何消费**:决定 `mockApi.strategy` 是否可选 `not-needed`(需要真实/无远程证据)。**缺失/冲突时 fail-closed**:未声明后端就绪度却要求真实数据时阻塞,选 `not-needed` 却没有真实/无远程证据会被拦截。
90
- - **是否要求离线或独立行为验证 — 要写什么**:声明是否需要离线、本地预览或自动化行为验证(或两者都要)。**DAG 如何消费**:决定生成期 `frontendMock.verifyCommands` 与冻结命令集。**缺失/冲突时 fail-closed**:要求离线/自动化却未声明确定性验证命令时,生成期收敛为 `not-needed` 或直接 blocked,plan-revision 无法修复。
91
- - **success/empty/error/permission 状态 — 要写什么**:逐条声明接口各响应状态对应的 UI 表现。**DAG 如何消费**:与「必须状态」交叉校验,写入 `uiStates[]` 与 fixture 映射。**缺失/冲突时 fail-closed**:接口状态与 UI 状态不匹配或缺失 permission 分支时阻塞。
92
- - **后端当前就绪状态与 Real Integration Gap — 要写什么**:写清后端是否就绪、未就绪时保留的 Real Integration Gap 与后端就绪后的复验路径。**DAG 如何消费**:进入 `evidenceGaps[]` 与 closeout 的 `Real integration: pending`。**缺失/冲突时 fail-closed**:声称已联通真实接口却无真实证据时阻塞;未就绪却把 Mock 结果写成真实联调会被 review 拒绝。
57
+ - 接口文档/schema:TODO
58
+ - endpoint、method、关键请求/响应字段:TODO
59
+ - 是否允许依赖真实后端:TODO
60
+ - 是否要求离线或独立行为验证:TODO
61
+ - success/empty/error/permission 状态:TODO
62
+ - 后端当前就绪状态与 Real Integration Gap:TODO
93
63
 
94
64
  ## 验收标准
95
65
 
96
- - **要写什么**:逐条编号(如 `AC-001`)写出可独立断言的前端验收标准,每条都能映射到需求与一个 verification target(可逐条追踪)。
97
- - **DAG 如何消费**:`frontend-contract-pi` 生成 `requirements[].verificationTargetIds` 映射,`frontend-plan-pi` 把每条 AC 落到有序步骤与验证命令,verify 逐条断言。
98
- - **缺失/冲突时 fail-closed**:无验收标准、AC 无法映射到需求/验证目标、或 AC 与其它节冲突时阻塞,不得把「看起来能用」当验收。
66
+ TODO
99
67
 
100
68
  ## 非目标
101
69
 
102
- - **要写什么**:明确列出本次不做的前端范围/排除项(页面、组件、交互、浏览器/视觉/无障碍检查等)。
103
- - **DAG 如何消费**:`frontend-contract-pi` 记录为 Non-goals,`frontend-review-pi` 据它拒绝范围扩散。
104
- - **缺失/冲突时 fail-closed**:非目标与目标/验收标准冲突、或范围被悄悄扩大时阻塞;明确不做前端时也必须写入非目标。
70
+ TODO
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.36.4-beta.0",
3
+ "version": "0.38.0-next.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -65,6 +65,11 @@
65
65
  },
66
66
  "dependencies": {
67
67
  "commander": "^12.1.0",
68
+ "katex": "^0.16.47",
69
+ "mermaid": "^11.16.1",
70
+ "rehype-highlight": "^7.0.2",
71
+ "rehype-katex": "^7.0.1",
72
+ "remark-math": "^6.0.0",
68
73
  "semver": "^7.8.5",
69
74
  "yaml": "^2.9.0",
70
75
  "zod": "^3.25.76"
@@ -12,7 +12,7 @@
12
12
  loop-agent <command> ...
13
13
  ```
14
14
 
15
- 面向自举迭代和日常使用时,全局 CLI 应来自 npm 上已发布的安装包。首次安装或有意升级使用 `@latest`:
15
+ 面向自举迭代和日常使用时,全局 CLI 应来自 npm 上已发布的安装包。首次安装或有意升级使用 `@latest`(当前推荐稳定版;`@next` 仅用于测试 main 构建;`release-0.x` 固定某条版本线;正式 dogfood 用精确版本):
16
16
 
17
17
  ```bash
18
18
  npm install -g @tea-agent/loop-agent@latest
@@ -21,6 +21,8 @@ loop-agent --version
21
21
  loop-agent doctor
22
22
  ```
23
23
 
24
+ 发布渠道(当前真源:`docs/operations/version-and-release-management.md`):`latest` 是人工确认后的推荐稳定版本;`@next` 是 main 高频开发构建(仅测试);`@release-0.37` 是 0.37 版本线最新自动发布版本;正式 dogfood / 自举任务应安装精确版本(如 `@tea-agent/loop-agent@0.37.5`)而非浮动 tag。
25
+
24
26
  一次自举任务启动后不要中途升级控制器;记录 `npm list -g` 显示的实际版本。不要在 DAG 节点中反复用 `npx @latest` 拉取,也不要使用当前工作区的 `npm link` 或 `npm run dev` 作为控制器去修改 loop-agent 本仓库的 CLI、DAG runtime、executor、package metadata 或 build output。`npm run dev -- <command> ...` 只用于源码调试和聚焦 CLI 开发。
25
27
 
26
28
  发布包入口加载 `dist/cli.js`;开发入口加载 `src/cli.ts`。
@@ -325,6 +327,7 @@ loop-agent dag request-interrupt --run-id <run-id> --request-id <id> --target-op
325
327
  loop-agent dag rerun --run-id <run-id> --from-node <node-id> --plan [--json] # 从节点重跑资格预检(不执行)
326
328
  loop-agent dag rerun --run-id <run-id> --from-node <node-id> --plan-hash <sha256> --request-id <key> --reason "..." [--json] # 安全子图 continuation
327
329
  loop-agent dag rerun-task --run-id <run-id> --reason "..." --request-id <key> [--profile auto] [--task-id <id>] [--json] # standalone 完整任务重跑
330
+ loop-agent dag request-interrupt --run-id <run-id> --request-id <key> --target-operation-id <op-id> --reason-code <code> --reason "..." --expected-runner-pid <pid> --expected-runner-hostname <host> --expected-runner-started-at <ts> --expected-controller-fingerprint <fingerprint> # 协作式中止:经 Human Gate 登记 interrupt.json,runner 等当前节点安全收敛后再停调度,不直接 SIGKILL
328
331
  loop-agent dag reconcile-tasks --glob '<pattern>' # 仅报告的 task/run/artifact/verify drift audit
329
332
  loop-agent dag final-verification <task-id> # 生成 closeout DAG,closeout artifact 后再 final verify
330
333
  loop-agent dag decision inspect --run-id <run-id> [--node-id <node-id>] # dry-run envelope 重解析;除 run 缺失外 exit 0
@@ -72,7 +72,7 @@ loop-agent task status <task-id> --json [--repo-root <target-repo>]
72
72
 
73
73
  The `--verify` command should reference verification commands registered in the project's `AGENTS.md` or its governance verification-matrix.md; do not assume `npm run typecheck` exists. `--verify` is optional; when omitted, suggestions are auto-derived from `package.json` scripts or existing managed `task.json.verifyCommands`.
74
74
 
75
- `loop-agent` is the preferred global CLI. For self-hosting loop-agent development, the controller must be an installed npm-published package. Use `npm install -g @tea-agent/loop-agent@latest` for first install or intentional upgrades, then treat the installed version as frozen for the current task and record `npm list -g @tea-agent/loop-agent --depth=0`. Do not repeatedly fetch `npx @latest` inside DAG nodes, and do not use the current working tree's `npm link` or `npm run dev` to control tasks that may edit CLI, DAG runtime, executors, package metadata, or build output. Use `npm run dev -- <args>` only for source debugging and focused CLI development.
75
+ `loop-agent` is the preferred global CLI. For self-hosting loop-agent development, the controller must be an installed npm-published package. Use `npm install -g @tea-agent/loop-agent@latest` for first install or intentional upgrades (`@next` is the main dev channel for testing only; `release-0.x` pins a version line), then treat the installed version as frozen for the current task and record `npm list -g @tea-agent/loop-agent --depth=0`. Do not repeatedly fetch `npx @latest` inside DAG nodes, and do not use the current working tree's `npm link` or `npm run dev` to control tasks that may edit CLI, DAG runtime, executors, package metadata, or build output. Use `npm run dev -- <args>` only for source debugging and focused CLI development.
76
76
 
77
77
  The npm package carries static capability assets: `skills/` (bundled in-package, containing `loop-agent` and `agent-worker`; `loop-agent init` mirrors them into the target project's `.agents/skills/`), `docs/templates/`, `docs/architecture/`, `docs/skills/`, `examples/`, `harness.json`, `AGENTS.md`, `README.md`, and `CHANGELOG.md`. `loop-agent init` creates `ai_workspace/loop-agent/` (the default governanceRoot) in the target project with `progress/`, `reports/`, `exec-plans/`, and `decisions/` directories plus their README files; the actual files under those directories belong to the target repository and are not shipped by the npm package.
78
78
 
@@ -18,7 +18,7 @@ loop-agent task status <task-id> --json
18
18
 
19
19
  默认 DAG 草稿仍为 `.harness/tasks/<task-id>/dag.json`。repo-relative 示例用 `/`;Windows 由 Node 解析本地路径。何时必须 PRD / `plan create`:见 `source-and-plan-practice.md`。
20
20
 
21
- 当目标仓库是 loop-agent 本仓库时,`loop-agent` 命令必须来自 npm 上已发布的安装包。首次安装或有意升级可用 `@tea-agent/loop-agent@latest`,但一次自举任务启动后不要中途升级控制器,并记录 `npm list -g @tea-agent/loop-agent --depth=0` 显示的实际版本。不要用当前工作区的 `npm link` 或 `npm run dev` 控制会改动 CLI、DAG runtime、executor、package metadata 或 build output 的任务;源码开发和 focused debugging 才使用 `npm run dev -- <args>`。
21
+ 当目标仓库是 loop-agent 本仓库时,`loop-agent` 命令必须来自 npm 上已发布的安装包。首次安装或有意升级可用 `@tea-agent/loop-agent@latest`(当前推荐稳定版;`@next` 仅用于尝鲜/测试 main 构建,`release-0.x` 固定某条版本线),但一次自举任务启动后不要中途升级控制器,并记录 `npm list -g @tea-agent/loop-agent --depth=0` 显示的实际版本。不要用当前工作区的 `npm link` 或 `npm run dev` 控制会改动 CLI、DAG runtime、executor、package metadata 或 build output 的任务;源码开发和 focused debugging 才使用 `npm run dev -- <args>`。
22
22
 
23
23
  主会话默认是 **Compatibility / Operator Assist**:实现工作必须走上方 DAG CLI。低风险的文档/index/task-source 元数据修正仅作 operator 维护,须记录 scope、跑验证,且**不得**扩展为业务实现或 CLI 失败后的救火写码;见 `orchestrator-and-interventions.md`。
24
24
 
@@ -1 +0,0 @@
1
- :root{--canvas: #f7f7f4;--canvas-soft: #fafaf7;--surface: #ffffff;--surface-muted: #f0efe9;--ink: #26251e;--body: #5a5852;--muted: #807d72;--muted-soft: #a09c92;--hairline: #e6e5e0;--hairline-strong: #cfcdc4;--orange: #f54e00;--orange-active: #d04200;--orange-soft: color-mix(in srgb, var(--orange) 12%, white);--blue: #3f6ea4;--green: #1f8a65;--amber: #a66a00;--red: #c72d53;--peach: #f1d8cb;--mint: #d8ead5;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-12: 48px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-pill: 999px;--transition-fast: .16s ease;--transition-base: .22s ease;--ease-out: cubic-bezier(.22, 1, .36, 1);--shadow-sm: 0 1px 2px rgb(38 37 30 / 5%);--shadow-panel: 0 1px 2px rgb(38 37 30 / 4%), 0 8px 24px rgb(38 37 30 / 3%);--shadow-soft: 0 10px 30px rgb(38 37 30 / 6%);--shadow-lg: 0 16px 44px rgb(38 37 30 / 10%);--shell-max: 1680px;--text-xs: 11px;--text-sm: 12px;--text-md: 13px;--text-base: 14px;--text-lg: 16px;--text-xl: 20px;--text-2xl: 26px;--font-mono: "JetBrains Mono", "SFMono-Regular", Consolas, "Segoe UI Mono", monospace;--bg: var(--canvas);--border: var(--hairline);--accent: var(--orange);--accent-active: var(--orange-active);--danger: var(--red);--success: var(--green);--warning: var(--amber);--info: var(--blue);--text-muted: var(--muted);--surface-raised: var(--surface);--surface-hover: var(--surface-muted);--surface-sunken: var(--canvas-soft);--oc-tree-guide: 14px;--oc-shortcut-palette-available-height: 62vh;--oc-session-share: 45%;--oc-repo-share: 55%;color-scheme:light;font-family:Segoe UI,PingFang SC,Hiragino Sans GB,Noto Sans SC,system-ui,-apple-system,sans-serif;line-height:1.5}*{box-sizing:border-box}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}html{background:radial-gradient(1200px 480px at 8% -10%,rgb(241 216 203 / 45%),transparent 55%),radial-gradient(900px 420px at 100% 0%,rgb(216 234 213 / 35%),transparent 50%),var(--canvas);min-height:100%}body{margin:0;min-height:100vh;min-width:320px;background:transparent;color:var(--ink);font-size:14px}button,input,select,textarea{font:inherit}a{color:inherit}::selection{background:color-mix(in srgb,var(--orange) 18%,white)}.oc-messages,.oc-session-scroll,.oc-tree-scroll,.oc-process-timeline,.oc-tools-catalog-body,.oc-runtime-context-body,.inspect-split-panel{scrollbar-width:thin;scrollbar-color:var(--hairline-strong) transparent}.oc-messages::-webkit-scrollbar,.oc-session-scroll::-webkit-scrollbar,.oc-tree-scroll::-webkit-scrollbar,.oc-process-timeline::-webkit-scrollbar,.oc-tools-catalog-body::-webkit-scrollbar,.oc-runtime-context-body::-webkit-scrollbar,.inspect-split-panel::-webkit-scrollbar{width:8px;height:8px}.oc-messages::-webkit-scrollbar-thumb,.oc-session-scroll::-webkit-scrollbar-thumb,.oc-tree-scroll::-webkit-scrollbar-thumb,.oc-process-timeline::-webkit-scrollbar-thumb,.oc-tools-catalog-body::-webkit-scrollbar-thumb,.oc-runtime-context-body::-webkit-scrollbar-thumb,.inspect-split-panel::-webkit-scrollbar-thumb{background:var(--hairline-strong);border-radius:999px;border:2px solid transparent;background-clip:content-box}.oc-messages::-webkit-scrollbar-track,.oc-session-scroll::-webkit-scrollbar-track,.oc-tree-scroll::-webkit-scrollbar-track,.oc-process-timeline::-webkit-scrollbar-track,.oc-tools-catalog-body::-webkit-scrollbar-track,.oc-runtime-context-body::-webkit-scrollbar-track,.inspect-split-panel::-webkit-scrollbar-track{background:transparent}code,.cmd,.kv dd code{font-family:var(--font-mono)}.console-app{display:flex;flex-direction:column;min-height:100dvh}html:has(.console-app.is-chat-focus),body:has(.console-app.is-chat-focus){height:100%;overflow:hidden}.console-app.is-chat-focus{height:100dvh;max-height:100dvh;overflow:hidden}.console-shell{flex:1 1 auto;display:flex;flex-direction:column;min-height:0;width:min(100% - 48px,var(--shell-max));margin:0 auto;padding:var(--space-5) 0 var(--space-12, 48px)}.flash{display:flex;gap:var(--space-3);align-items:flex-start;margin:0 0 var(--space-4);padding:12px 16px;border:1px solid var(--hairline);border-left:3px solid var(--hairline-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-panel);animation:flash-in .22s var(--ease-out)}.flash-error{border-color:color-mix(in srgb,var(--red) 35%,var(--hairline));border-left-color:var(--red);background:color-mix(in srgb,var(--red) 6%,var(--surface));color:var(--red)}.flash-info{border-color:color-mix(in srgb,var(--blue) 30%,var(--hairline));border-left-color:var(--blue);background:color-mix(in srgb,var(--blue) 6%,var(--surface));color:var(--body)}.flash-label{flex:0 0 auto;min-width:3.5rem;font-size:var(--text-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding-top:1px}.flash-body{margin:0;overflow-wrap:anywhere;white-space:pre-line;font-size:var(--text-md);line-height:1.55}.muted{color:var(--muted)}.console-main{display:grid;gap:var(--space-4)}.console-main--fill{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:var(--space-3)}.console-shell.is-chat-focus{flex:1 1 auto;min-height:0;overflow:hidden;padding-bottom:var(--space-3)}.console-shell.is-chat-focus .console-main--fill{flex:1 1 auto;min-height:0;overflow:hidden}.panel--chat{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding:var(--space-3);overflow:hidden}.panel--chat .oc-shell{flex:1 1 auto;min-height:0;height:auto;overflow:hidden}.console-shell.is-chat-focus .panel--chat{padding:var(--space-2)}.console-shell.is-chat-focus .panel--chat .oc-shell{min-height:0;gap:var(--space-2);overflow:hidden}.inspect-split-panel{position:fixed;z-index:50;top:16px;right:16px;bottom:16px;width:min(420px,calc(100vw - 32px));display:grid;align-content:start;gap:var(--space-4);padding:var(--space-5);overflow:auto;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-soft)}.inspect-split-nodes{display:grid;gap:6px;margin:0;padding:0;list-style:none;max-height:220px;overflow:auto}.inspect-split-nodes li{display:grid;grid-template-columns:1fr auto;gap:var(--space-2);align-items:center;padding:6px 8px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--canvas-soft);font-size:12px}.inspect-split-nodes li.is-active{border-color:var(--orange);background:var(--orange-soft)}.inspect-split-nodes code{color:var(--muted);font-size:11px}.inspect-split-header{display:flex;align-items:start;justify-content:space-between;gap:var(--space-3)}.inspect-split-header h2,.inspect-split-panel h3{margin:0}.inspect-split-kicker,.inspect-split-id{margin:0;color:var(--muted);font-size:12px}.inspect-split-facts{display:grid;gap:var(--space-2);margin:0}.inspect-split-facts div{display:grid;grid-template-columns:7rem 1fr;gap:var(--space-2);padding-bottom:var(--space-2);border-bottom:1px solid var(--hairline)}.inspect-split-facts dt{color:var(--muted)}.inspect-split-facts dd{margin:0;overflow-wrap:anywhere}.inspect-split-events{display:grid;gap:8px;margin:0;padding-left:18px;color:var(--body);font-size:12px}.panel{min-width:0;border:1px solid var(--hairline);background:color-mix(in srgb,var(--surface) 96%,transparent);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-panel)}.panel h2{margin:0 0 var(--space-2);color:var(--ink);font-size:var(--text-xl);font-weight:700;letter-spacing:-.02em}.panel-lead{margin:0 0 var(--space-5);color:var(--muted);font-size:var(--text-md);line-height:1.55}.panel h3{margin:0 0 var(--space-3);color:var(--ink);font-size:15px;font-weight:700;letter-spacing:-.01em}.empty-state{border:1px dashed var(--hairline-strong);border-radius:var(--radius-lg);padding:var(--space-8) var(--space-6);background:var(--canvas-soft);color:var(--body);text-align:center}.empty-state .cta-row{justify-content:center}.empty-title{margin:0 0 var(--space-2);color:var(--ink);font-size:var(--text-lg);font-weight:700;letter-spacing:-.01em}.empty-state .muted{max-width:52ch;margin-left:auto;margin-right:auto}.checklist{margin:0 0 var(--space-4);padding:var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);list-style:none;color:var(--body)}.checklist li{position:relative;padding:6px 0 6px 22px}.checklist li:before{content:"";position:absolute;left:0;top:12px;width:8px;height:8px;border-radius:50%;background:var(--orange);opacity:.75}.kv{display:grid;gap:var(--space-1);margin:0}.kv div{display:grid;grid-template-columns:9rem 1fr;gap:var(--space-3);padding:10px 0;border-bottom:1px solid var(--hairline)}.kv div:last-child{border-bottom:none}.kv dt{color:var(--muted);font-size:var(--text-sm);font-weight:600}.kv dd{margin:0;color:var(--ink);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}code{font-size:.85rem;color:var(--ink)}.cmd{display:block;width:100%;margin:0;padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);color:var(--ink);font-size:var(--text-sm);line-height:1.55;overflow-x:auto;white-space:pre-wrap;word-break:break-word;max-height:280px}.external-link{color:var(--orange);text-decoration:none;font-weight:600}.external-link:hover{text-decoration:underline}.error{color:var(--red)}.wizard-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--space-2);list-style:none;padding:0;margin:0 0 var(--space-5)}.wizard-steps li{position:relative;min-height:54px;display:grid;align-content:center;gap:3px;border:1px solid var(--hairline);border-radius:var(--radius-md);padding:9px 12px;background:var(--canvas-soft);color:var(--muted);font-size:var(--text-sm);font-weight:600;transition:border-color var(--transition-fast),background-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.wizard-steps li[data-done=true]{border-color:color-mix(in srgb,var(--green) 35%,var(--hairline));background:color-mix(in srgb,var(--mint) 45%,var(--surface));color:var(--green)}.wizard-steps li[data-active=true]{border-color:var(--orange);background:var(--surface);color:var(--ink);box-shadow:0 0 0 3px var(--orange-soft),var(--shadow-panel);transform:translateY(-1px)}.wizard-steps .step-index{font-size:10px;font-weight:700;letter-spacing:.06em;font-variant-numeric:tabular-nums;color:var(--muted-soft)}.wizard-steps li[data-active=true] .step-index{color:var(--orange);opacity:1}.wizard-steps li[data-done=true] .step-index{color:inherit;opacity:.8}.wizard-steps .step-label{line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field{display:grid;gap:var(--space-1);margin:0 0 var(--space-4);width:min(100%,520px)}.field span{font-size:12px;font-weight:600;color:var(--muted)}.field input,.field textarea,.field select{width:100%;border:1px solid var(--hairline-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.field input{min-height:40px;padding:0 var(--space-3)}.field select{min-height:40px;padding:0 var(--space-3);cursor:pointer}.field textarea{min-height:120px;padding:var(--space-3);resize:vertical}.field input:focus-visible,.field textarea:focus-visible,.field select:focus-visible{outline:none;border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.field input:disabled,.field textarea:disabled,.field select:disabled{background:var(--surface-muted);color:var(--muted);cursor:not-allowed}.workflow-hint{margin:calc(var(--space-1) * -1) 0 var(--space-3);color:var(--muted);font-size:12px}.prd-drop-zone{position:relative;width:min(100%,720px);margin:0 0 var(--space-3);padding:var(--space-3);border:1px dashed var(--hairline-strong);border-radius:var(--radius-md);background:var(--surface);transition:border-color var(--transition-fast),background-color var(--transition-fast),box-shadow var(--transition-fast)}.prd-drop-zone.is-dragover{border-color:var(--orange);background:var(--orange-soft);box-shadow:0 0 0 3px var(--orange-soft)}.prd-upload-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);margin:0 0 var(--space-3)}.prd-upload-btn{display:inline-flex;align-items:center;cursor:pointer;margin:0}.prd-upload-btn.is-disabled,.prd-upload-btn:has(input:disabled){opacity:.55;cursor:not-allowed;pointer-events:none}.prd-upload-btn:focus-within{outline:none;box-shadow:0 0 0 3px var(--orange-soft)}.prd-upload-hint{font-size:12px}.prd-file-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);margin:0 0 var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface-muted);font-size:12px;color:var(--ink)}.prd-file-list{list-style:none;margin:0 0 var(--space-3);padding:0;display:grid;gap:var(--space-2)}.prd-file-list li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface-muted);font-size:12px}.prd-file-list li.is-primary{border-color:color-mix(in srgb,var(--orange) 40%,var(--hairline-strong))}.prd-file-item-name{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--space-1);min-width:0}.prd-file-primary-tag{display:inline-flex;align-items:center;padding:0 6px;border-radius:999px;background:var(--orange-soft);color:var(--orange);font-size:11px;font-weight:700}.prd-file-item-actions{display:inline-flex;flex-wrap:wrap;gap:var(--space-1)}.prd-file-item-actions .btn,.prd-file-clear{min-height:28px;padding:0 var(--space-2);font-size:12px}.prd-drop-hint{margin:0 0 var(--space-3);font-size:13px;font-weight:600;color:var(--orange)}.prd-text-field{width:100%;margin-bottom:0}.prd-file-error{width:min(100%,720px);margin:0 0 var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid color-mix(in srgb,var(--orange) 45%,var(--hairline-strong));border-radius:var(--radius-md);background:var(--orange-soft);color:var(--ink);font-size:13px}.meta-row{display:grid;gap:6px;margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);font-size:13px}.meta-row code{font-size:12px}.cta-row,.recovery-cta-row{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}.cta-row{margin-top:var(--space-3)}.cta-row .cmd{flex:1 1 100%}.wizard-body{display:grid;gap:var(--space-3);justify-items:stretch;animation:panel-in .24s ease}.wizard-body>div{display:grid;gap:var(--space-3);justify-items:stretch}.wizard-body .field{width:100%;max-width:640px}.wizard-body .cta-row{margin-top:var(--space-1)}.interview-card{width:100%;padding:var(--space-5);border:1px solid var(--hairline);border-radius:var(--radius-lg);background:linear-gradient(180deg,var(--surface),var(--canvas-soft));box-shadow:var(--shadow-panel)}.interview-q{margin:0 0 var(--space-2);color:var(--ink)}.btn,button{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 14px;border:1px solid var(--hairline-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font-size:var(--text-md);font-weight:600;letter-spacing:.01em;cursor:pointer;transition:border-color var(--transition-fast),background-color var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.btn:hover:not(:disabled),button:hover:not(:disabled){border-color:color-mix(in srgb,var(--ink) 18%,var(--hairline-strong));background:var(--canvas-soft);outline:none}.btn:focus-visible:not(:disabled),button:focus-visible:not(:disabled){outline:none;box-shadow:0 0 0 3px var(--orange-soft)}.btn:active:not(:disabled),button:active:not(:disabled){transform:translateY(1px)}.btn:disabled,button:disabled{opacity:.48;cursor:not-allowed;transform:none}.btn-primary,button.btn-primary{border-color:var(--orange);background:linear-gradient(180deg,var(--orange),var(--orange-active));color:#fff;font-weight:650;box-shadow:inset 0 1px #ffffff2e,0 6px 16px #f54e002e}.btn-primary:hover:not(:disabled),button.btn-primary:hover:not(:disabled){border-color:var(--orange-active);background:var(--orange-active);color:#fff;box-shadow:inset 0 1px #ffffff1f,0 8px 20px #f54e003d;transform:translateY(-1px)}.btn-primary:active:not(:disabled),button.btn-primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 8px #f54e0033}.btn-secondary,button.btn-secondary{border-color:var(--hairline-strong);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.btn-secondary:hover:not(:disabled),button.btn-secondary:hover:not(:disabled){background:var(--canvas-soft)}.btn-ghost,button.btn-ghost{border-color:transparent;background:transparent;color:var(--body)}.btn-ghost:hover:not(:disabled),button.btn-ghost:hover:not(:disabled){background:var(--surface-muted);color:var(--ink)}.recovery-cta-row{margin-top:var(--space-3)}.recovery-confirm{margin-top:var(--space-3);padding:var(--space-4);border:1px solid color-mix(in srgb,var(--orange) 40%,var(--hairline));border-radius:var(--radius-md);background:color-mix(in srgb,var(--orange-soft) 55%,var(--surface))}.recovery-confirm h3{margin:0 0 var(--space-2);font-size:15px}.recovery-confirm .cta-row{margin-top:var(--space-3)}.recovery-reason-code{display:flex;flex-direction:column;gap:var(--space-2);margin:0 0 var(--space-3);padding:0;border:0;min-inline-size:0;width:100%}.recovery-reason-code legend{padding:0;float:none;width:auto;font-size:12px;font-weight:600;color:var(--muted)}.recovery-reason-code-group{display:flex;flex-wrap:wrap;gap:8px}.recovery-reason-code-option{position:relative;display:inline-flex;align-items:center;min-height:32px;padding:0 12px;border:1px solid var(--hairline-strong);border-radius:var(--radius-pill);background:var(--surface);color:var(--body);font-size:13px;line-height:1;cursor:pointer;-webkit-user-select:none;user-select:none;transition:border-color var(--transition-fast),background-color var(--transition-fast),box-shadow var(--transition-fast),color var(--transition-fast)}.recovery-reason-code-option:hover{border-color:var(--orange);color:var(--ink)}.recovery-reason-code-option.is-active{border-color:var(--orange);background:color-mix(in srgb,var(--orange-soft) 85%,var(--surface));color:var(--ink);font-weight:600}.recovery-reason-code-option:focus-within{border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.recovery-reason-code:disabled .recovery-reason-code-option,.recovery-reason-code-option:has(input:disabled){opacity:.55;cursor:not-allowed}.recovery-reason-code-option input{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.recovery-report{margin-top:var(--space-3);padding:var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.recovery-report-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-3)}.recovery-report-header h3{margin:0;font-size:15px}.recovery-report-facts{display:grid;gap:var(--space-2);margin:0 0 var(--space-3)}.recovery-report-facts div{display:grid;grid-template-columns:5.5rem 1fr;gap:var(--space-2)}.recovery-report-facts dt{color:var(--muted);font-size:12px}.recovery-report-facts dd{margin:0;overflow-wrap:anywhere}.recovery-steps{margin:.5rem 0 .75rem 1.25rem;padding:0;line-height:1.5}.recovery-lane{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--hairline)}.recovery-lane h3{margin:0 0 .35rem;font-size:1rem}.recovery-cta-row button[disabled]{opacity:.4}@keyframes flash-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@keyframes panel-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(max-width:800px){.console-shell{width:min(100% - 24px,var(--shell-max));padding-top:var(--space-5)}.inspect-split-panel{inset:auto 0 0;width:100%;max-height:min(76vh,680px);border-radius:var(--radius-lg) var(--radius-lg) 0 0}.kv div{grid-template-columns:1fr}.wizard-steps{grid-template-columns:repeat(2,minmax(0,1fr))}}.oc-shell{display:flex;flex-direction:column;height:100%;min-height:0;gap:var(--space-3);position:relative;overflow:hidden}.oc-workspace{display:flex;flex:1 1 auto;min-height:0;gap:0;position:relative;overflow:hidden}.oc-main{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.oc-main-topbar{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto;padding:6px 10px;border-bottom:1px solid var(--hairline);background:color-mix(in srgb,var(--surface) 92%,transparent)}.oc-main-topbar-btn{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:36px;min-width:44px;padding:0 12px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font:inherit;font-size:13px;font-weight:600;cursor:pointer}.oc-main-topbar-btn:hover{border-color:color-mix(in srgb,var(--orange) 35%,var(--hairline));background:color-mix(in srgb,var(--orange) 8%,var(--surface))}.oc-main-topbar-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 45%,transparent);outline-offset:1px}.oc-main-topbar-btn:active{transform:translateY(1px)}.oc-sidebar{flex:0 0 280px;width:280px;min-width:0;display:flex;flex-direction:column;gap:var(--space-2);margin-right:var(--space-3);padding:var(--space-2);overflow:hidden;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.oc-sidebar.is-collapsed{flex:0 0 36px;width:36px;padding:6px;overflow:visible;align-items:center}.oc-sidebar-rail{flex:0 0 44px;width:44px;min-width:44px;display:flex;flex-direction:column;align-items:center;gap:6px;margin-right:var(--space-2);padding:8px 4px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.oc-sidebar-rail-btn{appearance:none;display:inline-grid;place-items:center;width:36px;height:36px;min-width:36px;min-height:36px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.oc-sidebar-rail-btn:hover{color:var(--ink);background:color-mix(in srgb,var(--orange) 8%,var(--surface));border-color:var(--hairline)}.oc-sidebar-rail-btn:active{transform:scale(.96)}.oc-sidebar-rail-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 45%,transparent);outline-offset:1px}.oc-overlay-backdrop{position:absolute;inset:0;z-index:6;border:0!important;padding:0!important;margin:0!important;min-height:0!important;min-width:0!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:color-mix(in srgb,var(--ink) 28%,transparent)!important;cursor:pointer;transform:none!important}.oc-overlay-backdrop:hover,.oc-overlay-backdrop:focus,.oc-overlay-backdrop:focus-visible,.oc-overlay-backdrop:active{border:0!important;padding:0!important;margin:0!important;min-height:0!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:color-mix(in srgb,var(--ink) 28%,transparent)!important;transform:none!important}.oc-overlay-backdrop.is-process{z-index:7}.oc-sidebar-drawer{position:absolute;inset:0 auto 0 0;z-index:8;width:min(320px,calc(100% - 24px));margin-right:0;box-shadow:var(--shadow-soft)}.oc-process.is-process-overlay{position:absolute;top:0;right:0;bottom:0;z-index:9;width:min(380px,calc(100% - 24px));min-width:0;flex:none;margin-left:0;border-radius:var(--radius-md) 0 0 var(--radius-md);box-shadow:var(--shadow-soft)}.oc-sidebar-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;gap:0}.oc-sidebar-split>.oc-sessions{flex:1 1 var(--oc-session-share, 45%);max-height:none;min-height:0}.oc-sidebar-split>.oc-sessions .oc-session-scroll{flex:1 1 auto;max-height:none;min-height:0}.oc-sidebar-split>.oc-explorer{flex:1 1 var(--oc-repo-share, 55%);min-height:0;border-top:0;padding-top:0;margin-top:0}.oc-sidebar-split>.oc-explorer .oc-tree-scroll{max-height:none;min-height:0}.oc-sidebar-separator{flex:0 0 8px;height:8px;margin:2px 0;border:0;border-radius:999px;background:color-mix(in srgb,var(--hairline) 80%,transparent);cursor:row-resize;touch-action:none}.oc-sidebar-separator:hover,.oc-sidebar-split[data-dragging=true] .oc-sidebar-separator{background:color-mix(in srgb,var(--orange) 45%,var(--hairline))}.oc-sidebar-separator:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 45%,transparent);outline-offset:1px;background:color-mix(in srgb,var(--orange) 35%,var(--hairline))}.oc-sidebar-header-actions{display:inline-flex;align-items:center;gap:2px}.oc-sidebar-toggle{appearance:none;display:inline-grid;place-items:center;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.oc-sidebar-toggle:hover{color:var(--ink);background:color-mix(in srgb,var(--orange) 8%,var(--surface));border-color:var(--hairline)}.oc-sidebar-toggle:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 45%,transparent);outline-offset:1px}.oc-sidebar-toggle.is-collapsed{width:100%;height:28px}.oc-sidebar-section{display:flex;flex-direction:column;gap:6px;min-height:0}.oc-sidebar-section>header{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;flex-shrink:0}.oc-sessions{flex:0 1 auto;max-height:min(34vh,320px);display:flex;flex-direction:column;min-height:0}.oc-session-scroll{min-height:0;max-height:min(28vh,260px);overflow:auto;padding:4px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--canvas-soft) 70%,white),var(--canvas-soft))}.oc-session-group{display:flex;flex-direction:column;gap:2px}.oc-session-group>small{margin:4px 6px 2px;color:var(--muted-soft);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.oc-session-item{position:relative;display:block;border-radius:6px;transition:background-color var(--transition-fast)}.oc-session-item:hover,.oc-session-item:focus-within{background:color-mix(in srgb,var(--orange) 8%,var(--surface))}.oc-session-item.is-active{background:var(--orange-soft)}.oc-session-main{min-width:0;padding:5px 6px;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.oc-session-main strong,.oc-session-main span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-session-main strong{font-size:12.5px;font-weight:650;line-height:1.25}.oc-session-main span{color:var(--muted-soft);font-size:10px;margin-top:1px;font-variant-numeric:tabular-nums}.oc-session-actions{position:absolute;top:50%;right:4px;z-index:2;display:inline-flex;align-items:center;gap:2px;padding:2px 4px 2px 18px;border-radius:6px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--surface) 92%,transparent) 28%,var(--surface) 55%);opacity:0;pointer-events:none;transform:translateY(-50%);transition:opacity .14s ease}.oc-session-item.is-active .oc-session-actions{background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--orange-soft) 88%,transparent) 28%,var(--orange-soft) 55%)}.oc-session-item:hover .oc-session-actions,.oc-session-item:focus-within .oc-session-actions,.oc-session-item.is-delete-confirming .oc-session-actions{opacity:1;pointer-events:auto}@media(hover:none),(pointer:coarse){.oc-session-item.is-active .oc-session-actions,.oc-session-item:focus-within .oc-session-actions{opacity:1;pointer-events:auto}}@media(prefers-reduced-motion:reduce){.oc-session-actions{transition:none}}.oc-session-menu{display:inline-grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;font:inherit;line-height:0}.oc-session-menu:hover,.oc-session-menu:focus-visible{color:var(--ink);background:color-mix(in srgb,var(--ink) 6%,transparent)}.oc-session-delete{color:var(--muted)}.oc-session-delete:hover,.oc-session-delete:focus-visible{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent)}.oc-session-actions.is-delete-confirm{gap:4px;padding-left:18px}.oc-session-delete-confirm,.oc-session-delete-cancel{min-height:26px;padding:3px 8px;border:1px solid var(--hairline);border-radius:6px;background:var(--surface);color:var(--body);cursor:pointer;font:inherit;font-size:11px;font-weight:650;line-height:1.2;white-space:nowrap}.oc-session-delete-confirm{border-color:color-mix(in srgb,var(--red) 45%,var(--hairline));color:var(--red);background:color-mix(in srgb,var(--red) 7%,var(--surface))}.oc-session-delete-confirm:hover,.oc-session-delete-confirm:focus-visible{border-color:var(--red);background:color-mix(in srgb,var(--red) 13%,var(--surface))}.oc-session-delete-cancel:hover,.oc-session-delete-cancel:focus-visible{border-color:var(--hairline-strong);color:var(--ink);background:var(--surface-muted)}.oc-session-delete-confirm:focus-visible,.oc-session-delete-cancel:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 42%,transparent);outline-offset:1px}.oc-session-delete-confirm:disabled,.oc-session-delete-cancel:disabled{cursor:wait;opacity:.65}.oc-session-title-tooltip{z-index:40;max-width:min(360px,calc(100vw - 24px));padding:6px 10px;border:1px solid var(--hairline);border-radius:6px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-soft);font-size:12px;line-height:1.4;white-space:normal;overflow-wrap:anywhere;pointer-events:none}.oc-explorer{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--hairline);padding-top:var(--space-3);margin-top:2px}.oc-explorer-hint{margin:0 2px;color:var(--muted-soft);font-size:10.5px;letter-spacing:.01em}.oc-tree-scroll{flex:1 1 auto;min-height:120px;max-height:min(52vh,560px);overflow:auto;padding:4px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--canvas-soft) 70%,white),var(--canvas-soft))}.oc-tree,.oc-tree ul{list-style:none;padding:0;margin:0}.oc-tree-node{position:relative}.oc-tree-row{appearance:none;display:grid;grid-template-columns:12px 14px minmax(0,1fr);align-items:center;gap:6px;width:100%;min-height:28px;margin:0;padding:3px 8px;border:0;border-radius:6px;background:transparent;color:var(--ink);text-align:left;cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast)}.oc-tree-row:hover{background:color-mix(in srgb,var(--orange) 8%,var(--surface))}.oc-tree-row:focus-visible{outline:2px solid color-mix(in srgb,var(--orange) 45%,transparent);outline-offset:1px}.oc-tree-chevron{color:var(--muted-soft);transition:transform var(--transition-fast);transform:rotate(0)}.oc-tree-chevron.is-open{transform:rotate(90deg)}.oc-tree-chevron-spacer{width:12px;height:12px}.oc-tree-glyph{flex-shrink:0;color:var(--amber)}.oc-tree-glyph.is-folder-open{color:color-mix(in srgb,var(--orange) 70%,var(--amber))}.oc-tree-glyph.is-file{color:var(--muted)}.oc-tree-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;line-height:1.25;font-variant-numeric:tabular-nums}.oc-tree-dir .oc-tree-label{font-weight:650;color:var(--ink)}.oc-tree-file .oc-tree-label{font-family:JetBrains Mono,SFMono-Regular,Consolas,Segoe UI Mono,monospace;font-size:11.5px;font-weight:500;color:var(--body)}.oc-tree-node.is-dot .oc-tree-label{color:var(--muted-soft);font-weight:500}.oc-tree-node.is-dot .oc-tree-glyph{opacity:.7}.oc-tree-children{position:relative;margin:0}.oc-tree-children:before{content:"";position:absolute;top:0;bottom:2px;left:var(--oc-tree-guide, 14px);width:1px;background:color-mix(in srgb,var(--hairline-strong) 55%,transparent);pointer-events:none}.oc-tree-empty,.oc-sidebar-error{margin:8px 6px;color:var(--muted);font-size:12px;line-height:1.45}.oc-sidebar-error{color:var(--red)}.oc-governance{margin-top:auto;border-top:1px solid var(--hairline);padding-top:8px}.oc-governance-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.oc-governance-links button{min-height:28px;padding:4px 6px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted);cursor:pointer;font:inherit;font-size:11px;font-weight:600;text-align:center}.oc-governance-links button:hover{color:var(--ink);border-color:color-mix(in srgb,var(--ink) 18%,var(--hairline))}.oc-governance-links button.is-active{color:var(--orange-active);border-color:color-mix(in srgb,var(--orange) 35%,var(--hairline))}.oc-resource-backdrop{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:var(--space-4);background:#26251e52}.oc-resource-panel{width:min(880px,calc(100vw - 32px));max-height:min(80vh,760px);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-lg);color:var(--ink)}.oc-resource-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);flex-shrink:0;padding:12px 14px;border-bottom:1px solid var(--hairline);background:var(--surface-raised)}.oc-resource-panel-head-copy{display:grid;gap:2px;min-width:0}.oc-resource-panel-head strong{font-size:14px}.oc-resource-panel-meta{color:var(--muted);font-size:11px;line-height:1.5}.oc-resource-panel-body{flex:1;min-height:0;overflow:auto;display:grid;gap:12px;padding:14px}.oc-resource-panel-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;flex-shrink:0;padding:10px 14px;border-top:1px solid var(--hairline);background:var(--surface-raised)}.oc-resource-panel-actions{display:flex;align-items:center;gap:6px}.oc-resource-error{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--red) 35%,var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb,var(--red) 6%,var(--surface));color:var(--red);font-size:var(--text-sm)}.oc-resource-empty{margin:0;padding:14px 10px;border:1px dashed var(--hairline-strong);border-radius:var(--radius-md);color:var(--muted);font-size:var(--text-sm);text-align:center}.oc-resource-lists{display:grid;gap:14px}.oc-resource-group{display:grid;gap:6px}.oc-resource-group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding-bottom:4px;border-bottom:1px solid var(--hairline);font-size:var(--text-sm);text-transform:capitalize}.oc-resource-group-head span{color:var(--muted);font-size:11px}.oc-resource-list,.oc-resource-sub-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}.oc-resource-item{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.oc-resource-item-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.oc-resource-item-head span{color:var(--muted);font-size:11px}.oc-resource-item p{margin:0;color:var(--body);font-size:var(--text-sm)}.oc-resource-item code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--body);font-size:11px}.oc-resource-item.is-auto-off{opacity:.92}.oc-skill-auto-toggle{display:inline-flex;align-items:center;gap:8px;min-height:28px;font-size:var(--text-sm);color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none}.oc-skill-auto-toggle input{width:16px;height:16px;margin:0;accent-color:var(--accent, var(--ink));cursor:pointer}.oc-skill-auto-toggle input:disabled{cursor:wait;opacity:.6}.oc-skill-auto-help{margin:0;color:var(--muted);font-size:11px;line-height:1.45}.oc-skill-partial-notice{margin:0 0 8px;padding:8px 10px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--amber) 12%,var(--surface));color:var(--amber);font-size:12px}.oc-resource-sub-list li{display:grid;gap:2px;padding:6px 8px;border-radius:var(--radius-sm);background:var(--surface-muted)}.oc-resource-diagnostic{color:var(--amber);font-size:11px}.oc-package-status{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;line-height:1.7;text-transform:uppercase;background:var(--surface-muted);color:var(--muted);white-space:nowrap}.oc-package-status.is-installed{background:color-mix(in srgb,var(--green) 12%,var(--surface));color:var(--green)}.oc-package-status.is-error{background:color-mix(in srgb,var(--red) 12%,var(--surface));color:var(--red)}.oc-package-status.is-disabled{opacity:.7}.oc-package-meta{display:flex;align-items:baseline;gap:8px;margin:0;font-size:11px;min-width:0}.oc-package-meta span{color:var(--muted);min-width:96px;flex:none}.oc-package-meta code{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.oc-package-resources{display:grid;gap:8px}.oc-package-group{display:grid;gap:4px}.oc-package-diagnostics{display:grid;gap:4px;padding:6px 8px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--amber) 6%,var(--surface));color:var(--amber);font-size:11px;overflow-wrap:anywhere}.oc-resource-diagnostics{display:grid;gap:6px;margin-bottom:12px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--amber) 35%,var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb,var(--amber) 5%,var(--surface))}.oc-resource-diagnostic.is-error{color:var(--red)}.oc-resource-panel button:disabled{cursor:wait;opacity:.55}.oc-model-provider{border-bottom:1px solid var(--hairline);padding-bottom:8px}.oc-model-provider-head,.oc-model-row,.oc-model-row-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}.oc-model-provider-head{padding:6px 0}.oc-model-provider-head span{color:var(--muted);font-size:11px}.oc-model-row{padding:4px 0 4px 10px;font-size:var(--text-sm)}.oc-model-row-actions button,.oc-model-provider-remove{border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted);cursor:pointer;font:inherit;font-size:11px;padding:3px 8px}.oc-model-row-actions button:hover,.oc-model-provider-remove:hover{color:var(--ink);border-color:var(--hairline-strong)}.oc-model-provider-remove{margin:6px 0 6px 10px}.oc-model-form{display:grid;gap:6px;margin-top:10px}.oc-model-form input{min-width:0;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);padding:6px 8px;font:inherit;font-size:12px}.oc-model-form button{justify-self:start}.oc-model-test-result{padding:6px 8px;border-radius:var(--radius-sm);background:var(--surface-muted);font-size:12px}@media(max-width:800px){.oc-resource-backdrop{padding:var(--space-2)}.oc-resource-panel{width:100%;max-height:calc(100vh - 32px)}.oc-resource-panel-body{padding:10px}}@media(max-width:640px){.oc-resource-panel-foot{flex-direction:column;align-items:stretch}.oc-resource-panel-actions{justify-content:flex-end}.oc-resource-item-head{flex-direction:column;align-items:flex-start}.oc-skill-auto-toggle{width:100%}.oc-model-row{flex-direction:column;align-items:flex-start}.oc-model-row-actions{justify-content:flex-start}}.oc-file-preview{position:absolute;z-index:4;inset:0;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-panel)}.oc-file-preview header{display:flex;align-items:center;gap:var(--space-2);padding:10px 12px;border-bottom:1px solid var(--hairline)}.oc-file-tabs{display:flex;min-width:0;gap:2px;overflow-x:auto}.oc-file-tabs button{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--muted);padding:4px 7px;cursor:pointer}.oc-file-tabs button.is-active{background:var(--surface-muted);color:var(--ink);font-weight:650}.oc-file-preview header span{flex:1;color:var(--muted);font-size:11px}.oc-file-preview pre{flex:1;min-height:0;margin:0;padding:var(--space-3);overflow:auto;font-size:12px;line-height:1.5;white-space:pre-wrap}.oc-file-preview-loading{position:absolute;z-index:5;right:12px;top:12px;padding:6px 8px;border-radius:var(--radius-sm);background:var(--surface-muted);color:var(--muted);font-size:12px}.oc-process{display:flex;flex-direction:column;flex:0 0 min(360px,42%);width:min(360px,42%);min-width:280px;min-height:0;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-panel);margin-left:var(--space-3);overflow:hidden;animation:panel-in .18s ease}.oc-turn-group{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.oc-process-inline{align-self:stretch;width:100%;max-width:100%;margin:0 0 4px}.oc-process-inline-summary{display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:2px 0;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:12px;text-align:left}.oc-process-inline-summary:hover,.oc-process-inline-summary.is-open{color:var(--ink)}.oc-process-inline-summary.is-running{color:var(--accent, #2563eb)}.oc-process-inline-summary.is-error{color:var(--danger, #dc2626)}.oc-process-inline-summary .oc-tool-chevron{width:12px;height:12px;flex-shrink:0;transition:transform .15s ease}.oc-process-inline-summary.is-open .oc-tool-chevron{transform:rotate(90deg)}.oc-process-inline-body{display:flex;flex-direction:column;gap:8px;margin-top:8px}.oc-thinking{border:1px solid var(--hairline);border-radius:6px;overflow:hidden}.oc-thinking-summary{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:12px;text-align:left}.oc-thinking-summary:hover,.oc-thinking-summary.is-open{color:var(--ink)}.oc-thinking-summary .oc-tool-chevron{width:12px;height:12px;flex-shrink:0;transition:transform .15s ease}.oc-thinking-summary.is-open .oc-tool-chevron{transform:rotate(90deg)}.oc-thinking-body{margin:0;padding:8px 10px 10px;border-top:1px solid var(--hairline);white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.55;color:var(--muted);max-height:280px;overflow:auto}.oc-process-text{margin-left:18px;font-size:13px;line-height:1.55;color:var(--muted);white-space:pre-wrap}.oc-tool-duration{flex-shrink:0;font-size:11px;font-variant-numeric:tabular-nums;color:var(--muted)}.oc-tool-expand-result{margin-top:4px;font-size:12px}.oc-process-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:10px 12px;border-bottom:1px solid var(--hairline);flex-shrink:0}.oc-process-title{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:13px;color:var(--ink)}.oc-process-title-mark{width:8px;height:8px;border-radius:50%;background:var(--orange)}.oc-process-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 6px;border-radius:var(--radius-pill);background:var(--surface-muted);color:var(--muted);font-size:11px;font-weight:650}.oc-process-close{font-size:12px}.oc-process-timeline{flex:1 1 auto;min-height:0;overflow-y:auto;padding:var(--space-3);display:flex;flex-direction:column;gap:0}.oc-process-empty{padding:var(--space-4);color:var(--muted);font-size:12.5px;line-height:1.5;text-align:center}.oc-process-item{display:grid;grid-template-columns:20px 52px minmax(0,1fr);gap:8px;align-items:start;padding:4px 0}.oc-process-rail{position:relative;display:grid;place-items:center;min-height:34px}.oc-process-rail:before{position:absolute;top:0;bottom:0;width:1px;background:var(--hairline);content:""}.oc-process-item.is-first .oc-process-rail:before{top:50%}.oc-process-item.is-last .oc-process-rail:before{bottom:50%}.oc-process-dot{position:relative;z-index:1;width:8px;height:8px;border-radius:50%;background:var(--surface);border:2px solid color-mix(in srgb,var(--orange) 55%,var(--hairline))}.oc-process-item.is-running .oc-process-dot{border-color:var(--orange-active);background:var(--orange-soft)}.oc-process-item.is-error .oc-process-dot{border-color:var(--red);background:color-mix(in srgb,var(--red) 18%,var(--surface))}.oc-process-time{padding-top:10px;font-size:11px;color:var(--muted-soft);font-variant-numeric:tabular-nums;white-space:nowrap}.oc-process-body{min-width:0}.oc-process-toggle{cursor:pointer;font:inherit}.oc-process-toggle.is-active{border-color:color-mix(in srgb,var(--orange) 40%,var(--hairline));background:color-mix(in srgb,var(--orange) 10%,var(--surface));color:var(--orange-active)}.oc-process-toggle.is-running{border-color:color-mix(in srgb,var(--orange) 40%,var(--hairline));color:var(--orange-active)}.oc-process-toggle.is-error{border-color:color-mix(in srgb,var(--red) 35%,var(--hairline));background:color-mix(in srgb,var(--red) 8%,var(--surface));color:var(--red)}.oc-process-summary{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--muted);font-size:11.5px;font-weight:650;cursor:pointer;font:inherit;max-width:min(420px,100%);white-space:nowrap}.oc-process-summary:hover,.oc-process-summary.is-open,.oc-process-summary:focus-visible{border-color:color-mix(in srgb,var(--orange) 35%,var(--hairline));color:var(--orange-active);background:color-mix(in srgb,var(--orange) 8%,var(--surface))}.oc-process-summary.is-running .oc-process-summary-status{color:var(--orange-active)}.oc-process-summary.is-error .oc-process-summary-status{color:var(--red)}.oc-process-summary.is-ok{color:var(--muted)}.oc-process-summary-label{flex:0 0 auto}.oc-process-summary-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.4em;padding:0 5px;border-radius:999px;background:color-mix(in srgb,var(--ink) 8%,transparent);color:var(--body);font-variant-numeric:tabular-nums;font-size:11px;font-weight:700}.oc-process-summary-status{overflow:hidden;text-overflow:ellipsis;max-width:14ch}@media(max-width:900px){.oc-workspace:not([data-layout-mode]) .oc-sidebar{position:absolute;inset:0 auto 0 0;z-index:7;width:min(300px,calc(100% - 24px));margin-right:0;box-shadow:var(--shadow-soft)}.oc-workspace:not([data-layout-mode]) .oc-sidebar.is-collapsed{position:static;width:auto}.oc-workspace:not([data-layout-mode]).has-process .oc-process{position:absolute;top:0;right:0;bottom:0;z-index:8;width:min(360px,calc(100% - 24px));min-width:0;flex:none;margin-left:0;border-radius:var(--radius-md) 0 0 var(--radius-md);box-shadow:var(--shadow-soft)}}.oc-banner{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:10px 14px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 94%,transparent);box-shadow:var(--shadow-panel)}.oc-shell>.oc-alert:first-child{margin-top:0}.oc-banner-title{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--ink)}.oc-banner-dot{width:8px;height:8px;border-radius:50%;background:var(--orange)}.oc-banner-body{color:var(--body);font-size:12.5px;line-height:1.45}.oc-banner-body strong{color:var(--ink)}.oc-cap-chips{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:auto;align-items:center}.oc-cap-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border:1px solid color-mix(in srgb,var(--green) 30%,var(--hairline));border-radius:var(--radius-pill);background:color-mix(in srgb,var(--mint) 50%,var(--surface));color:var(--green);font-size:11.5px;font-weight:650}button.oc-cap-chip{font:inherit;cursor:pointer}.oc-tools-menu{position:relative}.oc-tools-menu--composer .oc-tools-catalog{top:auto;bottom:calc(100% + 8px)}.oc-tools-toggle.is-active{border-color:color-mix(in srgb,var(--orange) 40%,var(--hairline));background:color-mix(in srgb,var(--orange) 10%,var(--surface));color:var(--orange-active)}.oc-tools-catalog{position:absolute;top:calc(100% + 8px);right:0;z-index:20;width:min(420px,calc(100vw - 48px));max-height:min(480px,60vh);display:flex;flex-direction:column;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-soft);animation:panel-in .16s ease;overflow:hidden}.oc-tools-catalog-head{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--hairline);flex-shrink:0}.oc-tools-catalog-head strong{font-size:13px;color:var(--ink)}.oc-tools-catalog-meta{font-size:11.5px;color:var(--muted-soft)}.oc-tools-catalog-close{margin-left:auto;font-size:12px}.oc-tools-catalog-body{overflow-y:auto;padding:var(--space-3);display:flex;flex-direction:column;gap:var(--space-3)}.oc-tools-group-title{margin:0 0 8px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted-soft)}.oc-tools-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.oc-tools-item{padding:8px 10px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--surface-muted) 55%,var(--surface))}.oc-tools-item-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.oc-tools-name{font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12.5px;font-weight:650;color:var(--ink)}.oc-tools-kind{margin-left:auto;font-size:10.5px;font-weight:650;padding:1px 7px;border-radius:var(--radius-pill);color:var(--muted);background:var(--surface);border:1px solid var(--hairline)}.oc-tools-kind.is-explore,.oc-tools-kind.is-read{color:var(--green);border-color:color-mix(in srgb,var(--green) 28%,var(--hairline));background:color-mix(in srgb,var(--mint) 45%,transparent)}.oc-tools-kind.is-mutation{color:var(--orange-active);border-color:color-mix(in srgb,var(--orange) 35%,var(--hairline));background:var(--orange-soft)}.oc-tools-kind.is-long-running{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 35%,var(--hairline));background:color-mix(in srgb,var(--amber) 10%,var(--surface))}.oc-tools-desc{margin:0;font-size:12px;line-height:1.45;color:var(--body)}.oc-tools-cli{margin:4px 0 0;font-size:11px;color:var(--muted-soft)}.oc-tools-cli code{font-size:11px;color:var(--muted)}.oc-alert{padding:10px 14px;border-radius:var(--radius-md);font-size:var(--text-md);line-height:1.5;animation:panel-in .18s var(--ease-out)}.oc-alert-warning{border:1px solid color-mix(in srgb,var(--amber) 35%,var(--hairline));border-left:3px solid var(--amber);background:color-mix(in srgb,var(--amber) 8%,var(--surface));color:var(--amber)}.oc-alert-error{border:1px solid color-mix(in srgb,var(--red) 35%,var(--hairline));border-left:3px solid var(--red);background:color-mix(in srgb,var(--red) 7%,var(--surface));color:var(--red)}.oc-messages{flex:1 1 auto;min-height:0;overflow-y:auto;padding:var(--space-3) var(--space-3) var(--space-2);display:flex;flex-direction:column;gap:var(--space-3)}.oc-messages.has-thread:before{content:"";flex:1 1 auto;min-height:0}.oc-messages.is-empty{justify-content:center;align-items:center;padding:var(--space-5) var(--space-4) var(--space-4);background:radial-gradient(640px 300px at 50% 28%,rgb(241 216 203 / 34%),transparent 68%),radial-gradient(520px 240px at 78% 78%,rgb(216 234 213 / 26%),transparent 62%)}.oc-main.is-landing{position:relative}.oc-day-sep{display:flex;align-items:center;gap:var(--space-3);color:var(--muted-soft);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin:var(--space-2) 0}.oc-day-sep:before,.oc-day-sep:after{content:"";flex:1;height:1px;background:var(--hairline)}.oc-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:0 1 auto;gap:var(--space-5);text-align:center;width:min(100%,680px);padding:var(--space-2) var(--space-2) var(--space-4);animation:oc-empty-in .28s ease both}@keyframes oc-empty-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.oc-empty{animation:none}}.oc-empty-hero{display:flex;flex-direction:column;align-items:center;gap:var(--space-3)}.oc-empty-icon{display:block;width:88px;height:auto;max-width:min(120px,40vw);aspect-ratio:96 / 64;object-fit:contain;border-radius:0;background:transparent;box-shadow:none}.oc-empty-brand{margin:0 auto}.oc-empty-copy{display:flex;flex-direction:column;align-items:center;gap:var(--space-2)}.oc-empty h3{margin:0;font-size:20px;font-weight:700;letter-spacing:-.02em;color:var(--ink)}.oc-empty p{margin:0;max-width:48ch;color:var(--muted);font-size:13px;line-height:1.55}.oc-suggestions{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);width:100%}@media(max-width:560px){.oc-suggestions{grid-template-columns:1fr}}.oc-suggestion{appearance:none;display:flex;flex-direction:column;gap:5px;text-align:left;min-height:0;padding:14px 16px;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:color-mix(in srgb,var(--surface) 88%,transparent);color:var(--ink);cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:border-color var(--transition-fast),background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.oc-suggestion:hover:not(:disabled){border-color:color-mix(in srgb,var(--orange) 45%,var(--hairline));background:var(--surface);box-shadow:0 0 0 3px var(--orange-soft),var(--shadow-panel);transform:translateY(-1px)}.oc-suggestion:disabled{opacity:.55;cursor:not-allowed}.oc-suggestion strong{font-size:var(--text-md);font-weight:700}.oc-suggestion span{color:var(--muted);font-size:var(--text-sm);line-height:1.45}.oc-empty-tips{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-2) var(--space-3);margin:0;padding:0;list-style:none;color:var(--muted-soft);font-size:12px}.oc-empty-tips li{display:inline-flex;align-items:center;gap:6px}.oc-empty-tips kbd{display:inline-grid;place-items:center;min-width:1.4em;padding:1px 6px;border:1px solid var(--hairline);border-radius:5px;background:var(--surface);color:var(--body);font-family:var(--font-mono, "JetBrains Mono", monospace);font-size:11px;font-weight:600;line-height:1.4}.oc-empty-cta{margin-top:calc(var(--space-1) * -1)}.oc-empty.is-landing-compact{gap:var(--space-3);padding:var(--space-1) var(--space-2) var(--space-2)}.oc-empty.is-landing-compact .oc-empty-icon{width:64px;height:auto}.oc-empty.is-landing-compact h3{font-size:17px}.oc-empty.is-landing-compact p{font-size:12px;line-height:1.45}.oc-empty.is-landing-compact .oc-suggestion{padding:10px 12px;gap:3px}.oc-empty.is-landing-extra-compact{gap:var(--space-2);padding:0 var(--space-1) var(--space-2)}.oc-empty.is-landing-extra-compact .oc-empty-icon{width:52px;height:auto}.oc-empty.is-landing-extra-compact h3{font-size:15px}.oc-empty.is-landing-extra-compact p{font-size:11.5px;line-height:1.4;max-width:42ch}.oc-empty.is-landing-extra-compact .oc-suggestion{padding:8px 10px;gap:2px}.oc-empty.is-landing-extra-compact .oc-empty-tips{gap:var(--space-1) var(--space-2);font-size:11px}.oc-messages.is-empty[data-landing-density=extra-compact]{justify-content:center;padding:var(--space-2);overflow-y:auto}.oc-row{display:flex;flex-direction:column;gap:4px;max-width:100%}.oc-row.is-user{align-self:flex-end;align-items:flex-end;width:auto;max-width:min(100%,720px)}.oc-row.is-assistant,.oc-row.is-tool{align-self:stretch;align-items:stretch;width:100%;max-width:100%}.oc-meta{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted-soft)}.oc-row.is-assistant .oc-meta,.oc-row.is-user .oc-meta{width:100%;max-width:100%}.oc-message-copy{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:26px;height:26px;margin-left:auto;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--muted-soft);cursor:pointer;opacity:0;transition:opacity var(--transition-fast),background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.oc-row:hover .oc-message-copy,.oc-row:focus-within .oc-message-copy,.oc-message-copy:focus-visible{opacity:1}.oc-message-copy:hover{color:var(--body);background:color-mix(in srgb,var(--ink) 6%,transparent);border-color:var(--hairline)}.oc-message-copy.is-copied{opacity:1;color:var(--green, #1a7f37);border-color:color-mix(in srgb,var(--green, #1a7f37) 35%,transparent)}@media(hover:none){.oc-message-copy{opacity:.5}}.oc-avatar{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;font-size:11px;font-weight:700;flex-shrink:0}.oc-avatar-user{background:var(--ink);color:#fff}.oc-avatar-assistant{background:var(--orange);color:#fff}.oc-role{font-weight:700;color:var(--body)}.oc-time{font-variant-numeric:tabular-nums}.oc-bubble{padding:10px 14px;border-radius:var(--radius-lg);font-size:14px;line-height:1.6;overflow-wrap:anywhere;word-break:break-word;animation:bubble-in .16s ease}@keyframes bubble-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.oc-bubble-user{background:var(--ink);color:#fff;border-bottom-right-radius:4px;box-shadow:0 4px 14px #26251e1f}.oc-bubble-assistant{background:var(--surface);color:var(--ink);border:1px solid var(--hairline);border-bottom-left-radius:4px}.oc-bubble-tool{background:var(--canvas-soft);color:var(--body);border:1px solid var(--hairline)}.oc-bubble-error{border-color:color-mix(in srgb,var(--red) 40%,var(--hairline));background:color-mix(in srgb,var(--red) 7%,var(--surface));color:var(--red)}.oc-md{display:flex;flex-direction:column;gap:var(--space-2)}.oc-md>*:first-child{margin-top:0}.oc-md>*:last-child{margin-bottom:0}.oc-md p{margin:0}.oc-md h1,.oc-md h2,.oc-md h3,.oc-md h4{margin:var(--space-3) 0 var(--space-2);color:inherit;font-weight:700;line-height:1.3}.oc-md h1{font-size:1.3em}.oc-md h2{font-size:1.18em}.oc-md h3{font-size:1.06em}.oc-md h4{font-size:1em}.oc-md ul,.oc-md ol{margin:0;padding-left:1.4em;display:flex;flex-direction:column;gap:2px}.oc-md li{margin:0}.oc-md blockquote{margin:0;padding:2px 0 2px 12px;border-left:3px solid var(--hairline-strong);color:var(--body)}.oc-bubble-user .oc-md blockquote{border-left-color:#ffffff59;color:#ffffffd1}.oc-md code{font-size:.86em;padding:1px 5px;border-radius:4px;background:color-mix(in srgb,var(--ink) 8%,transparent)}.oc-bubble-user .oc-md code{background:#ffffff29}.oc-md pre{margin:0;padding:0;background:transparent}.oc-codeblock{margin:0;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface-muted);overflow:hidden}.oc-bubble-assistant .oc-codeblock{background:#f3efe8}.oc-codeblock-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:5px 6px 5px 10px;border-bottom:1px solid var(--hairline);font-size:11px;color:var(--muted);background:color-mix(in srgb,var(--ink) 4%,transparent)}.oc-codeblock-lang{font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-weight:600;text-transform:lowercase}.oc-codeblock-copy{appearance:none;display:inline-flex;align-items:center;gap:5px;min-height:26px;padding:0 9px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--muted);font-size:11px;font-weight:600;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.oc-codeblock-copy:hover{background:var(--surface);color:var(--ink);border-color:var(--hairline-strong)}.oc-codeblock pre{margin:0;padding:var(--space-3) var(--space-4);overflow-x:auto;font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12.5px;line-height:1.55;white-space:pre;color:var(--ink)}.oc-md a{color:var(--orange);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--orange) 40%,transparent)}.oc-md a:hover{border-bottom-color:var(--orange)}.oc-md hr{margin:var(--space-2) 0;border:none;border-top:1px solid var(--hairline-strong)}.oc-stream{white-space:pre-wrap;font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:13px;line-height:1.55}.oc-cursor{display:inline-block;width:7px;height:1.05em;margin-left:2px;vertical-align:text-bottom;background:var(--orange);animation:oc-blink 1s steps(2,start) infinite;border-radius:1px}@keyframes oc-blink{to{opacity:0}}.oc-tool{border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);overflow:hidden;animation:panel-in .16s ease;transition:border-color var(--transition-fast),background-color var(--transition-fast)}.oc-tool:hover{border-color:var(--hairline-strong);background:var(--surface)}.oc-tool.is-error{border-color:color-mix(in srgb,var(--red) 38%,var(--hairline))}.oc-tool.is-running{border-color:color-mix(in srgb,var(--orange) 40%,var(--hairline))}.oc-tool-head{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:7px 12px;border:none;background:transparent;text-align:left;cursor:pointer;font:inherit;color:var(--ink)}.oc-tool-head:hover{background:var(--surface-muted)}.oc-tool-chevron{flex-shrink:0;width:12px;height:12px;transition:transform var(--transition-fast)}.oc-tool-head[aria-expanded=true] .oc-tool-chevron{transform:rotate(90deg)}.oc-tool-icon{display:grid;place-items:center;width:22px;height:22px;border-radius:6px;background:var(--surface-muted);color:var(--orange-active);flex-shrink:0}.oc-tool-name{font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12.5px;font-weight:650;flex-shrink:0}.oc-tool-args{color:var(--muted);font-size:11.5px;font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:8px;min-width:0}.oc-tool-status{margin-left:auto;flex-shrink:0;font-size:11px;font-weight:650;padding:2px 8px;border-radius:var(--radius-pill)}.oc-tool-waiting{color:var(--muted);font-size:12px;animation:pulse 1.5s infinite}.oc-tool-status.is-running{color:var(--orange-active);background:var(--orange-soft)}.oc-tool-status.is-ok{color:var(--green);background:color-mix(in srgb,var(--mint) 60%,transparent)}.oc-tool-status.is-error{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent)}.oc-tool-body{padding:0 var(--space-4) var(--space-3);border-top:1px solid var(--hairline)}.oc-tool-section{display:flex;flex-direction:column;gap:4px;padding-top:var(--space-3)}.oc-tool-label{font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted-soft)}.oc-tool-code{margin:0;padding:var(--space-3);border-radius:var(--radius-sm);background:var(--surface-muted);font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:260px;overflow-y:auto;color:var(--body)}.oc-composer{flex:0 0 auto;flex-shrink:0;border-top:1px solid var(--hairline);padding:var(--space-2) var(--space-3) var(--space-3);background:color-mix(in srgb,var(--canvas) 92%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:2}.oc-composer-inner{display:flex;flex-direction:column;gap:var(--space-2);max-width:1080px;margin:0 auto;position:relative}.console-shell.is-chat-focus .oc-composer-inner{max-width:none}.oc-composer-shell{position:relative;display:flex;align-items:flex-end;gap:var(--space-2);padding:8px 8px 8px 14px;border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-panel);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.oc-composer-shell:focus-within{border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.oc-composer-shell.is-busy{opacity:.78}.oc-textarea{flex:1 1 auto;min-width:0;min-height:52px;max-height:280px;padding:8px 0;border:none;background:transparent;color:var(--ink);font:inherit;font-size:14px;line-height:1.5;resize:none;outline:none}.oc-textarea::placeholder{color:var(--muted-soft)}.oc-send{appearance:none;display:grid;place-items:center;width:38px;height:38px;flex-shrink:0;padding:0;border:1px solid var(--orange);border-radius:50%;background:linear-gradient(180deg,var(--orange),var(--orange-active));color:#fff;cursor:pointer;box-shadow:inset 0 1px #fff3,0 4px 12px #f54e003d;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.oc-send:hover:not(:disabled){background:var(--orange-active);border-color:var(--orange-active);box-shadow:0 6px 16px #f54e004d;transform:translateY(-1px)}.oc-send:active:not(:disabled){transform:scale(.94)}.oc-send:disabled{opacity:.4;cursor:not-allowed}.oc-stop{appearance:none;display:grid;place-items:center;width:38px;height:38px;flex-shrink:0;padding:0;border:1px solid var(--hairline-strong);border-radius:50%;background:var(--surface);color:var(--red);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.oc-stop:hover{background:color-mix(in srgb,var(--red) 8%,var(--surface));border-color:var(--red)}.oc-composer-foot{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-size:11.5px;color:var(--muted)}.oc-composer-hint{display:inline-flex;align-items:center;gap:5px}.oc-kbd{display:inline-block;padding:1px 6px;border:1px solid var(--hairline-strong);border-bottom-width:2px;border-radius:4px;background:var(--surface);color:var(--body);font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:10.5px;line-height:1.4}.oc-operation-card{width:min(720px,calc(100% - 42px));margin:var(--space-3) auto;padding:var(--space-4) var(--space-5);border:1px solid var(--hairline-strong);border-left:4px solid var(--blue);border-radius:var(--radius-lg);background:color-mix(in srgb,var(--surface) 96%,var(--blue) 4%);box-shadow:var(--shadow-panel)}.oc-operation-card.is-succeeded{border-left-color:var(--green)}.oc-operation-card.is-failed,.oc-operation-card.is-timed-out{border-left-color:var(--red)}.oc-operation-card.is-needs-reconcile{border-left-color:var(--orange)}.oc-operation-head,.oc-operation-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}.oc-operation-kicker{margin-bottom:2px;color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.oc-operation-state{padding:3px 9px;border-radius:999px;background:color-mix(in srgb,var(--blue) 12%,transparent);color:var(--blue);font-size:11px;font-weight:700}.oc-operation-state.is-succeeded{background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green)}.oc-operation-state.is-failed,.oc-operation-state.is-timed-out{background:color-mix(in srgb,var(--red) 12%,transparent);color:var(--red)}.oc-operation-state.is-needs-reconcile{background:color-mix(in srgb,var(--orange) 14%,transparent);color:var(--orange-active)}.oc-operation-id,.oc-operation-controller{margin-top:var(--space-2);color:var(--muted);font-size:12px;overflow-wrap:anywhere}.oc-operation-identities{display:flex;flex-wrap:wrap;gap:6px;margin-top:var(--space-3)}.oc-operation-identities span{padding:3px 8px;border:1px solid var(--hairline);border-radius:var(--radius-pill);background:var(--surface);color:var(--muted);font-size:var(--text-xs);font-weight:600}.oc-operation-identities b{color:var(--body)}.oc-operation-preview{max-height:150px;margin:var(--space-3) 0 0;padding:var(--space-2) var(--space-3);overflow:auto;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);color:var(--body);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.oc-operation-preview.is-error{border-color:color-mix(in srgb,var(--red) 30%,var(--hairline));color:var(--red)}.oc-operation-actions{justify-content:flex-start;margin-top:var(--space-3)}.oc-operation-actions time{margin-left:auto;color:var(--muted-soft);font-size:11px}.oc-interview-start{margin:var(--space-3) auto}.oc-draft-card{width:min(720px,calc(100% - 42px));margin:var(--space-3) auto;padding:var(--space-4) var(--space-5);border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-panel)}.oc-draft-card>header{display:flex;align-items:center;gap:var(--space-3);justify-content:space-between}.oc-draft-card>header strong{font-size:15px;font-weight:700;letter-spacing:-.01em}.oc-draft-card>header span{padding:3px 10px;border-radius:var(--radius-pill);background:var(--surface-muted);color:var(--muted);font-size:var(--text-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase}.oc-interview-bubble{margin:var(--space-3) 0;padding:var(--space-3) var(--space-4);border-left:3px solid var(--orange);border-radius:0 var(--radius-md) var(--radius-md) 0;background:var(--canvas-soft)}.oc-interview-bubble textarea{width:100%;min-height:72px;margin:var(--space-2) 0;resize:vertical;border:1px solid var(--hairline-strong);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font:inherit;font-size:var(--text-md)}.oc-interview-bubble textarea:focus-visible{outline:none;border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.oc-interview-bubble .btn+.btn{margin-left:var(--space-2)}.oc-draft-card pre{max-height:300px;overflow:auto;white-space:pre-wrap;font-size:var(--text-xs)}.oc-assessment{margin:var(--space-3) 0;color:var(--orange);font-size:var(--text-md)}.oc-assessment.is-fresh,.oc-task-kind-card.is-confirmed{color:var(--green)}.oc-task-kind-card{display:flex;align-items:center;gap:var(--space-3);justify-content:space-between;flex-wrap:wrap;margin-top:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft)}.oc-task-kind-card small{color:var(--muted)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}.oc-human-gate-card{position:relative;width:min(720px,calc(100% - 42px));margin:var(--space-3) auto;padding:var(--space-4) var(--space-5);border:1px solid color-mix(in srgb,var(--orange) 38%,var(--hairline));border-left:4px solid var(--orange);border-radius:var(--radius-lg);background:linear-gradient(180deg,color-mix(in srgb,var(--orange) 4%,var(--surface)),var(--surface) 40%);box-shadow:var(--shadow-soft);animation:panel-in .2s var(--ease-out)}.oc-human-gate-card.is-prepared,.oc-human-gate-card.is-confirmed{position:sticky;bottom:var(--space-2);z-index:6}.oc-human-gate-card header,.oc-human-gate-card footer{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3)}.oc-human-gate-card header div{display:grid;gap:3px}.oc-human-gate-card header small{color:var(--muted);font-size:var(--text-xs);font-weight:600;letter-spacing:.04em}.oc-human-gate-card header strong{font-size:15px;font-weight:700;letter-spacing:-.01em}.oc-human-gate-card header>span{flex-shrink:0;padding:3px 10px;border-radius:var(--radius-pill);font-size:var(--text-xs);font-weight:700;letter-spacing:.06em;text-transform:uppercase;border:1px solid transparent}.oc-human-gate-card.is-prepared header>span{color:var(--orange-active);background:var(--orange-soft);border-color:color-mix(in srgb,var(--orange) 35%,transparent)}.oc-human-gate-card.is-confirmed header>span,.oc-human-gate-card.is-dispatched header>span{color:var(--blue);background:color-mix(in srgb,var(--blue) 10%,transparent);border-color:color-mix(in srgb,var(--blue) 30%,transparent)}.oc-human-gate-card.is-consumed header>span{color:var(--green);background:color-mix(in srgb,var(--green) 10%,transparent);border-color:color-mix(in srgb,var(--green) 30%,transparent)}.oc-human-gate-card.is-stale header>span,.oc-human-gate-card.is-expired header>span,.oc-human-gate-card.is-error header>span{color:var(--red);background:color-mix(in srgb,var(--red) 8%,transparent);border-color:color-mix(in srgb,var(--red) 30%,transparent)}.oc-human-gate-card>p{margin:var(--space-3) 0 0;color:var(--body);font-size:var(--text-md);line-height:1.55}.oc-human-gate-card>div:has(>b){margin-top:var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft);font-size:var(--text-sm)}.oc-human-gate-challenges,.oc-human-gate-card ol{max-height:160px;overflow:auto}.oc-human-gate-card ul,.oc-human-gate-card ol{margin:var(--space-2) 0 0;padding-left:1.3em;color:var(--body)}.oc-human-gate-card footer{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--hairline)}.oc-human-gate-card footer a{color:var(--muted);font-size:var(--text-sm);font-weight:600;text-decoration:none}.oc-human-gate-card footer a:hover{color:var(--orange-active);text-decoration:underline}.oc-human-gate-error{margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--red) 8%,transparent);color:var(--red);font-size:var(--text-sm);font-weight:600}.oc-human-gate-card.is-confirmed{border-left-color:var(--blue)}.oc-human-gate-card.is-consumed{border-left-color:var(--green);box-shadow:var(--shadow-panel)}.oc-human-gate-card.is-stale,.oc-human-gate-card.is-expired,.oc-human-gate-card.is-error{border-left-color:var(--red)}.oc-task-context{margin:var(--space-3);padding:var(--space-3);border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface)}.oc-task-context>header{display:flex;justify-content:space-between;gap:var(--space-2);align-items:center}.oc-task-context>header div{display:grid;gap:2px}.oc-task-context>header small,.oc-task-context>header span,.oc-task-context-empty{color:var(--muted)}.oc-task-context-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-2);margin-top:var(--space-3)}.oc-task-context-grid>div{display:grid;gap:4px;min-width:0;padding:var(--space-2);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft)}.oc-task-context-grid span,.oc-task-context-grid small{overflow-wrap:anywhere}.oc-shortcut-palette{position:absolute;z-index:12;left:0;right:0;bottom:calc(100% + 8px);display:flex;flex-direction:column;max-height:min(var(--oc-shortcut-palette-available-height, 62vh),62vh,520px);padding:6px;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-soft)}.oc-shortcut-palette-head{flex:0 0 auto;border-bottom:1px solid var(--hairline);margin-bottom:4px}.oc-shortcut-palette-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:4px}.oc-shortcut-palette button{display:grid;gap:3px;min-width:0;border:1px solid var(--hairline);border-radius:var(--radius-md);padding:8px 10px;color:inherit;background:var(--surface);text-align:left;min-height:0}.oc-shortcut-group>button{grid-template-columns:minmax(0,1fr);align-content:center;align-items:stretch;justify-content:stretch;justify-items:stretch;width:100%}.oc-shortcut-palette button code{width:100%;overflow-wrap:anywhere;font-size:12px;font-weight:650;line-height:1.4;text-align:left}.oc-shortcut-palette button small{width:100%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;color:var(--muted);font-size:11px;line-height:1.45;text-align:left}.oc-shortcut-palette button:hover,.oc-shortcut-palette button.is-active{border-color:var(--orange);background:var(--surface-muted)}.oc-composer-inner{position:relative}@media(max-width:800px){.oc-task-context-grid{grid-template-columns:1fr}}.oc-file-palette{position:absolute;z-index:13;left:0;right:0;bottom:calc(100% + 8px);display:grid;max-height:240px;overflow:auto;padding:6px;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-soft)}.oc-file-palette button{border:0;padding:8px 10px;color:inherit;background:transparent;text-align:left;border-radius:var(--radius-md);min-height:0}.oc-file-palette button:hover{background:var(--surface-muted)}.oc-runtime-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px}@media(prefers-reduced-motion:reduce){.oc-process,.oc-sidebar-drawer,.oc-suggestion,.oc-send{animation:none!important;transition:none!important}}.oc-select-menu{position:relative;flex-shrink:0}.oc-select-trigger{display:inline-flex;align-items:center;gap:6px;max-width:min(260px,calc(100vw - 32px));min-height:30px;padding:0 var(--space-2);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);color:var(--body);font:inherit;font-size:var(--text-sm);cursor:pointer;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.oc-select-trigger:hover{border-color:var(--hairline-strong)}.oc-select-trigger:focus-visible{outline:none;border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.oc-select-trigger:disabled{cursor:not-allowed;opacity:.55}.oc-select-trigger-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono)}.oc-select-panel{position:absolute;left:0;bottom:calc(100% + 8px);z-index:18;width:min(340px,calc(100vw - 24px));max-height:min(60vh,440px);display:flex;flex-direction:column;gap:2px;padding:6px;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-soft);overflow:auto}.oc-select-search{flex-shrink:0;margin-bottom:4px;padding:7px 9px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--surface-muted);color:var(--ink);font:inherit;font-size:var(--text-sm);outline:none}.oc-select-search:focus{border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}.oc-select-status{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;color:var(--muted);font-size:var(--text-sm)}.oc-select-status.is-error{color:var(--red)}.oc-model-group-head{padding:6px 10px 2px;color:var(--muted);font-size:11px;font-weight:650;letter-spacing:.04em;text-transform:uppercase}.oc-select-option{display:flex;align-items:center;gap:8px;width:100%;border:0;border-radius:var(--radius-md);padding:8px 10px;background:transparent;color:inherit;font:inherit;font-size:var(--text-sm);text-align:left;cursor:pointer;min-height:0}.oc-select-option.is-highlighted{background:var(--surface-muted)}.oc-select-option.is-active{color:var(--orange-active)}.oc-model-option-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono)}.oc-model-option-check{flex-shrink:0;color:var(--orange)}.oc-thinking-option-label{flex:1}.oc-thinking-badge{flex-shrink:0;padding:1px 7px;border:1px solid var(--hairline);border-radius:var(--radius-pill);color:var(--muted);font-size:11px}.oc-reload-status{color:var(--muted);font-size:var(--text-sm)}.oc-reload-banner{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--red) 35%,var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb,var(--red) 6%,var(--surface));color:var(--red);font-size:var(--text-sm)}.oc-runtime-controls .oc-process-summary{margin-left:0}.oc-usage{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums}.oc-usage-part{white-space:nowrap}.oc-usage-part.is-in{color:var(--green)}.oc-usage-part.is-out{color:var(--blue)}.oc-runtime-controls-group{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.oc-runtime-controls-group.is-right{margin-left:auto}.oc-runtime-context-menu{position:relative;margin-left:auto;flex-shrink:0}.oc-runtime-context-toggle.is-active{color:var(--orange-active);background:color-mix(in srgb,var(--orange) 10%,var(--surface))}.oc-runtime-context-panel{position:absolute;right:0;bottom:calc(100% + 8px);z-index:16;width:min(760px,calc(100vw - 24px));max-height:min(72vh,720px);display:flex;flex-direction:column;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-soft);animation:panel-in .16s ease;overflow:hidden}.oc-runtime-context-head{display:flex;align-items:flex-start;gap:12px;flex-shrink:0;padding:12px 14px;border-bottom:1px solid var(--hairline);background:var(--surface-raised)}.oc-runtime-context-head-copy{flex:1;min-width:0;display:grid;gap:2px}.oc-runtime-context-head strong{font-size:14px}.oc-runtime-context-meta{font-size:11px;color:var(--muted)}.oc-runtime-context-close{flex-shrink:0;min-height:28px;padding:0 8px;font-size:12px}.oc-runtime-context-body{flex:1;min-height:0;overflow:auto;padding:12px 14px 14px;display:grid;align-content:start;gap:14px}.oc-runtime-context-overview{display:grid;gap:14px}.oc-runtime-context-model-card{display:grid;gap:4px;min-width:0;padding:10px 12px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft)}.oc-runtime-context-model-label{font-size:11px;color:var(--muted)}.oc-runtime-context-model-ref{font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-stat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.oc-runtime-context-stat{display:grid;gap:3px;min-width:0;padding:8px 10px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft)}.oc-runtime-context-stat-label{font-size:11px;color:var(--muted)}.oc-runtime-context-stat-value{font-family:var(--font-mono);font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-stat-value.oc-runtime-context-mode{display:inline-flex;align-items:center;gap:6px}.oc-runtime-context-mode.is-open{color:var(--green)}.oc-runtime-context-mode.is-closed{color:var(--amber)}.oc-runtime-context-mode-dot{flex-shrink:0;width:6px;height:6px;border-radius:50%;background:currentColor}.oc-runtime-context-resource-links{display:grid;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.oc-runtime-context-resource-link{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:0;border-bottom:1px solid var(--hairline);background:transparent;color:var(--body);font:inherit;font-size:var(--text-sm);text-align:left;cursor:pointer}.oc-runtime-context-resource-link:last-child{border-bottom:0}.oc-runtime-context-resource-link:hover{background:var(--surface-muted)}.oc-runtime-context-resource-link:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--orange)}.oc-runtime-context-resource-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-resource-count{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--orange-active);font-variant-numeric:tabular-nums}.oc-runtime-context-resource-count.is-zero{color:var(--muted)}.oc-runtime-context-resource-chevron{color:var(--muted-soft);font-size:14px;line-height:1}.oc-runtime-context-section{display:grid;gap:8px;min-width:0}.oc-runtime-context-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.oc-runtime-context-section-head strong{font-size:12px}.oc-runtime-context-section-title{display:flex;align-items:baseline;gap:8px;min-width:0}.oc-runtime-context-hash{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid var(--hairline);border-radius:6px;background:var(--canvas-soft);color:var(--muted);font-size:11px;vertical-align:1px}.oc-runtime-context-text{margin:0;max-height:min(36vh,360px);overflow:auto;padding:10px 12px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--canvas-soft);color:var(--body);font-size:12px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.oc-runtime-context-empty{margin:0;padding:8px 10px;border:1px dashed var(--hairline);border-radius:var(--radius-sm);background:var(--canvas-soft);color:var(--muted);font-size:12px;text-align:center}.oc-runtime-context-tools{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:6px}.oc-runtime-context-tools li code{display:inline-block;padding:3px 7px;border:1px solid var(--hairline);border-radius:6px;background:var(--canvas-soft);font-size:11px}.oc-runtime-context-raw{padding-top:10px;border-top:1px solid var(--hairline);font-size:12px;color:var(--muted)}.oc-runtime-context-raw summary{cursor:pointer;-webkit-user-select:none;user-select:none}.oc-runtime-context-raw pre{margin:8px 0 0;max-height:min(48vh,480px);overflow:auto;padding:10px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--canvas-soft);font-size:11px;line-height:1.45;white-space:pre}.oc-runtime-context-resources{display:grid;gap:6px;margin:0;padding:0;list-style:none}.oc-runtime-context-resources li{display:grid;gap:5px;padding:8px 10px;border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--surface);font-size:var(--text-sm)}.oc-runtime-context-resource-head{display:flex;align-items:baseline;gap:8px;min-width:0}.oc-runtime-context-resource-name{flex:1;min-width:0;font-size:var(--text-md);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-resource-flag{flex-shrink:0;padding:1px 6px;border:1px solid var(--hairline);border-radius:var(--radius-pill);color:var(--muted);font-size:11px}.oc-runtime-context-resource-head .oc-runtime-context-meta{flex-shrink:0;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-resource-desc{color:var(--body)}.oc-runtime-context-resource-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:11px}.oc-runtime-context-resolved{padding-top:6px;border-top:1px solid var(--hairline)}.oc-runtime-context-resolved summary{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:11px;color:var(--muted)}.oc-runtime-context-resolved-list{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 0;padding:0;list-style:none}.oc-runtime-context-resolved-list code{display:inline-block;max-width:100%;padding:2px 6px;border:1px solid var(--hairline);border-radius:6px;background:var(--canvas-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.oc-runtime-context-diag{color:var(--amber);font-size:11px;line-height:1.5}.oc-runtime-context-diag-icon{margin-right:4px}.oc-runtime-context-diag.is-error{color:var(--red);display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.oc-runtime-context-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;flex-shrink:0;padding:10px 14px;border-top:1px solid var(--hairline);background:var(--surface-raised)}@media(max-width:800px){.oc-runtime-context-menu{margin-left:0;width:100%}.oc-runtime-context-panel{left:0;right:0;width:auto;max-height:min(78vh,680px)}}.oc-artifact-card{max-width:100%;margin:var(--space-3) 0;padding:var(--space-4);overflow:hidden;border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-panel)}.oc-artifact-card header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3)}.oc-artifact-card header strong{font-size:var(--text-md);font-weight:700}.oc-artifact-card header>span{padding:2px 9px;border-radius:var(--radius-pill);background:var(--surface-muted);color:var(--muted);font-size:var(--text-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase}.oc-artifact-card pre{max-height:320px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--text-xs)}.oc-artifact-card iframe{width:100%;min-height:280px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:#fff}.oc-load-history{display:block;margin:var(--space-2) auto}.oc-attach-button{display:inline-flex;min-height:26px;align-items:center;padding:0 var(--space-2);border:1px solid var(--hairline);border-radius:var(--radius-pill);background:var(--surface);color:var(--muted);cursor:pointer;font-size:var(--text-sm);font-weight:600;transition:border-color var(--transition-fast),color var(--transition-fast),background-color var(--transition-fast)}.oc-attach-button:hover{border-color:var(--orange);color:var(--orange-active);background:var(--orange-soft)}.oc-composer-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;margin-bottom:6px;font-size:11.5px;color:var(--muted)}.oc-composer-toolbar .oc-attach-button{margin-bottom:0}.oc-attachment-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.oc-attachment-list span{display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:4px 8px;border:1px solid var(--hairline);border-radius:999px;overflow-wrap:anywhere}.oc-attachment-list button{border:0;color:inherit;background:transparent;cursor:pointer}@media(max-width:640px){.oc-runtime-controls,.oc-composer-foot{align-items:stretch;flex-direction:column}.oc-runtime-controls .oc-select-trigger,.oc-runtime-controls button{width:100%;max-width:100%;min-height:44px}.oc-runtime-controls .oc-select-menu{width:100%}.oc-select-panel{width:min(340px,calc(100vw - 24px))}.oc-artifact-card{width:100%}.oc-composer{padding-inline:8px}}.night-workbench .night-health{margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm)}.night-health-main{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3)}.night-health-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--green) 14%,white);color:var(--green);font-size:var(--text-sm);font-weight:700;letter-spacing:.02em}.night-health-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.night-health-pill.is-bad{background:color-mix(in srgb,var(--red) 14%,white);color:var(--red)}.night-health-hint{margin:var(--space-2) 0 0}.night-aux-ticker{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--hairline)}.night-aux-ticker-label{margin:0;color:var(--body);font-size:var(--text-md)}.night-doctor-list{margin:var(--space-2) 0 0;padding-left:1.2em;color:var(--body);font-size:12.5px}.night-kpi{display:flex;flex-wrap:wrap;gap:var(--space-2);margin:var(--space-3) 0;color:var(--body);font-size:var(--text-md)}.night-kpi span{padding:4px 12px;border:1px solid var(--hairline);border-radius:var(--radius-pill);background:var(--canvas-soft);font-variant-numeric:tabular-nums;font-weight:600}.night-board,.night-wizard,.night-discard-card,.night-advanced{margin-top:var(--space-5)}.night-schedule-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-3)}.night-schedule-row{padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--surface);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.night-schedule-row:hover{border-color:var(--hairline-strong);box-shadow:var(--shadow-panel)}.night-schedule-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2)}.night-status-chip{padding:2px 10px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--blue) 10%,transparent);border:1px solid color-mix(in srgb,var(--blue) 25%,transparent);font-size:var(--text-xs);color:var(--blue);font-weight:700;letter-spacing:.03em}.night-schedule-row[data-status=failed] .night-status-chip,.night-schedule-row[data-status=human_required] .night-status-chip{color:var(--red);background:color-mix(in srgb,var(--red) 8%,transparent);border-color:color-mix(in srgb,var(--red) 28%,transparent)}.night-schedule-row[data-status=succeeded] .night-status-chip{color:var(--green);background:color-mix(in srgb,var(--green) 10%,transparent);border-color:color-mix(in srgb,var(--green) 28%,transparent)}.night-schedule-row[data-status=running] .night-status-chip,.night-schedule-row[data-status=dispatching] .night-status-chip{color:var(--orange-active);background:var(--orange-soft);border-color:color-mix(in srgb,var(--orange) 30%,transparent)}.night-next-action{font-size:var(--text-sm);overflow-wrap:anywhere}.night-review-card,.night-discard-card{padding:var(--space-4) var(--space-5);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);background:var(--canvas-soft)}.night-writeset{margin:0;padding-left:1.1em}.night-advanced{border-top:1px solid var(--hairline);padding-top:var(--space-3)}.night-advanced summary{cursor:pointer;color:var(--body);font-weight:600}.checkbox-field{display:flex;align-items:center;gap:var(--space-2)}.models-page .panel-lead{margin-top:var(--space-2)}.models-header{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3)}.models-header h2{margin:0}.models-status-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 14px;border-radius:var(--radius-pill);font-size:var(--text-sm);font-weight:700;letter-spacing:.02em}.models-status-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.models-status-pill[data-state=ready]{background:color-mix(in srgb,var(--green) 14%,white);color:var(--green)}.models-status-pill[data-state=setup-required]{background:color-mix(in srgb,var(--red) 14%,white);color:var(--red)}.models-status-pill[data-state=degraded]{background:color-mix(in srgb,var(--orange) 16%,white);color:var(--orange-active)}.models-status-pill[data-state=unknown]{background:var(--canvas-soft);color:var(--muted)}.models-subtitle{margin:0 0 var(--space-2);font-size:var(--text-md);font-weight:700;color:var(--ink)}.models-probe-card,.models-setup-card,.models-blocked-card{margin-top:var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid var(--hairline);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 55%,transparent)}.models-probe-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-2)}.models-probe-item{display:grid;grid-template-columns:28px 1fr;gap:var(--space-2);align-items:start;padding:var(--space-2) 0;border-bottom:1px solid var(--hairline)}.models-probe-item:last-child{border-bottom:none;padding-bottom:0}.models-probe-badge{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font-size:14px;font-weight:800;line-height:1;background:var(--canvas-soft);color:var(--muted)}.models-probe-item.is-ok .models-probe-badge{background:color-mix(in srgb,var(--green) 16%,white);color:var(--green)}.models-probe-item.is-bad .models-probe-badge{background:color-mix(in srgb,var(--red) 14%,white);color:var(--red)}.models-probe-body{display:grid;gap:2px;min-width:0}.models-probe-body strong{font-size:var(--text-md);color:var(--ink)}.models-probe-body .muted{font-size:var(--text-sm)}.models-probe-detail{margin:var(--space-1) 0 0;font-size:var(--text-sm);color:var(--body);line-height:1.45}.models-setup-steps{margin:0 0 var(--space-3);padding-left:1.25em;color:var(--body);font-size:var(--text-md);line-height:1.5}.models-setup-steps li+li{margin-top:var(--space-2)}.models-degraded-note{margin:var(--space-4) 0 0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--hairline));background:color-mix(in srgb,var(--orange) 8%,white);color:var(--body);font-size:var(--text-md)}.models-blocked-list{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-2)}.models-blocked-list li{padding:4px 10px;border-radius:var(--radius-pill);border:1px solid var(--hairline);background:var(--surface)}.models-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);margin-top:var(--space-4)}.models-generated-at{font-size:var(--text-sm)}.models-raw-details{margin-top:var(--space-4);font-size:var(--text-sm);color:var(--muted)}.models-raw-details summary{cursor:pointer;font-weight:600;color:var(--body)}.models-raw-json{margin-top:var(--space-2);max-height:240px;overflow:auto}.oc-overlay-backdrop.is-runtime-context{z-index:10}.oc-runtime-context-sidepanel{position:absolute;top:0;right:0;bottom:0;z-index:11;width:min(480px,calc(100% - 24px));display:flex;flex-direction:column;border-left:1px solid var(--hairline);background:var(--surface);box-shadow:var(--shadow-soft)}.oc-runtime-context-layout{display:grid;grid-template-columns:132px minmax(0,1fr);min-height:0;flex:1 1 auto}.oc-runtime-context-nav{display:flex;flex-direction:column;gap:2px;padding:8px;border-right:1px solid var(--hairline);overflow:auto;background:var(--canvas-soft)}.oc-runtime-context-nav-item{display:flex;align-items:center;justify-content:space-between;gap:6px;text-align:left;border:0;background:transparent;color:var(--muted);border-radius:6px;padding:7px 8px;font:inherit;font-size:12px;cursor:pointer}.oc-runtime-context-nav-item:hover,.oc-runtime-context-nav-item.is-active{background:color-mix(in srgb,var(--orange) 10%,var(--surface));color:var(--orange-active)}.oc-runtime-context-nav-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-runtime-context-nav-count{flex-shrink:0;font-family:var(--font-mono);font-size:11px;font-variant-numeric:tabular-nums}.oc-runtime-context-nav-item.is-active .oc-runtime-context-nav-count{color:var(--orange-active)}.oc-runtime-context-sidepanel .oc-runtime-context-body{overflow:auto}.oc-runtime-context-sidepanel .oc-runtime-context-foot{flex-shrink:0;display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 14px;border-top:1px solid var(--hairline);background:var(--surface-raised)}.oc-attach-icon{display:inline-grid;place-items:center;width:32px;height:32px;padding:0;border-radius:8px;cursor:pointer;color:var(--muted)}.oc-attach-icon:hover,.oc-attach-icon:focus-within{color:var(--ink);background:color-mix(in srgb,var(--ink) 6%,transparent)}.oc-md-table-wrap{width:100%;max-width:100%;overflow-x:auto;overscroll-behavior:contain}.oc-md table{border-collapse:collapse;width:max-content;min-width:100%;font-size:.95em}.oc-md th,.oc-md td{border:1px solid var(--hairline);padding:6px 10px;vertical-align:top;overflow-wrap:anywhere}.oc-md th{background:color-mix(in srgb,var(--ink) 4%,var(--surface));font-weight:650}.oc-md-img-fallback{color:var(--muted);font-size:.92em}.oc-md h5,.oc-md h6{margin:var(--space-3) 0 var(--space-2);font-weight:700}.oc-md input[type=checkbox]{margin-right:6px;pointer-events:none}.oc-shortcut-palette-head{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px 4px;color:var(--muted);font-size:12px}.oc-shortcut-palette-meta{font-size:11px}.oc-shortcut-palette-meta.is-error{color:var(--red)}.oc-shortcut-group{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;padding-bottom:6px}.oc-shortcut-group:last-child{padding-bottom:0}.oc-shortcut-palette[data-layout-mode=comfortable] .oc-shortcut-group{grid-template-columns:repeat(3,minmax(0,1fr))}.oc-shortcut-palette[data-layout-mode=compact] .oc-shortcut-group{grid-template-columns:repeat(2,minmax(0,1fr))}.oc-shortcut-group>small{position:sticky;top:0;z-index:1;grid-column:1 / -1;padding:6px 10px 2px;color:var(--muted-soft);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:var(--surface);-webkit-user-select:none;user-select:none}@keyframes la-spin{to{transform:rotate(360deg)}}.spinner{display:inline-block;width:13px;height:13px;margin-right:7px;vertical-align:-2px;border:2px solid rgb(255 255 255 / 35%);border-top-color:#fff;border-radius:50%;animation:la-spin .8s linear infinite}.btn.is-loading{display:inline-flex;align-items:center;justify-content:center;gap:2px}.btn-ghost.is-loading .spinner,.btn.is-loading .spinner{border-color:color-mix(in srgb,var(--ink) 25%,transparent);border-top-color:var(--ink)}.oc-semantic-activity{appearance:none;width:100%;min-height:38px;display:flex;align-items:center;gap:9px;padding:8px 10px;border:1px solid transparent;border-radius:var(--radius-md);background:color-mix(in srgb,var(--green, #2e7d62) 7%,var(--surface));color:var(--body);text-align:left;font:inherit;cursor:default;transition:border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast)}button.oc-semantic-activity{cursor:pointer}button.oc-semantic-activity:hover,.oc-semantic-activity.is-located{border-color:color-mix(in srgb,var(--green, #2e7d62) 40%,var(--hairline));background:color-mix(in srgb,var(--green, #2e7d62) 12%,var(--surface))}.oc-semantic-activity:focus-visible{outline:2px solid color-mix(in srgb,var(--green, #2e7d62) 48%,transparent);outline-offset:2px}.oc-semantic-activity.is-warning{background:color-mix(in srgb,var(--orange) 9%,var(--surface))}.oc-semantic-activity.is-error{background:color-mix(in srgb,var(--red) 7%,var(--surface));color:var(--red)}.oc-semantic-activity-icon{width:22px;height:22px;flex:0 0 22px;display:grid;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--green, #2e7d62) 15%,var(--surface));color:var(--green, #2e7d62);font-size:11px;font-weight:800}.oc-semantic-activity.is-progress .oc-semantic-activity-icon,.oc-semantic-activity.is-warning .oc-semantic-activity-icon{background:color-mix(in srgb,var(--orange) 18%,var(--surface));color:color-mix(in srgb,var(--orange) 70%,var(--ink))}.oc-semantic-activity.is-error .oc-semantic-activity-icon{background:color-mix(in srgb,var(--red) 14%,var(--surface));color:var(--red)}.oc-semantic-activity-copy{min-width:0;display:flex;flex-direction:column;gap:2px}.oc-semantic-activity-copy strong{font-size:12.5px;line-height:1.4;font-weight:650}.oc-semantic-activity-copy small{color:var(--muted);font-size:11px}.oc-semantic-activity-link{margin-left:auto;flex:0 0 auto;color:var(--muted);font-size:10px}.oc-activity-trigger{margin-left:auto}.oc-activity-trigger span,.oc-activity-count,.oc-activity-tabs button span{display:inline-grid;min-width:19px;height:19px;place-items:center;padding:0 5px;border-radius:999px;background:color-mix(in srgb,var(--green, #2e7d62) 14%,var(--surface));color:var(--green, #2e7d62);font-size:10px;font-variant-numeric:tabular-nums}.oc-activity-rail{min-height:0;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--hairline);background:color-mix(in srgb,var(--canvas-soft) 76%,var(--surface));box-shadow:var(--shadow-panel)}.oc-activity-rail.is-sidecar{position:fixed;z-index:41;border-radius:var(--radius-md);animation:activity-sidecar-in .16s ease-out}.oc-activity-rail.is-drawer,.oc-activity-rail.is-sheet{position:absolute;z-index:43}.oc-activity-rail.is-drawer{top:0;right:0;bottom:0;width:min(420px,calc(100vw - 48px));border-radius:var(--radius-md) 0 0 var(--radius-md);animation:activity-drawer-in .16s ease-out}.oc-activity-rail.is-sheet{left:0;right:0;bottom:0;height:min(72%,620px);border-radius:18px 18px 0 0;animation:activity-sheet-in .16s ease-out}@keyframes activity-sidecar-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}@keyframes activity-sidecar-out{0%{opacity:1;transform:none}to{opacity:0;transform:none}}@keyframes activity-content-switch{0%{opacity:0}to{opacity:1}}@keyframes activity-drawer-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}@keyframes activity-sheet-in{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}.oc-activity-rail.is-leaving{pointer-events:none;animation:activity-sidecar-out .12s ease-in forwards}.oc-activity-rail.is-switching{pointer-events:none}.oc-activity-rail.is-switching .oc-activity-content{animation:activity-content-switch .12s ease-out}.oc-overlay-backdrop.is-activity{z-index:42}.oc-activity-content{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.oc-activity-rail-head{flex:0 0 auto;display:flex;align-items:center;gap:10px;min-height:58px;padding:10px 12px;border-bottom:1px solid var(--hairline);background:color-mix(in srgb,var(--surface) 94%,transparent)}.oc-activity-rail-head>div{min-width:0;display:flex;flex-direction:column;gap:2px}.oc-activity-rail-head strong{font-size:13px}.oc-activity-rail-head small{color:var(--muted);font-size:10.5px}.oc-activity-count{margin-left:auto}.oc-activity-close{appearance:none;width:34px;height:34px;display:grid;place-items:center;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--muted);cursor:pointer;font-size:18px}.oc-activity-close:hover{border-color:var(--hairline);background:var(--surface);color:var(--ink)}.oc-activity-tabs{flex:0 0 auto;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;padding:8px;border-bottom:1px solid var(--hairline)}.oc-activity-tabs button{appearance:none;min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:5px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--muted);cursor:pointer;font:inherit;font-size:11px;font-weight:650}.oc-activity-tabs button:hover,.oc-activity-tabs button.is-active{border-color:color-mix(in srgb,var(--green, #2e7d62) 22%,var(--hairline));background:color-mix(in srgb,var(--green, #2e7d62) 9%,var(--surface));color:var(--ink)}.oc-activity-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:10px}.oc-activity-empty{padding:28px 14px;color:var(--muted);text-align:center;font-size:12px}.oc-activity-card-wrap{position:relative;margin-bottom:10px;border-radius:var(--radius-md);transition:box-shadow var(--transition-fast)}.oc-activity-card-wrap.is-focused{box-shadow:0 0 0 3px color-mix(in srgb,var(--orange) 38%,transparent)}.oc-activity-card-wrap>section{margin:0;max-width:none}.oc-activity-locate{appearance:none;position:absolute;top:8px;right:86px;border:0;background:transparent;color:var(--muted-soft);cursor:pointer;font-size:9px}.oc-activity-locate:hover{color:var(--ink);text-decoration:underline}.oc-operation-technical-action{margin-left:8px;color:var(--muted-soft);font:10px ui-monospace,SFMono-Regular,Consolas,monospace}.oc-activity-rail .oc-artifact-card pre{max-height:220px;overflow:auto}.oc-task-journey-card,.oc-journey-compact{width:100%;margin:0;border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);background:var(--surface);box-shadow:0 8px 24px color-mix(in srgb,var(--ink) 6%,transparent)}.oc-task-journey-card{overflow:hidden}.oc-journey-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 14px 12px;border-bottom:1px solid var(--hairline)}.oc-journey-head>div{min-width:0;display:grid;gap:4px}.oc-journey-head strong{font-size:14px;line-height:1.35;text-transform:none;overflow-wrap:anywhere}.oc-journey-head small,.oc-journey-head time{color:var(--muted);font-size:10px}.oc-journey-head code{font-size:9px;overflow-wrap:anywhere}.oc-journey-state-line{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:10px;font-weight:700}.oc-journey-dot{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--muted)}.oc-journey-dot.is-success{background:var(--green)}.oc-journey-dot.is-progress{background:var(--blue)}.oc-journey-dot.is-warning{background:var(--orange)}.oc-journey-dot.is-error{background:var(--red)}.oc-journey-steps{display:grid;gap:7px;padding:12px 14px}.oc-journey-step{display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:7px;min-height:22px;color:var(--body);font-size:11px}.oc-journey-step>small{color:var(--muted-soft);font-size:9px}.oc-journey-step-icon{width:19px;height:19px;display:grid;place-items:center;border-radius:50%;background:var(--surface-muted);color:var(--muted);font-size:9px;font-weight:800}.oc-journey-step-icon.is-success{background:color-mix(in srgb,var(--green) 12%,var(--surface));color:var(--green)}.oc-journey-step-icon.is-error{background:color-mix(in srgb,var(--red) 10%,var(--surface));color:var(--red)}.oc-journey-step-icon.is-progress{background:color-mix(in srgb,var(--blue) 10%,var(--surface));color:var(--blue)}.oc-journey-outcome{margin:0 14px 12px;padding:10px 11px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--canvas-soft)}.oc-journey-outcome.is-error{border-color:color-mix(in srgb,var(--red) 25%,var(--hairline));background:color-mix(in srgb,var(--red) 5%,var(--surface))}.oc-journey-outcome.is-warning{border-color:color-mix(in srgb,var(--orange) 28%,var(--hairline));background:color-mix(in srgb,var(--orange) 5%,var(--surface))}.oc-journey-outcome strong{font-size:10px}.oc-journey-outcome p{margin:4px 0 0;color:var(--body);font-size:10.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.oc-journey-latest-run{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px;align-items:center;margin:0 14px 11px;padding:8px 0;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);color:var(--muted);font-size:9px}.oc-journey-latest-run code{min-width:0;overflow:hidden;text-overflow:ellipsis}.oc-journey-latest-run b,.oc-journey-run-row>span{font-size:9px}.oc-journey-latest-run b.is-error,.oc-journey-run-row>span.is-error{color:var(--red)}.oc-journey-latest-run b.is-success,.oc-journey-run-row>span.is-success{color:var(--green)}.oc-journey-latest-run b.is-progress,.oc-journey-run-row>span.is-progress{color:var(--blue)}.oc-journey-latest-run small{grid-column:2 / -1;color:var(--red)}.oc-journey-history,.oc-journey-technical,.oc-human-gate-details,.oc-artifact-details{margin:0 14px 11px;border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.oc-journey-history>summary,.oc-journey-technical>summary,.oc-human-gate-details>summary,.oc-artifact-details>summary{padding:9px 10px;color:var(--muted);cursor:pointer;font-size:10px;font-weight:650}.oc-journey-run-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 8px;padding:8px 10px;border-top:1px solid var(--hairline);font-size:9px}.oc-journey-run-row small,.oc-journey-run-row time{color:var(--muted-soft);font-size:8px}.oc-journey-actions{display:flex;flex-wrap:wrap;gap:6px;padding:0 14px 12px}.oc-journey-actions .btn,.oc-journey-compact .btn,.oc-activity-rail .oc-human-gate-card .btn,.oc-activity-rail .oc-artifact-card .btn{min-height:30px;padding:5px 9px;font-size:9px}.oc-journey-technical-body{max-height:320px;overflow:auto;border-top:1px solid var(--hairline)}.oc-journey-operation-row{display:grid;gap:5px;padding:9px 10px;border-bottom:1px solid var(--hairline)}.oc-journey-operation-row>div{display:flex;justify-content:space-between;gap:8px;color:var(--muted);font-size:9px}.oc-journey-operation-row small{color:var(--muted-soft);font-size:8px;overflow-wrap:anywhere}.oc-journey-operation-row pre{max-height:120px;margin:0;padding:7px;overflow:auto;border-radius:var(--radius-sm);background:var(--canvas-soft);font-size:8px;white-space:pre-wrap;overflow-wrap:anywhere}.oc-journey-operation-row pre.is-error{color:var(--red)}.oc-journey-compact{overflow:hidden}.oc-journey-compact>summary{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:9px;padding:11px 12px;cursor:pointer;list-style:none}.oc-journey-compact>summary::-webkit-details-marker{display:none}.oc-journey-compact>summary>span:nth-child(2){min-width:0;display:grid;gap:2px}.oc-journey-compact strong{font-size:11px;overflow-wrap:anywhere}.oc-journey-compact small{color:var(--muted);font-size:9px}.oc-journey-compact-body{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 12px;border-top:1px solid var(--hairline)}.oc-journey-compact-body code{min-width:0;color:var(--muted);font-size:8px;overflow-wrap:anywhere}.oc-activity-rail .oc-human-gate-card,.oc-activity-rail .oc-artifact-card{position:relative;inset:auto;z-index:auto;width:100%;max-width:none;margin:0;padding:13px;border-left-width:3px;border-radius:var(--radius-lg);animation:none;box-shadow:0 8px 24px color-mix(in srgb,var(--ink) 5%,transparent)}.oc-activity-rail .oc-human-gate-card header,.oc-activity-rail .oc-artifact-card header{align-items:flex-start}.oc-activity-rail .oc-human-gate-card header div,.oc-activity-rail .oc-artifact-card header div{min-width:0;display:grid;gap:3px}.oc-activity-rail .oc-human-gate-card header strong,.oc-activity-rail .oc-artifact-card header strong{font-size:12px;overflow-wrap:anywhere}.oc-activity-rail .oc-human-gate-card header code,.oc-activity-rail .oc-artifact-card header code{color:var(--muted-soft);font-size:8px;overflow-wrap:anywhere}.oc-human-gate-summary,.oc-activity-rail .oc-artifact-card>p{display:-webkit-box;margin:10px 0;overflow:hidden;color:var(--body);font-size:10px;line-height:1.5;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.oc-activity-rail .oc-human-gate-details,.oc-activity-rail .oc-artifact-details{margin:10px 0}.oc-activity-rail .oc-human-gate-details>div,.oc-activity-rail .oc-artifact-details>pre,.oc-activity-rail .oc-artifact-details>iframe{margin:0;padding:9px 10px;border-top:1px solid var(--hairline)}.oc-activity-rail .oc-artifact-details iframe{width:100%;min-height:220px;border:0}.oc-activity-rail .oc-human-gate-card footer,.oc-activity-rail .oc-artifact-card footer{display:flex;justify-content:flex-start;gap:6px;margin-top:10px;padding-top:10px}@media(max-width:1099px){.oc-activity-rail.is-sheet .oc-activity-list{padding-bottom:max(14px,env(safe-area-inset-bottom))}}@media(prefers-reduced-motion:reduce){.oc-activity-rail,.oc-semantic-activity,.oc-activity-card-wrap{animation:none!important;transition:none!important;scroll-behavior:auto}}