harness-wingman 0.6.1 → 0.7.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.
@@ -13243,9 +13243,9 @@ var init_dist5 = __esm({
13243
13243
  // apps/cli/dist/main.js
13244
13244
  init_dist2();
13245
13245
  init_dist();
13246
- import { readFileSync as readFileSync17 } from "node:fs";
13246
+ import { readFileSync as readFileSync18 } from "node:fs";
13247
13247
  import { homedir as homedir13 } from "node:os";
13248
- import { dirname as dirname18, resolve as resolve11 } from "node:path";
13248
+ import { dirname as dirname19, resolve as resolve12 } from "node:path";
13249
13249
  import { fileURLToPath as fileURLToPath2 } from "node:url";
13250
13250
 
13251
13251
  // packages/fixtures/dist/index.js
@@ -13373,7 +13373,7 @@ function isHookPayload(value) {
13373
13373
  }
13374
13374
  var HOOK_BODY_LIMIT = 1024 * 1024;
13375
13375
  function readBody(req) {
13376
- return new Promise((resolve12, reject) => {
13376
+ return new Promise((resolve13, reject) => {
13377
13377
  const chunks = [];
13378
13378
  let size = 0;
13379
13379
  req.on("data", (chunk) => {
@@ -13385,7 +13385,7 @@ function readBody(req) {
13385
13385
  }
13386
13386
  chunks.push(chunk);
13387
13387
  });
13388
- req.on("end", () => resolve12(Buffer.concat(chunks).toString("utf8")));
13388
+ req.on("end", () => resolve13(Buffer.concat(chunks).toString("utf8")));
13389
13389
  req.on("error", reject);
13390
13390
  });
13391
13391
  }
@@ -15606,7 +15606,7 @@ function resolveWingmanVersion({ defined, moduleUrl = import.meta.url, readPacka
15606
15606
  return void 0;
15607
15607
  }
15608
15608
  function wingmanVersion() {
15609
- const defined = false ? void 0 : "0.6.1";
15609
+ const defined = false ? void 0 : "0.7.0";
15610
15610
  return resolveWingmanVersion({
15611
15611
  defined,
15612
15612
  readPackage: (url) => JSON.parse(readFileSync15(url, "utf8"))
@@ -17510,10 +17510,108 @@ async function scanValidated(adapter, options) {
17510
17510
 
17511
17511
  // apps/cli/dist/server.js
17512
17512
  init_dist();
17513
+ import { execFile as execFile2 } from "node:child_process";
17513
17514
  import { createHmac, timingSafeEqual } from "node:crypto";
17514
17515
  import { readFile as readFile4 } from "node:fs/promises";
17515
17516
  import { createServer } from "node:http";
17516
- import { extname, resolve as resolve10, sep as sep2 } from "node:path";
17517
+ import { extname, resolve as resolve11, sep as sep2 } from "node:path";
17518
+
17519
+ // apps/cli/dist/return-target.js
17520
+ import { randomBytes as randomBytes5 } from "node:crypto";
17521
+ import { closeSync as closeSync4, copyFileSync as copyFileSync2, mkdirSync as mkdirSync12, openSync as openSync4, readFileSync as readFileSync17, renameSync as renameSync6, rmSync as rmSync10, statSync as statSync6, writeFileSync as writeFileSync13 } from "node:fs";
17522
+ import { dirname as dirname18, join as join24, resolve as resolve10 } from "node:path";
17523
+ var BUNDLES = [
17524
+ ["Terminal", "Terminal.app"],
17525
+ ["iTerm", "iTerm.app"],
17526
+ ["Ghostty", "Ghostty.app"],
17527
+ ["WezTerm", "WezTerm.app"],
17528
+ ["Warp", "Warp.app"],
17529
+ ["Alacritty", "Alacritty.app"],
17530
+ ["kitty", "kitty.app"],
17531
+ ["VS Code", "Visual Studio Code.app"]
17532
+ ];
17533
+ function detectReturnTargets(homeDir, roots = ["/Applications", join24(homeDir, "Applications")]) {
17534
+ const available = [];
17535
+ for (const [name, bundle] of BUNDLES) {
17536
+ for (const root of new Set(roots.map((root2) => resolve10(root2)))) {
17537
+ const bundlePath = join24(root, bundle);
17538
+ try {
17539
+ if (statSync6(bundlePath).isDirectory())
17540
+ available.push({ name, bundlePath });
17541
+ } catch {
17542
+ }
17543
+ }
17544
+ }
17545
+ return available;
17546
+ }
17547
+ function settingsPath(homeDir) {
17548
+ return join24(homeDir, ".wingman", "state", "settings.json");
17549
+ }
17550
+ function readReturnTargetSettings(homeDir) {
17551
+ let raw;
17552
+ try {
17553
+ raw = readFileSync17(settingsPath(homeDir), "utf8");
17554
+ } catch (error) {
17555
+ if (isRecord8(error) && error.code === "ENOENT")
17556
+ return { version: 1 };
17557
+ return { unavailable: "\u56DE\u8DF3\u8BBE\u7F6E\u65E0\u6CD5\u8BFB\u53D6;\u8BF7\u4EBA\u5DE5\u68C0\u67E5 settings.json" };
17558
+ }
17559
+ try {
17560
+ const value = JSON.parse(raw);
17561
+ if (!isSettings(value))
17562
+ throw new Error("\u4E0D\u662F\u5408\u6CD5 v1 \u7ED3\u6784");
17563
+ return value;
17564
+ } catch {
17565
+ return { unavailable: "\u56DE\u8DF3\u8BBE\u7F6E\u65E0\u6CD5\u89E3\u6790\u6216\u7248\u672C\u672A\u77E5,\u62D2\u7EDD\u8986\u76D6;\u8BF7\u4EBA\u5DE5\u68C0\u67E5 settings.json" };
17566
+ }
17567
+ }
17568
+ function saveReturnTarget(homeDir, bundlePath) {
17569
+ const current = readReturnTargetSettings(homeDir);
17570
+ if ("unavailable" in current)
17571
+ return current;
17572
+ const settings = { version: 1, returnTarget: { bundlePath } };
17573
+ const path = settingsPath(homeDir);
17574
+ const tempPath = join24(dirname18(path), `.settings-${randomBytes5(8).toString("hex")}.tmp`);
17575
+ let fd;
17576
+ try {
17577
+ mkdirSync12(dirname18(path), { recursive: true, mode: 448 });
17578
+ try {
17579
+ copyFileSync2(path, `${path}.bak`);
17580
+ } catch (error) {
17581
+ if (!isRecord8(error) || error.code !== "ENOENT")
17582
+ throw error;
17583
+ }
17584
+ fd = openSync4(tempPath, "wx", 384);
17585
+ writeFileSync13(fd, `${JSON.stringify(settings)}
17586
+ `, "utf8");
17587
+ closeSync4(fd);
17588
+ fd = void 0;
17589
+ renameSync6(tempPath, path);
17590
+ return settings;
17591
+ } catch {
17592
+ return { unavailable: "\u56DE\u8DF3\u8BBE\u7F6E\u5907\u4EFD\u6216\u5199\u5165\u5931\u8D25,\u672A\u8986\u76D6\u8BBE\u7F6E;\u8BF7\u4EBA\u5DE5\u68C0\u67E5 settings.json" };
17593
+ } finally {
17594
+ if (fd !== void 0) {
17595
+ try {
17596
+ closeSync4(fd);
17597
+ } catch {
17598
+ }
17599
+ }
17600
+ try {
17601
+ rmSync10(tempPath, { force: true });
17602
+ } catch {
17603
+ }
17604
+ }
17605
+ }
17606
+ function isSettings(value) {
17607
+ if (!isRecord8(value) || value.version !== 1 || !Object.keys(value).every((key) => key === "version" || key === "returnTarget")) {
17608
+ return false;
17609
+ }
17610
+ return value.returnTarget === void 0 || isRecord8(value.returnTarget) && Object.keys(value.returnTarget).every((key) => key === "bundlePath") && typeof value.returnTarget.bundlePath === "string" && value.returnTarget.bundlePath.startsWith("/");
17611
+ }
17612
+ function isRecord8(value) {
17613
+ return typeof value === "object" && value !== null && !Array.isArray(value);
17614
+ }
17517
17615
 
17518
17616
  // apps/cli/dist/suggest.js
17519
17617
  init_dist();
@@ -17761,6 +17859,10 @@ async function handle(req, res, options, warn, runtime) {
17761
17859
  await handleTaskOverlay(req, res, options);
17762
17860
  return;
17763
17861
  }
17862
+ if (url.pathname === "/api/return-target" || url.pathname === "/api/return") {
17863
+ await handleReturn(req, res, options, url.pathname === "/api/return");
17864
+ return;
17865
+ }
17764
17866
  if (url.pathname === "/api/license/install" && req.method === "POST") {
17765
17867
  await handleLicenseInstall(req, res, options);
17766
17868
  return;
@@ -17992,6 +18094,64 @@ async function handleActionApply(req, res, options, runtime) {
17992
18094
  sendJson2(res, 400, { error: errorMessage3(error) });
17993
18095
  }
17994
18096
  }
18097
+ async function handleReturn(req, res, options, activate) {
18098
+ if (req.method !== "POST" && (activate || req.method !== "GET")) {
18099
+ sendText2(res, 405, "method not allowed");
18100
+ return;
18101
+ }
18102
+ if (req.method === "POST" && options.readonlyActions) {
18103
+ sendJson2(res, 403, { error: "fixtures \u6A21\u5F0F\u53EA\u8BFB:\u4E0D\u4FDD\u5B58\u56DE\u8DF3\u8BBE\u7F6E\u6216\u6FC0\u6D3B\u5E94\u7528" });
18104
+ return;
18105
+ }
18106
+ if (options.homeDir === void 0) {
18107
+ sendJson2(res, 500, { error: "\u56DE\u8DF3\u8BBE\u7F6E\u7F3A\u5C11 homeDir" });
18108
+ return;
18109
+ }
18110
+ const available = detectReturnTargets(options.homeDir, options.returnTargetRoots);
18111
+ if (req.method === "GET") {
18112
+ const settings = readReturnTargetSettings(options.homeDir);
18113
+ sendJson2(res, 200, {
18114
+ available,
18115
+ ..."unavailable" in settings ? { settings } : settings.returnTarget === void 0 ? {} : { selected: settings.returnTarget }
18116
+ });
18117
+ return;
18118
+ }
18119
+ const body = await readJsonBody(req);
18120
+ if (!isRecord9(body) || Object.keys(body).some((key) => key !== "bundlePath") || typeof body.bundlePath !== "string") {
18121
+ sendJson2(res, 400, { error: "\u8BF7\u6C42\u53EA\u63A5\u53D7 bundlePath \u5B57\u7B26\u4E32" });
18122
+ return;
18123
+ }
18124
+ const target = available.find((target2) => target2.bundlePath === body.bundlePath);
18125
+ if (!target) {
18126
+ sendJson2(res, 400, { error: "\u672A\u68C0\u6D4B\u5230\u8BE5\u56DE\u8DF3\u5E94\u7528" });
18127
+ return;
18128
+ }
18129
+ if (!activate) {
18130
+ const settings = saveReturnTarget(options.homeDir, target.bundlePath);
18131
+ if ("unavailable" in settings)
18132
+ sendJson2(res, 409, { error: settings.unavailable });
18133
+ else
18134
+ sendJson2(res, 200, { selected: settings.returnTarget });
18135
+ return;
18136
+ }
18137
+ try {
18138
+ await (options.opener ?? openReturnTarget)(target.bundlePath);
18139
+ sendJson2(res, 200, { activated: true, name: target.name });
18140
+ } catch (error) {
18141
+ const timedOut = isRecord9(error) && (error.killed === true || error.code === "ETIMEDOUT");
18142
+ sendJson2(res, 200, { activated: false, reason: timedOut ? "\u5E94\u7528\u6FC0\u6D3B\u8D85\u65F6" : "\u5E94\u7528\u6FC0\u6D3B\u5931\u8D25" });
18143
+ }
18144
+ }
18145
+ function openReturnTarget(bundlePath) {
18146
+ return new Promise((resolveOpen, reject) => {
18147
+ execFile2("open", ["-a", bundlePath], { timeout: 5e3 }, (error) => {
18148
+ if (error)
18149
+ reject(error);
18150
+ else
18151
+ resolveOpen();
18152
+ });
18153
+ });
18154
+ }
17995
18155
  async function handleTaskOverlay(req, res, options) {
17996
18156
  if (options.readonlyActions) {
17997
18157
  sendJson2(res, 403, { error: "fixtures \u6A21\u5F0F\u53EA\u8BFB:\u4E0D\u5199\u4EFB\u52A1\u5361 overlay" });
@@ -18097,11 +18257,11 @@ function isToggleRequest(value) {
18097
18257
  return o.kind === "toggle" && typeof o.itemId === "string" && typeof o.enable === "boolean";
18098
18258
  }
18099
18259
  function isTaskOverlayRequest(value) {
18100
- if (!isRecord8(value) || !isHarnessId3(value.harness))
18260
+ if (!isRecord9(value) || !isHarnessId3(value.harness))
18101
18261
  return false;
18102
18262
  if (typeof value.sessionId !== "string" || value.sessionId.trim() === "")
18103
18263
  return false;
18104
- if (!isRecord8(value.patch))
18264
+ if (!isRecord9(value.patch))
18105
18265
  return false;
18106
18266
  const keys = Object.keys(value.patch);
18107
18267
  if (keys.length === 0 || keys.some((key) => !["title", "pinned", "hidden", "accepted"].includes(key))) {
@@ -18112,7 +18272,7 @@ function isTaskOverlayRequest(value) {
18112
18272
  function isHarnessId3(value) {
18113
18273
  return typeof value === "string" && HARNESS_IDS.includes(value);
18114
18274
  }
18115
- function isRecord8(value) {
18275
+ function isRecord9(value) {
18116
18276
  return typeof value === "object" && value !== null && !Array.isArray(value);
18117
18277
  }
18118
18278
  function readJsonBody(req) {
@@ -18151,8 +18311,8 @@ async function serveStatic(pathname, res, panelDistDir) {
18151
18311
  return;
18152
18312
  }
18153
18313
  const rel = decoded === "/" ? "/index.html" : decoded;
18154
- const distDir = resolve10(panelDistDir);
18155
- const filePath = resolve10(distDir, `.${rel}`);
18314
+ const distDir = resolve11(panelDistDir);
18315
+ const filePath = resolve11(distDir, `.${rel}`);
18156
18316
  if (filePath !== distDir && !filePath.startsWith(distDir + sep2)) {
18157
18317
  sendText2(res, 403, "forbidden");
18158
18318
  return;
@@ -18305,7 +18465,7 @@ async function runServe(args) {
18305
18465
  `);
18306
18466
  }
18307
18467
  }
18308
- const panelDistDir = panelDist === void 0 ? resolve11(dirname18(fileURLToPath2(import.meta.url)), "../../panel/dist") : resolve11(panelDist);
18468
+ const panelDistDir = panelDist === void 0 ? resolve12(dirname19(fileURLToPath2(import.meta.url)), "../../panel/dist") : resolve12(panelDist);
18309
18469
  const narrative = createNarrativeService({
18310
18470
  followTranscripts: !fixtures,
18311
18471
  homeDir,
@@ -18318,7 +18478,7 @@ async function runServe(args) {
18318
18478
  });
18319
18479
  if (fixtures) {
18320
18480
  try {
18321
- const raw = readFileSync17(fixturePath("cc", "sessions", "session-todos.jsonl"), "utf8");
18481
+ const raw = readFileSync18(fixturePath("cc", "sessions", "session-todos.jsonl"), "utf8");
18322
18482
  narrative.seedFixture("cc", raw.split("\n"), "MOCK \u2014 fixtures \u6F14\u793A:\u53D9\u4E8B\u6570\u636E\u6765\u81EA packages/fixtures \u7684 session-todos.jsonl \u6837\u4F8B\u4F1A\u8BDD,\u975E\u672C\u673A\u771F\u5B9E transcript\u3002");
18323
18483
  } catch (error) {
18324
18484
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- :root{color-scheme:dark;--page: #0d0d0d;--surface: #1a1a19;--pill: #050505;--ink: #ffffff;--ink2: #c3c2b7;--muted: #898781;--hairline: rgba(255, 255, 255, .1);--grid: #2c2c2a;--s1: #3987e5;--s2: #d95926;--s3: #199e70;--s4: #c98500;--s5: #d55181;--warn: #fab219;--bad: #e5534b}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--page);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:28px 16px 48px}.wrap{display:flex;flex-direction:column;align-items:center}.pill{display:flex;align-items:center;gap:10px;background:var(--pill);border:1px solid var(--hairline);border-radius:999px;padding:10px 18px;cursor:pointer;-webkit-user-select:none;user-select:none;box-shadow:0 8px 30px #0000008c;transition:transform .15s ease}.pill:hover{transform:scale(1.03)}.dot{width:8px;height:8px;border-radius:50%;background:var(--s1);animation:pulse 1.6s infinite;flex:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.dot.quiet{animation:none;background:var(--muted);opacity:.6}.dot.live{background:var(--s3);box-shadow:0 0 8px #199e70cc}.pill .t1{font-size:13px;font-weight:600}.pill .t2{font-size:12px;color:var(--ink2)}.pill .tok{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.pill .chev{color:var(--muted);font-size:11px}.dot.wait{background:var(--warn);box-shadow:0 0 8px #fab219cc;animation:pulse 1.2s infinite}.pill.waiting{border-color:#fab2198c}.pill.waiting .t2{color:var(--warn)}.panel{display:none;width:min(700px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:20px;padding:20px 22px 16px;box-shadow:0 18px 60px #0009;transform-origin:top center}.open .panel{display:block;animation:drop .22s ease}.open .pill{display:none}.panel-region{display:contents}@keyframes drop{0%{opacity:0;transform:scale(.92) translateY(-8px)}to{opacity:1;transform:none}}.head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.head .title{font-size:15px;font-weight:700}.head .meta{font-size:12px;color:var(--muted)}.badge{font-size:10px;letter-spacing:.1em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:2px 6px}.collapse{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:4px 10px;font-size:12px;cursor:pointer}.collapse:hover{border-color:var(--muted)}.tabs{display:flex;gap:4px;background:var(--pill);border:1px solid var(--hairline);border-radius:10px;padding:3px;width:max-content;margin-bottom:6px}.tab{border:none;background:none;color:var(--muted);font-size:12.5px;padding:5px 14px;border-radius:8px;cursor:pointer;font-family:inherit}.tab.act{background:var(--surface);color:var(--ink);font-weight:600;border:1px solid var(--hairline)}.tabnum{display:inline-block;margin-left:6px;min-width:16px;text-align:center;font-size:10px;color:var(--ink2);background:var(--grid);border-radius:999px;padding:0 4px;font-variant-numeric:tabular-nums}.now{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:10px 14px;margin:8px 0 10px}.now .ntask{font-size:14px;font-weight:700;display:flex;align-items:center;gap:8px}.now .ntask .muted{color:var(--muted);font-weight:400}.now .ndoing{font-size:12px;color:var(--ink2);margin-top:5px}.now .ndoing b{color:var(--ink);font-weight:600}.now .nquote{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}.now .nwait{font-size:12px;color:var(--warn);border:1px solid rgba(250,178,25,.55);border-radius:8px;padding:5px 9px;margin-bottom:8px;animation:pulse 1.2s infinite}.taskflow{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:10px 14px;margin:8px 0 10px;font-size:12px;line-height:1.55}.taskflow>*+*{margin-top:8px}.wflabel{display:inline-block;margin-right:8px;color:var(--muted);font-size:10px;letter-spacing:.08em}.wfsource{color:var(--muted);font-size:10px}.wfsteps{margin-top:5px}.wfstep{display:flex;gap:7px;align-items:baseline}.wfstep.completed{color:var(--muted)}.wfstep.in_progress{font-weight:600}.wfrecent{display:flex;flex-wrap:wrap;gap:4px 8px}.wfrecent-step{color:var(--ink2)}.wfproject{display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px}.wfproject-node{padding:1px 7px}.wfproject-link{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:2px 8px}.wfverify{display:flex;align-items:center;flex-wrap:wrap;gap:6px;color:var(--ink2)}.wfverify-sep{color:var(--muted)}.wfverify-action{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:2px 8px}.wfverify-error{margin-top:5px}.wffeedback.urgent{color:var(--warn)}.evidencegroup+.evidencegroup{margin-top:6px}.vtabs{display:flex;gap:22px;border-bottom:1px solid var(--grid);margin-bottom:4px}.vtab{background:none;border:none;font-family:inherit;font-size:13px;color:var(--muted);padding:8px 2px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.vtab.act{color:var(--ink);font-weight:700;border-bottom-color:var(--s1)}.vtab .vcnt{font-size:11px;color:var(--muted);font-weight:400;font-variant-numeric:tabular-nums}.pane{display:none}.pane.act{display:block}.td{padding:8px 0;border-top:1px dashed var(--grid);font-size:13px}.td:first-child{border-top:none}.tdr{display:flex;align-items:center;gap:9px}.tdr[data-act]{cursor:pointer}.mk{width:16px;flex:none;text-align:center;font-size:12px;color:var(--s3)}.mk.doing{color:var(--s1)}.td .tdc{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.td.done .tdr{color:var(--muted)}.td.done .tdc{text-decoration:line-through}.td.todo .tdr{color:var(--muted)}.td .tdc b{font-weight:700}.ag{font-size:10px;color:var(--s1);border:1px solid rgba(57,135,229,.5);border-radius:999px;padding:0 8px;flex:none}.loc{margin-left:auto;flex:none;font-size:10.5px;font-family:inherit;color:var(--ink2);background:none;border:1px solid var(--grid);border-radius:7px;padding:2px 8px;cursor:pointer}.loc:hover{border-color:var(--muted)}.trace{margin:8px 0 2px 24px;border-left:2px solid var(--grid);padding-left:14px}.tr{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2);cursor:pointer}.tr .ic{width:8px;height:8px;border-radius:50%;background:var(--s3);flex:none;margin-left:-19px;border:2px solid var(--surface)}.tr.bad .ic{background:var(--bad)}.tr.run .ic{background:var(--s1)}.tr .trlabel{flex:none}.tr .dur,.trs .dur{margin-left:auto;color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none;white-space:nowrap}.failchip{font-size:10px;color:var(--bad);border:1px solid var(--bad);border-radius:999px;padding:0 7px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.steps{margin-left:6px;padding:2px 0 4px}.trs{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11.5px;color:var(--muted)}.trs .cmd{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;color:var(--ink2);flex:none}.trs .sdetail{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trs.bad .cmd{color:var(--bad)}.rawsec .rawhead{background:none;border:none;font-family:inherit;font-size:11px;letter-spacing:.14em;color:var(--muted);padding:0;cursor:pointer}.rawsec .rawhead:hover{color:var(--ink2)}.rawsec .rawbody{display:none}.rawsec .rawbody.open{display:block;margin-top:8px}.ubox{max-height:220px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.urow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:11.5px;border-top:1px dashed var(--grid);color:var(--ink2)}.urow:first-child{border-top:none}.urow .utime{color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none}.urow .unums{color:var(--muted);font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.urow .utot{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.urow .ucost{color:var(--s3);font-variant-numeric:tabular-nums;flex:none}.sessions-empty,.session-notice{margin-top:8px;padding:7px 10px;border:1px solid var(--grid);border-radius:6px;color:var(--ink2);font-size:11px}.session-notice{display:flex;gap:8px;cursor:pointer}.session-notice-close{margin-left:auto;color:var(--ink3)}.schips{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0 2px}.schip{display:inline-flex;align-items:center;gap:5px;background:none;border:1px solid var(--grid);border-radius:999px;padding:2px 10px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer}.schip:hover{border-color:var(--ink2)}.schip.act{color:var(--ink);border-color:var(--ink2);font-weight:600}.schip.ended{opacity:.55}.schip .sdot{width:6px;height:6px;border-radius:50%;background:var(--s1);flex:none}.schip .sdot.wait{background:var(--warn);animation:pulse 1.2s infinite}.schip .snew{padding:0 5px;border:1px solid var(--s1);border-radius:999px;color:var(--s1);font-size:9px;font-weight:700}.feedbacksignal{margin:8px 0 2px;border:1px solid rgba(250,178,25,.4);border-radius:8px;padding:5px 9px;color:var(--warn);font-size:12px}.suggslot:empty{display:none}.suggslot{border-top:1px solid var(--grid);padding:8px 0 2px}.sugg{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2)}.sugg .sugtext{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sugg.r-waiting-timeout .sugtext{color:var(--warn)}.sugg .sugbtn,.sugg .sugdismiss{background:none;border:1px solid var(--grid);border-radius:6px;padding:1px 8px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer;flex:none}.sugg .sugbtn{color:var(--ink);border-color:var(--ink2);margin-left:auto}.sugg .sugbtn:hover{background:var(--grid)}.sugg .sugdismiss{color:var(--muted)}.sugg .sugbtn+.sugdismiss{margin-left:0}.sugg .sugdismiss:only-of-type{margin-left:auto}.sugg .sugdismiss:hover{color:var(--ink2)}.tr.waitrow{cursor:default}.tr.waitrow .trlabel{color:var(--warn)}.sec{border-top:1px solid var(--grid);padding:13px 0}.sec.first{border-top:none;padding-top:2px}.sec .label{font-size:11px;letter-spacing:.14em;color:var(--muted);margin-bottom:8px;display:flex;align-items:center;gap:8px}.tier{font-size:10px;letter-spacing:0;color:var(--ink2);border:1px solid var(--grid);border-radius:999px;padding:1px 8px;font-weight:400}.sec .headline{font-size:13px;color:var(--ink2);margin-bottom:10px}.sec .headline b{color:var(--ink);font-weight:700}.stack{display:flex;height:16px;margin-bottom:10px}.seg{margin-right:2px;cursor:default}.seg:last-child{margin-right:0}.seg:first-child{border-radius:4px 0 0 4px}.seg:last-child{border-radius:0 4px 4px 0}.seg:hover{filter:brightness(1.18)}.legend{display:grid;grid-template-columns:1fr 1fr;gap:5px 18px}@media(max-width:560px){.legend{grid-template-columns:1fr}}.lrow{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink2);min-width:0}.sw{width:10px;height:10px;border-radius:3px;flex:none}.lrow .nat,.gtitle .nat{font-size:10.5px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lrow .v{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.lrow .cnt{color:var(--muted);font-size:10.5px;flex:none}.lrow.na,.lrow.na .v{color:var(--muted)}.grp{margin-bottom:10px}.grp:last-child{margin-bottom:0}.gtitle{font-size:11.5px;color:var(--muted);margin-bottom:4px;display:flex;align-items:center;gap:7px}.gdot{width:8px;height:8px;border-radius:2px;flex:none}.crow{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:12.5px;border-top:1px dashed var(--grid)}.cname{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.offrow .cname{color:var(--muted)}.chip{font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:999px;padding:1px 7px;flex:none}.statechip{font-size:10px;border-radius:999px;padding:1px 7px;flex:none}.statechip.off{color:var(--warn);border:1px solid var(--warn)}.statechip.nofile{color:var(--muted);border:1px dashed var(--grid)}.ctok{margin-left:auto;color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums;flex:none}.crow.emptyrow{color:var(--muted);font-size:12px}.livenone{font-size:12.5px;color:var(--muted);border:1px dashed var(--grid);border-radius:8px;padding:10px 12px;margin-bottom:8px;line-height:1.7}.livenone:last-child{margin-bottom:0}.livenone code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}.tier.none{color:var(--muted);border-style:dashed}.conn{font-size:10px;letter-spacing:0;font-weight:400;border-radius:999px;padding:1px 8px;border:1px solid var(--grid);color:var(--muted)}.conn.open{color:var(--s3);border-color:var(--s3)}.conn.retrying{color:var(--warn);border-color:var(--warn)}.conn.replay{color:var(--warn);border-style:dashed}.demobtn{margin-left:auto;background:none;border:1px dashed var(--warn);color:var(--warn);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.demobtn:hover:not(:disabled){border-style:solid}.demobtn:disabled{opacity:.5;cursor:default}.feed{max-height:240px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.lvrow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;border-top:1px dashed var(--grid)}.lvrow:first-child{border-top:none}.lvtime{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;flex:none}.lvname{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lvrow.own .lvname{font-weight:600}.lvrow.other{opacity:.45}.lvharness{margin-left:auto;font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;flex:none}.lvrow.own .lvharness{color:var(--ink2);border-color:var(--hairline)}.mockchip{font-size:9px;letter-spacing:.08em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:0 4px;flex:none}.labr{margin-left:auto;display:flex;align-items:center;gap:8px}.sharelink{background:none;border:1px solid var(--grid);color:var(--muted);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.sharelink:hover{color:var(--ink2);border-color:var(--muted)}.sharebox{max-height:320px;overflow:auto;border:1px solid var(--grid);border-radius:8px;background:var(--pill);padding:6px 8px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}.shline{display:flex;gap:7px;align-items:flex-start;padding:1px 0}.shdel{flex:none;background:none;border:1px solid var(--grid);color:var(--muted);border-radius:4px;font-size:9px;line-height:1.3;padding:0 4px;margin-top:1px;cursor:pointer}.shdel:hover{color:var(--s2);border-color:var(--s2)}.shtext{color:var(--ink2);white-space:pre-wrap;word-break:break-all}.btn:disabled{opacity:.45;cursor:default}.btn:disabled:hover{filter:none}.empty-state{display:flex;flex-direction:column;align-items:center}.empty-card{width:min(460px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:28px 26px;text-align:center}.empty-title{font-size:15px;font-weight:700;margin-bottom:8px}.empty-detail{font-size:12px;color:var(--warn);margin-bottom:8px;word-break:break-all}.empty-hint{font-size:12.5px;color:var(--muted);line-height:1.7}.empty-hint code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}#tip{position:fixed;display:none;pointer-events:none;z-index:9;background:#050505;border:1px solid var(--hairline);border-radius:8px;padding:6px 10px;font-size:12px;color:var(--ink);max-width:300px;box-shadow:0 8px 24px #00000080;white-space:pre-line;line-height:1.5}.toggle{width:30px;height:17px;border-radius:999px;background:var(--grid);position:relative;cursor:pointer;flex:none;transition:background .15s;border:none;padding:0}.toggle:after{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--ink2);transition:left .15s}.toggle.on{background:var(--s1)}.toggle.on:after{left:15px;background:#fff}.cright{display:flex;align-items:center;gap:8px;flex:none}.cfgnote{font-size:11px;color:var(--muted);padding:5px 0 2px;border-top:1px dashed var(--grid);line-height:1.6}.licbar{display:block;width:100%;text-align:left;font-size:12px;font-family:inherit;color:var(--warn);background:none;border:1px solid var(--warn);border-radius:8px;padding:6px 10px;margin-bottom:10px;cursor:pointer}.licbar.expired{color:var(--s2);border-color:var(--s2)}.licbar:hover{filter:brightness(1.12)}.licrow{display:flex;align-items:stretch;gap:8px;margin-bottom:10px}.licrow .licbar{flex:1;margin-bottom:0}.licimport{flex:none;font-size:11px;font-family:inherit;color:var(--muted);background:none;border:1px solid var(--grid);border-radius:8px;padding:6px 10px;cursor:pointer}.licimport:hover{color:var(--ink2);border-color:var(--muted)}.licfoot{margin-top:12px;text-align:center}.licfootlink{font-size:11px;font-family:inherit;color:var(--muted);background:none;border:none;padding:2px 4px;cursor:pointer;text-decoration:underline;text-decoration-color:var(--grid);text-underline-offset:3px}.licfootlink:hover{color:var(--ink2)}.feedbackfoot{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;padding:0 18px 16px;color:var(--muted);font-size:10.5px;line-height:1.45;text-align:center}.feedbackfoot a{color:var(--ink2);text-underline-offset:2px}.feedbackfoot a:hover{color:var(--ink)}.feedbacklink{font-weight:650}.lictrial{margin:-2px 0 8px;text-align:right}.lictrial .licfootlink{text-decoration:none}#drop{position:fixed;inset:0;z-index:40;display:none;align-items:center;justify-content:center;background:#000000a6;border:2px dashed var(--s1);color:var(--ink);font-size:15px;pointer-events:none}.overlay{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px}.scrim{position:absolute;inset:0;background:#0009}.modal{position:relative;width:min(560px,94vw);max-height:86vh;overflow-y:auto;background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:16px 18px;box-shadow:0 18px 60px #0009;animation:drop .18s ease}.mhead{display:flex;align-items:center;gap:8px;margin-bottom:10px}.mtitle{font-size:14px;font-weight:700}.mclose{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:2px 8px;font-size:12px;cursor:pointer}.mclose:hover{border-color:var(--muted)}.mnote{font-size:11px;color:var(--warn);border:1px dashed var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:10px;line-height:1.6}.msec{border-top:1px solid var(--grid);padding:10px 0}.mlabel{font-size:11px;letter-spacing:.1em;color:var(--muted);margin-bottom:6px}.mtext{font-size:12.5px;color:var(--ink2);line-height:1.7;word-break:break-all}.mtext.muted{color:var(--muted)}.mtext code,.mpath{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px;font-size:11px;word-break:break-all}.mfile{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;flex-wrap:wrap}.mkind{font-size:10px;border-radius:4px;padding:1px 6px;flex:none;border:1px solid var(--grid);color:var(--ink2)}.mkind.create{color:var(--s3);border-color:var(--s3)}.mkind.modify{color:var(--s4);border-color:var(--s4)}.mkind.delete{color:var(--s2);border-color:var(--s2)}.mlines{margin-left:auto;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;flex:none}.mref{display:flex;gap:8px;padding:4px 0;font-size:12px;align-items:baseline;flex-wrap:wrap}.mctx{color:var(--muted);font-size:11.5px;line-height:1.5}.merror{font-size:12px;color:var(--warn);border:1px solid var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:8px;white-space:pre-wrap;word-break:break-all}.mact{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}.btn{border-radius:8px;padding:6px 14px;font-size:12.5px;cursor:pointer;font-family:inherit}.btn.ghost{background:none;border:1px solid var(--hairline);color:var(--ink2)}.btn.ghost:hover{border-color:var(--muted)}.btn.primary{background:var(--s1);border:1px solid var(--s1);color:#fff;font-weight:600}.btn.primary:hover{filter:brightness(1.1)}.projects{display:grid;gap:12px;padding:12px 14px 16px}.projects-empty,.project-empty{color:var(--muted);font-size:12px;padding:8px 0}.project-card{border:1px solid var(--hairline);border-radius:12px;padding:12px;background:var(--surface)}.project-card.unavailable,.project-last-good{background:color-mix(in srgb,var(--surface) 88%,var(--grid))}.project-card-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.project-title{font-size:15px;font-weight:700}.project-source{margin-left:7px;color:var(--muted);font-size:10.5px}.project-presence{color:var(--muted);font-size:11px;margin-top:4px}.project-memory-warning,.anatomy-refresh-warning{color:var(--warn);font-size:11px}.project-memory-warning{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.project-memory-warning button{color:inherit;background:transparent;border:0;cursor:pointer}.project-root,.project-meta,.project-counts,.project-facts{color:var(--muted);font-size:11px;overflow-wrap:anywhere}.project-meta{margin-top:4px}.project-protocols{display:grid;gap:6px;margin-top:8px}.project-protocol-row{display:flex;align-items:center;flex-wrap:wrap;gap:5px}.project-protocol-chip,.project-protocol-copy{border:1px solid var(--hairline);border-radius:999px;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.project-protocol-chip.plan_present,.project-protocol-chip.session_wrote_plan{border-color:var(--s3);color:var(--s3)}.project-protocol-chip.installed_not_loaded{border-color:var(--warn);color:var(--warn)}.project-protocol-note{color:var(--muted);font-size:10px;overflow-wrap:anywhere}.project-protocol-copy{background:transparent;cursor:pointer;padding-inline:6px}.project-protocol-copy:hover{border-color:var(--s1)}.project-goal,.project-section,.project-counts,.project-facts,.project-complete,.project-l0,.project-error,.project-last-good{margin-top:10px}.project-label{color:var(--ink2);font-size:11px;font-weight:650;margin-right:8px}.project-l0,.project-error{border:1px solid var(--hairline);border-radius:8px;padding:8px 10px;font-size:12px}.project-error{color:var(--warn);border-color:var(--warn)}.project-complete{color:var(--s3);font-size:12px;font-weight:650}.project-points{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}.project-checkpoints{margin-top:5px}.project-checkpoint{font-size:12px;font-weight:400}.project-crumb{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font-family:inherit;font-size:11px;padding:3px 8px}.project-crumb:hover{border-color:var(--s1)}.project-node-text,.project-crumb,.project-checkpoint{display:-webkit-box;min-width:0;max-width:100%;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}.project-node-text{flex:1}.project-facts-group+.project-facts-group{margin-top:4px}.project-facts-toggle{border:0;background:transparent;color:inherit;cursor:pointer;font:inherit;padding:0;text-align:left}.project-facts-items{display:grid;gap:3px;margin:4px 0 0 14px}.task-filters{display:grid;gap:7px;padding:12px 14px 0}.task-filter-group{display:flex;align-items:center;flex-wrap:wrap;gap:5px;color:var(--muted);font-size:10.5px}.task-filter-chip,.task-badge,.task-status{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.task-filter-chip{cursor:pointer}.task-filter-chip:hover,.task-filter-chip.act{border-color:var(--s1);color:var(--s1)}.task-filter-summary,.task-hidden{color:var(--muted);font-size:11px}.task-filter-summary{padding:7px 14px 0}.task-hidden{margin:5px 0 0 19px}.task-card-list{display:grid;grid-template-columns:minmax(0,1fr);gap:7px;margin-top:6px}.task-card{display:block;width:100%;border:1px solid var(--hairline);border-radius:10px;background:color-mix(in srgb,var(--surface) 94%,var(--grid));color:var(--ink);cursor:pointer;font-family:inherit;padding:9px 38px 9px 10px;text-align:left}.task-card:hover{border-color:var(--s1)}.task-card-head,.task-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.task-card-meta{margin-top:7px}.task-title{font-size:12px;font-weight:650;overflow-wrap:anywhere}.task-title-source,.task-progress,.task-activity,.task-context,.task-feedback,.task-checks,.task-accept{color:var(--muted);font-size:10.5px}.task-title-source:before{content:"来源:"}.task-status.waiting{border-color:var(--warn);color:var(--warn)}.task-status.active,.task-status.complete{border-color:var(--s3);color:var(--s3)}.task-status.ended{color:var(--muted)}.task-feedback,.task-context{display:block;margin-top:6px}.task-feedback{color:var(--warn)}.task-card-wrap{position:relative}.task-menu-button{position:absolute;top:6px;right:7px;width:28px;height:26px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;font:700 17px / 1 inherit}.task-menu-button:hover,.task-menu-button[aria-expanded=true]{border-color:var(--hairline);color:var(--ink)}.task-menu{display:grid;gap:7px;max-width:100%;margin-top:5px;padding:8px;border:1px solid var(--hairline);border-radius:9px;background:color-mix(in srgb,var(--surface) 92%,var(--grid))}.task-menu label{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px;align-items:center;color:var(--muted);font-size:10.5px}.task-menu input{min-width:0;border:1px solid var(--hairline);border-radius:6px;background:var(--surface);color:var(--ink);font:inherit;padding:5px 7px}.task-menu-actions{display:flex;flex-wrap:wrap;gap:6px}.task-menu-actions button,.task-resume-command button,.task-unhide,.task-hidden-toggle{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:3px 8px}.task-resume-command{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.task-resume-command code{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.task-resume-note,.task-resume-unavailable,.task-error{grid-column:1 / -1;color:var(--muted);font-size:10.5px;overflow-wrap:anywhere}.task-error{margin-top:5px;color:var(--warn)}.task-pin-mark{color:var(--s1);font-size:10px;font-weight:700}.task-hidden-group{margin-top:6px}.task-hidden-toggle{color:var(--muted)}.task-card-hidden{opacity:.58}.task-unhide{margin-top:5px}@media(max-width:560px){.task-menu label{grid-template-columns:1fr}}.project-tree,.project-tree ul,.project-session-plan ul{list-style:none;margin:5px 0 0;padding-left:17px}.project-tree{padding-left:0}.project-node{margin:4px 0;font-size:12px}.project-node-line{display:flex;gap:7px;align-items:baseline}.project-node.in_progress>.project-node-line{color:var(--s3)}.project-node.completed,.project-node.cancelled,.project-node.collapsed{color:var(--muted)}.project-mark{width:12px;flex:none;text-align:center}.project-verify{color:var(--muted);font-size:11px;margin:3px 0 0 19px}.project-session-wrap,.task-card-wrap{margin:5px 0 6px 19px}.project-session-plan{border-left:1px solid var(--hairline);margin:5px 0 0 8px;padding-left:8px;font-size:11px}.project-session-plan .project-source{margin-left:0}.project-last-good{opacity:.72;border-radius:8px;padding:8px}html.island,html.island body{background:transparent}html.island body{padding:8px 0 12px;overflow:hidden}html.island .open .panel{height:calc(100vh - 20px);overflow-y:auto}html.island .scrim{border-radius:20px}
1
+ :root{color-scheme:dark;--page: #0d0d0d;--surface: #1a1a19;--pill: #050505;--ink: #ffffff;--ink2: #c3c2b7;--muted: #898781;--hairline: rgba(255, 255, 255, .1);--grid: #2c2c2a;--s1: #3987e5;--s2: #d95926;--s3: #199e70;--s4: #c98500;--s5: #d55181;--warn: #fab219;--bad: #e5534b}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--page);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:28px 16px 48px}.wrap{display:flex;flex-direction:column;align-items:center}.pill{display:flex;align-items:center;gap:10px;background:var(--pill);border:1px solid var(--hairline);border-radius:999px;padding:10px 18px;cursor:pointer;-webkit-user-select:none;user-select:none;box-shadow:0 8px 30px #0000008c;transition:transform .15s ease}.pill:hover{transform:scale(1.03)}.dot{width:8px;height:8px;border-radius:50%;background:var(--s1);animation:pulse 1.6s infinite;flex:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.dot.quiet{animation:none;background:var(--muted);opacity:.6}.dot.live{background:var(--s3);box-shadow:0 0 8px #199e70cc}.pill .t1{font-size:13px;font-weight:600}.pill .t2{font-size:12px;color:var(--ink2)}.pill .tok{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.pill .chev{color:var(--muted);font-size:11px}.dot.wait{background:var(--warn);box-shadow:0 0 8px #fab219cc;animation:pulse 1.2s infinite}.pill.waiting{border-color:#fab2198c}.pill.waiting .t2{color:var(--warn)}.panel{display:none;width:min(700px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:20px;padding:20px 22px 16px;box-shadow:0 18px 60px #0009;transform-origin:top center}.open .panel{display:block;animation:drop .22s ease}.open .pill{display:none}.panel-region{display:contents}@keyframes drop{0%{opacity:0;transform:scale(.92) translateY(-8px)}to{opacity:1;transform:none}}.head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.head .title{font-size:15px;font-weight:700}.head .meta{font-size:12px;color:var(--muted)}.badge{font-size:10px;letter-spacing:.1em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:2px 6px}.collapse{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:4px 10px;font-size:12px;cursor:pointer}.collapse:hover{border-color:var(--muted)}.tabs{display:flex;gap:4px;background:var(--pill);border:1px solid var(--hairline);border-radius:10px;padding:3px;width:max-content;margin-bottom:6px}.tab{border:none;background:none;color:var(--muted);font-size:12.5px;padding:5px 14px;border-radius:8px;cursor:pointer;font-family:inherit}.tab.act{background:var(--surface);color:var(--ink);font-weight:600;border:1px solid var(--hairline)}.tabnum{display:inline-block;margin-left:6px;min-width:16px;text-align:center;font-size:10px;color:var(--ink2);background:var(--grid);border-radius:999px;padding:0 4px;font-variant-numeric:tabular-nums}.now{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:10px 14px;margin:8px 0 10px}.now .ntask{font-size:14px;font-weight:700;display:flex;align-items:center;gap:8px}.now .ntask .muted{color:var(--muted);font-weight:400}.now .ndoing{font-size:12px;color:var(--ink2);margin-top:5px}.now .ndoing b{color:var(--ink);font-weight:600}.now .nquote{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}.now .nwait{font-size:12px;color:var(--warn);border:1px solid rgba(250,178,25,.55);border-radius:8px;padding:5px 9px;margin-bottom:8px;animation:pulse 1.2s infinite}.taskflow{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:10px 14px;margin:8px 0 10px;font-size:12px;line-height:1.55}.taskflow>*+*{margin-top:8px}.wflabel{display:inline-block;margin-right:8px;color:var(--muted);font-size:10px;letter-spacing:.08em}.wfsource{color:var(--muted);font-size:10px}.wfsteps{margin-top:5px}.wfstep{display:flex;gap:7px;align-items:baseline}.wfstep.completed{color:var(--muted)}.wfstep.in_progress{font-weight:600}.wfrecent{display:flex;flex-wrap:wrap;gap:4px 8px}.wfrecent-step{color:var(--ink2)}.wfproject{display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px}.wfproject-node{padding:1px 7px}.wfproject-link{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:2px 8px}.wfverify{display:flex;align-items:center;flex-wrap:wrap;gap:6px;color:var(--ink2)}.wfverify-sep{color:var(--muted)}.wfverify-action{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:2px 8px}.wfverify-error{margin-top:5px}.wffeedback.urgent{color:var(--warn)}.evidencegroup+.evidencegroup{margin-top:6px}.vtabs{display:flex;gap:22px;border-bottom:1px solid var(--grid);margin-bottom:4px}.vtab{background:none;border:none;font-family:inherit;font-size:13px;color:var(--muted);padding:8px 2px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.vtab.act{color:var(--ink);font-weight:700;border-bottom-color:var(--s1)}.vtab .vcnt{font-size:11px;color:var(--muted);font-weight:400;font-variant-numeric:tabular-nums}.pane{display:none}.pane.act{display:block}.td{padding:8px 0;border-top:1px dashed var(--grid);font-size:13px}.td:first-child{border-top:none}.tdr{display:flex;align-items:center;gap:9px}.tdr[data-act]{cursor:pointer}.mk{width:16px;flex:none;text-align:center;font-size:12px;color:var(--s3)}.mk.doing{color:var(--s1)}.td .tdc{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.td.done .tdr{color:var(--muted)}.td.done .tdc{text-decoration:line-through}.td.todo .tdr{color:var(--muted)}.td .tdc b{font-weight:700}.ag{font-size:10px;color:var(--s1);border:1px solid rgba(57,135,229,.5);border-radius:999px;padding:0 8px;flex:none}.loc{margin-left:auto;flex:none;font-size:10.5px;font-family:inherit;color:var(--ink2);background:none;border:1px solid var(--grid);border-radius:7px;padding:2px 8px;cursor:pointer}.loc:hover{border-color:var(--muted)}.trace{margin:8px 0 2px 24px;border-left:2px solid var(--grid);padding-left:14px}.tr{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2);cursor:pointer}.tr .ic{width:8px;height:8px;border-radius:50%;background:var(--s3);flex:none;margin-left:-19px;border:2px solid var(--surface)}.tr.bad .ic{background:var(--bad)}.tr.run .ic{background:var(--s1)}.tr .trlabel{flex:none}.tr .dur,.trs .dur{margin-left:auto;color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none;white-space:nowrap}.failchip{font-size:10px;color:var(--bad);border:1px solid var(--bad);border-radius:999px;padding:0 7px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.steps{margin-left:6px;padding:2px 0 4px}.trs{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11.5px;color:var(--muted)}.trs .cmd{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;color:var(--ink2);flex:none}.trs .sdetail{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trs.bad .cmd{color:var(--bad)}.rawsec .rawhead{background:none;border:none;font-family:inherit;font-size:11px;letter-spacing:.14em;color:var(--muted);padding:0;cursor:pointer}.rawsec .rawhead:hover{color:var(--ink2)}.rawsec .rawbody{display:none}.rawsec .rawbody.open{display:block;margin-top:8px}.ubox{max-height:220px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.urow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:11.5px;border-top:1px dashed var(--grid);color:var(--ink2)}.urow:first-child{border-top:none}.urow .utime{color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none}.urow .unums{color:var(--muted);font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.urow .utot{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.urow .ucost{color:var(--s3);font-variant-numeric:tabular-nums;flex:none}.sessions-empty,.session-notice{margin-top:8px;padding:7px 10px;border:1px solid var(--grid);border-radius:6px;color:var(--ink2);font-size:11px}.session-notice{display:flex;gap:8px;cursor:pointer}.session-notice-close{margin-left:auto;color:var(--ink3)}.schips{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0 2px}.schip{display:inline-flex;align-items:center;gap:5px;background:none;border:1px solid var(--grid);border-radius:999px;padding:2px 10px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer}.schip:hover{border-color:var(--ink2)}.schip.act{color:var(--ink);border-color:var(--ink2);font-weight:600}.schip.ended{opacity:.55}.schip .sdot{width:6px;height:6px;border-radius:50%;background:var(--s1);flex:none}.schip .sdot.wait{background:var(--warn);animation:pulse 1.2s infinite}.schip .snew{padding:0 5px;border:1px solid var(--s1);border-radius:999px;color:var(--s1);font-size:9px;font-weight:700}.feedbacksignal{margin:8px 0 2px;border:1px solid rgba(250,178,25,.4);border-radius:8px;padding:5px 9px;color:var(--warn);font-size:12px}.suggslot:empty{display:none}.suggslot{border-top:1px solid var(--grid);padding:8px 0 2px}.sugg{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2)}.sugg .sugtext{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sugg.r-waiting-timeout .sugtext{color:var(--warn)}.sugg .sugbtn,.sugg .sugdismiss{background:none;border:1px solid var(--grid);border-radius:6px;padding:1px 8px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer;flex:none}.sugg .sugbtn{color:var(--ink);border-color:var(--ink2);margin-left:auto}.sugg .sugbtn:hover{background:var(--grid)}.sugg .sugdismiss{color:var(--muted)}.sugg .sugbtn+.sugdismiss{margin-left:0}.sugg .sugdismiss:only-of-type{margin-left:auto}.sugg .sugdismiss:hover{color:var(--ink2)}.tr.waitrow{cursor:default}.tr.waitrow .trlabel{color:var(--warn)}.sec{border-top:1px solid var(--grid);padding:13px 0}.sec.first{border-top:none;padding-top:2px}.sec .label{font-size:11px;letter-spacing:.14em;color:var(--muted);margin-bottom:8px;display:flex;align-items:center;gap:8px}.tier{font-size:10px;letter-spacing:0;color:var(--ink2);border:1px solid var(--grid);border-radius:999px;padding:1px 8px;font-weight:400}.sec .headline{font-size:13px;color:var(--ink2);margin-bottom:10px}.sec .headline b{color:var(--ink);font-weight:700}.stack{display:flex;height:16px;margin-bottom:10px}.seg{margin-right:2px;cursor:default}.seg:last-child{margin-right:0}.seg:first-child{border-radius:4px 0 0 4px}.seg:last-child{border-radius:0 4px 4px 0}.seg:hover{filter:brightness(1.18)}.legend{display:grid;grid-template-columns:1fr 1fr;gap:5px 18px}@media(max-width:560px){.legend{grid-template-columns:1fr}}.lrow{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink2);min-width:0}.sw{width:10px;height:10px;border-radius:3px;flex:none}.lrow .nat,.gtitle .nat{font-size:10.5px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lrow .v{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.lrow .cnt{color:var(--muted);font-size:10.5px;flex:none}.lrow.na,.lrow.na .v{color:var(--muted)}.grp{margin-bottom:10px}.grp:last-child{margin-bottom:0}.gtitle{font-size:11.5px;color:var(--muted);margin-bottom:4px;display:flex;align-items:center;gap:7px}.gdot{width:8px;height:8px;border-radius:2px;flex:none}.crow{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:12.5px;border-top:1px dashed var(--grid)}.cname{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.offrow .cname{color:var(--muted)}.chip{font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:999px;padding:1px 7px;flex:none}.statechip{font-size:10px;border-radius:999px;padding:1px 7px;flex:none}.statechip.off{color:var(--warn);border:1px solid var(--warn)}.statechip.nofile{color:var(--muted);border:1px dashed var(--grid)}.ctok{margin-left:auto;color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums;flex:none}.crow.emptyrow{color:var(--muted);font-size:12px}.livenone{font-size:12.5px;color:var(--muted);border:1px dashed var(--grid);border-radius:8px;padding:10px 12px;margin-bottom:8px;line-height:1.7}.livenone:last-child{margin-bottom:0}.livenone code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}.tier.none{color:var(--muted);border-style:dashed}.conn{font-size:10px;letter-spacing:0;font-weight:400;border-radius:999px;padding:1px 8px;border:1px solid var(--grid);color:var(--muted)}.conn.open{color:var(--s3);border-color:var(--s3)}.conn.retrying{color:var(--warn);border-color:var(--warn)}.conn.replay{color:var(--warn);border-style:dashed}.demobtn{margin-left:auto;background:none;border:1px dashed var(--warn);color:var(--warn);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.demobtn:hover:not(:disabled){border-style:solid}.demobtn:disabled{opacity:.5;cursor:default}.feed{max-height:240px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.lvrow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;border-top:1px dashed var(--grid)}.lvrow:first-child{border-top:none}.lvtime{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;flex:none}.lvname{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lvrow.own .lvname{font-weight:600}.lvrow.other{opacity:.45}.lvharness{margin-left:auto;font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;flex:none}.lvrow.own .lvharness{color:var(--ink2);border-color:var(--hairline)}.mockchip{font-size:9px;letter-spacing:.08em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:0 4px;flex:none}.labr{margin-left:auto;display:flex;align-items:center;gap:8px}.sharelink{background:none;border:1px solid var(--grid);color:var(--muted);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.sharelink:hover{color:var(--ink2);border-color:var(--muted)}.sharebox{max-height:320px;overflow:auto;border:1px solid var(--grid);border-radius:8px;background:var(--pill);padding:6px 8px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}.shline{display:flex;gap:7px;align-items:flex-start;padding:1px 0}.shdel{flex:none;background:none;border:1px solid var(--grid);color:var(--muted);border-radius:4px;font-size:9px;line-height:1.3;padding:0 4px;margin-top:1px;cursor:pointer}.shdel:hover{color:var(--s2);border-color:var(--s2)}.shtext{color:var(--ink2);white-space:pre-wrap;word-break:break-all}.btn:disabled{opacity:.45;cursor:default}.btn:disabled:hover{filter:none}.empty-state{display:flex;flex-direction:column;align-items:center}.empty-card{width:min(460px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:28px 26px;text-align:center}.empty-title{font-size:15px;font-weight:700;margin-bottom:8px}.empty-detail{font-size:12px;color:var(--warn);margin-bottom:8px;word-break:break-all}.empty-hint{font-size:12.5px;color:var(--muted);line-height:1.7}.empty-hint code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}#tip{position:fixed;display:none;pointer-events:none;z-index:9;background:#050505;border:1px solid var(--hairline);border-radius:8px;padding:6px 10px;font-size:12px;color:var(--ink);max-width:300px;box-shadow:0 8px 24px #00000080;white-space:pre-line;line-height:1.5}.toggle{width:30px;height:17px;border-radius:999px;background:var(--grid);position:relative;cursor:pointer;flex:none;transition:background .15s;border:none;padding:0}.toggle:after{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--ink2);transition:left .15s}.toggle.on{background:var(--s1)}.toggle.on:after{left:15px;background:#fff}.cright{display:flex;align-items:center;gap:8px;flex:none}.cfgnote{font-size:11px;color:var(--muted);padding:5px 0 2px;border-top:1px dashed var(--grid);line-height:1.6}.licbar{display:block;width:100%;text-align:left;font-size:12px;font-family:inherit;color:var(--warn);background:none;border:1px solid var(--warn);border-radius:8px;padding:6px 10px;margin-bottom:10px;cursor:pointer}.licbar.expired{color:var(--s2);border-color:var(--s2)}.licbar:hover{filter:brightness(1.12)}.licrow{display:flex;align-items:stretch;gap:8px;margin-bottom:10px}.licrow .licbar{flex:1;margin-bottom:0}.licimport{flex:none;font-size:11px;font-family:inherit;color:var(--muted);background:none;border:1px solid var(--grid);border-radius:8px;padding:6px 10px;cursor:pointer}.licimport:hover{color:var(--ink2);border-color:var(--muted)}.licfoot{margin-top:12px;text-align:center}.licfootlink{font-size:11px;font-family:inherit;color:var(--muted);background:none;border:none;padding:2px 4px;cursor:pointer;text-decoration:underline;text-decoration-color:var(--grid);text-underline-offset:3px}.licfootlink:hover{color:var(--ink2)}.feedbackfoot{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;padding:0 18px 16px;color:var(--muted);font-size:10.5px;line-height:1.45;text-align:center}.feedbackfoot a{color:var(--ink2);text-underline-offset:2px}.feedbackfoot a:hover{color:var(--ink)}.feedbacklink{font-weight:650}.lictrial{margin:-2px 0 8px;text-align:right}.lictrial .licfootlink{text-decoration:none}#drop{position:fixed;inset:0;z-index:40;display:none;align-items:center;justify-content:center;background:#000000a6;border:2px dashed var(--s1);color:var(--ink);font-size:15px;pointer-events:none}.overlay{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px}.scrim{position:absolute;inset:0;background:#0009}.modal{position:relative;width:min(560px,94vw);max-height:86vh;overflow-y:auto;background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:16px 18px;box-shadow:0 18px 60px #0009;animation:drop .18s ease}.mhead{display:flex;align-items:center;gap:8px;margin-bottom:10px}.mtitle{font-size:14px;font-weight:700}.mclose{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:2px 8px;font-size:12px;cursor:pointer}.mclose:hover{border-color:var(--muted)}.mnote{font-size:11px;color:var(--warn);border:1px dashed var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:10px;line-height:1.6}.msec{border-top:1px solid var(--grid);padding:10px 0}.mlabel{font-size:11px;letter-spacing:.1em;color:var(--muted);margin-bottom:6px}.mtext{font-size:12.5px;color:var(--ink2);line-height:1.7;word-break:break-all}.mtext.muted{color:var(--muted)}.mtext code,.mpath{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px;font-size:11px;word-break:break-all}.mfile{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;flex-wrap:wrap}.mkind{font-size:10px;border-radius:4px;padding:1px 6px;flex:none;border:1px solid var(--grid);color:var(--ink2)}.mkind.create{color:var(--s3);border-color:var(--s3)}.mkind.modify{color:var(--s4);border-color:var(--s4)}.mkind.delete{color:var(--s2);border-color:var(--s2)}.mlines{margin-left:auto;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;flex:none}.mref{display:flex;gap:8px;padding:4px 0;font-size:12px;align-items:baseline;flex-wrap:wrap}.mctx{color:var(--muted);font-size:11.5px;line-height:1.5}.merror{font-size:12px;color:var(--warn);border:1px solid var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:8px;white-space:pre-wrap;word-break:break-all}.mact{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}.btn{border-radius:8px;padding:6px 14px;font-size:12.5px;cursor:pointer;font-family:inherit}.btn.ghost{background:none;border:1px solid var(--hairline);color:var(--ink2)}.btn.ghost:hover{border-color:var(--muted)}.btn.primary{background:var(--s1);border:1px solid var(--s1);color:#fff;font-weight:600}.btn.primary:hover{filter:brightness(1.1)}.projects{display:grid;gap:12px;padding:12px 14px 16px}.projects-empty,.project-empty{color:var(--muted);font-size:12px;padding:8px 0}.project-card{border:1px solid var(--hairline);border-radius:12px;padding:12px;background:var(--surface)}.project-card.unavailable,.project-last-good{background:color-mix(in srgb,var(--surface) 88%,var(--grid))}.project-card-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.project-title{font-size:15px;font-weight:700}.project-source{margin-left:7px;color:var(--muted);font-size:10.5px}.project-presence{color:var(--muted);font-size:11px;margin-top:4px}.project-memory-warning,.anatomy-refresh-warning{color:var(--warn);font-size:11px}.project-memory-warning{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.project-memory-warning button{color:inherit;background:transparent;border:0;cursor:pointer}.project-root,.project-meta,.project-counts,.project-facts{color:var(--muted);font-size:11px;overflow-wrap:anywhere}.project-meta{margin-top:4px}.project-protocols{display:grid;gap:6px;margin-top:8px}.project-protocol-row{display:flex;align-items:center;flex-wrap:wrap;gap:5px}.project-protocol-chip,.project-protocol-copy{border:1px solid var(--hairline);border-radius:999px;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.project-protocol-chip.plan_present,.project-protocol-chip.session_wrote_plan{border-color:var(--s3);color:var(--s3)}.project-protocol-chip.installed_not_loaded{border-color:var(--warn);color:var(--warn)}.project-protocol-note{color:var(--muted);font-size:10px;overflow-wrap:anywhere}.project-protocol-copy{background:transparent;cursor:pointer;padding-inline:6px}.project-protocol-copy:hover{border-color:var(--s1)}.project-goal,.project-section,.project-counts,.project-facts,.project-complete,.project-l0,.project-error,.project-last-good{margin-top:10px}.project-label{color:var(--ink2);font-size:11px;font-weight:650;margin-right:8px}.project-l0,.project-error{border:1px solid var(--hairline);border-radius:8px;padding:8px 10px;font-size:12px}.project-error{color:var(--warn);border-color:var(--warn)}.project-complete{color:var(--s3);font-size:12px;font-weight:650}.project-points{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}.project-checkpoints{margin-top:5px}.project-checkpoint{font-size:12px;font-weight:400}.project-crumb{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font-family:inherit;font-size:11px;padding:3px 8px}.project-crumb:hover{border-color:var(--s1)}.project-node-text,.project-crumb,.project-checkpoint{display:-webkit-box;min-width:0;max-width:100%;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}.project-node-text{flex:1}.project-facts-group+.project-facts-group{margin-top:4px}.project-facts-toggle{border:0;background:transparent;color:inherit;cursor:pointer;font:inherit;padding:0;text-align:left}.project-facts-items{display:grid;gap:3px;margin:4px 0 0 14px}.task-filters{display:grid;gap:7px;padding:12px 14px 0}.task-filter-group{display:flex;align-items:center;flex-wrap:wrap;gap:5px;color:var(--muted);font-size:10.5px}.task-filter-chip,.task-badge,.task-status{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.task-filter-chip{cursor:pointer}.task-filter-chip:hover,.task-filter-chip.act{border-color:var(--s1);color:var(--s1)}.task-filter-summary,.task-hidden{color:var(--muted);font-size:11px}.task-filter-summary{padding:7px 14px 0}.task-hidden{margin:5px 0 0 19px}.task-card-list{display:grid;grid-template-columns:minmax(0,1fr);gap:7px;margin-top:6px}.task-card{display:block;width:100%;border:1px solid var(--hairline);border-radius:10px;background:color-mix(in srgb,var(--surface) 94%,var(--grid));color:var(--ink);cursor:pointer;font-family:inherit;padding:9px 38px 9px 10px;text-align:left}.task-card:hover{border-color:var(--s1)}.task-card-head,.task-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.task-card-meta{margin-top:7px}.task-title{font-size:12px;font-weight:650;overflow-wrap:anywhere}.task-title-source,.task-progress,.task-activity,.task-context,.task-feedback,.task-checks,.task-accept{color:var(--muted);font-size:10.5px}.task-title-source:before{content:"来源:"}.task-status.waiting{border-color:var(--warn);color:var(--warn)}.task-status.active,.task-status.complete{border-color:var(--s3);color:var(--s3)}.task-status.ended{color:var(--muted)}.task-feedback,.task-context{display:block;margin-top:6px}.task-feedback{color:var(--warn)}.task-card-wrap{position:relative}.task-menu-button{position:absolute;top:6px;right:7px;width:28px;height:26px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;font:700 17px / 1 inherit}.task-menu-button:hover,.task-menu-button[aria-expanded=true]{border-color:var(--hairline);color:var(--ink)}.task-menu{display:grid;gap:7px;max-width:100%;margin-top:5px;padding:8px;border:1px solid var(--hairline);border-radius:9px;background:color-mix(in srgb,var(--surface) 92%,var(--grid))}.task-menu label{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px;align-items:center;color:var(--muted);font-size:10.5px}.task-menu input{min-width:0;border:1px solid var(--hairline);border-radius:6px;background:var(--surface);color:var(--ink);font:inherit;padding:5px 7px}.task-menu-actions{display:flex;flex-wrap:wrap;gap:6px}.return-target-option,.return-settings-dismiss,.task-menu-actions button,.task-resume-command button,.task-unhide,.task-hidden-toggle{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:3px 8px}.task-resume-command{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.task-resume-command code{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.task-return-result,.task-resume-note,.task-resume-unavailable,.task-error{grid-column:1 / -1;color:var(--muted);font-size:10.5px;overflow-wrap:anywhere}.task-error{margin-top:5px;color:var(--warn)}.task-pin-mark{color:var(--s1);font-size:10px;font-weight:700}.task-hidden-group{margin-top:6px}.task-hidden-toggle{color:var(--muted)}.task-card-hidden{opacity:.58}.task-unhide{margin-top:5px}@media(max-width:560px){.task-menu label{grid-template-columns:1fr}}.project-tree,.project-tree ul,.project-session-plan ul{list-style:none;margin:5px 0 0;padding-left:17px}.project-tree{padding-left:0}.project-node{margin:4px 0;font-size:12px}.project-node-line{display:flex;gap:7px;align-items:baseline}.project-node.in_progress>.project-node-line{color:var(--s3)}.project-node.completed,.project-node.cancelled,.project-node.collapsed{color:var(--muted)}.project-mark{width:12px;flex:none;text-align:center}.project-verify{color:var(--muted);font-size:11px;margin:3px 0 0 19px}.project-session-wrap,.task-card-wrap{margin:5px 0 6px 19px}.project-session-plan{border-left:1px solid var(--hairline);margin:5px 0 0 8px;padding-left:8px;font-size:11px}.project-session-plan .project-source{margin-left:0}.project-last-good{opacity:.72;border-radius:8px;padding:8px}html.island,html.island body{background:transparent}html.island body{padding:8px 0 12px;overflow:hidden}html.island .open .panel{height:calc(100vh - 20px);overflow-y:auto}html.island .scrim{border-radius:20px}.return-target-options{display:flex;flex-wrap:wrap;gap:6px}.return-target-option.act{color:var(--s1);border-color:var(--s1);background:var(--surface)}.return-target-option:hover,.return-settings-dismiss:hover{color:var(--ink)}.return-target-option:focus-visible,.return-settings-dismiss:focus-visible{outline:2px solid var(--s1);outline-offset:2px}.return-target-option:disabled{opacity:.6;cursor:default}