@abelxiaoxing/cadence 1.8.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +324 -117
  2. package/THIRD_PARTY_NOTICES.md +15 -0
  3. package/agents/design-explorer.md +14 -18
  4. package/agents/diagnosis-worker.md +14 -14
  5. package/agents/implementation-worker.md +16 -17
  6. package/config/workflow-task.example.json +7 -0
  7. package/docs/remote-access.md +60 -0
  8. package/docs/reuse-and-distribution.md +44 -0
  9. package/docs/service-management.md +108 -0
  10. package/licenses/bundled-web.txt +6245 -0
  11. package/licenses/pi-web-ui-MIT.txt +21 -0
  12. package/licenses/pi-web-ui-reuse.md +22 -0
  13. package/package.json +94 -21
  14. package/src/index.ts +21 -1802
  15. package/src/native-build.ts +6 -0
  16. package/src/native-client.ts +103 -0
  17. package/src/native-export.ts +58 -0
  18. package/src/native-history.ts +359 -0
  19. package/src/operator-cli.mjs +453 -1937
  20. package/src/plan-proposal.ts +87 -0
  21. package/src/sdk-worker.mjs +549 -0
  22. package/src/service/contracts/active.ts +82 -0
  23. package/src/service/contracts/budget.ts +148 -0
  24. package/src/service/contracts/build.ts +67 -0
  25. package/src/service/contracts/capture.ts +48 -0
  26. package/src/service/contracts/core.ts +33 -0
  27. package/src/service/contracts/current.ts +261 -0
  28. package/src/service/contracts/domain.ts +68 -0
  29. package/src/service/contracts/history.ts +2245 -0
  30. package/src/service/contracts/models.ts +139 -0
  31. package/src/service/coordination.ts +862 -0
  32. package/src/service/private-files.ts +204 -0
  33. package/src/service-cli.mjs +5592 -0
  34. package/src/service-client.ts +747 -0
  35. package/src/service-contract.ts +245 -0
  36. package/src/service-host.mjs +22382 -0
  37. package/src/service-http-client.ts +425 -0
  38. package/src/service-wire.ts +372 -0
  39. package/src/task-shell.ts +1045 -0
  40. package/src/task-store.ts +479 -0
  41. package/src/task-types.ts +184 -0
  42. package/src/verification-diagnostics.ts +29 -72
  43. package/src/worker-capture.mjs +1197 -0
  44. package/src/worker-public.mjs +1753 -0
  45. package/src/worker-redaction.mjs +608 -0
  46. package/src/worker-tools.mjs +202 -0
  47. package/web/dist/assets/KaTeX_AMS-Regular.ttf +0 -0
  48. package/web/dist/assets/KaTeX_AMS-Regular.woff +0 -0
  49. package/web/dist/assets/KaTeX_AMS-Regular.woff2 +0 -0
  50. package/web/dist/assets/KaTeX_Caligraphic-Bold.ttf +0 -0
  51. package/web/dist/assets/KaTeX_Caligraphic-Bold.woff +0 -0
  52. package/web/dist/assets/KaTeX_Caligraphic-Bold.woff2 +0 -0
  53. package/web/dist/assets/KaTeX_Caligraphic-Regular.ttf +0 -0
  54. package/web/dist/assets/KaTeX_Caligraphic-Regular.woff +0 -0
  55. package/web/dist/assets/KaTeX_Caligraphic-Regular.woff2 +0 -0
  56. package/web/dist/assets/KaTeX_Fraktur-Bold.ttf +0 -0
  57. package/web/dist/assets/KaTeX_Fraktur-Bold.woff +0 -0
  58. package/web/dist/assets/KaTeX_Fraktur-Bold.woff2 +0 -0
  59. package/web/dist/assets/KaTeX_Fraktur-Regular.ttf +0 -0
  60. package/web/dist/assets/KaTeX_Fraktur-Regular.woff +0 -0
  61. package/web/dist/assets/KaTeX_Fraktur-Regular.woff2 +0 -0
  62. package/web/dist/assets/KaTeX_Main-Bold.ttf +0 -0
  63. package/web/dist/assets/KaTeX_Main-Bold.woff +0 -0
  64. package/web/dist/assets/KaTeX_Main-Bold.woff2 +0 -0
  65. package/web/dist/assets/KaTeX_Main-BoldItalic.ttf +0 -0
  66. package/web/dist/assets/KaTeX_Main-BoldItalic.woff +0 -0
  67. package/web/dist/assets/KaTeX_Main-BoldItalic.woff2 +0 -0
  68. package/web/dist/assets/KaTeX_Main-Italic.ttf +0 -0
  69. package/web/dist/assets/KaTeX_Main-Italic.woff +0 -0
  70. package/web/dist/assets/KaTeX_Main-Italic.woff2 +0 -0
  71. package/web/dist/assets/KaTeX_Main-Regular.ttf +0 -0
  72. package/web/dist/assets/KaTeX_Main-Regular.woff +0 -0
  73. package/web/dist/assets/KaTeX_Main-Regular.woff2 +0 -0
  74. package/web/dist/assets/KaTeX_Math-BoldItalic.ttf +0 -0
  75. package/web/dist/assets/KaTeX_Math-BoldItalic.woff +0 -0
  76. package/web/dist/assets/KaTeX_Math-BoldItalic.woff2 +0 -0
  77. package/web/dist/assets/KaTeX_Math-Italic.ttf +0 -0
  78. package/web/dist/assets/KaTeX_Math-Italic.woff +0 -0
  79. package/web/dist/assets/KaTeX_Math-Italic.woff2 +0 -0
  80. package/web/dist/assets/KaTeX_SansSerif-Bold.ttf +0 -0
  81. package/web/dist/assets/KaTeX_SansSerif-Bold.woff +0 -0
  82. package/web/dist/assets/KaTeX_SansSerif-Bold.woff2 +0 -0
  83. package/web/dist/assets/KaTeX_SansSerif-Italic.ttf +0 -0
  84. package/web/dist/assets/KaTeX_SansSerif-Italic.woff +0 -0
  85. package/web/dist/assets/KaTeX_SansSerif-Italic.woff2 +0 -0
  86. package/web/dist/assets/KaTeX_SansSerif-Regular.ttf +0 -0
  87. package/web/dist/assets/KaTeX_SansSerif-Regular.woff +0 -0
  88. package/web/dist/assets/KaTeX_SansSerif-Regular.woff2 +0 -0
  89. package/web/dist/assets/KaTeX_Script-Regular.ttf +0 -0
  90. package/web/dist/assets/KaTeX_Script-Regular.woff +0 -0
  91. package/web/dist/assets/KaTeX_Script-Regular.woff2 +0 -0
  92. package/web/dist/assets/KaTeX_Size1-Regular.ttf +0 -0
  93. package/web/dist/assets/KaTeX_Size1-Regular.woff +0 -0
  94. package/web/dist/assets/KaTeX_Size1-Regular.woff2 +0 -0
  95. package/web/dist/assets/KaTeX_Size2-Regular.ttf +0 -0
  96. package/web/dist/assets/KaTeX_Size2-Regular.woff +0 -0
  97. package/web/dist/assets/KaTeX_Size2-Regular.woff2 +0 -0
  98. package/web/dist/assets/KaTeX_Size3-Regular.ttf +0 -0
  99. package/web/dist/assets/KaTeX_Size3-Regular.woff +0 -0
  100. package/web/dist/assets/KaTeX_Size3-Regular.woff2 +0 -0
  101. package/web/dist/assets/KaTeX_Size4-Regular.ttf +0 -0
  102. package/web/dist/assets/KaTeX_Size4-Regular.woff +0 -0
  103. package/web/dist/assets/KaTeX_Size4-Regular.woff2 +0 -0
  104. package/web/dist/assets/KaTeX_Typewriter-Regular.ttf +0 -0
  105. package/web/dist/assets/KaTeX_Typewriter-Regular.woff +0 -0
  106. package/web/dist/assets/KaTeX_Typewriter-Regular.woff2 +0 -0
  107. package/web/dist/assets/cadence.css +2 -0
  108. package/web/dist/assets/cadence.js +7 -0
  109. package/web/dist/assets/markdown.js +296 -0
  110. package/web/dist/assets/react.js +9 -0
  111. package/web/dist/assets/rolldown-runtime.js +1 -0
  112. package/web/dist/assets/timeline-client.js +41 -0
  113. package/web/dist/assets/vis-timeline.css +1274 -0
  114. package/web/dist/assets/vis-timeline.js +32 -0
  115. package/web/dist/index.html +18 -0
  116. package/web/dist/manifest.json +505 -0
  117. package/config/plan-draft.example.json +0 -125
  118. package/config/plan-draft.multiple-tasks.example.json +0 -375
  119. package/config/plan-draft.quick.example.json +0 -78
  120. package/prompts/abel-design.md +0 -382
  121. package/prompts/abel-diagnose.md +0 -71
  122. package/prompts/abel-implement.md +0 -284
  123. package/prompts/abel-init.md +0 -52
  124. package/src/activation.ts +0 -44
  125. package/src/activity-contracts.ts +0 -82
  126. package/src/agent-registry.ts +0 -53
  127. package/src/apply-transaction.ts +0 -1437
  128. package/src/artifact-store.ts +0 -213
  129. package/src/build-windows-job.mjs +0 -95
  130. package/src/candidate-artifact.ts +0 -143
  131. package/src/candidate-context.ts +0 -289
  132. package/src/candidate-patch.ts +0 -271
  133. package/src/candidate-workspace.ts +0 -80
  134. package/src/canonical.ts +0 -16
  135. package/src/change-contract-schema.ts +0 -191
  136. package/src/change-contract.ts +0 -324
  137. package/src/change-verification.ts +0 -1617
  138. package/src/contracts.ts +0 -2466
  139. package/src/control-contracts.ts +0 -382
  140. package/src/delivery-compiler.ts +0 -1805
  141. package/src/delivery-revision.ts +0 -42
  142. package/src/design-control.ts +0 -1299
  143. package/src/design-diagnostics.ts +0 -181
  144. package/src/design-journal.ts +0 -1773
  145. package/src/directory-sync.ts +0 -36
  146. package/src/durable-contracts.ts +0 -227
  147. package/src/durable-workflow.ts +0 -822
  148. package/src/evidence-draft.ts +0 -122
  149. package/src/execution-profile.ts +0 -64
  150. package/src/execution-retention.ts +0 -77
  151. package/src/file-snapshot.ts +0 -163
  152. package/src/implement-continuation.ts +0 -559
  153. package/src/implement-graph.ts +0 -690
  154. package/src/implement-plan.ts +0 -72
  155. package/src/install-config.d.mts +0 -6
  156. package/src/isolation-backend.ts +0 -353
  157. package/src/model-source.ts +0 -22
  158. package/src/openspec-cli.ts +0 -494
  159. package/src/operator-cli-entry.mjs +0 -24
  160. package/src/operator-tools.ts +0 -309
  161. package/src/package-candidate-process.ts +0 -206
  162. package/src/package-candidate.ts +0 -24
  163. package/src/package-delivery.ts +0 -486
  164. package/src/package-state.ts +0 -320
  165. package/src/package-verification.ts +0 -635
  166. package/src/package-workflow.ts +0 -305
  167. package/src/packet-runtime.ts +0 -459
  168. package/src/phase-execution.ts +0 -2163
  169. package/src/pi-adapter.ts +0 -19
  170. package/src/plan-draft-summary.ts +0 -527
  171. package/src/plan-draft.ts +0 -502
  172. package/src/remove-path.ts +0 -32
  173. package/src/run-state.ts +0 -420
  174. package/src/run-store.ts +0 -1179
  175. package/src/safe-path.ts +0 -77
  176. package/src/scoped-grep-worker.mjs +0 -23
  177. package/src/scoped-tools.ts +0 -775
  178. package/src/single-task-draft.ts +0 -142
  179. package/src/sqlite-schema.ts +0 -171
  180. package/src/state-root.ts +0 -215
  181. package/src/storage-schema.ts +0 -360
  182. package/src/subagent-activity.ts +0 -1417
  183. package/src/subagent-process.ts +0 -476
  184. package/src/task-ledger.ts +0 -1338
  185. package/src/transport-budget.ts +0 -50
  186. package/src/verification-capability.ts +0 -1191
  187. package/src/verification-environment-io.ts +0 -389
  188. package/src/verification-environment.ts +0 -162
  189. package/src/verification-identity.ts +0 -77
  190. package/src/verification-scan.ts +0 -64
  191. package/src/windows-job-backend.ts +0 -419
  192. package/src/windows-job.c +0 -149
  193. package/src/workflow-engine.ts +0 -28
  194. package/src/workflow-policy.ts +0 -1670
  195. package/src/workflow-recovery-policy.ts +0 -97
  196. package/src/workflow-scheduling.ts +0 -105
  197. package/src/workflow-state-machine.ts +0 -4341
  198. package/src/workflow-status.ts +0 -576
  199. package/src/workspace-io-entry.mjs +0 -76
  200. package/src/workspace-io-worker.mjs +0 -1312
  201. package/src/workspace-io.ts +0 -89
  202. package/src/workspace-store.ts +0 -634
@@ -0,0 +1,202 @@
1
+ import { Type } from "typebox";
2
+ import { ContractError, LIMITS } from "./worker-public.mjs";
3
+ import {
4
+ measureData,
5
+ own,
6
+ ownArray,
7
+ sanitizeData,
8
+ TextSanitizer,
9
+ } from "./worker-redaction.mjs";
10
+
11
+ /** No stock bash definition/OutputAccumulator: raw output is never spilled. */
12
+ export function captureBash(
13
+ cwd,
14
+ secrets,
15
+ fail,
16
+ createLocalBashOperations,
17
+ queue,
18
+ ) {
19
+ return {
20
+ name: "bash",
21
+ label: "bash",
22
+ description:
23
+ "Execute a shell command in the working directory. Output is bounded and redacted; no raw spill file.",
24
+ parameters: Type.Object({
25
+ command: Type.String(),
26
+ timeout: Type.Optional(Type.Number()),
27
+ }),
28
+ async execute(_id, args, signal, onUpdate) {
29
+ const command = own(args, "command"),
30
+ timeout = own(args, "timeout");
31
+ if (
32
+ typeof command !== "string" ||
33
+ (timeout !== undefined && (!Number.isFinite(timeout) || timeout <= 0))
34
+ )
35
+ throw new ContractError();
36
+ const local = new AbortController();
37
+ const abort = () => local.abort();
38
+ const prefix = queue.reserve(
39
+ secrets.reduce((n, value) => n + Buffer.byteLength(value), 0) * 4 +
40
+ 65536,
41
+ );
42
+ signal?.addEventListener("abort", abort, { once: true });
43
+ if (signal?.aborted) abort();
44
+ const decoder = new TextDecoder("utf-8", { fatal: true });
45
+ const sanitizer = new TextSanitizer(secrets);
46
+ let output = "",
47
+ sourceBytes = 0,
48
+ failed = false;
49
+ const append = (text) => {
50
+ if (
51
+ Buffer.byteLength(output) + Buffer.byteLength(text) >
52
+ LIMITS.detailBytes
53
+ )
54
+ throw new ContractError("oversize");
55
+ // The redacted accumulator is Cadence-owned retention too, not an
56
+ // uncharged escape from the shared queue. No raw spill on exhaustion.
57
+ prefix.grow(Buffer.byteLength(text));
58
+ output += text;
59
+ };
60
+ try {
61
+ const result = await createLocalBashOperations().exec(command, cwd, {
62
+ signal: local.signal,
63
+ timeout,
64
+ onData(data) {
65
+ if (failed) return;
66
+ let raw;
67
+ try {
68
+ raw = queue.reserve(data.length * 12);
69
+ // Charge original bytes synchronously BEFORE decoding/copying.
70
+ sourceBytes += data.length;
71
+ if (
72
+ data.length > LIMITS.workerQueueBytes ||
73
+ sourceBytes > LIMITS.detailBytes
74
+ )
75
+ throw new ContractError("oversize");
76
+ append(sanitizer.write(decoder.decode(data, { stream: true })));
77
+ let tail = output.slice(-4096);
78
+ if (/^[\uDC00-\uDFFF]/.test(tail)) tail = tail.slice(1);
79
+ onUpdate?.({
80
+ content: [{ type: "text", text: tail }],
81
+ details:
82
+ output.length > tail.length
83
+ ? {
84
+ truncation: {
85
+ observedBytes: Buffer.byteLength(output),
86
+ updatePreview: true,
87
+ },
88
+ }
89
+ : {},
90
+ });
91
+ } catch {
92
+ failed = true;
93
+ local.abort();
94
+ fail();
95
+ } finally {
96
+ raw?.release();
97
+ }
98
+ },
99
+ });
100
+ try {
101
+ append(sanitizer.write(decoder.decode()));
102
+ append(sanitizer.end());
103
+ } catch {
104
+ fail();
105
+ throw new ContractError();
106
+ }
107
+ if (failed) throw new ContractError("capacity");
108
+ if (result.exitCode === null) throw new ContractError("unavailable");
109
+ // Match the public stock tool's nonzero result/error semantics. The SDK
110
+ // turns a throw into isError; this is never a parent check receipt.
111
+ if (result.exitCode !== 0)
112
+ throw new Error(
113
+ `${output}\nCommand exited with code ${result.exitCode}`,
114
+ );
115
+ return {
116
+ content: [{ type: "text", text: output || "(no output)" }],
117
+ details: {},
118
+ };
119
+ } finally {
120
+ prefix.release();
121
+ signal?.removeEventListener("abort", abort);
122
+ }
123
+ },
124
+ };
125
+ }
126
+ /** Reserve synchronous tool update ingress before the SDK's async emit queue.
127
+ * The installed SDK forwards the exact partialResult object to awaited listeners.
128
+ * The reservation is released only by that original listener's settlement. */
129
+ export class ToolIngress {
130
+ constructor(secrets, fail, queue) {
131
+ this.queue = queue;
132
+ this.secrets = secrets;
133
+ this.fail = fail;
134
+ this.bytes = 0;
135
+ this.frames = 0;
136
+ this.leases = new WeakMap();
137
+ }
138
+ wrap(tools) {
139
+ return ownArray(tools).map((tool) => ({
140
+ ...tool,
141
+ execute: (id, args, signal, update, ...rest) =>
142
+ tool.execute(
143
+ id,
144
+ args,
145
+ signal,
146
+ (value) => {
147
+ if (!update) return;
148
+ let charged = 0;
149
+ let lease;
150
+ let handed = false;
151
+ try {
152
+ const reserved = this.queue.reserveSource();
153
+ lease = reserved.lease;
154
+ // Only public content and ordinary details; no opaque provider object.
155
+ const selected = { content: own(value, "content") };
156
+ const details = own(value, "details");
157
+ if (details !== undefined) selected.details = details;
158
+ const bytes = measureData(selected, reserved.bytes);
159
+ if (
160
+ this.bytes + bytes >
161
+ LIMITS.workerQueueBytes - LIMITS.ownerControlBytes ||
162
+ this.frames + 1 >
163
+ LIMITS.workerQueueFrames - LIMITS.controlFrames
164
+ )
165
+ throw new ContractError("capacity");
166
+ lease.shrink(bytes);
167
+ this.bytes += bytes;
168
+ this.frames++;
169
+ charged = bytes;
170
+ const copy = JSON.parse(sanitizeData(selected, this.secrets));
171
+ this.leases.set(copy, { bytes, lease });
172
+ handed = true;
173
+ // The current SDK returns void, but a returned promise must still
174
+ // be rejection-handled. Neither throw nor rejection proves an
175
+ // already enqueued callback released its copy; only release(event)
176
+ // discharges that original subscription's charge.
177
+ Promise.resolve(update(copy)).catch(() => this.fail());
178
+ } catch {
179
+ if (!handed) lease?.release();
180
+ if (charged && !handed) {
181
+ this.bytes -= charged;
182
+ this.frames--;
183
+ }
184
+ this.fail();
185
+ }
186
+ },
187
+ ...rest,
188
+ ),
189
+ }));
190
+ }
191
+ release(event) {
192
+ if (own(event, "type") !== "tool_execution_update") return;
193
+ const result = own(event, "partialResult");
194
+ const retained = this.leases.get(result);
195
+ if (retained !== undefined) {
196
+ retained.lease.release();
197
+ this.bytes -= retained.bytes;
198
+ this.frames--;
199
+ this.leases.delete(result);
200
+ }
201
+ }
202
+ }
@@ -0,0 +1,2 @@
1
+ @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular.woff2)format("woff2"),url(/assets/KaTeX_AMS-Regular.woff)format("woff"),url(/assets/KaTeX_AMS-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold.woff2)format("woff2"),url(/assets/KaTeX_Caligraphic-Bold.woff)format("woff"),url(/assets/KaTeX_Caligraphic-Bold.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular.woff2)format("woff2"),url(/assets/KaTeX_Caligraphic-Regular.woff)format("woff"),url(/assets/KaTeX_Caligraphic-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold.woff2)format("woff2"),url(/assets/KaTeX_Fraktur-Bold.woff)format("woff"),url(/assets/KaTeX_Fraktur-Bold.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular.woff2)format("woff2"),url(/assets/KaTeX_Fraktur-Regular.woff)format("woff"),url(/assets/KaTeX_Fraktur-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold.woff2)format("woff2"),url(/assets/KaTeX_Main-Bold.woff)format("woff"),url(/assets/KaTeX_Main-Bold.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic.woff2)format("woff2"),url(/assets/KaTeX_Main-BoldItalic.woff)format("woff"),url(/assets/KaTeX_Main-BoldItalic.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic.woff2)format("woff2"),url(/assets/KaTeX_Main-Italic.woff)format("woff"),url(/assets/KaTeX_Main-Italic.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular.woff2)format("woff2"),url(/assets/KaTeX_Main-Regular.woff)format("woff"),url(/assets/KaTeX_Main-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic.woff2)format("woff2"),url(/assets/KaTeX_Math-BoldItalic.woff)format("woff"),url(/assets/KaTeX_Math-BoldItalic.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic.woff2)format("woff2"),url(/assets/KaTeX_Math-Italic.woff)format("woff"),url(/assets/KaTeX_Math-Italic.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Bold.woff)format("woff"),url(/assets/KaTeX_SansSerif-Bold.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Italic.woff)format("woff"),url(/assets/KaTeX_SansSerif-Italic.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular.woff2)format("woff2"),url(/assets/KaTeX_SansSerif-Regular.woff)format("woff"),url(/assets/KaTeX_SansSerif-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular.woff2)format("woff2"),url(/assets/KaTeX_Script-Regular.woff)format("woff"),url(/assets/KaTeX_Script-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular.woff2)format("woff2"),url(/assets/KaTeX_Size1-Regular.woff)format("woff"),url(/assets/KaTeX_Size1-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular.woff2)format("woff2"),url(/assets/KaTeX_Size2-Regular.woff)format("woff"),url(/assets/KaTeX_Size2-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size3-Regular.woff2)format("woff2"),url(/assets/KaTeX_Size3-Regular.woff)format("woff"),url(/assets/KaTeX_Size3-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular.woff2)format("woff2"),url(/assets/KaTeX_Size4-Regular.woff)format("woff"),url(/assets/KaTeX_Size4-Regular.ttf)format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular.woff2)format("woff2"),url(/assets/KaTeX_Typewriter-Regular.woff)format("woff"),url(/assets/KaTeX_Typewriter-Regular.ttf)format("truetype")}.katex{text-indent:0;text-rendering:auto;font:1.21em/1.2 KaTeX_Main,Times New Roman,serif;position:relative}.katex *{border-color:currentColor;-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.18.7"}.katex .katex-mathml{clip-path:inset(50%);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{white-space:nowrap;width:min-content;position:relative}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;table-layout:fixed;display:inline-table}.katex .vlist-r{display:table-row}.katex .vlist{vertical-align:bottom;display:table-cell;position:relative}.katex .vlist>span{height:0;display:block;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{width:0;overflow:hidden}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{vertical-align:bottom;width:2px;min-width:2px;font-size:1px;display:table-cell}.katex .katex-vbox{flex-direction:column;align-items:baseline;display:inline-flex}.katex .katex-thinbox{flex-direction:row;width:0;max-width:0;display:inline-flex}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{line-height:0;display:inline}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .katex-hdashline{border-bottom-style:dashed;width:100%;display:inline-block}.katex .sqrt>.katex-root{margin-left:.277778em;margin-right:-.555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.833333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.16667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.33333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.66667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.45667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.14667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.714286em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.857143em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.14286em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.28571em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.42857em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.71429em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.05714em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.46857em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.96286em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.55429em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.11111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.33333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.30444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.76444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.416667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.583333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.833333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.72833em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.07333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.347222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.416667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.486111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.694444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.833333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.44028em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.72778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.289352em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.347222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.405093em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.520833em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.578704em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.694444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.833333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.20023em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.43981em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.24108em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.289296em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.385728em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.433944em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.48216em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.578592em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.694311em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.833173em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.19961em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.200965em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.241158em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.281351em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.321543em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.361736em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.401929em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.482315em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.694534em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.833601em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{width:.12em;display:inline-block}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{min-width:1px;display:inline-block}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;height:inherit;width:100%;display:block;position:absolute}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;min-width:0;max-width:none;min-height:0;max-height:none}.katex .katex-stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{width:50.2%;position:absolute;left:0;overflow:hidden}.katex .halfarrow-right{width:50.2%;position:absolute;right:0;overflow:hidden}.katex .brace-left{width:25.1%;position:absolute;left:0;overflow:hidden}.katex .brace-center{width:50%;position:absolute;left:25%;overflow:hidden}.katex .brace-right{width:25.1%;position:absolute;right:0;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{text-align:left;display:inline-block;position:absolute;right:calc(50% + .3em)}.katex .cd-label-right{text-align:right;display:inline-block;position:absolute;left:calc(50% + .3em)}.katex-display{text-align:center;margin:1em 0;display:block}.katex-display>.katex{text-align:center;white-space:nowrap;display:block}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}:root{--bg:#0d0e12;--bg-elev:#14161c;--bg-elev2:#1a1d26;--border:#262a35;--border-soft:#1e2230;--text:#e6e8ef;--text-dim:#9aa1b4;--text-faint:#6b7284;--accent:#8b5cf6;--accent-soft:#8b5cf624;--green:#34d399;--green-soft:#34d3991f;--red:#f87171;--red-soft:#f871711f;--amber:#fbbf24;--blue:#3b82f6;--blue-soft:#3b82f61f;--term-bg:#0b0d12;--term-fg:#e6e8ef;--term-cursor:#8b5cf6;--term-cursor-accent:#0b0d12;--term-selection:#8b5cf659;--term-black:#1a1d26;--term-red:#f87171;--term-green:#34d399;--term-yellow:#fbbf24;--term-blue:#60a5fa;--term-magenta:#c084fc;--term-cyan:#22d3ee;--term-white:#e6e8ef;--term-bright-black:#6b7284;--term-bright-red:#f87171;--term-bright-green:#34d399;--term-bright-yellow:#fbbf24;--term-bright-blue:#60a5fa;--term-bright-magenta:#c084fc;--term-bright-cyan:#22d3ee;--term-bright-white:#fff;--mono:"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--mermaid-font-size:12px;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Roboto, Helvetica, Arial, sans-serif;--tooltip-bg:#232733;--code-bg:#0b0d12;--code-text:#c9d1d9;--code-border:var(--border-soft);--code-pad:8px 10px;--card-body-pad:4px 14px 12px;--err-text:#f0a5a5;--red-text:#fca5a5;--amber-text:#fcd34d;--info-blue:#60a5fa;--link:#a78bfa;--link-hover:#c4b5fd;--link-soft:#ddd6fe;--md-strong:#f3f4f6;--skill-blue:#5eb3ff;--plugin-purple:#b58cff;--auth-green:#6ee7a0;--scroll-thumb:#2a2f3d;--scroll-thumb-hover:#3a4152;--notice-err-bg:#401d23;--notice-warn-bg:#38251f;--notice-info-bg:#1b2544;--notice-err-border:#ef4444;--notice-warn-border:#f59e0b;--notice-info-border:#3b82f6;--send-blue:#3b82f6;--send-blue-hover:#2563eb;--stop-red:#ef4444;--stop-red-hover:#dc2626;--brand-grad-a:#8b5cf6;--brand-grad-b:#6366f1;--on-amber:#1a1a1a;--search-active-fg:#1a1d26;--switch-knob:#fff;--bg-elev3:#ffffff0f;--sunken-bg:#00000026;--glow-015:#ffffff04;--glow-025:#ffffff06;--glow-03:#ffffff08;--glow-04:#ffffff0a;--glow-05:#ffffff0d;--glow-12:#ffffff1f;--glow-18:#ffffff2e;--glow-22:#ffffff38;--glow-38:#ffffff61;--control-fg:#9aa1b4;--control-bg:#1a1d26;--control-border:#262a35;--bg-image:none;--bg-image-dim:.78;--bg-image-blur:0px;--wallpaper-panel-alpha:62%;--topbar-bg:color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha,62%), transparent);--statusbar-bg:color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha,62%), transparent);--panel-bg:color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha,62%), transparent);--card-bg:color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha,62%), transparent);--chip-bg:color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha,62%), transparent);--msgs-bg:color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha,62%), transparent);--inputbox-bg:color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha,62%), transparent);--menu-bg:var(--bg-elev2)}.layout{--side-dock-w:37px;flex:1;min-height:0;display:flex;position:relative}.main{background:var(--msgs-bg,transparent);--chat-pad:20px;--chat-max:860px;--chat-rail:0px;--chat-inset:max(var(--chat-pad), (100% - var(--chat-max)) / 2, var(--chat-rail));--composer-pad-top:12px;--composer-strip:calc(var(--composer-pad-top) + var(--quick-row-h,0px) + 6px);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}@media (min-width:641px){.main{--chat-rail:48px}}.panel{background:var(--panel-bg,var(--bg-elev));border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:240px;min-height:0;display:flex;position:relative}.panel-right{border-right:none;border-left:1px solid var(--border)}.drawer-left .panel{width:var(--left-w,240px)}.drawer-right .panel{width:var(--right-w,240px)}.layout:has(.side-dock-left:not(.side-dock-float)) .panel-rail-left{left:calc(var(--side-dock-w,37px) + 4px)}.layout:has(.side-dock-right:not(.side-dock-float)) .panel-rail-right{right:calc(var(--side-dock-w,37px) + 4px)}.panel-header{border-bottom:1px solid var(--border-soft);flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 12px 8px;display:flex}.panel-right .panel-body,.sessions-scroll{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;padding-bottom:56px}.panel-drawer{display:contents}.panel-drawer.hidden{display:none}.drawer-backdrop{z-index:55;background:#00000080;position:fixed;inset:0}@media (prefers-reduced-motion:no-preference){.drawer-backdrop{animation:.2s drawer-fade}}.drawer-backdrop.persistent{opacity:0;pointer-events:none;animation:none}@media (prefers-reduced-motion:no-preference){.drawer-backdrop.persistent{transition:opacity .25s}}.drawer-backdrop.persistent.on{opacity:1;pointer-events:auto}.panel-drawer.drawer-dragging{transition:none}.scm-body{flex:1;min-width:0;min-height:0;display:flex}.scm-files,.scm-history{width:var(--scm-sidebar-w,300px);border-right:1px solid var(--border-soft);flex-direction:column;flex-shrink:0;max-width:calc(100% - 220px);min-height:0;display:flex}.scm-files-header{letter-spacing:.4px;color:var(--text-faint);border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;padding:8px 12px;font-size:12px;font-weight:600;display:flex}.scm-files-count{font-family:var(--mono);color:var(--text-dim);background:var(--bg-elev2);border:1px solid var(--border);border-radius:999px;padding:0 7px;font-size:11px}.scm-files-list,.scm-history-list{flex:1;min-height:0;overflow-y:auto}.scm-file{cursor:pointer;border-left:2px solid #0000;align-items:center;gap:6px;padding:5px 10px;font-size:13px;display:flex}.scm-file:hover{background:var(--accent-soft)}.scm-file.active{background:var(--accent-soft);border-left-color:var(--accent)}.scm-file-actions{gap:2px;margin-left:auto;display:none}.scm-file:hover .scm-file-actions{display:inline-flex}.scm-file-xy{width:13px;height:18px;font-family:var(--mono);flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:inline-flex}.scm-file-xy.x{color:var(--green)}.scm-file-xy.y{color:var(--red)}.scm-file-xy.q{color:var(--amber)}.scm-file-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--mono);color:var(--text);flex:1;font-size:12.5px;overflow:hidden}.scm-file-stat{font-family:var(--mono);flex-shrink:0;font-size:11px}.scm-file-stat .add{color:var(--green)}.scm-file-stat .del{color:var(--red)}.scm-diff{background:var(--bg);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.scm-diff-header{border-bottom:1px solid var(--border-soft);font-family:var(--mono);color:var(--text-dim);background:var(--bg-elev);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:8px;padding:8px 14px;font-size:12.5px;display:flex;overflow:hidden}.scm-diff-loading{color:var(--text-faint);flex-shrink:0;font-size:11px}.scm-diff-body{flex:1;min-height:0;padding:6px 0 12px;overflow:auto}.scm-diff-section{letter-spacing:.4px;text-transform:uppercase;color:var(--text-faint);padding:8px 14px 4px;font-size:11px;font-weight:600}.scm-diff-pre{font-family:var(--mono);margin:0;font-size:12.5px;line-height:1.55}.scm-diff-line{white-space:pre-wrap;word-break:break-word;color:var(--text-dim);padding:0 14px}.scm-diff-line.hunk{color:var(--accent);background:var(--accent-soft)}@media (max-width:768px){.scm-files,.scm-history{width:200px}}.gs-backdrop{align-items:flex-start;padding-top:10vh}.gs-modal{border:1px solid var(--border);background:var(--bg-elev2,var(--bg-elev));border-radius:12px;flex-direction:column;width:min(640px,92vw);max-height:70vh;display:flex;overflow:hidden;box-shadow:0 18px 60px #00000073}.gs-input-row{border-bottom:1px solid var(--border);color:var(--text-faint);align-items:center;gap:10px;padding:12px 14px;display:flex}.gs-input-row svg{flex:none}.gs-input-row input{min-width:0;color:var(--text);background:0 0;border:none;outline:none;flex:1;font-size:15px}.gs-close{color:var(--text-faint);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:4px;display:inline-flex}.gs-close:hover{color:var(--text);background:var(--bg-elev3)}.gs-results{flex:1;min-height:0;padding:6px 8px 10px;overflow-y:auto}.gs-empty{color:var(--text-faint);text-align:center;padding:26px 12px;font-size:13px}.gs-section+.gs-section{margin-top:10px}.gs-section-head{letter-spacing:.6px;text-transform:uppercase;color:var(--text-faint);align-items:center;gap:6px;padding:6px 8px 4px;font-size:11px;font-weight:700;display:flex}.gs-section-head em{color:var(--accent);font-style:normal;font-weight:600}.gs-item{width:100%;color:var(--text-dim);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:7px;flex-direction:column;gap:2px;padding:7px 10px;font-size:13px;display:flex}.gs-item:hover:not(:disabled),.gs-item.active:not(:disabled){background:var(--bg-elev3)}.gs-item:disabled{cursor:default;opacity:.55}.gs-item-wrap{position:relative}.gs-item-wrap>.gs-item{padding-right:76px}.gs-quote{border:1px solid var(--border);background:var(--bg-elev3);color:var(--text-dim);cursor:pointer;white-space:nowrap;border-radius:6px;padding:3px 8px;font-size:11px;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.gs-quote:hover{color:var(--text);border-color:var(--accent)}.gs-item-title{color:var(--text);white-space:nowrap;text-overflow:ellipsis;align-items:baseline;gap:8px;font-size:13px;font-weight:600;display:flex;overflow:hidden}.gs-item-meta{color:var(--text-dim);background:var(--bg-elev3);border-radius:4px;padding:1px 6px;font-size:11px;font-style:normal;font-weight:500}.gs-item-sub{color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.gs-truncated{color:var(--amber,#e6b450);padding:5px 10px;font-size:11.5px}.gs-foot{border-top:1px solid var(--border);color:var(--text-faint);gap:14px;padding:8px 14px;font-size:11px;display:flex}.messages-wrap{min-height:0;margin-bottom:calc(-1 * var(--composer-strip));flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden;container:msgs/inline-size}:is(.main:has(.goalbar) .messages-wrap,.main:has(.plan-board) .messages-wrap,.main:has(.dialog-inline) .messages-wrap){margin-bottom:0}:is(.main:has(.goalbar) .scroll-bottom,.main:has(.plan-board) .scroll-bottom,.main:has(.dialog-inline) .scroll-bottom){bottom:4px}:is(.main:has(.goalbar) .qn-rail,.main:has(.plan-board) .qn-rail,.main:has(.dialog-inline) .qn-rail){bottom:10px}.messages{padding-block:20px calc(26px + var(--quick-row-h,0px));padding-inline:max(0px, calc(var(--chat-inset) - var(--msgs-gutter,0px)));scrollbar-gutter:stable both-edges;overflow-anchor:none;flex:1;overflow-y:auto}.messages.anchor-live{overflow-anchor:auto}.msg-lazy-ph{box-sizing:border-box;contain:layout style;margin:0}.msg{content-visibility:auto;contain-intrinsic-size:auto 160px;margin:0;padding:6px 0 14px;scroll-margin-top:84px}.chead-copy.copied,.msg-text-copy.copied{color:var(--green)}:where(.msg:hover) .msg-action,.msg-action:where(:focus-visible){opacity:1}.md{overflow-wrap:anywhere;word-break:break-word;min-width:0}.md>pre,.msg-text pre{max-width:100%;overflow-x:auto}.msg-text{color:var(--text);overflow-wrap:anywhere;word-break:break-word;min-width:0;position:relative}.msg-text p{margin:6px 0}.msg-text p:first-child{margin-top:0}.msg-text p:last-child{margin-bottom:0}.msg-text ul,.msg-text ol{margin:6px 0;padding-left:22px}.msg-text li{margin:2px 0}.msg-text blockquote{border-left:3px solid var(--accent);color:var(--text-dim);margin:8px 0;padding:2px 14px}.msg-text table{border-collapse:collapse;max-width:100%;margin:8px 0;display:block;overflow-x:auto}.msg-text th,.msg-text td{border:1px solid var(--border);padding:4px 10px}.msg-text a{color:var(--link);overflow-wrap:anywhere}.msg-text code{font-family:var(--mono);background:var(--bg-elev2);border:1px solid var(--border-soft);border-radius:4px;padding:1px 5px;font-size:12.5px}.msg-text .katex{font-size:1.05em}.codeblock{margin:10px 0;position:relative}.codeblock pre{background:var(--chip-bg,var(--code-bg));border:1px solid var(--border);border-radius:8px;margin:0;padding:10px 0;overflow-x:auto}.code-line{align-items:flex-start;min-width:0;padding:0 14px;display:flex}.code-line .code-num{text-align:right;color:var(--text-faint);font-family:var(--mono);-webkit-user-select:none;user-select:none;flex:none;padding-right:12px;font-size:12.5px;line-height:1.55}.codeblock code.code-line-body{font-family:var(--mono);white-space:pre-wrap;word-break:break-word;background:0 0;border:none;flex:1;min-width:0;padding:0;font-size:12.5px;line-height:1.55}.copy-btn{z-index:2;width:28px;height:28px;color:var(--text-faint);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:50%;flex:none;justify-content:center;align-items:center;margin:0;padding:0;font-size:14px;line-height:1;display:inline-flex;position:absolute;top:8px;right:8px}@media (prefers-reduced-motion:no-preference){.copy-btn{transition:opacity .15s,color .15s}}.codeblock:hover .copy-btn{opacity:.55}.copy-btn:hover,.copy-btn:focus-visible{opacity:1;color:var(--text);background:0 0}.mermaid-block-error .codeblock{margin:6px 0 0}.mermaid-block:hover .copy-btn{opacity:.55}.toolcall-icon{color:var(--text-dim)}.toolcall-icon.tc-tone-exec{color:var(--term-bright-green)}.toolcall-icon.tc-tone-read{color:var(--term-bright-blue)}.toolcall-icon.tc-tone-edit{color:var(--amber)}.toolcall-icon.tc-tone-search{color:var(--term-bright-cyan)}.toolcall-icon.tc-tone-code{color:var(--term-bright-magenta)}.toolcall-icon.tc-tone-agent{color:var(--term-bright-red)}.toolcall-icon.tc-tone-ui{color:var(--accent)}.chead-icon.thinking-icon,.chead-icon.toolcall-icon{background:color-mix(in srgb, currentColor 13%, transparent);border-radius:5px;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:14px;display:inline-flex}.toolcall{border:1px solid var(--border);background:var(--card-bg,var(--bg-elev));border-radius:8px;margin:8px 0;overflow:hidden}.toolcall-name{font-family:var(--mono);color:var(--text);font-weight:600}.chead-title.toolcall-name{flex:0 auto;min-width:5ch;max-width:40%}.toolcall-status{width:20px;height:28px;color:var(--text-faint);flex:none;justify-content:center;align-items:center;font-size:14px;display:inline-flex}.toolcall-status>svg{width:14px;height:14px}.toolcall-name+.toolcall-status{margin-left:-4px}.toolcall.run .toolcall-status{color:var(--amber)}@media (prefers-reduced-motion:no-preference){.toolcall.run .toolcall-status>svg{animation:1s linear infinite toolcall-spin}}.toolcall.ok .toolcall-status{color:var(--green)}.toolcall.err .toolcall-status{color:var(--red)}.toolcall-spacer{flex:1}.toolcall-kill{border:1px solid var(--red);background:var(--red-soft);height:26px;color:var(--red);cursor:pointer;border-radius:9px;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 9px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}@media (prefers-reduced-motion:no-preference){.toolcall-kill{transition:background .15s,color .15s,border-color .15s}}.toolcall-kill:hover{background:var(--red);border-color:var(--red);color:#fff}.chead{box-sizing:border-box;width:100%;min-width:0;max-width:100%;min-height:32px;color:var(--text);-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:2px 8px 2px 4px;font-size:12.5px;display:flex;position:relative}div.chead[role=button]{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}div.chead[role=button]:hover{background:var(--bg-elev2)}div.chead[role=button]:focus-visible,.chead-toggle:focus-visible,.chead-copy:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.chead-toggle{width:28px;height:28px;color:var(--text-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;margin:0;padding:0;font-family:inherit;font-size:14px;line-height:1;display:inline-flex}.chead-toggle:hover{color:var(--text);background:var(--bg-elev2)}.chead-copy,.msg-text-copy{width:28px;height:28px;color:var(--text-faint);cursor:pointer;opacity:.35;background:0 0;border:0;border-radius:50%;flex:none;justify-content:center;align-items:center;margin:0;padding:0;font-family:inherit;font-size:14px;line-height:1;display:inline-flex}@media (prefers-reduced-motion:no-preference){.chead-copy,.msg-text-copy{transition:opacity .15s,color .15s,background .15s}}.chead:hover .chead-copy,.msg-text:hover .msg-text-copy,.chead-copy:hover,.msg-text-copy:hover,.chead-copy:focus-visible,.msg-text-copy:focus-visible{opacity:1}.chead-copy:hover,.msg-text-copy:hover{color:var(--text);background:0 0}.chead-toggle>svg{flex:none;width:16px;height:16px}.chead-copy>svg,.msg-text-copy>svg,.copy-btn>svg{flex:none;width:13px;height:13px}.chead-icon{flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:14px;display:inline-flex}.chead-icon>svg{width:14px;height:14px}.chead-title{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.msg-text.single{align-items:center;gap:6px;display:flex}.msg-text.single .msg-text-main{flex:1;min-width:0}.msg-text.single .msg-text-copy{position:static;transform:none}.toolcall-body{border-top:1px solid var(--border-soft);padding:var(--card-body-pad,4px 14px 12px)}.toolcall-args pre{font-family:var(--mono);color:var(--text-dim);white-space:pre;background:var(--chip-bg,var(--bg-elev2));border:1px solid var(--code-border,var(--border-soft));max-height:200px;padding:var(--code-pad,8px 10px);border-radius:6px;margin:0;font-size:12px;overflow:auto}.toolcall-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:min(58ch,42vw);font-family:var(--mono);color:var(--text-dim);flex:0 12 auto;font-size:11px;overflow:hidden}.toolcall-timeout{white-space:nowrap;text-overflow:ellipsis;min-width:0;max-width:100%;color:var(--text-faint);flex:0 auto;font-size:11px;overflow:hidden}.toolcall-cmd{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:min(60ch,40vw);font-family:var(--mono);color:var(--text-dim);flex:0 auto;font-size:11px;overflow:hidden}.toolcall-agent{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:min(30ch,24vw);font-family:var(--mono);color:var(--accent);flex:0 auto;font-size:11px;overflow:hidden}.toolcall-open{height:28px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;flex:none;align-items:center;gap:4px;padding:0 8px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.toolcall-open:hover{border-color:var(--border);color:var(--text)}.toolcall-query{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:180px;font-size:11px;overflow:hidden}.toolcall-output{margin-top:8px}.toolcall-output-label{text-transform:uppercase;letter-spacing:.6px;color:var(--text-faint);margin-bottom:4px;font-size:11px}.toolcall-output pre{background:var(--chip-bg,var(--code-bg));border:1px solid var(--code-border,var(--border-soft));max-height:320px;padding:var(--code-pad,8px 10px);font-family:var(--mono);color:var(--code-text);white-space:pre;word-break:normal;border-radius:6px;margin:0;font-size:12px;line-height:1.5;overflow:auto}.toolcall.err .toolcall-output pre{color:var(--err-text)}.toolcall-images{flex-wrap:wrap;gap:8px;padding:8px 14px 4px;display:flex}.toolcall-image{border:1px solid var(--border);cursor:zoom-in;background:0 0;border-radius:8px;padding:0;line-height:0}.toolcall-image img{border-radius:7px;max-width:280px;max-height:160px}.toolcall-waiting{color:var(--text-faint);margin-top:8px;font-size:12px}.msg-user+.msg-assistant .msg-body>.thinking:first-child,.msg-user+.msg-assistant .msg-body>.toolcall:first-child{margin-top:4px}.main.main-minimal-empty .messages-wrap{flex:1;min-height:0;margin-bottom:0;overflow:hidden}.main.main-minimal-empty:after{content:"";pointer-events:none;flex:1;min-height:0}.main.main-minimal-empty .inputbar{padding-block:0}@media (prefers-reduced-motion:no-preference){.main.main-minimal-empty .inputbar{transition:transform .25s cubic-bezier(.16,1,.3,1)}}.main.main-minimal-empty .composer-resize{display:none}.main.main-minimal-empty .inputbox{box-shadow:0 16px 40px -12px #00000029, 0 0 0 1px var(--border);border-radius:18px}.main:has(.goalbar-collapsed):not(:has(.plan-board)):not(:has(.dialog-inline)) .scroll-bottom{bottom:calc(32px + var(--composer-strip))}.main:has(.dialog-inline) .scroll-bottom{display:none}.plan-board{margin:0 var(--chat-inset) 8px;background-color:var(--bg-elev);border:1px solid var(--border-subtle);border-radius:8px;min-width:0;max-width:100%;min-height:0;padding:10px 14px;font-size:13px;position:relative;box-shadow:0 2px 8px #00000026}@media (prefers-reduced-motion:no-preference){.plan-board{transition:padding .15s,border-radius .15s}}.plan-board.plan-board-collapsed{border-radius:6px;padding:4px 10px 6px;overflow:hidden;box-shadow:0 1px 3px #0000001a}.plan-board-head{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex;position:relative}.plan-board:not(.plan-board-collapsed) .plan-board-head{padding-bottom:8px}.plan-board-collapsed .plan-board-head{min-height:22px}.plan-board-head-main{flex-wrap:nowrap;flex:auto;align-items:center;gap:6px;min-width:0;display:flex}.plan-board-icon{color:var(--accent);flex-shrink:0}.plan-board-title{color:var(--text);white-space:nowrap;flex:none;font-weight:600}.plan-board-count{background:var(--accent-soft);color:var(--accent);white-space:nowrap;font-variant-numeric:tabular-nums;border-radius:999px;flex:none;align-items:center;padding:1px 7px;font-size:11.5px;font-weight:600;line-height:1.4;display:inline-flex}.plan-board-count.plan-board-count-done{background:var(--green-soft);color:var(--green)}.plan-board-active{background:var(--accent-soft);min-width:0;max-width:100%;color:var(--accent);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;flex:180px;margin-left:4px;padding:2px 8px;font-size:12px;overflow:hidden}.plan-board-collapsed .plan-board-active{flex:0 auto;margin-left:2px;padding:1px 6px;font-size:11px;line-height:1.4}@media (max-width:640px){.plan-board-collapsed .plan-board-active{max-width:min(24ch,36%)}}@media (max-width:440px){.plan-board-collapsed .plan-board-active{display:none}}.plan-board-actions{flex:none;align-items:center;gap:2px;display:flex}.plan-board-iconbtn{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:3px;display:inline-flex}.plan-board-iconbtn:hover{color:var(--text);background:var(--bg-elev2)}.plan-board-implement,.plan-board-clean-handoff{background:var(--accent);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:6px;align-items:center;padding:3px 8px;font-size:12px;line-height:1.5;display:inline-flex}@media (prefers-reduced-motion:no-preference){.plan-board-implement,.plan-board-clean-handoff{transition:filter .15s}}.plan-board-implement:hover,.plan-board-clean-handoff:hover{filter:brightness(1.1)}.plan-board-add-btn{border:1px dashed var(--border-subtle);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:6px;justify-content:center;align-items:center;gap:6px;width:100%;padding:6px 12px;font-size:12px;display:inline-flex}@media (prefers-reduced-motion:no-preference){.plan-board-add-btn{transition:all .2s}}.plan-board-add-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.plan-board-steps{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;max-height:min(60vh,520px);overflow-y:auto}@media (max-width:640px){.plan-board-steps{max-height:34vh}.plan-board-implement,.plan-board-clean-handoff{padding:3px 6px;font-size:11.5px}}.plan-board-head-divider{pointer-events:none;background:#ffffff14;height:2px;position:absolute;bottom:0;left:-14px;right:-14px;overflow:hidden}.plan-board-head-divider-fill{height:100%}@media (prefers-reduced-motion:no-preference){.plan-board-head-divider-fill{transition:width .3s}}.plan-board-progress-line{pointer-events:none;background:#ffffff14;width:100%;height:2px;position:absolute;bottom:0;left:0;overflow:hidden}.plan-board-progress-line-fill{height:100%}@media (prefers-reduced-motion:no-preference){.plan-board-progress-line-fill{transition:width .3s}}.plan-board-steps-progress{display:none}.main:has(.dialog-inline) .goalbar-collapsed{margin:0 var(--chat-inset) 6px;pointer-events:auto;position:static}.main:has(.plan-board) .goalbar-collapsed{margin:0 var(--chat-inset) 6px;pointer-events:auto;position:static}.dialog-option .md,.dialog-body .md{font-size:13px;line-height:1.5}.dialog-option .md p,.dialog-body .md p{margin:0}.dialog-option .md :not(pre)>code,.dialog-body .md :not(pre)>code{border:1px solid var(--border-soft);color:var(--link-soft);background:#8b5cf61a;border-radius:5px;padding:.12em .34em;font-size:.88em}.dialog-inline .question-head,.dialog-inline .question-head .md{color:var(--text);font-size:13px;font-weight:600}.question-option .set-row-name .md{overflow-wrap:anywhere;word-break:break-word;flex:auto;min-width:0;max-width:100%}.dialog-inline .md{overflow-wrap:anywhere;min-width:0;max-width:100%;font-size:13px;line-height:1.55}.dialog-inline .md table,.dialog-inline .md pre,.dialog-inline .md .codeblock{max-width:100%;overflow-x:auto}.dialog-inline .md p,.dialog-inline .md ul,.dialog-inline .md ol,.dialog-inline .md blockquote,.dialog-inline .md table,.dialog-inline .md .codeblock{margin:.45em 0}.dialog-inline .md>:first-child{margin-top:0}.dialog-inline .md>:last-child{margin-bottom:0}.dialog-inline .md ul,.dialog-inline .md ol{padding-left:1.5em}.dialog-inline .md li{margin:.15em 0}.dialog-inline .md :not(pre)>code{border:1px solid var(--border-soft);color:var(--link-soft);word-break:break-word;background:#8b5cf61a;border-radius:5px;padding:.12em .34em;font-size:.88em}.fp-markdown strong{color:var(--md-strong);font-weight:720}.dialog-inline .md strong,.dialog-inline .md b{color:var(--text);font-weight:720}.dialog-inline .md a{color:var(--link);text-underline-offset:3px;text-decoration:underline}.question-desc-tip .md{overflow-wrap:anywhere;min-width:0;font-size:12px;line-height:1.55}.question-desc-tip .md>:first-child{margin-top:0}.question-desc-tip .md>:last-child{margin-bottom:0}.question-desc-tip .md p,.question-desc-tip .md ul,.question-desc-tip .md ol,.question-desc-tip .md blockquote,.question-desc-tip .md table,.question-desc-tip .md .codeblock{margin:.45em 0}.question-desc-tip .md ul,.question-desc-tip .md ol{padding-left:1.5em}.question-desc-tip .md li{margin:.15em 0}.question-desc-tip .md table,.question-desc-tip .md pre,.question-desc-tip .md .codeblock{max-width:100%;overflow-x:auto}.fp-head{border-bottom:1px solid var(--border-soft);flex-shrink:0;align-items:center;gap:8px;min-width:0;padding:10px 14px;display:flex}.fp-notice{color:var(--amber);border-bottom:1px solid var(--border-soft);background:#fbbf2414;flex-shrink:0;padding:7px 14px;font-size:11.5px}.fp-code{font-family:var(--mono);font-size:calc(12px * var(--fp-zoom,1));-webkit-user-select:none;user-select:none;background:#00000038;flex:1;padding:6px 0;line-height:1.6;overflow:auto}.fp-markdown{min-width:0;min-height:0;color:var(--text);word-break:break-word;overflow-wrap:anywhere;background:radial-gradient(circle at 10% 0,#8b5cf614,#0000 34%),#00000038;flex:1;padding:22px clamp(18px,4vw,48px) 34px;font-size:14px;line-height:1.8;overflow:auto}.fp-markdown-zoom{zoom:var(--fp-zoom,1)}.fp-toc-layout{align-items:flex-start;gap:14px;display:flex}.fp-toc{border-right:1px solid var(--border-soft);overscroll-behavior:contain;flex:none;width:180px;max-height:100%;padding-right:6px;font-size:12.5px;line-height:1.6;position:sticky;top:0;overflow:auto}.fp-toc a{color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;border-left:2px solid #0000;border-radius:4px;padding:2px 6px;text-decoration:none;display:block;overflow:hidden}.fp-toc a:hover{background:var(--bg-elev);color:var(--text)}.fp-toc a.on{background:var(--bg-elev);border-left-color:var(--accent);color:var(--accent)}.fp-toc a.l1{font-weight:600}.fp-toc a.l2{padding-left:14px}.fp-toc a.l3{padding-left:26px}.fp-toc a.l4{padding-left:38px}.fp-toc a.l5,.fp-toc a.l6{padding-left:50px;font-size:12px}@media (max-width:900px){.fp-toc{display:none}}.fp-markdown-zoom>.md{width:100%;min-width:0;max-width:860px;margin:0 auto}.fp.fullscreen .fp-markdown-zoom>.md{max-width:none}.fp-markdown h1,.fp-markdown h2,.fp-markdown h3,.fp-markdown h4,.fp-markdown h5,.fp-markdown h6{color:var(--text);letter-spacing:-.015em;margin:1.35em 0 .55em;font-weight:750;line-height:1.28;position:relative}.fp-markdown h1{border-bottom:1px solid var(--border);letter-spacing:-.03em;margin-top:0;padding-bottom:.42em;font-size:clamp(24px,3vw,34px)}.fp-markdown h2{border-bottom:1px solid var(--border-soft);padding-bottom:.28em;font-size:clamp(19px,2.2vw,25px)}.fp-markdown h3{color:var(--link-hover);font-size:19px}.fp-markdown h4,.fp-markdown h5,.fp-markdown h6{font-size:16px}.fp-markdown p{margin:.8em 0;line-height:1.85}.fp-markdown p:first-child{margin-top:0}.fp-markdown p:last-child{margin-bottom:0}.fp-markdown em{color:var(--link-hover)}.fp-markdown del{color:var(--text-faint)}.fp-markdown a{color:var(--link);text-underline-offset:3px;-webkit-text-decoration:underline #a78bfa73;text-decoration:underline #a78bfa73}@media (prefers-reduced-motion:no-preference){.fp-markdown a{transition:color .12s,text-decoration-color .12s}}.fp-markdown a:hover{color:var(--link-hover);text-decoration-color:currentColor}.fp-markdown ul,.fp-markdown ol{margin:.8em 0;padding-left:1.8em}.fp-markdown li{margin:.28em 0;padding-left:.2em}.fp-markdown li::marker{color:var(--accent);font-weight:700}.fp-markdown li>p{margin:.35em 0}.fp-markdown blockquote{border:1px solid #8b5cf633;border-left:4px solid var(--accent);color:var(--text-dim);background:#8b5cf614;border-radius:0 10px 10px 0;margin:1.1em 0;padding:.7em 1.1em}.fp-markdown blockquote p:last-child{margin-bottom:0}.fp-markdown hr{border:0;border-top:1px solid var(--border);margin:1.8em 0}.fp-markdown table{border-collapse:collapse;border-spacing:0;width:100%;max-width:100%;margin:1.15em 0;font-size:13px;display:block;overflow-x:auto}.fp-markdown thead{background:#8b5cf61f}.fp-markdown th,.fp-markdown td{border:1px solid var(--border);text-align:left;vertical-align:top;min-width:90px;padding:8px 12px;line-height:1.55}.fp-markdown th{color:var(--text);white-space:nowrap;font-weight:700}.fp-markdown tbody tr:nth-child(2n){background:var(--glow-025)}.fp-markdown tbody tr:hover{background:#8b5cf612}.fp-markdown code{font-family:var(--mono);word-break:break-word;font-size:.88em}.fp-markdown :not(pre)>code{border:1px solid var(--border-soft);color:var(--link-soft);background:#8b5cf61a;border-radius:5px;padding:.16em .42em}.fp-markdown .codeblock{min-width:0;max-width:100%;margin:1.1em 0}.fp-markdown .codeblock pre{border-color:var(--border);border-radius:10px;min-width:0;max-width:100%;padding:14px 0;font-size:12.5px;line-height:1.65}.fp-markdown .code-line{padding:0 16px}.fp-markdown .codeblock pre code{white-space:pre-wrap;word-break:break-word}.fp-markdown img{box-sizing:border-box;border:1px solid var(--border);background:var(--bg-elev);object-fit:contain;border-radius:10px;width:auto;max-width:100%;height:auto;max-height:min(62vh,680px);margin:1.15em auto;display:block;box-shadow:0 10px 28px #00000038}.fp-markdown figcaption{color:var(--text-faint);text-align:center;margin-top:-.7em;font-size:12px;font-style:italic}.fp-markdown input[type=checkbox]{accent-color:var(--accent);margin-right:.45em}.fp-markdown kbd{border:1px solid var(--border);background:var(--bg-elev2);font-family:var(--mono);color:var(--text-dim);border-bottom-width:2px;border-radius:5px;padding:.12em .45em;font-size:.82em}.fp-line{cursor:pointer;gap:0;padding-right:16px;display:flex}.fp-line:hover{background:#8b5cf614}.fp-code.dragging .fp-line.sel{background:#8b5cf64d}.fp-num{text-align:right;width:52px;color:var(--text-faint);border-right:1px solid var(--border-soft);-webkit-user-select:none;user-select:none;background:0 0;flex-shrink:0;margin-right:14px;padding-right:12px}.fp-code-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;color:var(--text-dim);flex:1}.fp-code.no-wrap .fp-code-text{white-space:pre;overflow-wrap:normal}.fp-line.sel .fp-code-text{color:var(--text)}.fp-foot{border-top:1px solid var(--border-soft);background:var(--bg-elev);flex-shrink:0;align-items:center;gap:12px;padding:10px 14px;display:flex}@media (max-width:768px){.panel-drawer{z-index:60;background:var(--bg-elev);width:min(300px,86vw);display:block;position:fixed;top:0;bottom:0}@media (prefers-reduced-motion:no-preference){.panel-drawer{transition:transform .25s}}.panel-drawer.drawer-left{border-right:1px solid var(--border);left:0;transform:translate(-105%);box-shadow:8px 0 30px #00000059}.panel-drawer.drawer-right{border-left:1px solid var(--border);right:0;transform:translate(105%);box-shadow:-8px 0 30px #00000059}.panel-drawer.open{transform:translate(0)}.panel-drawer .panel{border:none;width:100%;height:100%}.main{--chat-pad:14px;--composer-pad-top:10px}.msg{padding:6px 0 12px}.fp-markdown{padding:16px 14px 24px;font-size:13.5px}.fp-markdown img{max-height:50vh}.gs-close{width:34px;height:34px;color:var(--text);justify-content:center;align-items:center;font-size:16px;display:inline-flex}.fp-head{gap:6px;padding:8px 10px}}@media (hover:none){.msg-text-copy,.chead-copy,.msg-action{opacity:1}.chead>.chead-copy{flex:none;order:1}.msg-text:not(.single)>.msg-text-copy{float:right;margin:4px 0 0 8px;position:static}.msg-text>.md>.codeblock:first-child,.msg-text>.md>table:first-child{clear:both}}@media (max-width:640px){.toolcall-path{min-width:7ch;max-width:min(18ch,30%)}.toolcall-cmd{max-width:min(28ch,44%)}.chead{gap:4px}}.messages-wrap.messages-exporting .messages{padding-inline-end:max(0px, calc(var(--chat-inset) - var(--msgs-gutter,0px) + min(380px, 42%)))}.messages-exporting .msg,.messages-exporting .msg-collapsed{padding-left:28px;position:relative}.saveimg-card-md>.msg{margin:0;padding:0}.saveimg-card-md>.msg+.msg{border-top:1px solid var(--border-soft);margin-top:12px;padding-top:12px}@media (max-width:768px){.messages-wrap.messages-exporting .messages{padding-inline-end:max(0px, calc(var(--chat-inset) - var(--msgs-gutter,0px)));padding-bottom:48vh}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0d0e12;--bg-elev:#14161c;--bg-elev2:#1a1d26;--border:#34394a;--text:#e6e8ef;--text-dim:#b5bbcd;--accent:#b499ff;--red:#ff8c91;--green:#72e6bc;--mono:ui-monospace, SFMono-Regular, Consolas, monospace;background:var(--bg);color:var(--text);font-family:system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;min-width:0;height:100%;margin:0}button,input,select,textarea{font:inherit;color:inherit}button,select,input,textarea{border:1px solid var(--border);background:var(--bg-elev2);border-radius:6px}button{cursor:pointer;min-height:44px;padding:8px 12px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button.active,button[aria-pressed=true]{border-color:var(--accent);background:#302747}a{color:#c8b6ff;overflow-wrap:anywhere}label{flex-direction:column;gap:6px;margin-block:8px;display:flex}label:has(input[type=checkbox]){flex-direction:row;align-items:center}input[type=checkbox]{flex:none;width:22px;height:22px}textarea,input,select{min-width:0;max-width:100%;padding:10px}textarea{resize:vertical;width:100%}pre,code{font-family:var(--mono)}pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%;overflow:auto}p,dd,small{overflow-wrap:anywhere}small{color:var(--text-dim);display:block}h1{margin:0;font-size:19px}h2{font-size:18px}h3{font-size:16px}dl{grid-template-columns:minmax(80px,1fr) minmax(0,3fr);gap:6px;display:grid}dd{margin:0}dt{color:var(--text-dim)}.app{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.topbar{border-bottom:1px solid var(--border);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:6px 12px;display:flex}.topbar .connection{flex:1;min-width:120px}.run-status{background:var(--bg-elev2);border-bottom:1px solid var(--border);flex:none;max-height:25dvh;padding:6px 12px;overflow:auto}.run-status>div{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.run-status span{overflow-wrap:anywhere}.danger{color:var(--red);border-color:var(--red)}.primary{border-color:var(--accent);background:#372b51}.layout{flex:1;width:100%;min-height:0;display:flex;position:relative}.main{--chat-inset:16px;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.panel-drawer{flex:none;min-height:0;display:flex;overflow:hidden}.drawer-left{width:var(--left-w)}.drawer-right{width:var(--right-w)}.panel-drawer .panel{background:var(--bg-elev);flex-direction:column;width:100%;min-height:0;padding:10px;display:flex;overflow:auto}.panel-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.panel-hint,.coverage,.notice{color:var(--text-dim);padding:6px;font-size:12px}.notice[role=alert]{color:var(--red);margin:0}.task-list{flex-direction:column;gap:6px;display:flex}.task-list button{text-align:left;white-space:normal;overflow-wrap:anywhere}.conv-row{align-items:center;gap:4px;display:flex}.conv-row>button:last-child{text-align:left;flex:1}.resize-handle{cursor:col-resize;background:var(--border);flex:none;width:6px}.resize-handle:hover{background:var(--accent)}.workspace-toolbar,.workspace-tabs,.inspector-tabs,.toolbar{flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px;display:flex}.workspace-tabs{border-bottom:1px solid var(--border)}.workspace-content{flex:1;min-height:0;padding:8px 16px;overflow:auto}.scope-label{margin:4px 0;padding:0 12px;font-size:12px}.inspector-body{min-height:0;overflow:auto}.inspector-tabs button{text-transform:capitalize;flex:1}.page-controls{border-bottom:1px solid var(--border);padding:8px 0;font-size:12px}.page-controls>button{margin:2px}.messages-wrap{height:60dvh;min-height:200px;position:relative}.messages{overflow-anchor:auto;height:100%;padding:8px;overflow:auto}.msg{border:1px solid var(--border);border-radius:8px;margin:8px 0;padding:12px;display:block}.msg-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.msg-text,.msg-text-main{min-width:0}.msg.user{background:#1d2432}.follow-button{position:sticky;bottom:0}.toolcall{border:1px solid var(--border);border-radius:8px;margin:8px 0}.toolcall.err{border-color:var(--red)}.chead{flex-wrap:wrap;align-items:center;gap:8px;min-height:44px;display:flex}.chead-title{flex:1}.toolcall-status{white-space:normal;font-size:12px}.toolcall-body{padding:8px}.toolcall-path{overflow-wrap:anywhere;padding:0 8px}.detail-pane{border:1px solid var(--border);border-radius:6px;min-width:0;padding:8px}.detail-identity{overflow-wrap:anywhere;font-size:12px}.detail-text{white-space:pre-wrap;background:var(--bg);max-height:60dvh;padding:10px;overflow:auto}.coverage{border-inline-start:3px solid #d6ac5d}.omission{color:#edc983}.action-dialog{color:var(--text);background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;width:min(800px,100vw - 24px);max-height:calc(100dvh - 24px);padding:18px;overflow:auto}.action-dialog::backdrop{background:#000b}.action-dialog>header,.action-dialog>footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.action-dialog>header{z-index:1;background:var(--bg-elev);position:sticky;top:-18px}.action-dialog>footer{background:var(--bg-elev);padding:10px 0;position:sticky;bottom:-18px}.receipt,.run-summary,.scm-file,.plan-board-step{border:1px solid var(--border);border-radius:6px;margin:8px 0;padding:10px}.plan-board-head,.plan-board-head-main,.plan-step-head{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.plan-board-steps{padding-inline-start:22px}.dependency-editor{border:1px solid var(--border);margin:6px 0;padding:6px}.gs-modal{width:100%;max-height:none;position:static}.gs-input-row{align-items:center;gap:8px;display:flex}.gs-input-row input{flex:1}.gs-results{max-height:55dvh;overflow:auto}.gs-item{white-space:normal;text-align:left;flex-direction:column;align-items:start;gap:4px;width:100%;display:flex}.gs-item-title{font-weight:600}.gs-item-sub{white-space:pre-wrap;overflow-wrap:anywhere}.gs-foot{padding-block:12px;font-size:12px}.fp-toc-layout{gap:10px;display:flex}.fp-toc{flex-direction:column;flex:0 150px;display:flex}.fp-markdown-zoom{flex:1;min-width:0}.fp-code{overflow:auto}.fp-line{display:flex}.fp-line.sel{background:#383050}.fp-num{width:4em;color:var(--text-dim);flex:none}.fp-code-text{white-space:pre-wrap;overflow-wrap:anywhere;padding:8px}.fp-code.no-wrap .fp-code-text{white-space:pre}.scm-body{display:block}.scm-diff-pre{overflow:auto}.scm-diff-line{white-space:pre-wrap}.scm-diff-line.add{color:#c4f4dd;background:#153329}.scm-diff-line.del{color:#ffc2c7;background:#3a1f26}.scm-diff-line.hunk{color:#c5aeff}.scm-diff-line.hdr{color:#9ed2ff}.md{overflow-wrap:anywhere}.md table{display:block;overflow:auto}.md pre{white-space:pre}.codeblock{position:relative}.copy-btn{min-width:44px;min-height:44px}.code-line{display:flex}.code-num{-webkit-user-select:none;user-select:none;color:var(--text-dim);padding-inline:6px}.code-line-body{flex:1}.md img{display:none}.timeline-view{min-height:0}.timeline-mount{height:70dvh;min-height:450px}.rtr .rtr-btn,.rtr .rtr-row,.rtr .rtr-dtab,.rtr .rtr-conv{min-height:44px}.rtr-list{min-height:100px}.drawer-backdrop{display:none}.entry,.empty{padding:24px}@media (max-width:900px){.topbar{gap:4px;padding:4px 8px}.topbar button{padding:6px 8px}.topbar .connection{font-size:12px}.panel-drawer{z-index:20;background:var(--bg-elev);width:min(300px,86vw);position:absolute;top:0;bottom:0}@media (prefers-reduced-motion:no-preference){.panel-drawer{transition:transform .18s}}.drawer-left{left:0;transform:translate(-105%)}.drawer-right{right:0;transform:translate(105%)}.panel-drawer.open{transform:translate(0)}.panel-drawer.drawer-dragging{transition:none}.drawer-backdrop.persistent{z-index:19;opacity:0;pointer-events:none;background:#000a;border:0;border-radius:0;width:100%;height:100%;display:block;position:absolute;inset:0}.drawer-backdrop.on{opacity:1;pointer-events:auto}.resize-handle{display:none}.workspace-content{padding:6px 8px}.workspace-toolbar{max-height:120px;overflow:auto}.workspace-tabs{flex-wrap:nowrap;overflow-x:auto}.scope-label{font-size:11px}.action-dialog{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;padding:12px;padding-bottom:max(12px, env(safe-area-inset-bottom));border-radius:0;margin:0}input,textarea,select{font-size:16px}.run-status{font-size:12px}.fp-toc-layout{flex-direction:column}.fp-toc{flex:auto}.timeline-mount{min-height:420px}}.chead-main{min-width:0;color:inherit;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:6px;display:flex}::highlight(cadence-page){color:#fff;background:#584822}::highlight(cadence-page-active){color:#fff;background:#9b6b16}.rtr{height:100%;min-height:0;color:var(--text,#e6e8ef);flex-direction:column;font-size:13px;display:flex;position:relative}.rtr-hd{border-bottom:1px solid var(--border,#262a35);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex}.rtr-hd h2{margin:0;font-size:15px}.rtr-live{background:var(--green-soft,#34d3991f);color:var(--green,#34d399);border-radius:99px;padding:2px 8px;font-size:11px}.rtr-hd input[type=search]{background:var(--bg-elev,#14161c);color:inherit;border:1px solid var(--border,#262a35);font:inherit;border-radius:6px;width:140px;padding:5px 9px}.rtr-hd .sp{flex:1}.rtr-btn{background:var(--bg-elev,#14161c);color:inherit;border:1px solid var(--border,#262a35);cursor:pointer;font:inherit;border-radius:6px;padding:5px 10px}.rtr-btn:hover{border-color:var(--accent,#8b5cff)}.rtr-btn.on{background:var(--accent-soft,#8b5cf624);border-color:var(--accent,#8b5cff)}.rtr-btn.danger:hover{border-color:var(--red,#f87171);color:var(--red,#f87171)}.rtr-convs{border-bottom:1px solid var(--border,#262a35);align-items:center;gap:6px;padding:8px 12px;display:flex;overflow-x:auto}.rtr-conv{border:1px solid var(--border,#262a35);color:inherit;font:inherit;cursor:pointer;white-space:nowrap;opacity:.65;background:0 0;border-radius:99px;padding:3px 12px;font-size:12px}.rtr-conv.sel{opacity:1;border-color:var(--accent,#8b5cff);background:var(--accent-soft,#8b5cf624)}.rtr-conv .cur{color:var(--green,#34d399)}.rtr-ruler{border-bottom:1px solid var(--border,#262a35);background:var(--bg-elev,#14161c);padding:6px 12px 8px}.rtr-rulerbar{align-items:center;gap:8px;margin-bottom:4px;display:flex}.rtr-rulerbar .hint{opacity:.5;font-size:11px}.rtr-rulerbar .sp{flex:1}.rtr-rulerbar .rtr-btn{padding:2px 9px;font-size:11px}.rtr-tlbody{height:252px;position:relative}.rtr-tlbody .vis-timeline{background:0 0;border:0}.rtr-tlbody .vis-panel.vis-left,.rtr-tlbody .vis-panel.vis-center{border-color:var(--border-soft,#1e2230)}.rtr-tlbody .vis-labelset .vis-label{color:var(--text-dim,#9aa1b4);border-color:var(--border-soft,#1e2230);background:0 0}.rtr-tlbody .vis-time-axis .vis-text{color:var(--text-faint,#6b7284)}.rtr-tlbody .vis-time-axis .vis-grid.vis-minor,.rtr-tlbody .vis-time-axis .vis-grid.vis-major{border-color:var(--border-soft,#1e2230)}.rtr-tlbody .vis-item{cursor:pointer;border-radius:0;height:12px}.rtr-tlbody .vis-item:after{content:"";position:absolute;inset:-6px -5px}.rtr-tip{z-index:50;pointer-events:none;background:var(--bg-elev2,#1a1d26);border:1px solid var(--accent,#8b5cff);border-radius:7px;max-width:320px;padding:6px 10px;font-size:12px;position:absolute;box-shadow:0 4px 16px #00000073}.rtr-tip .tt{margin-bottom:2px;font-weight:700}.rtr-tip .tm{opacity:.65;font-size:11px}.rtr-tlbody .vis-item .vis-item-content{display:none}.rtr-tlbody .vis-item.lane-input{background:#64748b;border-color:#64748b}.rtr-tlbody .vis-item.lane-model{background:#3b82f6;border-color:#3b82f6}.rtr-tlbody .vis-item.lane-tools{background:#22c55e;border-color:#16a34a}.rtr-tlbody .vis-item.st-error{background:var(--red,#f87171);border-color:var(--red,#f87171)}@media (prefers-reduced-motion:no-preference){.rtr-tlbody .vis-item.st-running{animation:1.2s infinite rtr-blink}}.rtr-tlbody .vis-item.vis-selected{outline-offset:-1px;z-index:2;outline:2px solid #fff}.rtr-tlbody .vis-item{box-shadow:0 1px 5px #0006}.rtr-tlbody .vis-item.vis-selected{box-shadow:0 0 0 1px #fff,0 2px 10px #00000080}.rtr-axis{opacity:.55;justify-content:space-between;margin-bottom:4px;font-size:11px;display:flex}.rtr-legend{flex-wrap:wrap;gap:4px 12px;padding:5px 0 7px;font-size:11px;display:flex}.rtr-legend .lg-item{opacity:.85;align-items:center;gap:5px;display:inline-flex}.rtr-bar i{background:#3b82f6;height:100%;display:block}.rtr-legend .lg-item i{border-radius:0;width:10px;height:10px;display:inline-block;box-shadow:0 1px 3px #0006}.rtr-lane{align-items:center;gap:8px;margin-bottom:5px;display:flex}.rtr-lane .ln{opacity:.6;text-align:right;flex:none;width:34px;font-size:11px}.rtr-track{background:var(--bg-elev2,#1a1d26);border-radius:4px;flex:1;height:16px;position:relative;overflow:hidden}.rtr-blk{opacity:.85;cursor:pointer;background:#3b82f6;border-radius:0;height:10px;position:absolute;top:2px}.rtr-blk.lane-input{background:#64748b}.rtr-blk.lane-model{background:#3b82f6}.rtr-blk.lane-tools{background:#22c55e}.rtr-blk.st-error{background:var(--red,#f87171)}@media (prefers-reduced-motion:no-preference){.rtr-blk.st-running{animation:1.2s infinite rtr-blink}}.rtr-blk.sel{outline-offset:-1px;z-index:1;outline:2px solid #fff}@keyframes rtr-blink{50%{opacity:.35}}.rtr-bd{flex:1;min-height:0;display:flex}.rtr-list{border-right:1px solid var(--border,#262a35);flex-direction:column;flex:1;gap:5px;min-width:0;padding:8px;display:flex;overflow-y:auto}.rtr-row{cursor:pointer;color:inherit;font:inherit;text-align:left;background:0 0;border:1px solid #0000;border-radius:7px;align-items:baseline;gap:8px;width:100%;padding:6px 9px;display:flex}.rtr-row:hover{border-color:var(--accent,#8b5cff)}.rtr-row.sel{background:var(--accent-soft,#8b5cf624);border-color:var(--accent,#8b5cff)}.rtr-chip{background:var(--bg-elev2,#1a1d26);border:1px solid var(--border,#262a35);border-radius:5px;flex:none;padding:1px 7px;font-size:11px}.rtr-row .tt{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rtr-row time{opacity:.55;flex:none;font-size:11px}.rtr-row.err .rtr-chip{border-color:var(--red,#f87171);color:var(--red,#f87171)}.rtr-detail{flex:none;width:320px;min-width:320px;min-height:0;padding:12px 14px;overflow-y:auto}.rtr-dtabs{border-bottom:1px solid var(--border,#262a35);gap:2px;margin-bottom:10px;display:flex}.rtr-dtab{color:inherit;font:inherit;cursor:pointer;opacity:.6;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 12px}.rtr-dtab.on{opacity:1;border-bottom-color:var(--accent,#8b5cff)}.rtr-kv{grid-template-columns:86px 1fr;gap:5px 10px;margin-bottom:12px;font-size:12px;display:grid}.rtr-kv dt{opacity:.55}.rtr-kv dd{word-break:break-word;margin:0}.rtr-sec{opacity:.8;margin:12px 0 6px;font-size:12px;font-weight:700}.rtr-bar{background:var(--bg-elev2,#1a1d26);border-radius:4px;height:8px;margin:3px 0 7px;overflow:hidden}.rtr-detail pre{white-space:pre-wrap;word-break:break-word;background:var(--bg-elev,#14161c);border:1px solid var(--border,#262a35);border-radius:8px;margin:0;padding:9px 11px;font-size:12px}.rtr-empty{opacity:.6;text-align:center;padding:40px 20px}.rtr-spin{display:inline-block}@media (prefers-reduced-motion:no-preference){.rtr-spin{animation:1s infinite rtr-blink}}.rtr-replaybar{border-bottom:1px solid var(--border,#262a35);background:var(--bg-elev,#14161c);align-items:center;gap:8px;padding:7px 12px;font-size:12px;display:flex}.rtr-replaybar[hidden]{display:none}.rtr-replaybar input[type=range]{accent-color:var(--accent,#8b5cff);flex:1}.rtr-replaybar select{background:var(--bg-elev2,#1a1d26);color:inherit;border:1px solid var(--border,#262a35);font:inherit;border-radius:6px;padding:2px 6px}.rtr-tlbody .rtr-playhead{background:var(--accent,#8b5cff);pointer-events:none;z-index:6;width:1px;display:none;position:absolute;top:0;bottom:0}@media (max-width:640px){.timeline-mount,.rtr{height:auto}.rtr-bd{height:50dvh;min-height:360px;padding-bottom:env(safe-area-inset-bottom,0px);flex-direction:column;flex:none;overflow:hidden}.rtr-list{border-right:0;border-bottom:1px solid var(--border,#262a35);flex:1 1 0;min-height:0;max-height:none;overflow-y:auto}.rtr-detail{flex:1 1 0;width:auto;min-width:0;min-height:0;overflow-y:auto}.rtr-hd{gap:10px;padding:10px}.rtr-hd input[type=search]{flex:140px;width:auto;min-width:120px;min-height:44px;padding:8px 10px}.rtr input,.rtr select,.rtr textarea{font-size:16px}.rtr-btn{min-height:44px;padding:7px 12px}.rtr-conv{min-height:44px;padding:8px 14px}.rtr-dtab{min-height:44px;padding:8px 12px}.rtr-row{min-height:44px;padding:10px}.rtr-ruler{padding:6px 8px 8px}.rtr-rulerbar{gap:10px}.rtr-rulerbar .rtr-btn{min-height:44px;padding:7px 12px;font-size:12px}.rtr-tlbody{height:200px}.rtr-tlbody .vis-timeline{height:200px;min-height:200px;max-height:200px}.rtr-tip{max-width:min(320px,100vw - 32px)}.rtr-replaybar{flex-wrap:wrap;row-gap:6px}.rtr-kv{grid-template-columns:72px 1fr}}@media (hover:none){.rtr-tlbody .vis-item:after{inset:-10px -8px}}.rtr-vendor-status{color:var(--text-dim)}
2
+ /*$vite$:1*/