@netnodeag/kraftwerk 0.25.0 → 0.27.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.
@@ -5,6 +5,9 @@ function invokeClaude(inv) {
5
5
  ...inv.tools,
6
6
  ...(inv.clis ?? []).map((name) => `Bash(${name}:*)`),
7
7
  ...mcpNames.map((name) => `mcp__${name}`),
8
+ // Chrome browser tools (spawned with --chrome below); absent when the
9
+ // integration is off, and an unused allowlist entry is harmless.
10
+ "mcp__claude-in-chrome",
8
11
  ];
9
12
  const args = [
10
13
  "-p",
@@ -16,6 +19,9 @@ function invokeClaude(inv) {
16
19
  "--permission-mode", "acceptEdits",
17
20
  // Keep the run hermetic: no user/project settings, hooks, or CLAUDE.md.
18
21
  "--setting-sources", "",
22
+ // Chrome browser tools when available (needs subscription auth; a
23
+ // no-op on API-key auth, where Claude Code keeps the integration off).
24
+ "--chrome",
19
25
  ];
20
26
  if (mcpNames.length > 0) {
21
27
  const mcpServers = Object.fromEntries(Object.entries(inv.mcpServers).map(([name, cfg]) => [
@@ -125,6 +125,9 @@ export async function startAcpBackend(agent, cwd, hooks, tuning = {}) {
125
125
  ...(tuning.model ? { model: tuning.model } : {}),
126
126
  ...(tuning.skills ? { skills: tuning.skills } : {}),
127
127
  ...(tuning.addDirs?.length ? { additionalDirectories: tuning.addDirs } : {}),
128
+ // Chrome browser tools when available (needs subscription auth; a
129
+ // no-op on API-key auth, where Claude Code keeps the integration off).
130
+ extraArgs: { chrome: null },
128
131
  };
129
132
  const session = await conn.newSession({
130
133
  cwd,
@@ -8,7 +8,7 @@ import { listWorkflows, getWorkflow } from "./workflows.js";
8
8
  import { dockerStatus, triggerRun, stopRun } from "./runner.js";
9
9
  import { cancelChat, createChat, deleteChat, disposeAllBackends, getChat, listChats, postMessage, resolvePermission, subscribeChat, } from "./chat/sessions.js";
10
10
  import { bundleDetail, conceptDetail, createBundle, knowledgeIndex, putConcept, verifyFromUi, } from "./knowledge.js";
11
- import { deleteMember, getMember, listMembers, saveMember, teamRoot, } from "./team.js";
11
+ import { deleteMember, getMember, listMembers, saveMember, setMemberArchived, teamRoot, } from "./team.js";
12
12
  import { deleteAgentSkill, getSkill, listAgentSkills, listSkills, readSkill, saveAgentSkill, skillsRoot, } from "./skills.js";
13
13
  import { discoverInstances, registerInstance, unregisterInstance } from "./instances.js";
14
14
  import { getSettings, saveSettings } from "./settings.js";
@@ -358,6 +358,16 @@ async function handleApi(req, res, url) {
358
358
  }
359
359
  }
360
360
  }
361
+ // POST /api/team/:slug/archive — archive/unarchive a member ({ archived: boolean })
362
+ if (seg.length === 4 && seg[1] === "team" && seg[3] === "archive" && method === "POST") {
363
+ try {
364
+ const body = JSON.parse(await readBody(req));
365
+ return json(res, await setMemberArchived(decodeURIComponent(seg[2]), body.archived === true));
366
+ }
367
+ catch (err) {
368
+ return json(res, { error: err.message }, 400);
369
+ }
370
+ }
361
371
  // GET/POST /api/team/:slug/skills — the agent's own skills / create or update one
362
372
  if (seg.length === 4 && seg[1] === "team" && seg[3] === "skills") {
363
373
  const slug = decodeURIComponent(seg[2]);
@@ -30,6 +30,8 @@ export interface TeamMember {
30
30
  * Absent = all discovered skills; empty list = no skills.
31
31
  */
32
32
  skills?: string[];
33
+ /** Archived: hidden from the active roster, restorable any time. */
34
+ archived?: boolean;
33
35
  }
34
36
  export interface TeamMemberDetail extends TeamMember {
35
37
  /** Contents of system.md — the member's system prompt. */
@@ -58,4 +60,6 @@ export interface SaveMemberInput {
58
60
  system?: string;
59
61
  }
60
62
  export declare function saveMember(input: SaveMemberInput): Promise<TeamMemberDetail>;
63
+ /** Archive/unarchive a member: toggles `archived:` in agent.yml, nothing else. */
64
+ export declare function setMemberArchived(slug: string, archived: boolean): Promise<TeamMemberDetail>;
61
65
  export declare function deleteMember(slug: string): Promise<void>;
@@ -52,6 +52,7 @@ function normalize(slug, raw) {
52
52
  workflows: Array.isArray(raw.workflows) ? raw.workflows.map(String) : [],
53
53
  knowledge: Array.isArray(raw.knowledge) ? raw.knowledge.map(String) : [],
54
54
  ...(Array.isArray(raw.skills) ? { skills: raw.skills.map(String) } : {}),
55
+ ...(raw.archived === true ? { archived: true } : {}),
55
56
  };
56
57
  }
57
58
  export async function listMembers() {
@@ -101,6 +102,11 @@ export async function saveMember(input) {
101
102
  const slug = input.slug ? safeMemberSlug(input.slug) : slugFromName(name);
102
103
  const dir = path.join(await teamRoot(), slug);
103
104
  await fs.mkdir(dir, { recursive: true });
105
+ // Profile edits must not silently unarchive: carry the flag over.
106
+ const existing = await fs
107
+ .readFile(path.join(dir, "agent.yml"), "utf8")
108
+ .then((raw) => (parse(raw) ?? {}))
109
+ .catch(() => null);
104
110
  const yml = {
105
111
  name,
106
112
  emoji: input.emoji?.trim() || "🤖",
@@ -112,11 +118,30 @@ export async function saveMember(input) {
112
118
  workflows: (input.workflows ?? []).map(String),
113
119
  knowledge: (input.knowledge ?? []).map(String),
114
120
  ...(input.skills ? { skills: input.skills.map(String) } : {}),
121
+ ...(existing?.archived === true ? { archived: true } : {}),
115
122
  };
116
123
  await fs.writeFile(path.join(dir, "agent.yml"), stringify(yml));
117
124
  await fs.writeFile(path.join(dir, "system.md"), (input.system ?? "").trim() + "\n");
118
125
  return (await getMember(slug));
119
126
  }
127
+ /** Archive/unarchive a member: toggles `archived:` in agent.yml, nothing else. */
128
+ export async function setMemberArchived(slug, archived) {
129
+ const dir = path.join(await teamRoot(), safeMemberSlug(slug));
130
+ let raw;
131
+ try {
132
+ raw = (parse(await fs.readFile(path.join(dir, "agent.yml"), "utf8")) ?? {});
133
+ }
134
+ catch {
135
+ throw new Error("agent not found");
136
+ }
137
+ const yml = { ...raw };
138
+ if (archived)
139
+ yml.archived = true;
140
+ else
141
+ delete yml.archived;
142
+ await fs.writeFile(path.join(dir, "agent.yml"), stringify(yml));
143
+ return (await getMember(slug));
144
+ }
120
145
  export async function deleteMember(slug) {
121
146
  const dir = path.join(await teamRoot(), safeMemberSlug(slug));
122
147
  await fs.rm(dir, { recursive: true, force: true });
package/dist/okf.js CHANGED
@@ -224,6 +224,19 @@ const nowIso = () => new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
224
224
  * Re-emit content with `generated: { by, at }` stamped, using the yaml
225
225
  * Document API so every other frontmatter key (and comments) round-trips.
226
226
  */
227
+ /**
228
+ * Guarantee a frontmatter block: content saved without one (an editor
229
+ * losing the `---` fence, plain text pasted into the UI) reuses the
230
+ * existing file's frontmatter and becomes the new body; with no existing
231
+ * frontmatter either, a minimal one is synthesized.
232
+ */
233
+ function ensureFrontmatter(content, existingRaw) {
234
+ if (splitFrontmatter(content).fmText !== null)
235
+ return content;
236
+ const existingFm = existingRaw === null ? null : splitFrontmatter(existingRaw).fmText;
237
+ const fm = existingFm ?? "type: Note";
238
+ return `---\n${fm}\n---\n\n${content.replace(/^\n+/, "")}`;
239
+ }
227
240
  function stampGenerated(raw, actor) {
228
241
  const { fmText, body } = splitFrontmatter(raw);
229
242
  if (fmText === null)
@@ -236,7 +249,7 @@ function stampGenerated(raw, actor) {
236
249
  if (!fm || typeof fm !== "object")
237
250
  throw new Error("frontmatter is not a mapping");
238
251
  if (typeof fm.type !== "string" || !fm.type.trim()) {
239
- throw new Error('frontmatter needs a non-empty "type" field (spec §4.1)');
252
+ doc.set("type", "Note"); // spec §4.1: type is required — default rather than reject
240
253
  }
241
254
  const node = doc.createNode({ by: actor, at: nowIso() });
242
255
  node.flow = true;
@@ -250,8 +263,9 @@ function stampGenerated(raw, actor) {
250
263
  export async function writeConcept(root, bundle, id, content, actor) {
251
264
  const cleanId = safeConceptId(id);
252
265
  const file = conceptFile(root, bundle, cleanId);
253
- const stamped = stampGenerated(content, actor);
254
- const created = !(await fs.stat(file).catch(() => null));
266
+ const existing = await fs.readFile(file, "utf8").catch(() => null);
267
+ const stamped = stampGenerated(ensureFrontmatter(content, existing), actor);
268
+ const created = existing === null;
255
269
  await fs.mkdir(path.dirname(file), { recursive: true });
256
270
  await fs.writeFile(file, stamped);
257
271
  const concept = parseConceptContent(bundle, cleanId, stamped);
@@ -0,0 +1 @@
1
+ @font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-latin-400-normal-BqEyEoaF.woff2) format("woff2"),url(/assets/roboto-latin-400-normal-D27F5sTu.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-latin-500-normal-7RbcRiD8.woff2) format("woff2"),url(/assets/roboto-latin-500-normal-fsTFPL3E.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-latin-700-normal-BZpUvMxY.woff2) format("woff2"),url(/assets/roboto-latin-700-normal-YuyVweIx.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-mono-latin-400-normal-GekRknry.woff2) format("woff2"),url(/assets/roboto-mono-latin-400-normal-DBZPkcnn.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-mono-latin-500-normal-pxIOXZmA.woff2) format("woff2"),url(/assets/roboto-mono-latin-500-normal-D6j6AMzd.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-mono-latin-700-normal-foxDnrFi.woff2) format("woff2"),url(/assets/roboto-mono-latin-700-normal-CHYrj1DZ.woff) format("woff")}@font-face{font-family:Material Symbols Rounded;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-symbols-rounded-DxXFL64Y.woff2) format("woff2")}.material-symbols-rounded{font-family:Material Symbols Rounded;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}:root{--font-sans: "Roboto";--font-mono: "Roboto Mono";--topbar-h: 53px;--primary: #f4efea;--on-primary: #191919;--primary-container: #3a3733;--on-primary-container: #f4efea;--secondary: #cfc9c0;--on-secondary: #24231f;--secondary-container: #3a3733;--on-secondary-container: #e8e2d9;--tertiary: #b8c2a2;--tertiary-container: #38402b;--on-tertiary-container: #d8e0c4;--error: #ffb4ab;--on-error: #690005;--error-container: #93000a;--on-error-container: #ffdad6;--success: #8fd48c;--success-container: #12411a;--on-success-container: #aaf2a4;--surface: #191919;--on-surface: #f4efea;--on-surface-variant: #b5b0a8;--surface-container-lowest: #121211;--surface-container-low: #201f1e;--surface-container: #262523;--surface-container-high: #2f2d2a;--surface-container-highest: #3a3733;--outline: #8f8a82;--outline-variant: #44423e;--inverse-surface: #f4efea;--inverse-on-surface: #2f2d2a;--elev-1: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px 1px rgba(0, 0, 0, .15);--elev-2: 0 1px 2px rgba(0, 0, 0, .3), 0 2px 6px 2px rgba(0, 0, 0, .15);--elev-3: 0 1px 3px rgba(0, 0, 0, .3), 0 4px 8px 3px rgba(0, 0, 0, .15);color-scheme:dark}:root[data-theme=light]{--primary: #191919;--on-primary: #ffffff;--primary-container: #e7e0d7;--on-primary-container: #191919;--secondary: #5e5b56;--on-secondary: #ffffff;--secondary-container: #e7e0d7;--on-secondary-container: #2a2926;--tertiary: #66705a;--tertiary-container: #dde2cf;--on-tertiary-container: #232818;--error: #ba1a1a;--on-error: #ffffff;--error-container: #ffdad6;--on-error-container: #410002;--success: #2e6b30;--success-container: #d3ecd0;--on-success-container: #0b2e10;--surface: #f4efea;--on-surface: #191919;--on-surface-variant: #5e5b56;--surface-container-lowest: #ffffff;--surface-container-low: #faf7f3;--surface-container: #ece6df;--surface-container-high: #e6dfd6;--surface-container-highest: #ded6cb;--outline: #8a857c;--outline-variant: #d8d1c7;--inverse-surface: #2b2a27;--inverse-on-surface: #f6f2ec;--elev-1: 0 1px 2px rgba(32, 27, 19, .18), 0 1px 3px 1px rgba(32, 27, 19, .08);--elev-2: 0 1px 2px rgba(32, 27, 19, .18), 0 2px 6px 2px rgba(32, 27, 19, .08);--elev-3: 0 1px 3px rgba(32, 27, 19, .18), 0 4px 8px 3px rgba(32, 27, 19, .08);color-scheme:light}*{box-sizing:border-box;margin:0;padding:0}html{height:100%}body{min-height:100%;background:var(--surface);color:var(--on-surface);font-family:var(--font-sans),system-ui,sans-serif;font-size:14px;line-height:1.5;letter-spacing:.01em;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}code,pre,.mono{font-family:var(--font-mono),monospace}.ms{font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 20;font-size:18px;line-height:1;vertical-align:-4px;flex:none;-webkit-user-select:none;user-select:none}.ms.ms-fill{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 20}.ms.ms-sm{font-size:15px;vertical-align:-3px}.ms.ms-lg{font-size:22px;vertical-align:-5px}.topbar{position:sticky;top:0;z-index:10;height:var(--topbar-h);display:flex;align-items:center;gap:14px;padding:0 20px;background:color-mix(in srgb,var(--surface-container) 92%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--outline-variant)}.wordmark{display:flex;align-items:center;gap:10px}.home-link{width:26px;height:26px;border-radius:9px;display:grid;place-items:center;font-size:15px;line-height:1;transition:background .12s ease}.home-link:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent)}.wordmark small{font-size:12px;color:var(--on-surface-variant)}.wordmark .env-name{font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--on-surface);padding:4px 8px;border-radius:10px;white-space:nowrap;max-width:300px;overflow:hidden;text-overflow:ellipsis}.switcher-wrap{position:relative;display:inline-flex}.env-switch{display:inline-flex;align-items:center;gap:5px;transition:background .12s ease,color .12s ease}.env-switch:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent)}.env-switch svg{flex:none;opacity:.55}.switcher-pop{position:absolute;top:calc(100% + 10px);left:0;z-index:20;min-width:320px;max-width:min(440px,90vw);background:var(--surface-container-high);border-radius:16px;box-shadow:var(--elev-3);padding:8px}.switcher-head{padding:8px 12px 6px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:var(--on-surface-variant)}.switcher-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;color:var(--on-surface);transition:background .12s ease}a.switcher-item:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent)}.switcher-item.current{cursor:default}.switcher-icon{flex:none;width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:var(--secondary-container);font-size:18px;line-height:1}.switcher-text{display:flex;flex-direction:column;min-width:0;gap:1px}.switcher-name{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.switcher-sub{font-size:11.5px;color:var(--on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--success);margin-right:5px;vertical-align:1px}.settings-screen{max-width:860px;margin:0 auto;display:flex;flex-direction:column;gap:16px}.settings-head{display:flex;align-items:center;gap:12px}.settings-head h1{margin:0;font-size:22px;font-weight:600;letter-spacing:-.01em;display:inline-flex;align-items:center;gap:10px}.settings-head .spacer{flex:1}.settings-saved{font-size:12.5px;color:var(--success);display:inline-flex;align-items:center;gap:4px}.settings-saved .ms{vertical-align:0}.settings-err{font-size:12.5px;color:var(--error)}.settings-note{font-size:12px;color:var(--on-surface-variant)}.settings-note code{font-size:11px}.settings-row-x{align-self:flex-end;opacity:1;margin-bottom:6px}.settings-file{font-size:11px;color:var(--on-surface-variant);max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-kv-list{display:flex;flex-direction:column;padding:6px 0 10px}.settings-kv{display:grid;grid-template-columns:110px 1fr;column-gap:14px;row-gap:1px;padding:8px 18px;align-items:baseline}.settings-kv+.settings-kv{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.settings-kv code{font-size:12px;overflow-wrap:break-word;word-break:break-all}.settings-kv-hint{grid-column:2;font-size:11px;color:var(--on-surface-variant)}.switcher-hint{margin-left:auto;flex:none;font-size:10.5px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--on-surface-variant);padding:2px 8px;border-radius:999px;border:1px solid var(--outline-variant)}.topbar .spacer{flex:1}.topbar nav{display:flex;gap:4px;position:absolute;left:50%;transform:translate(-50%)}@media(max-width:1100px){.topbar nav{position:static;transform:none;margin-left:12px}}.topbar nav a{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:500;letter-spacing:.01em;text-transform:capitalize;color:var(--on-surface-variant);padding:6px 14px;border-radius:999px;transition:background .12s ease,color .12s ease}.topbar nav a .ms{font-size:17px}.topbar nav a:hover{color:var(--on-surface);background:color-mix(in srgb,var(--on-surface) 8%,transparent)}.topbar nav .nav-apart{margin-left:28px;position:relative}.topbar nav .nav-apart:before{content:"";position:absolute;left:-16px;top:50%;height:18px;width:1px;transform:translateY(-50%);background:var(--outline-variant)}.info-wrap{position:relative;display:inline-flex}.info-btn{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;color:var(--on-surface-variant);transition:background .12s ease,color .12s ease}.info-btn:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent);color:var(--on-surface)}.info-pop{position:absolute;top:calc(100% + 8px);right:0;z-index:20;min-width:340px;max-width:min(480px,90vw);background:var(--surface-container-high);border-radius:12px;box-shadow:var(--elev-2);padding:8px 0}.info-row{display:flex;flex-direction:column;gap:2px;padding:8px 16px}.info-row+.info-row{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.info-v{font-size:13px;color:var(--on-surface)}.info-path{font-size:11px;color:var(--on-surface-variant);overflow-wrap:break-word;word-break:break-all}.info-actions{flex-direction:row;align-items:center;justify-content:space-between;flex-wrap:wrap}.info-actions .theme-btn{flex:none}.theme-btn,.update-btn{border:1px solid var(--outline);border-radius:999px;padding:6px 14px;font-size:12.5px;font-weight:500;color:var(--on-surface-variant);transition:background .12s ease,color .12s ease}.theme-btn:hover,.update-btn:hover:not(:disabled){background:color-mix(in srgb,var(--primary) 10%,transparent);color:var(--on-surface)}.update-btn{display:inline-flex;align-items:center;gap:6px;flex:none;text-decoration:none}.update-btn:disabled{opacity:.6;cursor:default}.update-btn .ms{vertical-align:0}.update-result{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--on-surface-variant)}.update-result .ms{vertical-align:0;color:var(--success)}.update-result.newer{color:var(--primary);font-weight:500;flex-basis:100%}.update-result.newer code{font-size:11px}.relaunch-note{margin-right:10px;padding:4px 12px;border-radius:999px;font:inherit;font-size:12px;cursor:pointer;color:var(--primary);border:1px solid var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent)}.relaunch-note:hover{background:color-mix(in srgb,var(--primary) 18%,transparent)}.relaunch-note:disabled{opacity:.7;cursor:default}.expert-toggle{display:inline-flex;align-items:center;gap:7px;padding:4px 8px;margin-right:2px;border-radius:999px;font-family:var(--font-mono),monospace;font-size:11px;letter-spacing:.5px;color:var(--on-surface-variant);transition:color .12s ease}.expert-toggle:hover{color:var(--on-surface)}.expert-track{position:relative;width:26px;height:15px;border-radius:999px;background:color-mix(in srgb,var(--on-surface) 14%,transparent);transition:background .14s ease}.expert-knob{position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:var(--surface);transition:left .14s ease,background .14s ease}.expert-toggle.on{color:var(--on-surface)}.expert-toggle.on .expert-track{background:var(--primary)}.expert-toggle.on .expert-knob{left:13px;background:var(--on-primary, var(--surface))}html[data-expert=off] .topbar nav,html[data-expert=off] .chat-thread .detail-head .chip.agent,html[data-expert=off] .chat-thread .detail-head .rid{display:none}.shell{max-width:1240px;margin:0 auto;padding:26px 20px 80px}.microlabel{font-size:11px;font-weight:500;letter-spacing:.045em;text-transform:capitalize;color:var(--on-surface-variant)}.num{font-variant-numeric:tabular-nums}.lamp{width:9px;height:9px;border-radius:50%;flex:none;position:relative}.lamp.ok{background:var(--success)}.lamp.failed,.lamp.blocked{background:var(--error)}.lamp.aborted{background:var(--outline-variant)}.lamp.pending{background:transparent;border:1.5px solid var(--outline)}.lamp.running{background:var(--primary);animation:lamp-pulse 1.4s ease-in-out infinite}@keyframes lamp-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--primary) 45%,transparent);opacity:1}50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--primary) 18%,transparent);opacity:.8}}.status-word{font-size:12px;font-weight:500;letter-spacing:.03em;text-transform:capitalize}.status-word.ok{color:var(--success)}.status-word.failed,.status-word.blocked{color:var(--error)}.status-word.running{color:var(--primary)}.status-word.aborted,.status-word.pending{color:var(--on-surface-variant)}.page-head{display:flex;align-items:baseline;gap:14px;margin:6px 2px 20px}.page-head .spacer{flex:1}.page-head h1{font-size:24px;font-weight:400;letter-spacing:0}.page-head .count{color:var(--on-surface-variant);font-size:13px}.run-list{display:grid;gap:10px}.run-card{display:grid;grid-template-columns:12px 200px 1fr auto;gap:8px 16px;align-items:center;background:var(--surface-container-low);border:0;border-radius:12px;padding:14px 20px;box-shadow:var(--elev-1);transition:box-shadow .15s ease,background .15s ease}.run-card:hover{background:color-mix(in srgb,var(--on-surface) 5%,var(--surface-container-low));box-shadow:var(--elev-2)}.run-card .rid{font-family:var(--font-mono),monospace;font-size:12.5px;color:var(--on-surface-variant)}.run-card .wf{font-weight:500;font-size:14px}.run-card .req{color:var(--on-surface-variant);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:52ch}.run-card .meta{display:flex;gap:18px;align-items:center;font-family:var(--font-mono),monospace;font-size:12px;color:var(--on-surface-variant)}.progress-track{width:90px;height:4px;border-radius:999px;background:var(--surface-container-highest);overflow:hidden}.progress-track i{display:block;height:100%;background:var(--primary);border-radius:999px}.run-card.is-ok .progress-track i{background:var(--success)}.run-card.is-failed .progress-track i{background:var(--error)}.empty{border:1px dashed var(--outline-variant);border-radius:16px;padding:40px;text-align:center;color:var(--on-surface-variant)}.crumbs{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--on-surface-variant);margin-bottom:14px}.crumbs a:hover{color:var(--primary)}.crumbs .sep{color:var(--outline-variant)}.detail-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:6px}.detail-head h1{font-size:22px;font-weight:400}.detail-head .rid{font-family:var(--font-mono),monospace;font-size:12px;color:var(--on-surface-variant)}.detail-req{color:var(--on-surface-variant);font-size:13px;margin-bottom:18px;max-width:90ch}.statgrid{display:flex;flex-wrap:wrap;gap:26px;margin-bottom:22px}.stat .microlabel{margin-bottom:1px}.stat .v{font-family:var(--font-mono),monospace;font-size:15px;font-weight:500}.columns{display:grid;grid-template-columns:minmax(430px,5fr) minmax(360px,4fr);gap:18px;align-items:start}@media(max-width:1020px){.columns{grid-template-columns:1fr}}.panel{background:var(--surface-container-low);border:0;border-radius:16px;box-shadow:var(--elev-1);overflow:hidden}.panel-head{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--outline-variant);background:var(--surface-container)}.panel-head .microlabel{color:var(--on-surface-variant);font-size:12px}.panel-head .spacer{flex:1}.phases{padding:6px 0}.phase-row{position:relative;padding:10px 18px 10px 42px}.phase-row+.phase-row{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.phase-row .lamp{position:absolute;left:19px;top:16px}.phase-row:before{content:"";position:absolute;left:23px;top:0;bottom:0;width:1px;background:var(--outline-variant)}.phase-row:first-child:before{top:16px}.phase-row:last-child:before{bottom:auto;height:16px}.phase-row .lamp{z-index:1}.phase-top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.phase-name{font-weight:500;font-size:14px}.chip{font-family:var(--font-mono),monospace;font-size:11px;border:1px solid var(--outline-variant);border-radius:8px;padding:2px 10px;color:var(--on-surface-variant)}.chip.agent{border-color:transparent;background:var(--secondary-container);color:var(--on-secondary-container)}.phase-top .right{margin-left:auto;display:flex;gap:14px;font-family:var(--font-mono),monospace;font-size:11.5px;color:var(--on-surface-variant)}.phase-sub{margin-top:3px;font-size:12.5px;color:var(--on-surface-variant);max-width:72ch}.phase-activity{margin-top:3px;font-family:var(--font-mono),monospace;font-size:11.5px;color:var(--primary)}.phase-activity:before{content:"▸ "}.gate-line{margin-top:5px;display:flex;flex-wrap:wrap;gap:6px}.gate{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono),monospace;font-size:11px;border-radius:8px;padding:2px 10px;background:var(--success-container);color:var(--on-success-container)}.gate.failed{background:var(--error-container);color:var(--on-error-container)}.gate-fail-msg{margin-top:4px;font-size:12px;color:var(--error)}.file-list{max-height:300px;overflow:auto}.file-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:8px 18px;font-family:var(--font-mono),monospace;font-size:12.5px;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);color:var(--on-surface-variant);transition:background .1s ease}.file-row:last-child{border-bottom:0}.file-row:hover{background:color-mix(in srgb,var(--on-surface) 6%,transparent);color:var(--on-surface)}.file-row.active{background:var(--secondary-container);color:var(--on-secondary-container)}.file-row .fname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-row .fsize{color:var(--outline);font-size:11px}.viewer{border-top:1px solid var(--outline-variant)}.viewer-body pre{padding:14px 18px;overflow:auto;max-height:560px;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:var(--on-surface-variant)}.viewer-body iframe{width:100%;height:620px;border:0;background:#fff;display:block}.viewer-body img{max-width:100%;display:block;padding:14px 18px}.viewer-note{padding:6px 18px;font-size:11px;color:var(--on-surface-variant);border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.open-raw{font-size:12px;font-weight:500;color:var(--primary);border:1px solid var(--outline);border-radius:999px;padding:3px 12px;transition:background .12s ease}.open-raw:hover{background:color-mix(in srgb,var(--primary) 10%,transparent)}.live-note{display:inline-flex;align-items:center;gap:7px;font-size:11px;color:var(--on-surface-variant)}.wf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.wf-card{display:flex;flex-direction:column;gap:6px;background:var(--surface-container-low);border:0;border-radius:16px;padding:18px 20px;box-shadow:var(--elev-1);transition:box-shadow .15s ease,background .15s ease}.wf-card:hover{background:color-mix(in srgb,var(--on-surface) 5%,var(--surface-container-low));box-shadow:var(--elev-2)}.wf-card-head{display:flex;align-items:baseline;gap:10px}.wf-name{font-weight:500;font-size:16px}.wf-desc{color:var(--on-surface-variant);font-size:13px;flex:1}.wf-meta{display:flex;gap:8px;font-family:var(--font-mono),monospace;font-size:11.5px;color:var(--on-surface-variant)}.wf-workspace{font-size:11.5px;color:var(--on-surface-variant);white-space:pre-wrap}.aid-0{--aid: var(--primary)}.aid-1{--aid: #4fb8a8}.aid-2{--aid: #a78bfa}.aid-3{--aid: #e5793b}.agent-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:0}.agent-card{padding:14px 18px;border-right:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.agent-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.agent-head b{font-size:14px;font-weight:500}.agent-head .spacer{flex:1}.agent-id{font-size:11px;color:var(--on-surface-variant)}.agent-dot{width:10px;height:10px;border-radius:50%;background:var(--aid)}.agent-tools{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.tool-chip{font-family:var(--font-mono),monospace;font-size:11px;border:1px solid var(--outline-variant);border-radius:8px;padding:1px 8px;color:var(--on-surface-variant)}.agent-persona{margin-top:8px;font-size:12px;color:var(--on-surface-variant);line-height:1.55;white-space:pre-wrap}.pipeline{padding:8px 0}.step-node{position:relative;display:flex;gap:14px;padding:12px 18px}.step-node+.step-node{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.step-node:before{content:"";position:absolute;left:31px;top:0;bottom:0;width:1px;background:var(--outline-variant)}.step-node:first-child:before{top:18px}.step-node:last-child:before{bottom:auto;height:18px}.step-index{position:relative;z-index:1;flex:none;width:26px;height:26px;border-radius:50%;margin-top:1px;display:grid;place-items:center;font-family:var(--font-mono),monospace;font-size:11.5px;font-weight:700;background:color-mix(in srgb,var(--aid) 18%,var(--surface-container-low));border:1px solid color-mix(in srgb,var(--aid) 55%,var(--outline-variant));color:var(--aid)}.step-index.is-script{--aid: var(--on-surface-variant)}.step-body{flex:1;min-width:0}.agent-chip{border-color:color-mix(in srgb,var(--aid) 50%,var(--outline-variant));color:var(--aid);background:transparent}.step-source{margin-top:6px}.step-source summary{cursor:pointer;font-size:12px;font-weight:500;color:var(--on-surface-variant);-webkit-user-select:none;user-select:none}.step-source summary:hover{color:var(--primary)}.step-source pre{margin-top:6px;padding:10px 12px;border:0;border-radius:12px;background:var(--surface-container-high);font-size:11.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:var(--on-surface-variant);max-height:360px;overflow:auto}.gate.neutral{background:var(--surface-container-high);color:var(--on-surface-variant);border:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--outline-variant);border-radius:999px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-track{background:transparent}.run-form{display:flex;gap:10px}.run-form input[type=text]{flex:1;font:13px/1.4 var(--font-mono),monospace;color:var(--on-surface);background:var(--surface-container-high);border:1px solid transparent;border-radius:999px;padding:10px 18px;outline:none;transition:border-color .12s ease,background .12s ease}.run-form input[type=text]:focus{border-color:var(--primary);background:var(--surface-container-highest)}.run-btn{font:500 13.5px/1 var(--font-sans),sans-serif;white-space:nowrap;color:var(--on-primary);background:var(--primary);border-radius:999px;padding:11px 24px;transition:box-shadow .12s ease,filter .12s ease}.run-btn:hover{box-shadow:var(--elev-1);filter:brightness(1.06)}.run-btn:disabled{opacity:.38;cursor:not-allowed;filter:none;box-shadow:none}.run-btn.tonal{color:var(--on-secondary-container);background:var(--secondary-container)}.run-opts{display:flex;flex-wrap:wrap;gap:6px 22px;margin-top:12px}.run-opts label{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--on-surface-variant);cursor:pointer}.run-opts input[type=checkbox]{accent-color:var(--primary);width:15px;height:15px}.run-opts .opt-hint{color:var(--outline)}.sandbox-chip{border:1px solid var(--outline-variant);color:var(--on-surface-variant)}.stop-btn{font:500 13px/1 var(--font-sans),sans-serif;color:var(--error);background:transparent;border:1px solid var(--outline);border-radius:999px;padding:8px 18px;transition:background .12s ease,border-color .12s ease}.stop-btn:hover{background:color-mix(in srgb,var(--error) 10%,transparent);border-color:var(--error)}.stop-btn:disabled{opacity:.38;cursor:default}.shell:has(.runs-screen){max-width:none;padding:0}.runs-screen{display:grid;grid-template-columns:300px minmax(0,1fr);align-items:start}.runs-side{position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));display:flex;flex-direction:column;border-right:1px solid var(--outline-variant);background:var(--surface-container-low)}.side-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--outline-variant);background:var(--surface-container)}.side-head .spacer{flex:1}.side-list{flex:1;overflow-y:auto;padding:6px}.side-row.side-general{margin-bottom:6px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);border-radius:12px 12px 0 0}.side-row{display:flex;align-items:flex-start;gap:9px;padding:9px 12px;border-radius:12px;margin-bottom:2px;transition:background .1s ease}.side-row .lamp{margin-top:4px}.side-row:hover{background:color-mix(in srgb,var(--on-surface) 6%,transparent)}.side-row.active{background:var(--secondary-container)}.side-row.active .side-wf{color:var(--on-secondary-container)}.side-row-body{flex:1;min-width:0}.side-row-top{display:flex;align-items:baseline;gap:8px}.side-wf{font-weight:500;font-size:12.5px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-when{font-family:var(--font-mono),monospace;font-size:10.5px;color:var(--on-surface-variant)}.side-row-sub{display:flex;align-items:baseline;gap:8px;margin-top:1px}.side-row-sub .side-when{font-size:9px;opacity:.8}.side-req{flex:1;font-size:11.5px;color:var(--on-surface-variant);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-row.active .side-req{color:var(--on-secondary-container)}.side-meta{font-family:var(--font-mono),monospace;font-size:10.5px;color:var(--on-surface-variant)}.runs-main{padding:18px 22px 40px;min-width:0}.runs-main:has(>.chat-main){padding:0}.runs-main .detail-head .spacer{flex:1}.tabs{display:flex;gap:0;background:transparent;border:1px solid var(--outline);border-radius:999px;padding:0;overflow:hidden}.tabs button{font-size:12.5px;font-weight:500;letter-spacing:.01em;text-transform:capitalize;color:var(--on-surface-variant);padding:7px 18px;border-radius:0;transition:background .12s ease,color .12s ease}.tabs button+button{border-left:1px solid var(--outline)}.tabs button:hover{background:color-mix(in srgb,var(--on-surface) 6%,transparent);color:var(--on-surface)}.tabs button.active{background:var(--secondary-container);color:var(--on-secondary-container);box-shadow:none}.run-tab{max-width:1080px}.art-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:14px;height:calc(100vh - 172px);min-height:420px}.art-files{display:flex;flex-direction:column;min-height:0}.art-files .file-list{flex:1;max-height:none}.art-viewer{display:flex;flex-direction:column;min-height:0}.art-viewer .viewer{flex:1;display:flex;flex-direction:column;min-height:0;border-top:0}.art-viewer .viewer-body{flex:1;min-height:0}.art-viewer .viewer-body iframe{height:100%}.art-viewer .viewer-body pre{max-height:none;height:100%;box-sizing:border-box}.art-viewer .viewer-body img{max-height:100%;object-fit:contain}.art-viewer .empty{flex:1;display:grid;place-items:center}.md-toolbar{display:flex;align-items:center;gap:12px}.md-toolbar .tabs button{font-size:11px;padding:3px 12px;text-transform:none}.md-body{height:100%;box-sizing:border-box;overflow:auto;padding:16px 22px;font-size:13.5px;line-height:1.6;color:var(--on-surface)}.md-body>:first-child{margin-top:0}.md-body h1,.md-body h2,.md-body h3,.md-body h4{margin:1.4em 0 .5em;line-height:1.25;font-weight:600}.md-body h1{font-size:20px}.md-body h2{font-size:16px;border-bottom:1px solid var(--outline-variant);padding-bottom:4px}.md-body h3{font-size:14px}.md-body p,.md-body ul,.md-body ol{margin:.6em 0}.md-body ul,.md-body ol{padding-left:1.6em}.md-body li+li{margin-top:.2em}.md-body a{color:var(--primary)}.md-body code{font-family:var(--font-mono),monospace;font-size:12px;background:color-mix(in srgb,var(--on-surface) 8%,transparent);padding:1px 5px;border-radius:4px}.md-body pre{background:color-mix(in srgb,var(--on-surface) 6%,transparent);border:1px solid var(--outline-variant);border-radius:8px;padding:10px 14px;overflow-x:auto;margin:.8em 0}.md-body pre code{background:none;padding:0}.md-body blockquote{margin:.8em 0;padding:2px 14px;border-left:3px solid var(--outline);color:var(--on-surface-variant)}.md-body table{border-collapse:collapse;margin:.8em 0;font-size:12.5px}.md-body th,.md-body td{border:1px solid var(--outline-variant);padding:5px 10px;text-align:left}.md-body th{background:color-mix(in srgb,var(--on-surface) 5%,transparent)}.md-body hr{border:0;border-top:1px solid var(--outline-variant);margin:1.2em 0}.md-body img{max-width:100%}@media(max-width:940px){.runs-screen{grid-template-columns:1fr}.runs-side{display:none}.art-layout{grid-template-columns:1fr;height:auto}.art-files .file-list{max-height:240px}.art-viewer .viewer-body iframe{height:560px}}.chat-main{display:flex;flex-direction:column;height:calc(100vh - var(--topbar-h));padding:16px 20px}.chat-thread{display:flex;flex-direction:column;flex:1;min-height:0;max-width:980px;width:100%;margin:0 auto}.chat-thread .detail-head{flex:none}.chat-thread .detail-head .rid{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34ch}.chat-scroll{flex:1;min-height:0;overflow-y:auto;padding:14px 2px 20px;display:flex;flex-direction:column;gap:10px}.chat-scroll .empty{margin:auto;border:0}.msg{max-width:76ch;white-space:pre-wrap;word-break:break-word;font-size:14px;line-height:1.6}.msg.user{align-self:flex-end;background:var(--primary-container);color:var(--on-primary-container);border:0;border-radius:20px 20px 6px;padding:10px 16px}.msg.agent{align-self:flex-start;background:var(--surface-container);border:0;border-radius:20px 20px 20px 6px;padding:10px 16px}.msg.agent.chat-md{white-space:normal;height:auto;overflow:visible;padding:10px 16px;font-size:14px}.msg.agent.chat-md img{border-radius:10px;margin:4px 0;display:block}.msg.agent.chat-md pre{max-width:100%}.msg.error{align-self:flex-start;color:var(--error);font-size:12.5px}.msg.thought{align-self:flex-start;max-width:76ch}.msg.thought summary{cursor:pointer;font-size:12px;font-weight:500;color:var(--on-surface-variant);-webkit-user-select:none;user-select:none}.msg.thought div{margin-top:5px;padding:8px 12px;border-left:2px solid var(--outline-variant);color:var(--on-surface-variant);font-size:12px;white-space:pre-wrap;word-break:break-word}.tool-card{align-self:flex-start;display:inline-flex;align-items:flex-start;gap:8px;font-family:var(--font-mono),monospace;font-size:11px;color:var(--on-surface-variant);background:transparent;border:0;padding:0 2px;max-width:90ch}.tool-card+.tool-card{margin-top:-6px}.tool-card .lamp{margin-top:4px;width:7px;height:7px}.tool-card .chip.tool-kind{flex-shrink:0;border:0;background:transparent;padding:0;font-size:10px;text-transform:uppercase;letter-spacing:.5px;min-width:64px}.tool-card .tool-title{white-space:pre-wrap;word-break:break-word;overflow:visible;line-height:1.5;min-width:0}.perm-card{align-self:flex-start;border:0;background:var(--tertiary-container);color:var(--on-tertiary-container);border-radius:16px;padding:12px 16px;max-width:76ch;box-shadow:var(--elev-1)}.perm-card .perm-title{font-size:13.5px}.perm-card .perm-title .microlabel{color:var(--tertiary);margin-right:8px;font-weight:700}:root[data-theme=light] .perm-card .perm-title .microlabel{color:var(--on-tertiary-container)}.perm-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.perm-btn{font:500 13px/1 var(--font-sans),sans-serif;border-radius:999px;padding:8px 18px;border:1px solid var(--outline);transition:background .12s ease,filter .12s ease}.perm-btn.allow{color:var(--on-primary);background:var(--primary);border-color:transparent}.perm-btn.allow:hover{filter:brightness(1.06);box-shadow:var(--elev-1)}.perm-btn.deny{color:inherit}.perm-btn.deny:hover{border-color:var(--error);color:var(--error)}.perm-resolved{margin-top:6px;font-size:12px;color:var(--on-surface-variant);font-family:var(--font-mono),monospace}.chat-working{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--on-surface-variant)}.composer{flex:none;display:flex;gap:10px;align-items:flex-end;padding:12px 0 4px;border-top:1px solid var(--outline-variant);position:relative}.skill-menu{position:absolute;bottom:100%;left:0;right:0;margin-bottom:6px;display:flex;flex-direction:column;overflow:hidden;background:var(--surface-container-high);border:1px solid var(--outline-variant);border-radius:14px;box-shadow:var(--elev-1);z-index:5}.skill-menu button{display:flex;align-items:baseline;gap:6px;text-align:left;padding:9px 14px;font-size:13px;background:transparent;border:0}.skill-menu button b{font-weight:500;font-family:var(--font-mono),monospace;font-size:12.5px}.skill-menu button span{color:var(--on-surface-variant);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-menu button .skill-src{margin-left:auto;flex:none;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}.skill-menu button:hover,.skill-menu button.active{background:color-mix(in srgb,var(--on-surface) 7%,transparent)}.composer textarea{flex:1;resize:none;font:14px/1.5 var(--font-sans),sans-serif;color:var(--on-surface);background:var(--surface-container-high);border:1px solid transparent;border-radius:24px;padding:12px 18px;outline:none;transition:border-color .12s ease,background .12s ease}.composer textarea:focus{border-color:var(--primary);background:var(--surface-container-highest)}.new-chat{max-width:640px;margin:0 auto;width:100%}.new-chat-panel{overflow:visible}.agent-pick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:14px 16px}.agent-pick-btn{display:flex;flex-direction:column;gap:3px;text-align:left;border:1px solid var(--outline-variant);border-radius:12px;padding:12px 14px;background:transparent;transition:background .12s ease,border-color .12s ease}.agent-pick-btn b{font-size:13.5px;font-weight:500}.agent-pick-btn span{font-size:11.5px;color:var(--on-surface-variant)}.agent-pick-btn:hover{background:color-mix(in srgb,var(--on-surface) 5%,transparent)}.agent-pick-btn.active{border-color:transparent;background:var(--secondary-container);color:var(--on-secondary-container)}.agent-pick-btn.active span{color:var(--on-secondary-container)}@media(max-width:940px){.chat-main{height:auto;min-height:calc(100vh - var(--topbar-h))}.agent-pick{grid-template-columns:1fr}}.know-intro{padding:12px 18px;font-size:13px;line-height:1.6;color:var(--on-surface-variant)}.know-intro code{font-size:11.5px}.know-newbundle{display:flex;gap:10px;padding:14px 18px}.know-newbundle input{flex:1;font:13px/1.4 var(--font-mono),monospace;color:var(--on-surface);background:var(--surface-container-high);border:1px solid transparent;border-radius:999px;padding:10px 18px;outline:none;transition:border-color .12s ease,background .12s ease}.know-newbundle input:focus{border-color:var(--primary);background:var(--surface-container-highest)}.know-table{width:100%;border-collapse:collapse;font-size:13px}.know-table td{padding:9px 18px;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);vertical-align:baseline}.know-table tr:last-child td{border-bottom:none}.know-table a{color:var(--on-surface);text-decoration:none}.know-table a:hover b{color:var(--primary)}.know-id{font-family:var(--font-mono),monospace;font-size:11px;color:var(--on-surface-variant);margin-left:8px}.know-type{font-size:11.5px;color:var(--on-surface-variant);white-space:nowrap}.know-flags{text-align:right;white-space:nowrap}.chip.trust.unverified{color:var(--on-surface-variant)}.chip.trust.machine-confirmed{border-color:transparent;background:var(--secondary-container);color:var(--on-secondary-container)}.chip.trust.human-reviewed{border-color:transparent;color:var(--on-success-container);background:var(--success-container)}.chip.stale,.chip.deprecated{border-color:transparent;color:var(--on-error-container);background:var(--error-container)}.chip.draft{border-color:color-mix(in srgb,var(--primary) 45%,var(--outline-variant));color:var(--primary)}.dash{width:100%;max-width:1180px;margin:0 auto;padding:24px 28px 40px;box-sizing:border-box}.dash-actions{display:flex;gap:10px;align-self:center}.wf-pick-wrap{position:relative}.wf-pick-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:30;min-width:280px;max-height:340px;overflow-y:auto;background:var(--surface-container);border:1px solid var(--outline-variant);border-radius:12px;padding:6px;box-shadow:var(--elev-2, 0 8px 24px rgb(0 0 0 / .18));display:flex;flex-direction:column}.wf-pick-item{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:8px;text-decoration:none;color:inherit}.wf-pick-item:hover{background:color-mix(in srgb,var(--on-surface) 6%,transparent)}.wf-pick-name{font-size:13px;font-weight:500}.wf-pick-desc{font-size:11.5px;color:var(--on-surface-variant)}.wf-pick-empty{padding:8px 10px;font-size:12px;color:var(--on-surface-variant)}.dash-team{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:18px}@media(max-width:1100px){.dash-team{grid-template-columns:repeat(4,1fr)}}@media(max-width:800px){.dash-team{grid-template-columns:repeat(3,1fr)}}@media(max-width:560px){.dash-team{grid-template-columns:repeat(2,1fr)}}.dash-team-empty{margin-bottom:18px}.dash-member{display:flex;flex-direction:column;background:var(--surface-container-low, var(--surface-container));border:1px solid var(--outline-variant);border-radius:16px;overflow:hidden;cursor:pointer}.dash-member:hover{border-color:var(--outline)}.lamp.idle{background:transparent;border:1.5px solid var(--outline-variant)}.dash-member-id{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px 16px 12px;text-align:center;text-decoration:none;color:inherit;flex:1}.dash-member-id:hover .dash-member-name{color:var(--primary)}.dash-member-name{font-size:15px;font-weight:600}.dash-member-desc{font-size:11.5px;line-height:1.45;color:var(--on-surface-variant);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.dash-member-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.dash-member-state{font-size:11px;color:var(--on-surface-variant)}.dash-member-state a{color:var(--primary);text-decoration:none}.dash-chat-btn{padding:4px 13px;font-size:12px;color:var(--primary);background:transparent;border:1px solid var(--outline)}.dash-chat-btn:hover{background:color-mix(in srgb,var(--primary) 10%,transparent);box-shadow:none;filter:none}.dash-feed{margin:0}.agent-avatar{position:relative;flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--secondary-container);font-size:19px;line-height:1}.agent-avatar .lamp{position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border:2px solid var(--surface-container-low)}.agent-avatar .lamp.idle{background:var(--outline-variant)}.agent-avatar.sm{width:30px;height:30px;font-size:15px}.agent-avatar.lg{width:56px;height:56px;font-size:28px}.agent-avatar.lg .lamp{width:12px;height:12px;right:1px;bottom:1px}.dash-alert{display:flex;align-items:center;gap:8px;width:100%;margin:0 0 14px;padding:9px 14px;text-align:left;cursor:pointer;font-size:12.5px;border:1px solid color-mix(in srgb,var(--error) 40%,transparent);border-radius:12px;background:var(--error-container);color:var(--on-error-container)}.dash-alert:hover{filter:brightness(1.04)}.dash-feed-filter{display:flex;gap:6px}.feed-chip{font-size:11px;border:1px solid var(--outline-variant);border-radius:8px;padding:2px 10px;background:transparent;color:var(--on-surface-variant);cursor:pointer}.feed-chip:hover{color:var(--on-surface)}.feed-chip.on{border-color:transparent;background:var(--primary-container);color:var(--on-primary-container)}.feed-chip.on.failed{background:var(--error-container);color:var(--on-error-container)}.feed-day{padding:12px 18px 3px;border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.feed-group:first-child .feed-day{border-top:none;padding-top:6px}.feed-group+.feed-group .m3-row{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.feed-group .feed-day+.m3-row{border-top:none}.dash-mini{display:flex;gap:18px;font-size:12px;color:var(--on-surface-variant);flex-wrap:wrap}.dash-mini a{color:inherit;text-decoration:none}.dash-mini a:hover{color:var(--primary);text-decoration:underline}.dash-mini b{font-weight:600;color:var(--on-surface)}.dash-mini a:hover b{color:var(--primary)}.chip.dash-kind{flex:none}.chip.status{flex:none;border-color:transparent;font-family:var(--font-sans),sans-serif;font-weight:500}.chip.status.ok{background:var(--success-container);color:var(--on-success-container)}.chip.status.failed{background:var(--error-container);color:var(--on-error-container)}.chip.status.running{background:var(--primary-container);color:var(--on-primary-container)}.chip.status.aborted{background:var(--surface-container-high);color:var(--on-surface-variant)}.chip.dash-kind.run{border-color:transparent;background:var(--primary-container);color:var(--on-primary-container)}.chip.dash-kind.session{border-color:transparent;background:var(--tertiary-container);color:var(--on-tertiary-container)}.chip.dash-kind.knowledge{border-color:transparent;background:var(--success-container);color:var(--on-success-container)}html[data-expert=off] .dash-mini,html[data-expert=off] .chip.dash-kind{display:none}.lamp.dim{background:var(--outline-variant)}.chip.skill-src{flex:none}.chip.skill-src.workspace{border-color:transparent;background:var(--success-container);color:var(--on-success-container)}.chip.skill-src.project,.chip.skill-src.user{color:var(--on-surface-variant)}.chip.skill-src.agent{border-color:transparent;background:var(--secondary-container);color:var(--on-secondary-container)}.skills-local-head{border-top:1px solid var(--outline-variant);margin-top:10px}.skill-desc{margin:-6px 2px 14px}.skill-path{word-break:break-all}.know-sub{display:flex;align-items:center;gap:8px;margin:-8px 2px 14px}.know-sub .rid{font-family:var(--font-mono),monospace;font-size:12px;color:var(--on-surface-variant)}.know-meta{display:flex;flex-direction:column;gap:8px;padding:12px 18px;font-size:13px}.know-meta>div{display:flex;gap:14px;align-items:baseline}.know-meta .microlabel{width:90px;flex:none}.know-verify-entry{display:inline-block;margin-right:14px}.know-folder-row td{padding:10px 18px 4px;border-bottom:none}.know-folder{font-family:var(--font-mono),monospace;font-size:11px;color:var(--on-surface-variant);letter-spacing:.04em}.know-indent{padding-left:32px!important}.side-group{border-radius:10px}.side-group+.side-group{margin-top:12px}.side-group.drop-over{outline:1.5px dashed var(--primary);outline-offset:-1.5px;background:color-mix(in srgb,var(--primary) 7%,transparent)}.side-group-head{display:flex;align-items:center;gap:6px;padding:6px 10px 2px}.side-group-count{font-size:10px;color:var(--on-surface-variant)}.side-group-x{padding:0 4px;font:inherit;font-size:11px;color:var(--on-surface-variant);background:transparent;border:none;cursor:pointer;opacity:0}.side-group:hover .side-group-x{opacity:1}.side-group-x:hover{color:var(--on-surface)}.side-group-empty{padding:6px 10px 8px;font-size:11px;color:var(--on-surface-variant)}.side-row.dragging{opacity:.4}.side-group-add{display:block;margin:12px 10px 4px;padding:4px 10px;font:inherit;font-size:11px;color:var(--on-surface-variant);background:transparent;border:1px dashed var(--outline-variant);border-radius:8px;cursor:pointer;text-align:left}.side-group-add:hover{color:var(--primary);border-color:var(--outline)}.side-archived{margin-top:10px;border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);padding-top:4px}.side-archived-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px 2px;font:inherit;background:transparent;border:none;color:var(--on-surface-variant);cursor:pointer;text-align:left}.side-archived-toggle:hover .microlabel{color:var(--on-surface)}.side-archived-toggle .ms{vertical-align:0}.side-row.archived-row{opacity:.55}.side-row.archived-row:hover,.side-row.archived-row.active{opacity:1}.chip.archived-chip{display:inline-flex;align-items:center;gap:4px;color:var(--on-surface-variant);border-style:dashed}.chip.archived-chip .ms{vertical-align:0}.side-group-new{padding:10px 10px 4px}.side-group-new input{width:100%;box-sizing:border-box}.side-group-rename{flex:1;min-width:0;font:inherit;font-size:11px}.team-screen{grid-template-columns:240px minmax(0,1fr)}.team-screen.has-sessions{grid-template-columns:240px 260px minmax(0,1fr)}.team-screen.has-sessions.has-knowledge{grid-template-columns:240px 260px minmax(0,1fr) var(--kside-w, 460px)}.knowledge-side{position:sticky;border-left:1px solid var(--outline-variant);border-right:0}.kside-resizer{position:absolute;left:-3px;top:0;bottom:0;width:7px;cursor:col-resize;z-index:4}.kside-resizer:hover{background:color-mix(in srgb,var(--primary) 25%,transparent)}.kside-headline{display:flex;flex-direction:column;gap:1px;min-width:0}.kside-hint{font-size:10.5px;color:var(--on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kside-bundle{padding:6px 8px 10px}.kside-bundle+.kside-bundle{border-top:1px solid var(--outline-variant)}.kside-bundle-head{display:flex;align-items:center;gap:2px;padding:2px 0}.kside-bundle-toggle{display:flex;align-items:center;gap:7px;flex:1;min-width:0;padding:6px 8px;border-radius:10px;text-align:left}.kside-bundle-toggle:hover{background:color-mix(in srgb,var(--on-surface) 5%,transparent)}.kside-bundle-name{font-size:12px;font-weight:600;color:var(--on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kside-count{flex:none;font-size:10.5px;line-height:17px;color:var(--on-surface-variant);background:var(--surface-container-highest);border-radius:999px;padding:0 7px}.kside-open{flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:50%;color:var(--on-surface-variant);font-size:13px}.kside-open:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent);color:var(--on-surface)}.kside-chev{flex:none;width:15px;line-height:1;color:var(--on-surface-variant);display:inline-block;transition:transform .14s ease}.kside-chev .ms{font-size:15px;vertical-align:0;display:block}.kside-chev.open{transform:rotate(90deg)}.kside-row{display:flex;align-items:center;gap:7px;width:100%;text-align:left;padding:6px 8px 6px 18px;font-size:12px;color:var(--on-surface-variant);border-radius:10px}.kside-row:hover{background:color-mix(in srgb,var(--on-surface) 5%,transparent);color:var(--on-surface)}.kside-concept.open>.kside-row{background:var(--secondary-container);color:var(--on-secondary-container);font-weight:500}.kside-concept.open>.kside-row .kside-chev{color:inherit}.kside-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kside-stale{flex:none;font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--error, #b3261e);border:1px solid currentColor;border-radius:999px;padding:0 6px;cursor:help}.kside-card{margin:4px 0 10px 18px;border-radius:12px;overflow:hidden;background:var(--surface-container-high);border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent)}.kside-card>.viewer-note{padding:12px 14px}.kside-card-bar{display:flex;align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:color-mix(in srgb,var(--surface-container-highest) 65%,transparent)}.kside-type{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);border:1px solid var(--outline-variant);border-radius:999px;padding:1px 7px}.kside-updated{font-size:10.5px;color:var(--on-surface-variant)}.kside-md.md-body{height:auto;overflow:visible;padding:12px 14px 14px;font-size:12px}.concept-md{height:auto;overflow:visible}.kside-actions{display:flex;justify-content:flex-end;gap:8px;margin:2px 0 0}.kside-edit{padding:10px 12px}.kside-edit .concept-edit{width:100%;box-sizing:border-box}.kside-edit .kside-actions{margin-top:8px}.kside-reopen{position:fixed;right:14px;top:60px;z-index:5;font-size:11px;color:var(--on-surface-variant);background:var(--surface-container-high);border:1px solid var(--outline-variant);border-radius:999px;padding:4px 12px}.kside-reopen:hover{color:var(--on-surface);background:var(--surface-container-highest, var(--surface-container-high))}@media(max-width:1099px){.knowledge-side,.kside-reopen{display:none}.team-screen.has-sessions.has-knowledge{grid-template-columns:240px 260px minmax(0,1fr)}}.member-view{display:flex;flex-direction:column;gap:16px}.member-view .detail-head{margin-bottom:0}.m3-list{display:flex;flex-direction:column;padding:4px 0}.m3-row{display:flex;align-items:center;gap:14px;padding:12px 18px;text-align:left;color:inherit}.m3-row+.m3-row,.m3-expand+.m3-row{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}button.m3-toggle{background:none;border:0;width:100%;font:inherit;cursor:pointer}button.m3-toggle:hover{background:color-mix(in srgb,var(--on-surface) 4%,transparent)}.m3-ico{flex:none;width:32px;height:32px;display:grid;place-items:center;font-size:14px;color:var(--on-secondary-container);background:var(--secondary-container);border-radius:50%}.m3-ico .ms{font-size:17px;vertical-align:0}.m3-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.m3-head{font-size:13.5px;font-weight:500;display:flex;align-items:center;gap:8px}.m3-sub{font-size:12px;color:var(--on-surface-variant);line-height:1.5}.m3-sub code{font-size:11px}.m3-sub a{color:inherit}.m3-ellipsis{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.m3-chev{flex:none;color:var(--on-surface-variant);display:inline-flex;transition:transform .14s ease}.m3-chev .ms{vertical-align:0}.m3-chev.open{transform:rotate(180deg)}.m3-expand{padding:2px 18px 16px 64px}.m3-expand pre{margin:0;white-space:pre-wrap;font:12.5px/1.65 var(--font-mono),monospace}.m3-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:3px}.m3-chips .chip{text-decoration:none}.m3-switch{position:relative;flex:none;display:inline-block;width:44px;height:24px;cursor:pointer}.m3-switch input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}.m3-switch-track{position:absolute;inset:0;border-radius:999px;pointer-events:none;background:var(--surface-container-highest);border:2px solid var(--outline-variant);transition:background .14s ease,border-color .14s ease}.m3-switch-track:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--on-surface-variant);transition:transform .14s ease,background .14s ease}.m3-switch input:checked+.m3-switch-track{background:var(--primary);border-color:var(--primary)}.m3-switch input:checked+.m3-switch-track:after{transform:translate(20px);background:var(--on-primary)}a.m3-row{text-decoration:none}a.m3-row:hover{background:color-mix(in srgb,var(--on-surface) 4%,transparent)}a.m3-row:hover .m3-head{color:var(--primary)}.m3-subhead{padding:14px 18px 4px;font-family:var(--font-mono),monospace;font-size:11px;letter-spacing:.05em;color:var(--on-surface-variant)}.m3-row+.m3-subhead{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);margin-top:4px}.know-log{padding:2px 0 10px}.know-log-row{display:flex;gap:10px;padding:4px 18px;align-items:baseline}.know-log-text{font-size:12.5px;color:var(--on-surface-variant);line-height:1.55;min-width:0;overflow-wrap:break-word}.know-log-text a{color:var(--primary)}.chip.log-kind{flex:none}.chip.log-verification{border-color:transparent;background:var(--success-container);color:var(--on-success-container)}.chip.log-creation,.chip.log-initialization{border-color:transparent;background:var(--secondary-container);color:var(--on-secondary-container)}.detail-cols{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:16px;align-items:start}@media(max-width:1020px){.detail-cols{grid-template-columns:1fr}}.detail-rail{display:flex;flex-direction:column;gap:16px;min-width:0}.rail-list{padding:4px 0}.rail-kv{display:flex;flex-direction:column;gap:3px;padding:10px 18px}.rail-kv+.rail-kv{border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.rail-kv .v{font-size:12.5px;color:var(--on-surface);overflow-wrap:break-word;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rail-kv .v.dim{color:var(--on-surface-variant)}.rail-kv a{color:var(--primary)}.concept-edit{display:block;width:100%;border:0;outline:none;resize:vertical;padding:14px 18px;background:var(--surface-container-lowest);color:var(--on-surface);font:12.5px/1.65 var(--font-mono),monospace;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.side-row .row-x{flex:none;align-self:center;opacity:0;border:0;background:transparent;color:var(--on-surface-variant);font-size:11px;line-height:1;padding:4px 6px;border-radius:8px;cursor:pointer;transition:opacity .1s ease,background .1s ease,color .1s ease}.side-row:hover .row-x,.side-row .row-x:focus-visible{opacity:1}.side-row .row-x:hover{background:color-mix(in srgb,var(--error) 18%,transparent);color:var(--error)}.team-wf-list{display:flex;flex-wrap:wrap;gap:8px;padding:12px 18px}.team-wf-list .chip{text-decoration:none}.team-form{display:flex;flex-direction:column;gap:14px;padding:18px;max-width:680px}.team-form-row{display:flex;gap:10px;align-items:flex-end}.team-field{display:flex;flex-direction:column;gap:5px}.team-field,.team-field-label{font-size:11px;font-weight:500;color:var(--on-surface-variant);letter-spacing:.045em;text-transform:capitalize}.team-field input,.team-field select,.team-field textarea{font:13px/1.5 var(--font-mono),monospace;color:var(--on-surface);background:var(--surface-container-high);border:1px solid transparent;border-radius:12px;padding:9px 14px;outline:none;text-transform:none;letter-spacing:normal;transition:border-color .12s ease,background .12s ease}.team-field textarea{resize:vertical;font-family:var(--font-mono),monospace}.team-field input:focus,.team-field select:focus,.team-field textarea:focus{border-color:var(--primary);background:var(--surface-container-highest)}.emoji-pick{display:flex;gap:6px;flex-wrap:wrap}.emoji-pick button{font-size:16px;padding:6px 10px;background:transparent;border:1px solid var(--outline-variant);border-radius:12px;cursor:pointer;transition:background .12s ease,border-color .12s ease}.emoji-pick button:hover{background:color-mix(in srgb,var(--on-surface) 6%,transparent)}.emoji-pick button.active{border-color:transparent;background:var(--secondary-container)}.wf-checks{display:flex;flex-direction:column;gap:7px;padding:4px 0}.wf-checks label{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--on-surface-variant);text-transform:none;letter-spacing:normal;cursor:pointer}.wf-checks input[type=checkbox]{accent-color:var(--primary)}.wf-checks b{font-family:var(--font-mono),monospace;font-size:12px}.wf-checks .opt-hint{color:var(--outline);font-size:11.5px}@media(max-width:900px){.team-screen,.team-screen.has-sessions,.team-screen.has-sessions.has-knowledge{grid-template-columns:1fr}.team-form-row{flex-direction:column;align-items:stretch}}