symbio 0.7.0 → 0.8.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.
@@ -4,6 +4,8 @@
4
4
  import { describeTask, TASK_STATUSES } from "./plan.js";
5
5
  import { CONFIRMATIONS, listRules, saveArea, saveRule, saveSource, STATUSES } from "./rules.js";
6
6
  import { DEFAULT_IMAGE_SIZE, viewImage } from "./images.js";
7
+ import { readDocument } from "./documents.js";
8
+ import { describeOuterRepository, gitRepoFor } from "./repos.js";
7
9
  const str = (description) => ({ type: "string", description });
8
10
  function obj(properties, required = []) {
9
11
  return { type: "object", properties, required, additionalProperties: false };
@@ -45,7 +47,7 @@ const listTeam = {
45
47
  inputSchema: obj({}),
46
48
  run(_args, { project }) {
47
49
  return project.agents
48
- .map((a) => `- ${a.name} (${a.role}${a.status === "stopped" ? ", stopped" : `, ${a.status}`}) — ${a.purpose ?? "coordinates the project"} · model ${a.model}`)
50
+ .map((a) => `- ${a.name} (${a.role}${a.status === "stopped" ? ", stopped" : `, ${a.status}`}) — ${a.purpose ?? "coordinates the project"}${a.repo ? ` · repository ${a.repo}` : ""} · model ${a.model}`)
49
51
  .join("\n");
50
52
  },
51
53
  };
@@ -102,10 +104,12 @@ const spawnAgent = {
102
104
  task: str("Its first task as text (when there is no plan task), or extra instructions for task_id"),
103
105
  model: str("Optional provider/model from the allowed list; defaults to your own model"),
104
106
  workspace: { type: "string", enum: ["own", "shared"], description: "Where it works (git projects); defaults to the project's setting" },
107
+ repo: str("In a project made of several repositories: the one it works in (e.g. 'server'); its own copy comes from it"),
105
108
  }, ["name", "purpose"]),
106
109
  async run(args, { team, project, agent }) {
107
110
  return team.spawnWorker(project, agent, {
108
111
  workspace: args.workspace === "own" || args.workspace === "shared" ? args.workspace : undefined,
112
+ repo: args.repo ? String(args.repo) : undefined,
109
113
  name: String(args.name),
110
114
  purpose: String(args.purpose),
111
115
  task: args.task ? String(args.task) : undefined,
@@ -333,19 +337,32 @@ const gitFields = {
333
337
  connection: str("GitHub or Azure DevOps connection name"),
334
338
  remote: str("Remote name or HTTPS URL (github.com, dev.azure.com) (default: origin)"),
335
339
  branch: str("Branch (default: your current branch)"),
340
+ repo: str("In a project made of several repositories, working in the project folder: which one (e.g. 'server')"),
336
341
  reason: reasonField,
337
342
  };
338
343
  const gitPush = {
339
344
  name: "git_push",
340
345
  description: "Push committed work from your working folder to GitHub or Azure DevOps (the token is applied by Symbio; plain `git push` may have no credentials).",
341
346
  inputSchema: obj(gitFields, ["connection", "reason"]),
342
- run: ({ connection, remote, branch, reason }, { team, project, agent }) => team.remote.request(project, agent, { kind: "git_push", connectionId: String(connection), remote: remote ? String(remote) : null, branch: branch ? String(branch) : null }, String(reason)),
347
+ run: async ({ connection, remote, branch, repo, reason }, { team, project, agent }) => team.remote.request(project, agent, {
348
+ kind: "git_push",
349
+ connectionId: String(connection),
350
+ remote: remote ? String(remote) : null,
351
+ branch: branch ? String(branch) : null,
352
+ repo: await gitRepoFor(project, agent, repo ? String(repo) : undefined),
353
+ }, String(reason)),
343
354
  };
344
355
  const gitPull = {
345
356
  name: "git_pull",
346
357
  description: "Pull from GitHub or Azure DevOps into your working folder (merge, no rebase).",
347
358
  inputSchema: obj(gitFields, ["connection", "reason"]),
348
- run: ({ connection, remote, branch, reason }, { team, project, agent }) => team.remote.request(project, agent, { kind: "git_pull", connectionId: String(connection), remote: remote ? String(remote) : null, branch: branch ? String(branch) : null }, String(reason)),
359
+ run: async ({ connection, remote, branch, repo, reason }, { team, project, agent }) => team.remote.request(project, agent, {
360
+ kind: "git_pull",
361
+ connectionId: String(connection),
362
+ remote: remote ? String(remote) : null,
363
+ branch: branch ? String(branch) : null,
364
+ repo: await gitRepoFor(project, agent, repo ? String(repo) : undefined),
365
+ }, String(reason)),
349
366
  };
350
367
  const githubApi = {
351
368
  name: "github_api",
@@ -383,6 +400,18 @@ function registerOn(project) {
383
400
  throw new Error("This project doesn't keep a rules register (the human can turn it on in the project's Settings).");
384
401
  }
385
402
  // ---- images
403
+ const readDocumentTool = {
404
+ name: "read_document",
405
+ description: "Read the text of a document: PDF (by pages), Word (.docx, .odt), Excel (.xlsx, every sheet as tab-separated rows), " +
406
+ "PowerPoint (.pptx, by slide) or a long text file. Returns a part at a time and says how to get the next one. " +
407
+ "Reading PDFs with the read tool is blocked (it would put the whole file in your conversation), and Office files are binary to it.",
408
+ inputSchema: obj({
409
+ path: str("The document (absolute, or relative to your folder)"),
410
+ pages: str('PDF pages to read, e.g. "1-10" or "7" (default: from the first page, as many as fit)'),
411
+ from: { type: "integer", description: "For other documents: the character to start from (given in the previous answer)" },
412
+ }, ["path"]),
413
+ run: (args, { agent }) => readDocument(agent.directory, args),
414
+ };
386
415
  const viewImageTool = {
387
416
  name: "view_image",
388
417
  description: "Look at an image (png, jpg, gif, webp, bmp): returns a scaled-down copy, so it doesn't bloat your conversation. " +
@@ -468,6 +497,7 @@ const saveRuleSourceTool = {
468
497
  };
469
498
  const COMMON = [
470
499
  viewImageTool,
500
+ readDocumentTool,
471
501
  listRulesTool,
472
502
  saveRuleTool,
473
503
  saveRuleAreaTool,
@@ -491,7 +521,19 @@ const COMMON = [
491
521
  listProcesses,
492
522
  stopProcess,
493
523
  ];
524
+ const subRepositories = {
525
+ name: "sub_repositories",
526
+ description: "For a project folder that is a git repository containing other repositories (often created on top of them by an older Symbio): " +
527
+ "check the situation, switch to working in the inner repositories (use), or back to the outer one (stop). Switching changes nothing on disk.",
528
+ inputSchema: obj({ action: { type: "string", enum: ["check", "use", "stop"], description: "check (default), use or stop" } }),
529
+ async run({ action }, { team, project }) {
530
+ if (action === "use" || action === "stop")
531
+ return team.useSubRepositories(project, action === "use", "the coordinator");
532
+ return describeOuterRepository(project);
533
+ },
534
+ };
494
535
  const COORDINATOR_ONLY = [
536
+ subRepositories,
495
537
  submitPlan,
496
538
  addTask,
497
539
  assignTask,
@@ -3,7 +3,9 @@
3
3
  // (it isn't woken up for it), and the human sees the same list in Messages.
4
4
  //
5
5
  // Add an entry whenever a change affects how agents work: tools, rules, messages they
6
- // receive, what Symbio does on their behalf. Ids never change; keep the newest last.
6
+ // receive, what Symbio does on their behalf. Ids never change; keep the newest last. An entry
7
+ // whose change asks for action in some projects can add a task: those coordinators are woken with it.
8
+ import { swallowedRepositories } from "./repos.js";
7
9
  export const AGENT_UPDATES = [
8
10
  {
9
11
  id: "2026-10-30-free-assets",
@@ -91,6 +93,37 @@ export const AGENT_UPDATES = [
91
93
  "HTTPS), and the new azure_devops_api tool calls its REST API, e.g. to open a pull request after pushing the branch. Reading " +
92
94
  "(GET) never needs approval. If a push or a pull request failed for lack of credentials, ask the human to add the connection.",
93
95
  },
96
+ {
97
+ id: "2026-11-09-attachments",
98
+ text: "Attachments and documents: the human can now attach files to a message (upload, drag and drop, paste). They arrive as full " +
99
+ "paths below the message and are kept in the project (.symbio/attachments; the human sees them in the Files tab), so you can " +
100
+ "come back to them. Look at images with view_image; read documents (PDF, Word, Excel, PowerPoint) with the new read_document " +
101
+ "tool, which returns their text a part at a time. Reading PDFs with the read tool is now refused like images: it would put the " +
102
+ "whole file in your conversation.",
103
+ },
104
+ {
105
+ id: "2026-11-09-multi-repo",
106
+ text: "Folders of several git repositories (e.g. client/ and server/, each with its own remote, in a folder that isn't a repository " +
107
+ "itself) are now handled as such: spawn_agent takes repo (the helper gets its own copy of that repository, and merge_work merges " +
108
+ "into it), and git_push / git_pull from the project folder take repo. Never git init the project folder over them.",
109
+ async task(project) {
110
+ if (project.subRepositories !== undefined)
111
+ return null;
112
+ const { inner, createdBySymbio } = await swallowedRepositories(project.directory);
113
+ if (!inner.length)
114
+ return null;
115
+ return (`Symbio update, for this project: the project folder is a git repository that contains other repositories (${inner.join(", ")}) ` +
116
+ `without their files${createdBySymbio ? " (Symbio created it on top of them when the project was added)" : ""}. So far helpers' own ` +
117
+ "copies had those repositories as empty folders, their commits went to the outer repository, and pushes had no remote of their own. " +
118
+ "Symbio can now work in each inner repository instead.\n\n" +
119
+ "Look at it with sub_repositories (action check). If the outer repository was created by Symbio and has no remote, switch on " +
120
+ "your own (action use): nothing on disk changes and it can be switched back. Before switching, bring any unmerged work of helpers " +
121
+ "with their own copy of the outer repository into the project (merge_work), then move them to the project folder or stop them. " +
122
+ "Don't interrupt work in progress: if helpers are busy, do it once they've finished. Then tell the human in a sentence or two what " +
123
+ "changed for them. If instead the outer repository has a remote or wasn't created by Symbio, someone may rely on it: explain the " +
124
+ "situation to the human briefly and ask whether to switch.");
125
+ },
126
+ },
94
127
  ];
95
128
  /** Entries a project hasn't been told about yet. */
96
129
  export function unseenUpdates(seen) {
@@ -1,10 +1,13 @@
1
1
  // Worker workspaces. In a git project a worker gets its own worktree on its own
2
2
  // branch (isolated copy of the committed files), unless it is set to share the
3
3
  // project folder. Without git, workers always share it. Workers in the project
4
- // folder rely on shared-asset grants alone.
4
+ // folder rely on shared-asset grants alone. In a project made of several repositories
5
+ // (repos.ts), a helper's worktree comes from the repository it was given (agent.repo), and its
6
+ // merges happen there.
5
7
  import { existsSync, promises as fs } from "node:fs";
6
8
  import path from "node:path";
7
9
  import { git } from "./git.js";
10
+ import { repoRoot } from "./repos.js";
8
11
  import { globalDir } from "./store.js";
9
12
  export async function isGitRepo(dir) {
10
13
  return existsSync(path.join(dir, ".git"));
@@ -14,8 +17,9 @@ export function inProjectFolder(project, agent) {
14
17
  const norm = (p) => (process.platform === "win32" ? path.resolve(p).toLowerCase() : path.resolve(p));
15
18
  return norm(agent.directory) === norm(project.directory);
16
19
  }
17
- export async function createWorkspace(project, agentName, mode = "own") {
18
- if (mode === "shared" || !(await isGitRepo(project.directory))) {
20
+ export async function createWorkspace(project, agentName, mode = "own", repo) {
21
+ const root = repoRoot(project, { repo });
22
+ if (mode === "shared" || !(await isGitRepo(root))) {
19
23
  return { directory: project.directory, branch: null, base: null };
20
24
  }
21
25
  const slug = agentName.toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
@@ -24,14 +28,14 @@ export async function createWorkspace(project, agentName, mode = "own") {
24
28
  if (existsSync(directory))
25
29
  throw new Error(`A workspace for "${agentName}" already exists.`);
26
30
  await fs.mkdir(path.dirname(directory), { recursive: true });
27
- const base = await git(project.directory, "rev-parse", "HEAD").catch(() => "");
31
+ const base = await git(root, "rev-parse", "HEAD").catch(() => "");
28
32
  if (!base)
29
- throw new Error("The project's git repository has no commits yet; commit the current files first.");
30
- const branchExists = await git(project.directory, "rev-parse", "--verify", "--quiet", branch).then(() => true, () => false);
31
- await git(project.directory, "worktree", "add", ...(branchExists ? [directory, branch] : ["-b", branch, directory, base]));
32
- const dirty = await git(project.directory, "status", "--porcelain").catch(() => "");
33
+ throw new Error(`The ${repo ? `"${repo}" ` : "project's "}git repository has no commits yet; commit the current files first.`);
34
+ const branchExists = await git(root, "rev-parse", "--verify", "--quiet", branch).then(() => true, () => false);
35
+ await git(root, "worktree", "add", ...(branchExists ? [directory, branch] : ["-b", branch, directory, base]));
36
+ const dirty = await git(root, "status", "--porcelain").catch(() => "");
33
37
  const warning = dirty
34
- ? "The project folder has uncommitted changes; the new agent's workspace does not include them. Commit first if the agent needs them."
38
+ ? `The ${repo ? `"${repo}" repository` : "project folder"} has uncommitted changes; the new agent's workspace does not include them. Commit first if the agent needs them.`
35
39
  : undefined;
36
40
  return { directory, branch, base, warning };
37
41
  }
@@ -66,19 +70,21 @@ export async function mergeWorkspace(project, agent) {
66
70
  }
67
71
  if (committed.length === 0)
68
72
  return { ok: false, reason: `${agent.name} has no committed changes to merge.` };
69
- const mainDirty = await git(project.directory, "status", "--porcelain").catch(() => "");
73
+ const root = repoRoot(project, agent);
74
+ const where = agent.repo ? `The "${agent.repo}" repository` : "The project folder";
75
+ const mainDirty = await git(root, "status", "--porcelain").catch(() => "");
70
76
  if (mainDirty) {
71
- return { ok: false, reason: "The project folder has uncommitted changes. Commit or stash them before merging." };
77
+ return { ok: false, reason: `${where} has uncommitted changes. Commit or stash them before merging.` };
72
78
  }
73
79
  try {
74
- await git(project.directory, "merge", "--no-ff", "--no-edit", "-m", `Merge work from ${agent.name} (Symbio)`, agent.branch);
80
+ await git(root, "merge", "--no-ff", "--no-edit", "-m", `Merge work from ${agent.name} (Symbio)`, agent.branch);
75
81
  }
76
82
  catch (err) {
77
- const conflicts = (await git(project.directory, "diff", "--name-only", "--diff-filter=U").catch(() => ""))
83
+ const conflicts = (await git(root, "diff", "--name-only", "--diff-filter=U").catch(() => ""))
78
84
  .split("\n")
79
85
  .filter(Boolean);
80
- await git(project.directory, "merge", "--abort").catch(() => { });
81
- const main = await git(project.directory, "rev-parse", "--abbrev-ref", "HEAD").catch(() => "the main branch");
86
+ await git(root, "merge", "--abort").catch(() => { });
87
+ const main = await git(root, "rev-parse", "--abbrev-ref", "HEAD").catch(() => "the main branch");
82
88
  return {
83
89
  ok: false,
84
90
  reason: conflicts.length
@@ -95,7 +101,7 @@ export async function mergeWorkspace(project, agent) {
95
101
  export async function syncWorkspace(project, agent) {
96
102
  if (!agent.branch)
97
103
  return null;
98
- const head = await git(project.directory, "rev-parse", "HEAD");
104
+ const head = await git(repoRoot(project, agent), "rev-parse", "HEAD");
99
105
  await git(agent.directory, "merge", "--ff-only", head).catch(() => { });
100
106
  return head;
101
107
  }
@@ -108,11 +114,12 @@ export async function restoreWorkspace(project, agent) {
108
114
  if (!agent.branch || existsSync(agent.directory)) {
109
115
  return { directory: agent.directory, branch: agent.branch ?? null, base: agent.base ?? null, reset: false };
110
116
  }
111
- const base = await git(project.directory, "rev-parse", "HEAD");
112
- await git(project.directory, "worktree", "prune").catch(() => { });
113
- await git(project.directory, "branch", "-f", agent.branch, base);
117
+ const root = repoRoot(project, agent);
118
+ const base = await git(root, "rev-parse", "HEAD");
119
+ await git(root, "worktree", "prune").catch(() => { });
120
+ await git(root, "branch", "-f", agent.branch, base);
114
121
  await fs.mkdir(path.dirname(agent.directory), { recursive: true });
115
- await git(project.directory, "worktree", "add", agent.directory, agent.branch);
122
+ await git(root, "worktree", "add", agent.directory, agent.branch);
116
123
  return { directory: agent.directory, branch: agent.branch, base, reset: true };
117
124
  }
118
125
  /**
@@ -121,18 +128,19 @@ export async function restoreWorkspace(project, agent) {
121
128
  * moved. Returns false when there was nothing to do.
122
129
  */
123
130
  export async function reattachWorkspace(project, agent) {
124
- if (!agent.branch || existsSync(agent.directory) || !(await isGitRepo(project.directory)))
131
+ const root = repoRoot(project, agent);
132
+ if (!agent.branch || existsSync(agent.directory) || !(await isGitRepo(root)))
125
133
  return false;
126
- await git(project.directory, "worktree", "prune").catch(() => { });
127
- const branchExists = await git(project.directory, "rev-parse", "--verify", "--quiet", agent.branch).then(() => true, () => false);
134
+ await git(root, "worktree", "prune").catch(() => { });
135
+ const branchExists = await git(root, "rev-parse", "--verify", "--quiet", agent.branch).then(() => true, () => false);
128
136
  await fs.mkdir(path.dirname(agent.directory), { recursive: true });
129
- await git(project.directory, "worktree", "add", ...(branchExists ? [agent.directory, agent.branch] : ["-b", agent.branch, agent.directory, "HEAD"]));
137
+ await git(root, "worktree", "add", ...(branchExists ? [agent.directory, agent.branch] : ["-b", agent.branch, agent.directory, "HEAD"]));
130
138
  return true;
131
139
  }
132
140
  export async function removeWorkspace(project, agent) {
133
141
  if (!agent.branch)
134
142
  return;
135
- await git(project.directory, "worktree", "remove", "--force", agent.directory).catch(() => { });
143
+ await git(repoRoot(project, agent), "worktree", "remove", "--force", agent.directory).catch(() => { });
136
144
  }
137
145
  /**
138
146
  * Takes a helper out of its own worktree so it can work in the project folder. Refuses while
@@ -148,9 +156,10 @@ export async function leaveWorkspace(project, agent) {
148
156
  throw new Error(`${agent.name}'s own folder has work that isn't in the project yet (${files.slice(0, 8).join(", ")}${files.length > 8 ? ", …" : ""}). ` +
149
157
  "Merge it (or discard it) first.");
150
158
  }
151
- await git(project.directory, "worktree", "remove", "--force", agent.directory).catch(() => { });
152
- await git(project.directory, "worktree", "prune").catch(() => { });
153
- await git(project.directory, "branch", "-d", agent.branch).catch(() => { });
159
+ const root = repoRoot(project, agent);
160
+ await git(root, "worktree", "remove", "--force", agent.directory).catch(() => { });
161
+ await git(root, "worktree", "prune").catch(() => { });
162
+ await git(root, "branch", "-d", agent.branch).catch(() => { });
154
163
  }
155
164
  /**
156
165
  * Deletes helper folders left behind by projects that no longer exist (removing a project
@@ -1 +1 @@
1
- @font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#0b0c0e;--bg-sunken:#08090a;--panel:#101114;--surface:#15161a;--surface-2:#1b1c21;--surface-hover:#202127;--border:#23252b;--border-strong:#30323a;--text:#ededef;--text-2:#a0a1ab;--text-3:#6c6d78;--accent:#6d6af5;--accent-hover:#7e7bf7;--accent-soft:#6d6af524;--accent-text:#aaa8ff;--green:#3fb27f;--green-soft:#3fb27f24;--amber:#d4a03a;--amber-soft:#d4a03a24;--red:#e5534b;--red-soft:#e5534b24;--blue:#4c8df6;--blue-soft:#4c8df624;--r-sm:4px;--r:6px;--r-lg:10px;--shadow-pop:0 12px 32px #00000073, 0 0 0 1px var(--border-strong);--font:"Inter Variable", Inter, "Segoe UI", system-ui, sans-serif;--mono:"JetBrains Mono", "Cascadia Code", Consolas, ui-monospace, monospace;font-family:var(--font);color:var(--text);background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-feature-settings:"cv11", "ss01";-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.5}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}h1,h2,h3{letter-spacing:-.015em;margin:0;font-weight:600}h1{font-size:20px}h2{font-size:15px}h3{font-size:13px}p{margin:0}code,pre,.mono{font-family:var(--mono);font-size:12px}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}::selection{background:var(--accent-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#2a2c33 padding-box content-box;border:3px solid #0000;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#3a3c45 padding-box content-box;border:3px solid #0000}.muted{color:var(--text-2)}.subtle{color:var(--text-3)}.small{font-size:12px}.tnum{font-variant-numeric:tabular-nums}.grow{flex:1;min-width:0}.row{align-items:center;gap:8px;display:flex}.stack{flex-direction:column;gap:8px;display:flex}.spacer{flex:1}.center{text-align:center}.ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.error{color:var(--red);background:var(--red-soft);border-radius:var(--r);border:1px solid #e5534b4d;padding:8px 12px;font-size:13px}.notice{color:var(--amber);background:var(--amber-soft);border-radius:var(--r);border:1px solid #d4a03a4d;padding:8px 12px;font-size:13px}.btn{border-radius:var(--r);border:1px solid var(--border-strong);background:var(--surface-2);height:30px;color:var(--text);font:inherit;cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:13px;font-weight:500;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-hover);border-color:#3a3d46}.btn:disabled{opacity:.45;cursor:not-allowed}.btn svg{flex:none}.btn.primary{background:var(--accent);color:#fff;border-color:#0000}.btn.primary:hover:not(:disabled){background:var(--accent-hover)}.btn.ghost{color:var(--text-2);background:0 0;border-color:#0000}.btn.ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn.danger{color:var(--red);background:0 0;border-color:#e5534b59}.btn.danger:hover:not(:disabled){background:var(--red-soft)}.btn.danger-solid{color:#fff;background:#c4392f;border-color:#0000}.btn.danger-solid:hover:not(:disabled){background:#d6453b}.btn.sm{height:26px;padding:0 9px;font-size:12px}.btn.icon{width:30px;padding:0}.btn.icon.sm{width:26px}.btn.icon.xs{width:20px;height:20px;color:var(--text-3)}.btn.icon.xs:hover{color:var(--text)}.title-input{max-width:260px;height:24px;padding:0 6px;font-weight:600}.btn.block{width:100%}.link{color:var(--accent-text);font:inherit;cursor:pointer;background:0 0;border:none;padding:0}.link:hover{text-decoration:underline}input,textarea,select{background:var(--bg-sunken);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--r);font:inherit;outline:none;padding:7px 10px;font-size:13px;transition:border-color .12s,box-shadow .12s}input::placeholder,textarea::placeholder{color:var(--text-3)}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}textarea{resize:vertical;line-height:1.5}input[type=checkbox],input[type=radio]{accent-color:var(--accent);margin:0}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--text-2);font-size:12px;font-weight:500}.field .hint{color:var(--text-3);font-size:12px}.field>.input-row{font-size:inherit;font-weight:inherit;gap:8px;display:flex}.input-row>input{flex:1;min-width:0}.input-row>.btn{flex-shrink:0}.field>.seg{align-self:flex-start}.field-row{gap:12px;display:flex}.field-row>.field{flex:1}.check{color:var(--text-2);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:inline-flex}.seg{background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--r);gap:2px;padding:2px;display:inline-flex}.seg button{border-radius:var(--r-sm);height:24px;color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;padding:0 10px;font-size:12px;font-weight:500}.seg button:hover{color:var(--text)}.seg button.on{background:var(--surface-hover);color:var(--text);box-shadow:0 0 0 1px var(--border-strong)}.choice{border:1px solid var(--border-strong);border-radius:var(--r);cursor:pointer;align-items:flex-start;gap:10px;padding:10px 12px;transition:border-color .12s,background .12s;display:flex}.choice:hover{border-color:#3a3d46}.choice:has(input:checked){background:var(--accent-soft);border-color:#6d6af599}.choice input{margin-top:3px}.choice-body{flex-direction:column;gap:2px;display:flex}.choice-title{align-items:center;gap:6px;font-weight:500;display:flex}.choice-desc{color:var(--text-2);font-size:12px}.tag{border-radius:var(--r-sm);height:20px;color:var(--text-2);background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;align-items:center;gap:4px;padding:0 7px;font-size:11px;font-weight:500;display:inline-flex}.tag svg{width:11px;height:11px}.tag.accent{color:var(--accent-text);background:var(--accent-soft);border-color:#0000}.tag.green{color:var(--green);background:var(--green-soft);border-color:#0000}.tag.amber{color:var(--amber);background:var(--amber-soft);border-color:#0000}.tag.red{color:var(--red);background:var(--red-soft);border-color:#0000}.tag.blue{color:var(--blue);background:var(--blue-soft);border-color:#0000}.dot{background:var(--text-3);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block;position:relative}.dot.idle{background:var(--text-3)}.dot.busy{background:var(--green)}.dot.busy:after{content:"";border:1.5px solid var(--green);opacity:0;border-radius:50%;animation:1.8s ease-out infinite ping;position:absolute;inset:-3px}.dot.waiting{background:var(--amber)}.dot.stuck,.dot.error{background:var(--red)}.dot.stopped{border:1.5px solid var(--text-3);background:0 0}@keyframes ping{0%{opacity:.8;transform:scale(.6)}to{opacity:0;transform:scale(1.9)}}.avatar{color:#fff;text-transform:uppercase;letter-spacing:0;border-radius:6px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:11px;font-weight:600;display:inline-flex;position:relative}.avatar.sm{border-radius:4px;width:18px;height:18px;font-size:9px}.avatar.lg{border-radius:8px;width:30px;height:30px;font-size:13px}.avatar .dot{width:9px;height:9px;box-shadow:0 0 0 2px var(--panel);position:absolute;bottom:-3px;right:-3px}.avatar.human,.avatar.system{background:var(--surface-hover);color:var(--text-2)}.kbd{font-family:var(--mono);border-radius:var(--r-sm);border:1px solid var(--border-strong);color:var(--text-2);padding:1px 5px;font-size:11px}.app{flex-direction:column;height:100vh;display:flex}.topbar{border-bottom:1px solid var(--border);background:var(--panel);flex:none;align-items:center;gap:12px;height:48px;padding:0 14px 0 16px;display:flex}.remote-banner{background:var(--amber-soft);color:var(--amber);border-bottom:1px solid #d4a03a59;flex:none;align-items:center;gap:10px;padding:7px 14px 7px 16px;font-size:13px;display:flex}.remote-banner a{color:inherit;text-decoration:underline}.remote-banner .spacer{flex:1}.remote-code{letter-spacing:.08em;font-family:ui-monospace,monospace;font-weight:600}.remote-code.big{color:var(--text);font-size:22px}.brand{letter-spacing:-.01em;align-items:center;gap:9px;font-size:14px;font-weight:600;display:flex}.brand-logo{flex:none;width:22px;height:22px}.crumbs{color:var(--text-3);align-items:center;gap:6px;min-width:0;font-size:13px;display:flex}.crumbs a{color:var(--text-2)}.crumbs a:hover{color:var(--text)}.crumbs .current{color:var(--text);font-weight:500}.topbar-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.runtime{border:1px solid var(--border);height:26px;color:var(--text-2);border-radius:999px;align-items:center;gap:7px;padding:0 10px;font-size:12px;display:inline-flex}.runtime .dot.running{background:var(--green)}.runtime .dot.starting{background:var(--amber)}.runtime .dot.crashed,.runtime .dot.stopped{background:var(--red)}.page{flex:1;min-height:0;overflow:auto}.page-inner{flex-direction:column;gap:24px;max-width:1040px;margin:0 auto;padding:32px 32px 64px;display:flex}.page-head{justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.page-head p{color:var(--text-2);margin-top:4px}.page-title{align-items:center;gap:10px;display:flex}.page-title svg{color:var(--text-2)}.back{color:var(--text-2);cursor:pointer;font-size:13px;font:inherit;background:0 0;border:none;align-items:center;gap:6px;margin-bottom:14px;padding:0;display:inline-flex}.back:hover{color:var(--text)}.section{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg)}.section-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 18px;display:flex}.section-head p{color:var(--text-2);max-width:640px;margin-top:3px;font-size:12px}.section-body{padding:8px}.section-empty{text-align:center;color:var(--text-3);padding:28px 18px;font-size:13px}.list-row{border-radius:var(--r);align-items:center;gap:12px;padding:10px 12px;display:flex}.list-row:hover{background:var(--surface)}.list-row+.list-row{border-top:1px solid var(--border);border-radius:0}.list-row:hover+.list-row{border-top-color:#0000}.list-title{font-weight:500}.list-sub{color:var(--text-2);font-size:12px}.project-list{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--panel);flex-direction:column;display:flex;overflow:visible}.project-row{color:inherit;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:20px;padding:14px 16px;transition:background .12s;display:grid}.project-row:first-child{border-radius:var(--r-lg) var(--r-lg) 0 0}.project-row:last-child{border-radius:0 0 var(--r-lg) var(--r-lg)}.project-row:only-child{border-radius:var(--r-lg)}.project-row+.project-row{border-top:1px solid var(--border)}.project-row:hover{background:var(--surface)}.project-name{align-items:center;gap:8px;font-size:14px;font-weight:600;display:flex}.project-dir{color:var(--text-3);font-size:12px;font-family:var(--mono);margin-top:2px}.avatar-stack{gap:3px;display:flex}.project-meta{color:var(--text-2);align-items:center;gap:6px;min-width:120px;font-size:12px;display:flex}.progress-mini{background:var(--surface-hover);border-radius:4px;width:70px;height:4px;overflow:hidden}.progress-mini>div{background:var(--green);border-radius:4px;height:100%}.empty{text-align:center;color:var(--text-2);flex-direction:column;align-items:center;gap:10px;padding:56px 20px;display:flex}.empty-icon{background:var(--surface);border:1px solid var(--border);width:44px;height:44px;color:var(--text-2);border-radius:12px;justify-content:center;align-items:center;margin-bottom:4px;display:flex}.empty h3{color:var(--text);font-size:14px}.locked{justify-content:center;align-items:center;max-width:460px;min-height:100vh;margin:0 auto;display:flex}.empty p{max-width:380px;font-size:13px}.backdrop{z-index:60;background:#0000008c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.dialog{background:var(--panel);border:1px solid var(--border-strong);border-radius:12px;flex-direction:column;width:min(560px,100%);max-height:calc(100vh - 48px);display:flex;box-shadow:0 24px 64px #0000008c}.dialog.wide{width:min(880px,100%)}.dialog-head{align-items:center;gap:10px;padding:16px 18px 12px;display:flex}.dialog-head h2{flex:1}.dialog-sub{color:var(--text-2);margin-top:-6px;margin-bottom:8px;padding:0 18px;font-size:12px}.dialog-body{flex-direction:column;gap:14px;padding:8px 18px 16px;display:flex;overflow:auto}.dialog-foot{border-top:1px solid var(--border);justify-content:flex-end;align-items:center;gap:8px;padding:12px 18px;display:flex}.steps{color:var(--text-3);align-items:center;gap:6px;padding:0 18px 10px;font-size:12px;display:flex}.steps .step{align-items:center;gap:6px;display:flex}.steps .step-num{border:1px solid var(--border-strong);border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;font-size:11px;font-weight:600;display:inline-flex}.steps .step.on{color:var(--text)}.steps .step.on .step-num{background:var(--accent);border-color:var(--accent);color:#fff}.steps .step.done .step-num{background:var(--surface-hover);color:var(--text-2)}.steps .sep{background:var(--border-strong);width:18px;height:1px}.drawer-backdrop{z-index:50;background:#0006;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer{background:var(--panel);border-left:1px solid var(--border-strong);flex-direction:column;width:440px;max-width:94vw;height:100%;display:flex;box-shadow:-24px 0 48px #0006}.drawer-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:14px 16px;display:flex}.drawer-head h2{flex:1}.drawer-body{flex-direction:column;flex:1;gap:12px;padding:14px 16px;display:flex;overflow:auto}.menu{flex:none;position:relative}.menu-list{z-index:40;background:var(--surface);min-width:200px;box-shadow:var(--shadow-pop);border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);right:0}.menu-list button{text-align:left;color:var(--text);font:inherit;border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:7px 9px;font-size:13px;display:flex}.menu-list button:hover{background:var(--surface-hover)}.menu-list button.danger{color:var(--red)}.menu-list svg{color:var(--text-2)}.menu-list button.danger svg{color:var(--red)}.project-view{grid-template-columns:248px minmax(0,1fr);height:100%;display:grid}.side{border-right:1px solid var(--border);background:var(--panel);flex-direction:column;min-height:0;display:flex}.side-scroll{flex-direction:column;flex:1;gap:18px;padding:10px 8px;display:flex;overflow:auto}.side-group-title{color:var(--text-3);letter-spacing:.02em;justify-content:space-between;align-items:center;padding:0 8px 6px;font-size:11px;font-weight:600;display:flex}.side-foot{border-top:1px solid var(--border);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.usage-line{color:var(--text-2);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:2px 0;font-family:inherit;font-size:12px;display:flex}.usage-line:hover{color:var(--text)}.usage-line svg{color:var(--text-3)}.usage-total{white-space:nowrap;flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.usage-total strong{font-size:18px}.usage-table{border-collapse:collapse;width:100%;font-size:12px}.usage-table th{text-align:left;color:var(--text-3);border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 8px;font-weight:500}.usage-table td{border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 8px}.usage-table .num{text-align:right}.usage-table tfoot td{border-bottom:none;font-weight:600}.usage-table tr.muted td{color:var(--text-3)}.price-row{flex-wrap:wrap;gap:8px}.price-row>.btn{justify-content:center;min-width:64px}.price-row .list-sub.warn{color:var(--amber)}.price-field{color:var(--text-3);flex-direction:column;gap:2px;font-size:11px;display:flex}.price-field input{width:84px;height:28px;padding:0 6px;font-size:12px}.agent-row{border-radius:var(--r);width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;padding:6px 8px;display:flex}.agent-row:hover{background:var(--surface)}.agent-row.active{background:var(--surface-2)}.agent-row .avatar .dot{box-shadow:0 0 0 2px var(--panel)}.agent-row:hover .avatar .dot,.agent-row.active .avatar .dot{box-shadow:0 0 0 2px var(--surface-2)}.agent-name{align-items:center;gap:6px;font-weight:500;display:flex}.agent-sub{color:var(--text-3);font-size:12px}.agent-sub.working{color:var(--green)}.agent-sub.waiting{color:var(--amber)}.agent-sub.problem{color:var(--red)}.stopped-toggle{color:var(--text-3);cursor:pointer;font-size:12px;font:inherit;background:0 0;border:none;align-items:center;gap:6px;padding:4px 8px;display:flex}.stopped-toggle:hover{color:var(--text-2)}.asset-row{border-radius:var(--r);align-items:center;gap:8px;padding:5px 8px;font-size:12px;display:flex}.asset-row:hover{background:var(--surface)}.asset-row svg{color:var(--text-3);flex:none}.asset-row.held svg{color:var(--amber)}.asset-name{color:var(--text);font-size:12px;font-weight:500}.asset-sub{color:var(--text-3);font-size:11px}.main{flex-direction:column;min-width:0;min-height:0;display:flex}.main-head{border-bottom:1px solid var(--border);flex:none;align-items:center;gap:4px;height:46px;padding:0 12px 0 8px;display:flex}.tabs{align-items:center;gap:2px;height:100%;display:flex}.tab{height:100%;color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:7px;padding:0 10px;font-weight:500;display:inline-flex;position:relative}.tab:hover,.tab.active{color:var(--text)}.tab svg{color:var(--text-3)}.tab.active svg{color:var(--text-2)}.tab-underline{background:var(--text);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:8px;right:8px}.tab .count{color:var(--text-3);font-variant-numeric:tabular-nums;font-size:11px}.tab-alert{background:var(--amber);color:#1a1405;border-radius:9px;align-items:center;gap:5px;height:18px;padding:0 7px;font-size:11px;font-weight:600;display:inline-flex}.tab-alert-dot{background:#1a1405;border-radius:50%;width:6px;height:6px;position:relative}.tab-alert-dot:after{content:"";background:#1a1405;border-radius:50%;animation:1.6s ease-out infinite ping;position:absolute;inset:0}.main-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.needs-you{background:var(--amber-soft);height:28px;color:var(--amber);font:inherit;cursor:pointer;border:1px solid #d4a03a66;border-radius:999px;align-items:center;gap:7px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.needs-you:hover{background:#d4a03a38}.needs-you .count{background:var(--amber);color:#1a1405;border-radius:9px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:11px;display:inline-flex}.main-body{flex-direction:column;flex:1;min-height:0;display:flex}.banner{border-bottom:1px solid var(--border);flex:none;align-items:center;gap:12px;padding:9px 16px;font-size:13px;display:flex}.banner svg{flex:none}.banner.red{background:var(--red-soft);color:var(--text)}.banner.red svg{color:var(--red)}.banner.blue{background:var(--blue-soft)}.banner.blue svg{color:var(--blue)}.banner .muted{font-size:12px}.inbox-item{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;padding:12px;display:flex}.inbox-item-head{align-items:center;gap:8px;font-size:13px;display:flex}.inbox-item-head .when{color:var(--text-3);margin-left:auto;font-size:11px}.inbox-kind{color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:600}.command{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r);font-family:var(--mono);white-space:pre-wrap;word-break:break-word;max-height:180px;margin:0;padding:8px 10px;font-size:12px;overflow:auto}.inbox-reason{color:var(--text-2);font-size:12px}.inbox-actions{flex-wrap:wrap;gap:6px;display:flex}.inbox-empty{text-align:center;color:var(--text-3);padding:40px 10px}.session-note{border:1px dashed var(--border-strong);border-radius:var(--r);max-width:760px;color:var(--text-2);justify-content:space-between;align-items:center;gap:12px;margin:0 auto;padding:12px 14px;font-size:13px;display:flex}.chat{flex-direction:column;height:100%;min-height:0;display:flex}.chat-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:10px 20px;display:flex}.chat-head .title{font-weight:600}.chat-head .sub{color:var(--text-3);font-size:12px}.inline-select{field-sizing:content;border-radius:var(--r-sm);width:auto;height:auto;color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;padding:0 2px}.inline-select:hover{color:var(--text);background:var(--surface-hover)}.inline-select:focus{box-shadow:none}.inline-select option{background:var(--panel);color:var(--text)}.chat-scroll{flex:1;padding:24px 24px 12px;overflow:auto}.chat-col{flex-direction:column;gap:18px;max-width:760px;margin:0 auto;display:flex}.chat-col>.load-older{align-self:center}.list-compact{flex-direction:column;gap:4px;display:flex}.msg-user{background:var(--surface-2);border:1px solid var(--border);white-space:pre-wrap;border-radius:12px 12px 4px;align-self:flex-end;max-width:82%;padding:9px 13px;font-size:14px;line-height:1.55}.msg-assistant{flex-direction:column;gap:8px;font-size:14px;line-height:1.65;display:flex}.msg-note{color:var(--text-3);text-align:center;justify-content:center;font-size:12px;line-height:1.5;display:flex}.msg-note>span{background:var(--panel);border:1px solid var(--border);border-radius:999px;max-width:88%;padding:4px 10px}.msg-agent{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}.msg-agent-head{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 12px;font-size:12px;display:flex}.msg-agent-head strong{font-weight:600}.msg-agent-body{padding:10px 12px;font-size:13.5px}.msg-failure{color:var(--red);background:var(--red-soft);border-radius:var(--r);align-items:flex-start;gap:8px;padding:8px 12px;font-size:13px;display:flex}.msg-failure svg{flex:none;margin-top:2px}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p{margin:0 0 10px}.md h1,.md h2,.md h3{margin:18px 0 8px}.md h1{font-size:18px}.md h2{font-size:16px}.md h3{font-size:14px}.md code{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 4px;font-size:.86em}.md pre{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r);padding:12px;overflow:auto}.md pre code{background:0 0;border:none;padding:0}.md ul,.md ol{margin:0 0 10px;padding-left:22px}.md li{margin:2px 0}.md table{border-collapse:collapse;margin:0 0 10px}.md th,.md td{border:1px solid var(--border-strong);padding:5px 9px}.md a{color:var(--accent-text)}.md blockquote{border-left:2px solid var(--border-strong);color:var(--text-2);margin:0 0 10px;padding-left:12px}.reasoning{color:var(--text-3);font-size:13px}.reasoning summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;list-style:none;display:inline-flex}.reasoning summary::-webkit-details-marker{display:none}.reasoning summary:hover{color:var(--text-2)}.reasoning-body{white-space:pre-wrap;border-left:2px solid var(--border-strong);margin-top:6px;padding:4px 0 4px 12px}.tool{border:1px solid var(--border);border-radius:var(--r);background:var(--panel);font-size:12px}.tool summary{cursor:pointer;color:var(--text-2);align-items:center;gap:8px;padding:6px 10px;list-style:none;display:flex}.tool summary::-webkit-details-marker{display:none}.tool summary:hover{color:var(--text)}.tool-name{color:var(--text);font-weight:500}.tool-arg{font-family:var(--mono);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tool-state{flex:none;display:inline-flex}.tool-state.done{color:var(--green)}.tool-state.failed{color:var(--red)}.tool-io{border-top:1px solid var(--border);max-height:260px;font-family:var(--mono);white-space:pre-wrap;color:var(--text-2);margin:0;padding:10px;font-size:12px;overflow:auto}.tool-io.out{background:var(--bg-sunken)}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.thinking{color:var(--text-3);align-items:center;gap:8px;font-size:13px;display:flex}.thinking.retrying{color:var(--amber)}.typing{gap:3px;display:inline-flex}.typing i{background:currentColor;border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite typing}.typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s}@keyframes typing{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.chat-empty{text-align:center;color:var(--text-2);padding:56px 20px}.chat-empty h2{color:var(--text);margin-bottom:6px;font-size:18px}.composer-wrap{padding:8px 24px 18px}.composer{border:1px solid var(--border-strong);background:var(--surface);border-radius:12px;max-width:760px;margin:0 auto;transition:border-color .12s,box-shadow .12s}.composer:focus-within{border-color:#44465a;box-shadow:0 0 0 3px #6d6af514}.composer textarea{resize:none;width:100%;box-shadow:none;background:0 0;border:none;padding:12px 14px 4px;font-size:14px}.composer textarea:focus{box-shadow:none}.composer-bar{align-items:center;gap:8px;padding:6px 8px 8px 14px;display:flex}.composer-hint{color:var(--text-3);font-size:11px}.form-card{border-radius:var(--r-lg);background:var(--panel);border:1px solid #d4a03a73;overflow:hidden}.form-card-head{border-bottom:1px solid var(--border);background:var(--amber-soft);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.form-card-head svg{color:var(--amber)}.form-card-body{flex-direction:column;gap:14px;padding:12px 14px;display:flex}.form-field-title{margin-bottom:8px;font-size:13px;font-weight:500}.form-options{flex-direction:column;gap:6px;display:flex}.form-option{text-align:left;background:var(--surface);border:1px solid var(--border-strong);color:var(--text);font:inherit;border-radius:var(--r);cursor:pointer;flex-direction:column;gap:2px;padding:9px 12px;display:flex}.form-option:hover{border-color:#3a3d46}.form-option.on{border-color:var(--accent);background:var(--accent-soft)}.form-option:disabled{opacity:.45;cursor:not-allowed}.form-field-desc{color:var(--text-2);margin:-4px 0 8px;font-size:13px}.form-option span{color:var(--text-2);font-size:12px}.kanban{flex-direction:column;height:100%;min-height:0;display:flex}.kanban-head{border-bottom:1px solid var(--border);align-items:center;gap:16px;padding:14px 20px;display:flex}.kanban-goal{flex:1;min-width:0}.kanban-goal-text{font-size:14px;font-weight:500}.kanban-goal-meta{color:var(--text-3);align-items:center;gap:8px;margin-top:4px;font-size:12px;display:flex}.progress{color:var(--text-2);flex:none;align-items:center;gap:10px;font-size:12px;display:flex}.progress-track{background:var(--surface-hover);border-radius:6px;width:160px;height:6px;overflow:hidden}.progress-fill{background:var(--green);border-radius:6px;height:100%}.plan-banner{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;margin:12px 20px 0;padding:12px 14px;display:flex}.plan-banner-row{align-items:center;gap:10px;display:flex}.plan-banner-row textarea{flex:1}.columns{flex:1;grid-template-columns:repeat(5,minmax(190px,1fr));gap:10px;min-height:0;padding:14px 20px 16px;display:grid;overflow-x:auto}.column{border-radius:var(--r-lg);background:var(--panel);border:1px solid var(--border);flex-direction:column;min-height:0;display:flex}.column-head{color:var(--text-2);align-items:center;gap:8px;padding:10px 12px;font-size:12px;font-weight:600;display:flex}.column-head svg{color:var(--text-3)}.col-in-progress .column-head svg{color:var(--green)}.col-blocked .column-head svg{color:var(--red)}.col-review .column-head svg{color:var(--amber)}.col-done .column-head svg{color:var(--accent-text)}.column-count{color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:auto;font-size:11px}.column-body{flex-direction:column;flex:1;gap:6px;padding:0 8px 8px;display:flex;overflow-y:auto}.column-empty{text-align:center;color:var(--text-3);padding:14px 6px;font-size:12px}.task-card{text-align:left;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;flex-direction:column;gap:7px;padding:10px;transition:border-color .12s,background .12s;display:flex}.task-card:hover{border-color:var(--border-strong);background:var(--surface-2)}.task-card.ts-done .task-title{color:var(--text-2)}.task-top{color:var(--text-3);align-items:center;gap:6px;font-size:11px;display:flex}.task-id{font-family:var(--mono);color:var(--text-3);font-size:11px}.task-title{font-size:13px;font-weight:500;line-height:1.4}.task-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.task-bottom{color:var(--text-2);align-items:center;gap:6px;font-size:12px;display:flex}.task-bottom .subtle{align-items:center;gap:3px;margin-left:auto;font-size:11px;display:inline-flex}.task-detail-meta{grid-template-columns:110px 1fr;gap:6px 12px;font-size:12px;display:grid}.task-detail-meta dt{color:var(--text-3)}.task-detail-meta dd{flex-wrap:wrap;align-items:center;gap:6px;margin:0;display:flex}.history{flex-direction:column;gap:10px;display:flex}.history-item{gap:10px;font-size:12px;display:flex}.history-item .when{color:var(--text-3);font-variant-numeric:tabular-nums;flex:none;width:54px}.history-item .what{color:var(--text-2);white-space:pre-wrap}.history-item .what strong{color:var(--text);font-weight:500}.timeline{flex:1;overflow:auto}.timeline-inner{max-width:820px;margin:0 auto;padding:16px 24px 32px}.timeline-toolbar{border-bottom:1px solid var(--border);color:var(--text-2);align-items:center;gap:10px;padding:10px 24px;font-size:12px;display:flex}.event{border-bottom:1px solid var(--border);grid-template-columns:28px minmax(0,1fr);gap:10px;padding:10px 0;display:grid}.event:last-child{border-bottom:none}.event-head{color:var(--text-2);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.event-head strong{color:var(--text);font-weight:600}.event-head .when{color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:auto}.event-body{margin-top:4px;font-size:13px}.event.quiet .event-body{color:var(--text-2);font-size:12px}.event.open{background:linear-gradient(90deg, var(--amber-soft), transparent 70%);border-radius:var(--r);margin-left:-8px;padding-left:8px}.reply{align-items:flex-end;gap:8px;margin-top:8px;display:flex}.reply textarea{resize:none;flex:1}.docs{grid-template-columns:280px minmax(0,1fr);height:100%;min-height:0;display:grid}.docs-list{border-right:1px solid var(--border);flex-direction:column;gap:1px;padding:10px 8px;display:flex;overflow:auto}.docs-tree-folder{flex-direction:column;gap:1px;display:flex}.docs-search{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);color:var(--text-3);flex:none;align-items:center;gap:6px;margin-bottom:8px;padding:0 4px 0 9px;display:flex}.docs-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.docs-search input,.docs-search input:focus{box-shadow:none;background:0 0;border:none;border-radius:0}.docs-search input{min-width:0;color:var(--text);background:0 0;border:none;outline:none;flex:1;padding:7px 0;font-size:13px}.docs-folder{color:var(--text-2)}.docs-results{flex-direction:column;gap:10px;display:flex}.docs-result-file{flex-direction:column;gap:1px;display:flex}.docs-result-path{color:var(--text-2);align-items:center;gap:6px;padding:2px 8px;font-size:12px;display:flex}.docs-result-path svg{color:var(--text-3);flex:none}.docs-result-path .ellipsis{flex:1}.docs-result{text-align:left;font:inherit;border-radius:var(--r);cursor:pointer;color:var(--text-2);background:0 0;border:none;gap:8px;padding:5px 8px;font-size:12px;line-height:1.45;display:flex}.docs-result:hover{background:var(--surface);color:var(--text)}.docs-result-line{color:var(--text-3);font-family:var(--mono);text-align:right;flex:none;min-width:28px;padding-top:1px;font-size:11px}.docs-result-text{-webkit-line-clamp:3;word-break:break-word;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.docs-result mark{background:var(--accent-soft);color:var(--accent-text);border-radius:2px}.docs-result-more{color:var(--text-3);padding:2px 8px 0 44px;font-size:11px}.docs-page{align-items:flex-start;gap:40px;display:flex}.docs-page .md{flex:1;min-width:0}.docs-toc{flex-direction:column;flex:none;gap:1px;width:220px;max-height:calc(100vh - 200px);display:flex;position:sticky;top:0;overflow:auto}.docs-toc-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);padding:0 8px 6px;font-size:11px;font-weight:600}.docs-toc-item{text-align:left;font:inherit;color:var(--text-2);border-radius:var(--r-sm);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;padding:3px 8px;font-size:12px;overflow:hidden}.docs-toc-item:hover{background:var(--surface);color:var(--text)}.docs-toc-item.level-1{color:var(--text);font-weight:500}.docs-toc-item.level-3{padding-left:20px}@media (width<=1280px){.docs-toc{display:none}}.md a.doc-path{text-decoration:none}.md a.doc-path code{color:var(--accent-text);border-color:var(--accent-soft)}.md a.doc-path:hover code{background:var(--accent-soft)}.docs-text{font-family:var(--mono);font-size:12.5px;line-height:1.6}.docs-text-line{border-radius:var(--r-sm);gap:14px;display:flex}.docs-text-no{color:var(--text-3);text-align:right;-webkit-user-select:none;user-select:none;flex:none;min-width:40px}.docs-text-content{white-space:pre-wrap;word-break:break-word}.docs-body .flash{animation:1.6s ease-out flash}@keyframes flash{0%,30%{background:var(--accent-soft)}to{background:0 0}}.docs-item{text-align:left;color:var(--text-2);font:inherit;border-radius:var(--r);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.docs-item svg{color:var(--text-3);flex:none}.docs-item:hover{background:var(--surface);color:var(--text)}.docs-item.active{background:var(--surface-2);color:var(--text)}.docs-item .grow{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.docs-item-time{color:var(--text-3);flex:none;font-size:11px}.docs-view{flex-direction:column;min-width:0;min-height:0;display:flex}.docs-toolbar{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 16px;display:flex}.docs-toolbar code{color:var(--text-2)}.docs-body{flex:1;padding:24px 32px 48px;overflow:auto}.docs-body .md{max-width:760px;font-size:14px;line-height:1.7}.docs-editor{resize:none;width:100%;height:100%;min-height:420px;font-family:var(--mono);font-size:13px;line-height:1.6}.settings-scroll{flex:1;overflow:auto}.settings-inner{flex-direction:column;gap:20px;max-width:780px;padding:24px 28px 64px;display:flex}.conn-icon{background:var(--surface-2);border:1px solid var(--border-strong);width:32px;height:32px;color:var(--text-2);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.conn-icon.sm{border-radius:5px;width:22px;height:22px}.conn-test{align-items:center;gap:5px;margin-top:2px;font-size:12px;display:inline-flex}.conn-test.ok{color:var(--green)}.conn-test.bad{color:var(--red)}.pick-row{border:1px solid var(--border-strong);border-radius:var(--r);align-items:center;gap:10px;padding:8px 10px;display:flex}.pick-row+.pick-row{margin-top:6px}.pick-row.on{background:var(--accent-soft);border-color:#6d6af580}.pick-main{cursor:pointer;flex:1;align-items:center;gap:10px;min-width:0;display:flex}.danger-zone{border-color:#e5534b4d}.model-picker{border:1px solid var(--border-strong);border-radius:var(--r-lg);overflow:hidden}.model-picker-head{border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:10px;padding:8px 10px;display:flex}.model-picker-head input{flex:1;height:28px;padding:4px 8px}.model-summary{border-bottom:1px solid var(--border);color:var(--text-2);flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;font-size:12px;display:flex}.model-groups{max-height:300px;padding:4px;overflow:auto}.model-group-title{background:var(--panel);color:var(--text-3);z-index:1;padding:8px 8px 4px;font-size:11px;font-weight:600;position:sticky;top:0}.model-row{border-radius:var(--r-sm);cursor:pointer;align-items:center;gap:8px;padding:5px 8px;font-size:13px;display:flex}.model-row:hover{background:var(--surface)}.model-row.on{background:var(--accent-soft)}.model-row .check-box{border:1px solid var(--border-strong);color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:15px;height:15px;display:inline-flex}.model-row.on .check-box{background:var(--accent);border-color:var(--accent)}.model-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lead-btn{color:var(--text-3);cursor:pointer;border-radius:var(--r-sm);background:0 0;border:none;padding:2px;display:inline-flex}.lead-btn:hover{color:var(--text);background:var(--surface-hover)}.lead-btn.on{color:var(--amber)}.folder-summary{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;padding:12px 14px;display:flex}.folder-headline{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.folder-headline svg{color:var(--text-2)}.kind-bar{background:var(--surface-hover);border-radius:6px;gap:2px;height:6px;display:flex;overflow:hidden}.kind-seg{height:100%}.k0{background:#6d6af5}.k1{background:#3fb27f}.k2{background:#d4a03a}.k3{background:#c76bd6}.k4{background:#4c8df6}.k5{background:#6c6d78}.kind-legend{color:var(--text-2);flex-wrap:wrap;gap:4px 14px;font-size:12px;display:flex}.kind-legend i{border-radius:2px;width:8px;height:8px;margin-right:6px;display:inline-block}.top-level{color:var(--text-3);font-size:12px;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.btn.ghost.active{color:var(--text);background:var(--surface-2)}.folder-browser{border:1px solid var(--border-strong);border-radius:var(--r);background:var(--bg-sunken);flex-direction:column;display:flex;overflow:hidden}.folder-browser-head{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px;display:flex}.folder-browser-path{min-width:0;color:var(--text);flex:1;font-size:12px}.folder-browser-places{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;padding:6px 8px;display:flex}.folder-browser-list{flex-direction:column;max-height:240px;padding:4px;display:flex;overflow:auto}.folder-browser-item{color:var(--text);font:inherit;text-align:left;border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.folder-browser-item:hover{background:var(--surface-hover)}.folder-browser-item svg{color:var(--text-3);flex:none}.folder-browser-foot{border-top:1px solid var(--border);align-items:center;gap:8px;padding:8px;display:flex}.folder-browser-foot .spacer{flex:1}.docs-rules{color:var(--text);margin-bottom:6px;font-weight:500}.docs-rules svg{color:var(--accent-text)}.rules{flex-direction:column;gap:20px;font-size:13px;display:flex}.rules-filters{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg);grid-template-columns:minmax(200px,1.4fr) repeat(5,minmax(120px,1fr));gap:12px;padding:14px 16px;display:grid}.rules-filters select:disabled{opacity:.5}.rules-filters-foot{grid-column:1/-1;align-items:center;gap:12px;display:flex}.rules-check{color:var(--text-2);cursor:pointer;align-items:center;gap:7px;font-size:13px;display:inline-flex}.rules-area h2{margin:4px 0 6px;font-size:16px}.rules-prefix{font-family:var(--mono);color:var(--text-3);margin-left:4px;font-size:12px;font-weight:400}.rules-stages{color:var(--text-3);flex-wrap:wrap;gap:4px 14px;margin:0 0 10px;display:flex}.rules-stages a{color:var(--accent-text);text-decoration:none}.rules-stages a:hover{text-decoration:underline}.rules-stage h3{margin:16px 0 8px;scroll-margin-top:12px;font-size:14px}.rules-table-wrap{border:1px solid var(--border);border-radius:var(--r-lg);overflow-x:auto}.rules-table{border-collapse:collapse;table-layout:fixed;width:100%;min-width:1000px}.rules-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);background:var(--panel);border-bottom:1px solid var(--border);padding:9px 10px;font-size:11px;font-weight:600}.rules-table td{vertical-align:top;border-top:1px solid var(--border);color:var(--text-2);overflow-wrap:anywhere;padding:10px;line-height:1.5}.rules-table tr:first-child td{border-top:none}.rules-table tr.superseded td{opacity:.55}.rules-table tr{scroll-margin-top:12px}.rules-id{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--accent-text)!important}.rules-superseded{font-family:var(--font);color:var(--text-3);margin-top:4px;font-size:11px;font-weight:400}.rules-md{color:var(--text)!important}.rules-md p{margin:0 0 6px}.rules-md p:last-child{margin:0}.rules-md ul,.rules-md ol{margin:0 0 6px;padding-left:18px}.rules-md code{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 4px;font-size:.86em}.rules-md a,.rules-cites a{color:var(--accent-text)}.rules-check-how{color:var(--text-3);margin-top:6px;font-size:12px}.rules-cites{color:var(--text)}.rules-cite{-webkit-text-decoration:underline dotted var(--text-3);text-decoration:underline dotted var(--text-3);text-underline-offset:3px}.rules-excerpt-toggle{font:inherit;color:var(--accent-text);cursor:pointer;background:0 0;border:none;align-items:center;gap:3px;margin-top:6px;padding:0;font-size:12px;display:inline-flex}.rules-excerpt{background:var(--accent-soft);border-left:2px solid var(--accent);border-radius:var(--r-sm);color:var(--text);margin:6px 0 0;padding:8px 10px;font-size:12.5px;font-style:italic}.rules-excerpt-src{color:var(--accent-text);margin-bottom:3px;font-size:11px;font-style:normal;font-weight:600}.rules-status{white-space:nowrap;align-items:center;gap:6px;font-weight:500;display:inline-flex}.rules-status.done{color:var(--green)}.rules-status.partial{color:var(--amber)}.rules-status.missing{color:var(--red)}.rules-status.na{color:var(--text-3)}.rule-dot{background:var(--amber);border-radius:50%;width:9px;height:9px;display:inline-block}.docs-body .rules~*{padding-right:24px}.docs-body:has(.rules){padding-right:24px}.update-badge{color:var(--accent-text)}.update-available{border:1px solid var(--accent-soft);background:var(--accent-soft);border-radius:var(--r-lg);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.update-available svg{color:var(--accent-text)}.update-notes{flex-direction:column;gap:8px;max-height:260px;margin-top:4px;display:flex;overflow:auto}.update-notes ul{color:var(--text-2);margin:4px 0 0;padding-left:18px;font-size:12.5px;line-height:1.5}
1
+ @font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#0b0c0e;--bg-sunken:#08090a;--panel:#101114;--surface:#15161a;--surface-2:#1b1c21;--surface-hover:#202127;--border:#23252b;--border-strong:#30323a;--text:#ededef;--text-2:#a0a1ab;--text-3:#6c6d78;--accent:#6d6af5;--accent-hover:#7e7bf7;--accent-soft:#6d6af524;--accent-text:#aaa8ff;--green:#3fb27f;--green-soft:#3fb27f24;--amber:#d4a03a;--amber-soft:#d4a03a24;--red:#e5534b;--red-soft:#e5534b24;--blue:#4c8df6;--blue-soft:#4c8df624;--r-sm:4px;--r:6px;--r-lg:10px;--shadow-pop:0 12px 32px #00000073, 0 0 0 1px var(--border-strong);--font:"Inter Variable", Inter, "Segoe UI", system-ui, sans-serif;--mono:"JetBrains Mono", "Cascadia Code", Consolas, ui-monospace, monospace;font-family:var(--font);color:var(--text);background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-feature-settings:"cv11", "ss01";-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.5}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}h1,h2,h3{letter-spacing:-.015em;margin:0;font-weight:600}h1{font-size:20px}h2{font-size:15px}h3{font-size:13px}p{margin:0}code,pre,.mono{font-family:var(--mono);font-size:12px}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}::selection{background:var(--accent-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#2a2c33 padding-box content-box;border:3px solid #0000;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#3a3c45 padding-box content-box;border:3px solid #0000}.muted{color:var(--text-2)}.subtle{color:var(--text-3)}.small{font-size:12px}.tnum{font-variant-numeric:tabular-nums}.grow{flex:1;min-width:0}.row{align-items:center;gap:8px;display:flex}.stack{flex-direction:column;gap:8px;display:flex}.spacer{flex:1}.center{text-align:center}.ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.error{color:var(--red);background:var(--red-soft);border-radius:var(--r);border:1px solid #e5534b4d;padding:8px 12px;font-size:13px}.notice{color:var(--amber);background:var(--amber-soft);border-radius:var(--r);border:1px solid #d4a03a4d;padding:8px 12px;font-size:13px}.btn{border-radius:var(--r);border:1px solid var(--border-strong);background:var(--surface-2);height:30px;color:var(--text);font:inherit;cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:13px;font-weight:500;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-hover);border-color:#3a3d46}.btn:disabled{opacity:.45;cursor:not-allowed}.btn svg{flex:none}.btn.primary{background:var(--accent);color:#fff;border-color:#0000}.btn.primary:hover:not(:disabled){background:var(--accent-hover)}.btn.ghost{color:var(--text-2);background:0 0;border-color:#0000}.btn.ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn.danger{color:var(--red);background:0 0;border-color:#e5534b59}.btn.danger:hover:not(:disabled){background:var(--red-soft)}.btn.danger-solid{color:#fff;background:#c4392f;border-color:#0000}.btn.danger-solid:hover:not(:disabled){background:#d6453b}.btn.sm{height:26px;padding:0 9px;font-size:12px}.btn.icon{width:30px;padding:0}.btn.icon.sm{width:26px}.btn.icon.xs{width:20px;height:20px;color:var(--text-3)}.btn.icon.xs:hover{color:var(--text)}.title-input{max-width:260px;height:24px;padding:0 6px;font-weight:600}.btn.block{width:100%}.link{color:var(--accent-text);font:inherit;cursor:pointer;background:0 0;border:none;padding:0}.link:hover{text-decoration:underline}input,textarea,select{background:var(--bg-sunken);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--r);font:inherit;outline:none;padding:7px 10px;font-size:13px;transition:border-color .12s,box-shadow .12s}input::placeholder,textarea::placeholder{color:var(--text-3)}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}textarea{resize:vertical;line-height:1.5}input[type=checkbox],input[type=radio]{accent-color:var(--accent);margin:0}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--text-2);font-size:12px;font-weight:500}.field .hint{color:var(--text-3);font-size:12px}.field>.input-row{font-size:inherit;font-weight:inherit;gap:8px;display:flex}.input-row>input{flex:1;min-width:0}.input-row>.btn{flex-shrink:0}.field>.seg{align-self:flex-start}.field-row{gap:12px;display:flex}.field-row>.field{flex:1}.check{color:var(--text-2);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:inline-flex}.seg{background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--r);gap:2px;padding:2px;display:inline-flex}.seg button{border-radius:var(--r-sm);height:24px;color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;padding:0 10px;font-size:12px;font-weight:500}.seg button:hover{color:var(--text)}.seg button.on{background:var(--surface-hover);color:var(--text);box-shadow:0 0 0 1px var(--border-strong)}.choice{border:1px solid var(--border-strong);border-radius:var(--r);cursor:pointer;align-items:flex-start;gap:10px;padding:10px 12px;transition:border-color .12s,background .12s;display:flex}.choice:hover{border-color:#3a3d46}.choice:has(input:checked){background:var(--accent-soft);border-color:#6d6af599}.choice input{margin-top:3px}.choice-body{flex-direction:column;gap:2px;display:flex}.choice-title{align-items:center;gap:6px;font-weight:500;display:flex}.choice-desc{color:var(--text-2);font-size:12px}.tag{border-radius:var(--r-sm);height:20px;color:var(--text-2);background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;align-items:center;gap:4px;padding:0 7px;font-size:11px;font-weight:500;display:inline-flex}.tag svg{width:11px;height:11px}.tag.accent{color:var(--accent-text);background:var(--accent-soft);border-color:#0000}.tag.green{color:var(--green);background:var(--green-soft);border-color:#0000}.tag.amber{color:var(--amber);background:var(--amber-soft);border-color:#0000}.tag.red{color:var(--red);background:var(--red-soft);border-color:#0000}.tag.blue{color:var(--blue);background:var(--blue-soft);border-color:#0000}.dot{background:var(--text-3);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block;position:relative}.dot.idle{background:var(--text-3)}.dot.busy{background:var(--green)}.dot.busy:after{content:"";border:1.5px solid var(--green);opacity:0;border-radius:50%;animation:1.8s ease-out infinite ping;position:absolute;inset:-3px}.dot.waiting{background:var(--amber)}.dot.stuck,.dot.error{background:var(--red)}.dot.stopped{border:1.5px solid var(--text-3);background:0 0}@keyframes ping{0%{opacity:.8;transform:scale(.6)}to{opacity:0;transform:scale(1.9)}}.avatar{color:#fff;text-transform:uppercase;letter-spacing:0;border-radius:6px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:11px;font-weight:600;display:inline-flex;position:relative}.avatar.sm{border-radius:4px;width:18px;height:18px;font-size:9px}.avatar.lg{border-radius:8px;width:30px;height:30px;font-size:13px}.avatar .dot{width:9px;height:9px;box-shadow:0 0 0 2px var(--panel);position:absolute;bottom:-3px;right:-3px}.avatar.human,.avatar.system{background:var(--surface-hover);color:var(--text-2)}.kbd{font-family:var(--mono);border-radius:var(--r-sm);border:1px solid var(--border-strong);color:var(--text-2);padding:1px 5px;font-size:11px}.app{flex-direction:column;height:100vh;display:flex}.topbar{border-bottom:1px solid var(--border);background:var(--panel);flex:none;align-items:center;gap:12px;height:48px;padding:0 14px 0 16px;display:flex}.remote-banner{background:var(--amber-soft);color:var(--amber);border-bottom:1px solid #d4a03a59;flex:none;align-items:center;gap:10px;padding:7px 14px 7px 16px;font-size:13px;display:flex}.remote-banner a{color:inherit;text-decoration:underline}.remote-banner .spacer{flex:1}.remote-code{letter-spacing:.08em;font-family:ui-monospace,monospace;font-weight:600}.remote-code.big{color:var(--text);font-size:22px}.brand{letter-spacing:-.01em;align-items:center;gap:9px;font-size:14px;font-weight:600;display:flex}.brand-logo{flex:none;width:22px;height:22px}.crumbs{color:var(--text-3);align-items:center;gap:6px;min-width:0;font-size:13px;display:flex}.crumbs a{color:var(--text-2)}.crumbs a:hover{color:var(--text)}.crumbs .current{color:var(--text);font-weight:500}.topbar-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.runtime{border:1px solid var(--border);height:26px;color:var(--text-2);border-radius:999px;align-items:center;gap:7px;padding:0 10px;font-size:12px;display:inline-flex}.runtime .dot.running{background:var(--green)}.runtime .dot.starting{background:var(--amber)}.runtime .dot.crashed,.runtime .dot.stopped{background:var(--red)}.page{flex:1;min-height:0;overflow:auto}.page-inner{flex-direction:column;gap:24px;max-width:1040px;margin:0 auto;padding:32px 32px 64px;display:flex}.page-head{justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.page-head p{color:var(--text-2);margin-top:4px}.page-title{align-items:center;gap:10px;display:flex}.page-title svg{color:var(--text-2)}.back{color:var(--text-2);cursor:pointer;font-size:13px;font:inherit;background:0 0;border:none;align-items:center;gap:6px;margin-bottom:14px;padding:0;display:inline-flex}.back:hover{color:var(--text)}.section{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg)}.section-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 18px;display:flex}.section-head p{color:var(--text-2);max-width:640px;margin-top:3px;font-size:12px}.section-body{padding:8px}.section-empty{text-align:center;color:var(--text-3);padding:28px 18px;font-size:13px}.list-row{border-radius:var(--r);align-items:center;gap:12px;padding:10px 12px;display:flex}.list-row:hover{background:var(--surface)}.list-row+.list-row{border-top:1px solid var(--border);border-radius:0}.list-row:hover+.list-row{border-top-color:#0000}.list-title{font-weight:500}.list-sub{color:var(--text-2);font-size:12px}.project-list{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--panel);flex-direction:column;display:flex;overflow:visible}.project-row{color:inherit;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:20px;padding:14px 16px;transition:background .12s;display:grid}.project-row:first-child{border-radius:var(--r-lg) var(--r-lg) 0 0}.project-row:last-child{border-radius:0 0 var(--r-lg) var(--r-lg)}.project-row:only-child{border-radius:var(--r-lg)}.project-row+.project-row{border-top:1px solid var(--border)}.project-row:hover{background:var(--surface)}.project-name{align-items:center;gap:8px;font-size:14px;font-weight:600;display:flex}.project-dir{color:var(--text-3);font-size:12px;font-family:var(--mono);margin-top:2px}.avatar-stack{gap:3px;display:flex}.project-meta{color:var(--text-2);align-items:center;gap:6px;min-width:120px;font-size:12px;display:flex}.progress-mini{background:var(--surface-hover);border-radius:4px;width:70px;height:4px;overflow:hidden}.progress-mini>div{background:var(--green);border-radius:4px;height:100%}.empty{text-align:center;color:var(--text-2);flex-direction:column;align-items:center;gap:10px;padding:56px 20px;display:flex}.empty-icon{background:var(--surface);border:1px solid var(--border);width:44px;height:44px;color:var(--text-2);border-radius:12px;justify-content:center;align-items:center;margin-bottom:4px;display:flex}.empty h3{color:var(--text);font-size:14px}.locked{justify-content:center;align-items:center;max-width:460px;min-height:100vh;margin:0 auto;display:flex}.empty p{max-width:380px;font-size:13px}.backdrop{z-index:60;background:#0000008c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.dialog{background:var(--panel);border:1px solid var(--border-strong);border-radius:12px;flex-direction:column;width:min(560px,100%);max-height:calc(100vh - 48px);display:flex;box-shadow:0 24px 64px #0000008c}.dialog.wide{width:min(880px,100%)}.dialog-head{align-items:center;gap:10px;padding:16px 18px 12px;display:flex}.dialog-head h2{flex:1}.dialog-sub{color:var(--text-2);margin-top:-6px;margin-bottom:8px;padding:0 18px;font-size:12px}.dialog-body{flex-direction:column;gap:14px;padding:8px 18px 16px;display:flex;overflow:auto}.dialog-foot{border-top:1px solid var(--border);justify-content:flex-end;align-items:center;gap:8px;padding:12px 18px;display:flex}.steps{color:var(--text-3);align-items:center;gap:6px;padding:0 18px 10px;font-size:12px;display:flex}.steps .step{align-items:center;gap:6px;display:flex}.steps .step-num{border:1px solid var(--border-strong);border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;font-size:11px;font-weight:600;display:inline-flex}.steps .step.on{color:var(--text)}.steps .step.on .step-num{background:var(--accent);border-color:var(--accent);color:#fff}.steps .step.done .step-num{background:var(--surface-hover);color:var(--text-2)}.steps .sep{background:var(--border-strong);width:18px;height:1px}.drawer-backdrop{z-index:50;background:#0006;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer{background:var(--panel);border-left:1px solid var(--border-strong);flex-direction:column;width:440px;max-width:94vw;height:100%;display:flex;box-shadow:-24px 0 48px #0006}.drawer-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:14px 16px;display:flex}.drawer-head h2{flex:1}.drawer-body{flex-direction:column;flex:1;gap:12px;padding:14px 16px;display:flex;overflow:auto}.menu{flex:none;position:relative}.menu-list{z-index:40;background:var(--surface);min-width:200px;box-shadow:var(--shadow-pop);border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);right:0}.menu-list button{text-align:left;color:var(--text);font:inherit;border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:7px 9px;font-size:13px;display:flex}.menu-list button:hover{background:var(--surface-hover)}.menu-list button.danger{color:var(--red)}.menu-list svg{color:var(--text-2)}.menu-list button.danger svg{color:var(--red)}.project-view{grid-template-columns:248px minmax(0,1fr);height:100%;display:grid}.side{border-right:1px solid var(--border);background:var(--panel);flex-direction:column;min-height:0;display:flex}.side-scroll{flex-direction:column;flex:1;gap:18px;padding:10px 8px;display:flex;overflow:auto}.side-group-title{color:var(--text-3);letter-spacing:.02em;justify-content:space-between;align-items:center;padding:0 8px 6px;font-size:11px;font-weight:600;display:flex}.side-foot{border-top:1px solid var(--border);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.usage-line{color:var(--text-2);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:2px 0;font-family:inherit;font-size:12px;display:flex}.usage-line:hover{color:var(--text)}.usage-line svg{color:var(--text-3)}.usage-total{white-space:nowrap;flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.usage-total strong{font-size:18px}.usage-table{border-collapse:collapse;width:100%;font-size:12px}.usage-table th{text-align:left;color:var(--text-3);border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 8px;font-weight:500}.usage-table td{border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 8px}.usage-table .num{text-align:right}.usage-table tfoot td{border-bottom:none;font-weight:600}.usage-table tr.muted td{color:var(--text-3)}.price-row{flex-wrap:wrap;gap:8px}.price-row>.btn{justify-content:center;min-width:64px}.price-row .list-sub.warn{color:var(--amber)}.price-field{color:var(--text-3);flex-direction:column;gap:2px;font-size:11px;display:flex}.price-field input{width:84px;height:28px;padding:0 6px;font-size:12px}.agent-row{border-radius:var(--r);width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;padding:6px 8px;display:flex}.agent-row:hover{background:var(--surface)}.agent-row.active{background:var(--surface-2)}.agent-row .avatar .dot{box-shadow:0 0 0 2px var(--panel)}.agent-row:hover .avatar .dot,.agent-row.active .avatar .dot{box-shadow:0 0 0 2px var(--surface-2)}.agent-name{align-items:center;gap:6px;font-weight:500;display:flex}.agent-sub{color:var(--text-3);font-size:12px}.agent-sub.working{color:var(--green)}.agent-sub.waiting{color:var(--amber)}.agent-sub.problem{color:var(--red)}.stopped-toggle{color:var(--text-3);cursor:pointer;font-size:12px;font:inherit;background:0 0;border:none;align-items:center;gap:6px;padding:4px 8px;display:flex}.stopped-toggle:hover{color:var(--text-2)}.asset-row{border-radius:var(--r);align-items:center;gap:8px;padding:5px 8px;font-size:12px;display:flex}.asset-row:hover{background:var(--surface)}.asset-row svg{color:var(--text-3);flex:none}.asset-row.held svg{color:var(--amber)}.asset-name{color:var(--text);font-size:12px;font-weight:500}.asset-sub{color:var(--text-3);font-size:11px}.main{flex-direction:column;min-width:0;min-height:0;display:flex}.main-head{border-bottom:1px solid var(--border);flex:none;align-items:center;gap:4px;height:46px;padding:0 12px 0 8px;display:flex}.tabs{align-items:center;gap:2px;height:100%;display:flex}.tab{height:100%;color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:7px;padding:0 10px;font-weight:500;display:inline-flex;position:relative}.tab:hover,.tab.active{color:var(--text)}.tab svg{color:var(--text-3)}.tab.active svg{color:var(--text-2)}.tab-underline{background:var(--text);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:8px;right:8px}.tab .count{color:var(--text-3);font-variant-numeric:tabular-nums;font-size:11px}.tab-alert{background:var(--amber);color:#1a1405;border-radius:9px;align-items:center;gap:5px;height:18px;padding:0 7px;font-size:11px;font-weight:600;display:inline-flex}.tab-alert-dot{background:#1a1405;border-radius:50%;width:6px;height:6px;position:relative}.tab-alert-dot:after{content:"";background:#1a1405;border-radius:50%;animation:1.6s ease-out infinite ping;position:absolute;inset:0}.main-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.needs-you{background:var(--amber-soft);height:28px;color:var(--amber);font:inherit;cursor:pointer;border:1px solid #d4a03a66;border-radius:999px;align-items:center;gap:7px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.needs-you:hover{background:#d4a03a38}.needs-you .count{background:var(--amber);color:#1a1405;border-radius:9px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:11px;display:inline-flex}.main-body{flex-direction:column;flex:1;min-height:0;display:flex}.banner{border-bottom:1px solid var(--border);flex:none;align-items:center;gap:12px;padding:9px 16px;font-size:13px;display:flex}.banner svg{flex:none}.banner.red{background:var(--red-soft);color:var(--text)}.banner.red svg{color:var(--red)}.banner.blue{background:var(--blue-soft)}.banner.blue svg{color:var(--blue)}.banner .muted{font-size:12px}.inbox-item{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;padding:12px;display:flex}.inbox-item-head{align-items:center;gap:8px;font-size:13px;display:flex}.inbox-item-head .when{color:var(--text-3);margin-left:auto;font-size:11px}.inbox-kind{color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:600}.command{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r);font-family:var(--mono);white-space:pre-wrap;word-break:break-word;max-height:180px;margin:0;padding:8px 10px;font-size:12px;overflow:auto}.inbox-reason{color:var(--text-2);font-size:12px}.inbox-actions{flex-wrap:wrap;gap:6px;display:flex}.inbox-empty{text-align:center;color:var(--text-3);padding:40px 10px}.session-note{border:1px dashed var(--border-strong);border-radius:var(--r);max-width:760px;color:var(--text-2);justify-content:space-between;align-items:center;gap:12px;margin:0 auto;padding:12px 14px;font-size:13px;display:flex}.chat{flex-direction:column;height:100%;min-height:0;display:flex}.chat-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:10px 20px;display:flex}.chat-head .title{font-weight:600}.chat-head .sub{color:var(--text-3);font-size:12px}.inline-select{field-sizing:content;border-radius:var(--r-sm);width:auto;height:auto;color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;padding:0 2px}.inline-select:hover{color:var(--text);background:var(--surface-hover)}.inline-select:focus{box-shadow:none}.inline-select option{background:var(--panel);color:var(--text)}.chat-scroll{flex:1;padding:24px 24px 12px;overflow:auto}.chat-col{flex-direction:column;gap:18px;max-width:760px;margin:0 auto;display:flex}.chat-col>.load-older{align-self:center}.list-compact{flex-direction:column;gap:4px;display:flex}.msg-user{background:var(--surface-2);border:1px solid var(--border);white-space:pre-wrap;border-radius:12px 12px 4px;align-self:flex-end;max-width:82%;padding:9px 13px;font-size:14px;line-height:1.55}.msg-assistant{flex-direction:column;gap:8px;font-size:14px;line-height:1.65;display:flex}.msg-note{color:var(--text-3);text-align:center;justify-content:center;font-size:12px;line-height:1.5;display:flex}.msg-note>span{background:var(--panel);border:1px solid var(--border);border-radius:999px;max-width:88%;padding:4px 10px}.msg-agent{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}.msg-agent-head{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 12px;font-size:12px;display:flex}.msg-agent-head strong{font-weight:600}.msg-agent-body{padding:10px 12px;font-size:13.5px}.msg-failure{color:var(--red);background:var(--red-soft);border-radius:var(--r);align-items:flex-start;gap:8px;padding:8px 12px;font-size:13px;display:flex}.msg-failure svg{flex:none;margin-top:2px}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p{margin:0 0 10px}.md h1,.md h2,.md h3{margin:18px 0 8px}.md h1{font-size:18px}.md h2{font-size:16px}.md h3{font-size:14px}.md code{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 4px;font-size:.86em}.md pre{background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r);padding:12px;overflow:auto}.md pre code{background:0 0;border:none;padding:0}.md ul,.md ol{margin:0 0 10px;padding-left:22px}.md li{margin:2px 0}.md table{border-collapse:collapse;margin:0 0 10px}.md th,.md td{border:1px solid var(--border-strong);padding:5px 9px}.md a{color:var(--accent-text)}.md blockquote{border-left:2px solid var(--border-strong);color:var(--text-2);margin:0 0 10px;padding-left:12px}.reasoning{color:var(--text-3);font-size:13px}.reasoning summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;list-style:none;display:inline-flex}.reasoning summary::-webkit-details-marker{display:none}.reasoning summary:hover{color:var(--text-2)}.reasoning-body{white-space:pre-wrap;border-left:2px solid var(--border-strong);margin-top:6px;padding:4px 0 4px 12px}.tool{border:1px solid var(--border);border-radius:var(--r);background:var(--panel);font-size:12px}.tool summary{cursor:pointer;color:var(--text-2);align-items:center;gap:8px;padding:6px 10px;list-style:none;display:flex}.tool summary::-webkit-details-marker{display:none}.tool summary:hover{color:var(--text)}.tool-name{color:var(--text);font-weight:500}.tool-arg{font-family:var(--mono);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tool-state{flex:none;display:inline-flex}.tool-state.done{color:var(--green)}.tool-state.failed{color:var(--red)}.tool-io{border-top:1px solid var(--border);max-height:260px;font-family:var(--mono);white-space:pre-wrap;color:var(--text-2);margin:0;padding:10px;font-size:12px;overflow:auto}.tool-io.out{background:var(--bg-sunken)}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.thinking{color:var(--text-3);align-items:center;gap:8px;font-size:13px;display:flex}.thinking.retrying{color:var(--amber)}.typing{gap:3px;display:inline-flex}.typing i{background:currentColor;border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite typing}.typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s}@keyframes typing{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.chat-empty{text-align:center;color:var(--text-2);padding:56px 20px}.chat-empty h2{color:var(--text);margin-bottom:6px;font-size:18px}.composer-wrap{padding:8px 24px 18px}.composer{border:1px solid var(--border-strong);background:var(--surface);border-radius:12px;max-width:760px;margin:0 auto;transition:border-color .12s,box-shadow .12s}.composer:focus-within{border-color:#44465a;box-shadow:0 0 0 3px #6d6af514}.composer textarea{resize:none;width:100%;box-shadow:none;background:0 0;border:none;padding:12px 14px 4px;font-size:14px}.composer textarea:focus{box-shadow:none}.composer-bar{align-items:center;gap:8px;padding:6px 8px 8px 14px;display:flex}.composer-hint{color:var(--text-3);font-size:11px}.form-card{border-radius:var(--r-lg);background:var(--panel);border:1px solid #d4a03a73;overflow:hidden}.form-card-head{border-bottom:1px solid var(--border);background:var(--amber-soft);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.form-card-head svg{color:var(--amber)}.form-card-body{flex-direction:column;gap:14px;padding:12px 14px;display:flex}.form-field-title{margin-bottom:8px;font-size:13px;font-weight:500}.form-options{flex-direction:column;gap:6px;display:flex}.form-option{text-align:left;background:var(--surface);border:1px solid var(--border-strong);color:var(--text);font:inherit;border-radius:var(--r);cursor:pointer;flex-direction:column;gap:2px;padding:9px 12px;display:flex}.form-option:hover{border-color:#3a3d46}.form-option.on{border-color:var(--accent);background:var(--accent-soft)}.form-option:disabled{opacity:.45;cursor:not-allowed}.form-field-desc{color:var(--text-2);margin:-4px 0 8px;font-size:13px}.form-option span{color:var(--text-2);font-size:12px}.kanban{flex-direction:column;height:100%;min-height:0;display:flex}.kanban-head{border-bottom:1px solid var(--border);align-items:center;gap:16px;padding:14px 20px;display:flex}.kanban-goal{flex:1;min-width:0}.kanban-goal-text{font-size:14px;font-weight:500}.kanban-goal-meta{color:var(--text-3);align-items:center;gap:8px;margin-top:4px;font-size:12px;display:flex}.progress{color:var(--text-2);flex:none;align-items:center;gap:10px;font-size:12px;display:flex}.progress-track{background:var(--surface-hover);border-radius:6px;width:160px;height:6px;overflow:hidden}.progress-fill{background:var(--green);border-radius:6px;height:100%}.plan-banner{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;margin:12px 20px 0;padding:12px 14px;display:flex}.plan-banner-row{align-items:center;gap:10px;display:flex}.plan-banner-row textarea{flex:1}.columns{flex:1;grid-template-columns:repeat(5,minmax(190px,1fr));gap:10px;min-height:0;padding:14px 20px 16px;display:grid;overflow-x:auto}.column{border-radius:var(--r-lg);background:var(--panel);border:1px solid var(--border);flex-direction:column;min-height:0;display:flex}.column-head{color:var(--text-2);align-items:center;gap:8px;padding:10px 12px;font-size:12px;font-weight:600;display:flex}.column-head svg{color:var(--text-3)}.col-in-progress .column-head svg{color:var(--green)}.col-blocked .column-head svg{color:var(--red)}.col-review .column-head svg{color:var(--amber)}.col-done .column-head svg{color:var(--accent-text)}.column-count{color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:auto;font-size:11px}.column-body{flex-direction:column;flex:1;gap:6px;padding:0 8px 8px;display:flex;overflow-y:auto}.column-empty{text-align:center;color:var(--text-3);padding:14px 6px;font-size:12px}.task-card{text-align:left;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;flex-direction:column;gap:7px;padding:10px;transition:border-color .12s,background .12s;display:flex}.task-card:hover{border-color:var(--border-strong);background:var(--surface-2)}.task-card.ts-done .task-title{color:var(--text-2)}.task-top{color:var(--text-3);align-items:center;gap:6px;font-size:11px;display:flex}.task-id{font-family:var(--mono);color:var(--text-3);font-size:11px}.task-title{font-size:13px;font-weight:500;line-height:1.4}.task-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.task-bottom{color:var(--text-2);align-items:center;gap:6px;font-size:12px;display:flex}.task-bottom .subtle{align-items:center;gap:3px;margin-left:auto;font-size:11px;display:inline-flex}.task-detail-meta{grid-template-columns:110px 1fr;gap:6px 12px;font-size:12px;display:grid}.task-detail-meta dt{color:var(--text-3)}.task-detail-meta dd{flex-wrap:wrap;align-items:center;gap:6px;margin:0;display:flex}.history{flex-direction:column;gap:10px;display:flex}.history-item{gap:10px;font-size:12px;display:flex}.history-item .when{color:var(--text-3);font-variant-numeric:tabular-nums;flex:none;width:54px}.history-item .what{color:var(--text-2);white-space:pre-wrap}.history-item .what strong{color:var(--text);font-weight:500}.timeline{flex:1;overflow:auto}.timeline-inner{max-width:820px;margin:0 auto;padding:16px 24px 32px}.timeline-toolbar{border-bottom:1px solid var(--border);color:var(--text-2);align-items:center;gap:10px;padding:10px 24px;font-size:12px;display:flex}.event{border-bottom:1px solid var(--border);grid-template-columns:28px minmax(0,1fr);gap:10px;padding:10px 0;display:grid}.event:last-child{border-bottom:none}.event-head{color:var(--text-2);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.event-head strong{color:var(--text);font-weight:600}.event-head .when{color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:auto}.event-body{margin-top:4px;font-size:13px}.event.quiet .event-body{color:var(--text-2);font-size:12px}.event.open{background:linear-gradient(90deg, var(--amber-soft), transparent 70%);border-radius:var(--r);margin-left:-8px;padding-left:8px}.reply{align-items:flex-end;gap:8px;margin-top:8px;display:flex}.reply textarea{resize:none;flex:1}.docs{grid-template-columns:280px minmax(0,1fr);height:100%;min-height:0;display:grid}.docs-list{border-right:1px solid var(--border);flex-direction:column;gap:1px;padding:10px 8px;display:flex;overflow:auto}.docs-tree-folder{flex-direction:column;gap:1px;display:flex}.docs-search{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);color:var(--text-3);flex:none;align-items:center;gap:6px;margin-bottom:8px;padding:0 4px 0 9px;display:flex}.docs-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.docs-search input,.docs-search input:focus{box-shadow:none;background:0 0;border:none;border-radius:0}.docs-search input{min-width:0;color:var(--text);background:0 0;border:none;outline:none;flex:1;padding:7px 0;font-size:13px}.docs-folder{color:var(--text-2)}.docs-results{flex-direction:column;gap:10px;display:flex}.docs-result-file{flex-direction:column;gap:1px;display:flex}.docs-result-path{color:var(--text-2);align-items:center;gap:6px;padding:2px 8px;font-size:12px;display:flex}.docs-result-path svg{color:var(--text-3);flex:none}.docs-result-path .ellipsis{flex:1}.docs-result{text-align:left;font:inherit;border-radius:var(--r);cursor:pointer;color:var(--text-2);background:0 0;border:none;gap:8px;padding:5px 8px;font-size:12px;line-height:1.45;display:flex}.docs-result:hover{background:var(--surface);color:var(--text)}.docs-result-line{color:var(--text-3);font-family:var(--mono);text-align:right;flex:none;min-width:28px;padding-top:1px;font-size:11px}.docs-result-text{-webkit-line-clamp:3;word-break:break-word;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.docs-result mark{background:var(--accent-soft);color:var(--accent-text);border-radius:2px}.docs-result-more{color:var(--text-3);padding:2px 8px 0 44px;font-size:11px}.docs-page{align-items:flex-start;gap:40px;display:flex}.docs-page .md{flex:1;min-width:0}.docs-toc{flex-direction:column;flex:none;gap:1px;width:220px;max-height:calc(100vh - 200px);display:flex;position:sticky;top:0;overflow:auto}.docs-toc-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);padding:0 8px 6px;font-size:11px;font-weight:600}.docs-toc-item{text-align:left;font:inherit;color:var(--text-2);border-radius:var(--r-sm);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;padding:3px 8px;font-size:12px;overflow:hidden}.docs-toc-item:hover{background:var(--surface);color:var(--text)}.docs-toc-item.level-1{color:var(--text);font-weight:500}.docs-toc-item.level-3{padding-left:20px}@media (width<=1280px){.docs-toc{display:none}}.md a.doc-path{text-decoration:none}.md a.doc-path code{color:var(--accent-text);border-color:var(--accent-soft)}.md a.doc-path:hover code{background:var(--accent-soft)}.docs-text{font-family:var(--mono);font-size:12.5px;line-height:1.6}.docs-text-line{border-radius:var(--r-sm);gap:14px;display:flex}.docs-text-no{color:var(--text-3);text-align:right;-webkit-user-select:none;user-select:none;flex:none;min-width:40px}.docs-text-content{white-space:pre-wrap;word-break:break-word}.docs-body .flash{animation:1.6s ease-out flash}@keyframes flash{0%,30%{background:var(--accent-soft)}to{background:0 0}}.docs-item{text-align:left;color:var(--text-2);font:inherit;border-radius:var(--r);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.docs-item svg{color:var(--text-3);flex:none}.docs-item:hover{background:var(--surface);color:var(--text)}.docs-item.active{background:var(--surface-2);color:var(--text)}.docs-item .grow{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.docs-item-time{color:var(--text-3);flex:none;font-size:11px}.docs-view{flex-direction:column;min-width:0;min-height:0;display:flex}.docs-toolbar{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 16px;display:flex}.docs-toolbar code{color:var(--text-2)}.docs-body{flex:1;padding:24px 32px 48px;overflow:auto}.docs-body .md{max-width:760px;font-size:14px;line-height:1.7}.docs-editor{resize:none;width:100%;height:100%;min-height:420px;font-family:var(--mono);font-size:13px;line-height:1.6}.settings-scroll{flex:1;overflow:auto}.settings-inner{flex-direction:column;gap:20px;max-width:780px;padding:24px 28px 64px;display:flex}.conn-icon{background:var(--surface-2);border:1px solid var(--border-strong);width:32px;height:32px;color:var(--text-2);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.conn-icon.sm{border-radius:5px;width:22px;height:22px}.conn-test{align-items:center;gap:5px;margin-top:2px;font-size:12px;display:inline-flex}.conn-test.ok{color:var(--green)}.conn-test.bad{color:var(--red)}.pick-row{border:1px solid var(--border-strong);border-radius:var(--r);align-items:center;gap:10px;padding:8px 10px;display:flex}.pick-row+.pick-row{margin-top:6px}.pick-row.on{background:var(--accent-soft);border-color:#6d6af580}.pick-main{cursor:pointer;flex:1;align-items:center;gap:10px;min-width:0;display:flex}.danger-zone{border-color:#e5534b4d}.model-picker{border:1px solid var(--border-strong);border-radius:var(--r-lg);overflow:hidden}.model-picker-head{border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:10px;padding:8px 10px;display:flex}.model-picker-head input{flex:1;height:28px;padding:4px 8px}.model-summary{border-bottom:1px solid var(--border);color:var(--text-2);flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;font-size:12px;display:flex}.model-groups{max-height:300px;padding:4px;overflow:auto}.model-group-title{background:var(--panel);color:var(--text-3);z-index:1;padding:8px 8px 4px;font-size:11px;font-weight:600;position:sticky;top:0}.model-row{border-radius:var(--r-sm);cursor:pointer;align-items:center;gap:8px;padding:5px 8px;font-size:13px;display:flex}.model-row:hover{background:var(--surface)}.model-row.on{background:var(--accent-soft)}.model-row .check-box{border:1px solid var(--border-strong);color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:15px;height:15px;display:inline-flex}.model-row.on .check-box{background:var(--accent);border-color:var(--accent)}.model-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lead-btn{color:var(--text-3);cursor:pointer;border-radius:var(--r-sm);background:0 0;border:none;padding:2px;display:inline-flex}.lead-btn:hover{color:var(--text);background:var(--surface-hover)}.lead-btn.on{color:var(--amber)}.folder-summary{border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);flex-direction:column;gap:10px;padding:12px 14px;display:flex}.folder-headline{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.folder-headline svg{color:var(--text-2)}.kind-bar{background:var(--surface-hover);border-radius:6px;gap:2px;height:6px;display:flex;overflow:hidden}.kind-seg{height:100%}.k0{background:#6d6af5}.k1{background:#3fb27f}.k2{background:#d4a03a}.k3{background:#c76bd6}.k4{background:#4c8df6}.k5{background:#6c6d78}.kind-legend{color:var(--text-2);flex-wrap:wrap;gap:4px 14px;font-size:12px;display:flex}.kind-legend i{border-radius:2px;width:8px;height:8px;margin-right:6px;display:inline-block}.top-level{color:var(--text-3);font-size:12px;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.btn.ghost.active{color:var(--text);background:var(--surface-2)}.folder-browser{border:1px solid var(--border-strong);border-radius:var(--r);background:var(--bg-sunken);flex-direction:column;display:flex;overflow:hidden}.folder-browser-head{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px;display:flex}.folder-browser-path{min-width:0;color:var(--text);flex:1;font-size:12px}.folder-browser-places{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;padding:6px 8px;display:flex}.folder-browser-list{flex-direction:column;max-height:240px;padding:4px;display:flex;overflow:auto}.folder-browser-item{color:var(--text);font:inherit;text-align:left;border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.folder-browser-item:hover{background:var(--surface-hover)}.folder-browser-item svg{color:var(--text-3);flex:none}.folder-browser-foot{border-top:1px solid var(--border);align-items:center;gap:8px;padding:8px;display:flex}.folder-browser-foot .spacer{flex:1}.docs-rules{color:var(--text);margin-bottom:6px;font-weight:500}.docs-rules svg{color:var(--accent-text)}.rules{flex-direction:column;gap:20px;font-size:13px;display:flex}.rules-filters{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg);grid-template-columns:minmax(200px,1.4fr) repeat(5,minmax(120px,1fr));gap:12px;padding:14px 16px;display:grid}.rules-filters select:disabled{opacity:.5}.rules-filters-foot{grid-column:1/-1;align-items:center;gap:12px;display:flex}.rules-check{color:var(--text-2);cursor:pointer;align-items:center;gap:7px;font-size:13px;display:inline-flex}.rules-area h2{margin:4px 0 6px;font-size:16px}.rules-prefix{font-family:var(--mono);color:var(--text-3);margin-left:4px;font-size:12px;font-weight:400}.rules-stages{color:var(--text-3);flex-wrap:wrap;gap:4px 14px;margin:0 0 10px;display:flex}.rules-stages a{color:var(--accent-text);text-decoration:none}.rules-stages a:hover{text-decoration:underline}.rules-stage h3{margin:16px 0 8px;scroll-margin-top:12px;font-size:14px}.rules-table-wrap{border:1px solid var(--border);border-radius:var(--r-lg);overflow-x:auto}.rules-table{border-collapse:collapse;table-layout:fixed;width:100%;min-width:1000px}.rules-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);background:var(--panel);border-bottom:1px solid var(--border);padding:9px 10px;font-size:11px;font-weight:600}.rules-table td{vertical-align:top;border-top:1px solid var(--border);color:var(--text-2);overflow-wrap:anywhere;padding:10px;line-height:1.5}.rules-table tr:first-child td{border-top:none}.rules-table tr.superseded td{opacity:.55}.rules-table tr{scroll-margin-top:12px}.rules-id{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--accent-text)!important}.rules-superseded{font-family:var(--font);color:var(--text-3);margin-top:4px;font-size:11px;font-weight:400}.rules-md{color:var(--text)!important}.rules-md p{margin:0 0 6px}.rules-md p:last-child{margin:0}.rules-md ul,.rules-md ol{margin:0 0 6px;padding-left:18px}.rules-md code{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 4px;font-size:.86em}.rules-md a,.rules-cites a{color:var(--accent-text)}.rules-check-how{color:var(--text-3);margin-top:6px;font-size:12px}.rules-cites{color:var(--text)}.rules-cite{-webkit-text-decoration:underline dotted var(--text-3);text-decoration:underline dotted var(--text-3);text-underline-offset:3px}.rules-excerpt-toggle{font:inherit;color:var(--accent-text);cursor:pointer;background:0 0;border:none;align-items:center;gap:3px;margin-top:6px;padding:0;font-size:12px;display:inline-flex}.rules-excerpt{background:var(--accent-soft);border-left:2px solid var(--accent);border-radius:var(--r-sm);color:var(--text);margin:6px 0 0;padding:8px 10px;font-size:12.5px;font-style:italic}.rules-excerpt-src{color:var(--accent-text);margin-bottom:3px;font-size:11px;font-style:normal;font-weight:600}.rules-status{white-space:nowrap;align-items:center;gap:6px;font-weight:500;display:inline-flex}.rules-status.done{color:var(--green)}.rules-status.partial{color:var(--amber)}.rules-status.missing{color:var(--red)}.rules-status.na{color:var(--text-3)}.rule-dot{background:var(--amber);border-radius:50%;width:9px;height:9px;display:inline-block}.docs-body .rules~*{padding-right:24px}.docs-body:has(.rules){padding-right:24px}.update-badge{color:var(--accent-text)}.update-available{border:1px solid var(--accent-soft);background:var(--accent-soft);border-radius:var(--r-lg);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.update-available svg{color:var(--accent-text)}.update-notes{flex-direction:column;gap:8px;max-height:260px;margin-top:4px;display:flex;overflow:auto}.update-notes ul{color:var(--text-2);margin:4px 0 0;padding-left:18px;font-size:12.5px;line-height:1.5}.chat{position:relative}.att-thumb{border-radius:var(--r);background:var(--surface-2);border:1px solid var(--border);color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.att-pending{flex-wrap:wrap;gap:6px;padding:8px 8px 0;display:flex}.att-chip{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);max-width:240px;font:inherit;color:var(--text-2);align-items:center;gap:8px;padding:4px 6px 4px 4px;font-size:12px;display:inline-flex}.att-chip.uploading{opacity:.75}.att-chip.error{border-color:var(--red-soft);color:var(--red)}.att-chip-text{flex-direction:column;min-width:0;line-height:1.3;display:flex}.att-chip-sub{color:var(--text-3);font-size:11px}.att-sent{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.att-chip.sent{cursor:pointer;max-width:220px;padding:3px}.att-chip.sent:hover:not(:disabled){border-color:var(--border-strong);color:var(--text)}.att-chip.sent:disabled{cursor:default;opacity:.6}.att-chip.sent .ellipsis{padding-right:6px}.drop-overlay{z-index:20;border:2px dashed var(--accent);border-radius:var(--r-lg);color:var(--accent-text);pointer-events:none;background:#0b0c0ed1;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:14px;display:flex;position:absolute;inset:8px}.files{flex-direction:column;gap:14px;height:100%;padding:20px 28px 40px;display:flex;position:relative;overflow:auto}.files-head{align-items:flex-start;gap:12px;display:flex}.files-head h2{margin:0 0 4px;font-size:16px}.files-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.file-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg);flex-direction:column;display:flex;overflow:hidden}.file-card-preview{background:var(--bg-sunken);border:none;border-bottom:1px solid var(--border);cursor:pointer;justify-content:center;align-items:center;height:140px;padding:4px;display:flex}.file-card-preview .att-thumb{background:0 0;border:none}.file-card-preview .att-thumb img{object-fit:contain}.file-card-body{flex-direction:column;gap:2px;min-width:0;padding:8px 10px 4px;display:flex}.file-card-name{color:var(--text);font-size:13px;font-weight:500}.file-card-sub{color:var(--text-3);font-size:11.5px}.file-card-actions{gap:2px;padding:4px 6px 6px;display:flex}.file-send{position:relative}.file-send-menu{z-index:10;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r);min-width:140px;box-shadow:var(--shadow-pop);flex-direction:column;padding:4px;display:flex;position:absolute;bottom:100%;left:0}.file-send-menu button{text-align:left;font:inherit;color:var(--text-2);border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;padding:6px 8px;font-size:12.5px}.file-send-menu button:hover{background:var(--surface-hover);color:var(--text)}