@sapiom/harness 0.1.5 → 0.1.6
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.
- package/CHANGELOG.md +61 -0
- package/dist/cli/bin.js +24 -7
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/consent.js +1 -1
- package/dist/core/adapters/adapter.d.ts +2 -2
- package/dist/core/api-key-provider.d.ts +79 -0
- package/dist/core/api-key-provider.d.ts.map +1 -0
- package/dist/core/api-key-provider.js +91 -0
- package/dist/core/api-key-provider.js.map +1 -0
- package/dist/core/canvas-run-state.d.ts +9 -5
- package/dist/core/canvas-run-state.d.ts.map +1 -1
- package/dist/core/canvas-run-state.js +42 -13
- package/dist/core/canvas-run-state.js.map +1 -1
- package/dist/core/definition-slug-resolver.d.ts +13 -0
- package/dist/core/definition-slug-resolver.d.ts.map +1 -1
- package/dist/core/definition-slug-resolver.js +29 -0
- package/dist/core/definition-slug-resolver.js.map +1 -1
- package/dist/core/render-local-run.d.ts +82 -0
- package/dist/core/render-local-run.d.ts.map +1 -0
- package/dist/core/render-local-run.js +105 -0
- package/dist/core/render-local-run.js.map +1 -0
- package/dist/core/render-log-slice.d.ts +30 -0
- package/dist/core/render-log-slice.d.ts.map +1 -0
- package/dist/core/render-log-slice.js +49 -0
- package/dist/core/render-log-slice.js.map +1 -0
- package/dist/core/render-run-state.d.ts.map +1 -1
- package/dist/core/render-run-state.js +30 -49
- package/dist/core/render-run-state.js.map +1 -1
- package/dist/core/run-local-bootstrap.d.ts +93 -0
- package/dist/core/run-local-bootstrap.d.ts.map +1 -0
- package/dist/core/run-local-bootstrap.js +155 -0
- package/dist/core/run-local-bootstrap.js.map +1 -0
- package/dist/core/run-state.d.ts +16 -1
- package/dist/core/run-state.d.ts.map +1 -1
- package/dist/core/run-state.js +75 -25
- package/dist/core/run-state.js.map +1 -1
- package/dist/core/stub-feedback.d.ts +52 -0
- package/dist/core/stub-feedback.d.ts.map +1 -0
- package/dist/core/stub-feedback.js +33 -0
- package/dist/core/stub-feedback.js.map +1 -0
- package/dist/server/actions.d.ts +139 -0
- package/dist/server/actions.d.ts.map +1 -0
- package/dist/server/actions.js +430 -0
- package/dist/server/actions.js.map +1 -0
- package/dist/server/auth-routes.d.ts +92 -0
- package/dist/server/auth-routes.d.ts.map +1 -0
- package/dist/server/auth-routes.js +151 -0
- package/dist/server/auth-routes.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +0 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +0 -2
- package/dist/server/rest.js.map +1 -1
- package/dist/server/runs.d.ts +16 -15
- package/dist/server/runs.d.ts.map +1 -1
- package/dist/server/runs.js +15 -80
- package/dist/server/runs.js.map +1 -1
- package/dist/server/static.d.ts +15 -1
- package/dist/server/static.d.ts.map +1 -1
- package/dist/server/static.js +54 -4
- package/dist/server/static.js.map +1 -1
- package/dist/shared/types.d.ts +79 -35
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-DCtyI4VW.css +32 -0
- package/dist/web/assets/index-WSw5RvYR.js +445 -0
- package/dist/web/canvas/sess-boot/index.html +305 -0
- package/dist/web/index.html +4 -9
- package/dist/web/welcome-hero-dark.png +0 -0
- package/dist/web/welcome-hero-light.png +0 -0
- package/package.json +6 -3
- package/dist/core/run-spend.d.ts +0 -55
- package/dist/core/run-spend.d.ts.map +0 -1
- package/dist/core/run-spend.js +0 -109
- package/dist/core/run-spend.js.map +0 -1
- package/dist/core/run-transactions.d.ts +0 -60
- package/dist/core/run-transactions.d.ts.map +0 -1
- package/dist/core/run-transactions.js +0 -129
- package/dist/core/run-transactions.js.map +0 -1
- package/dist/server/skills.d.ts +0 -51
- package/dist/server/skills.d.ts.map +0 -1
- package/dist/server/skills.js +0 -312
- package/dist/server/skills.js.map +0 -1
- package/dist/web/assets/index-DM84J83Y.js +0 -234
- package/dist/web/assets/index-DemtWW4L.css +0 -32
package/dist/server/static.d.ts
CHANGED
|
@@ -2,7 +2,21 @@
|
|
|
2
2
|
* Serves the built Vite SPA from dist/web. Falls back to a placeholder page
|
|
3
3
|
* when the web bundle hasn't been built yet (e.g. `pnpm dev` without a prior
|
|
4
4
|
* `pnpm build:web`), so the server is still useful for API/WS-only testing.
|
|
5
|
+
*
|
|
6
|
+
* Boot-token injection: every HTML response has a `<script>` block baked in
|
|
7
|
+
* before `</head>` that sets `window.__HARNESS__ = { token: ${bootToken} }`.
|
|
8
|
+
* This lets `getBootToken()` (web/src/lib/api.ts) resolve the token without
|
|
9
|
+
* relying on the `?token=` query param — which is lost on navigation/reload
|
|
10
|
+
* and caused every /api POST to 401 after the first page load (SAP-1898).
|
|
11
|
+
*
|
|
12
|
+
* Implementation note: `express.static` serves index.html directly on `/`
|
|
13
|
+
* requests, bypassing any downstream handlers. To guarantee injection we:
|
|
14
|
+
* 1. Use `express.static` with `index: false` so it never auto-serves
|
|
15
|
+
* index.html itself.
|
|
16
|
+
* 2. Add a catch-all `GET *` that serves the pre-injected HTML string for
|
|
17
|
+
* any route that `express.static` didn't match (SPA deep-route fallback
|
|
18
|
+
* AND the root `/`).
|
|
5
19
|
*/
|
|
6
20
|
import { Router } from "express";
|
|
7
|
-
export declare function createStaticRouter(webDir: string): Router;
|
|
21
|
+
export declare function createStaticRouter(webDir: string, bootToken: string): Router;
|
|
8
22
|
//# sourceMappingURL=static.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAgB,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AA2CvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B5E"}
|
package/dist/server/static.js
CHANGED
|
@@ -2,8 +2,22 @@
|
|
|
2
2
|
* Serves the built Vite SPA from dist/web. Falls back to a placeholder page
|
|
3
3
|
* when the web bundle hasn't been built yet (e.g. `pnpm dev` without a prior
|
|
4
4
|
* `pnpm build:web`), so the server is still useful for API/WS-only testing.
|
|
5
|
+
*
|
|
6
|
+
* Boot-token injection: every HTML response has a `<script>` block baked in
|
|
7
|
+
* before `</head>` that sets `window.__HARNESS__ = { token: ${bootToken} }`.
|
|
8
|
+
* This lets `getBootToken()` (web/src/lib/api.ts) resolve the token without
|
|
9
|
+
* relying on the `?token=` query param — which is lost on navigation/reload
|
|
10
|
+
* and caused every /api POST to 401 after the first page load (SAP-1898).
|
|
11
|
+
*
|
|
12
|
+
* Implementation note: `express.static` serves index.html directly on `/`
|
|
13
|
+
* requests, bypassing any downstream handlers. To guarantee injection we:
|
|
14
|
+
* 1. Use `express.static` with `index: false` so it never auto-serves
|
|
15
|
+
* index.html itself.
|
|
16
|
+
* 2. Add a catch-all `GET *` that serves the pre-injected HTML string for
|
|
17
|
+
* any route that `express.static` didn't match (SPA deep-route fallback
|
|
18
|
+
* AND the root `/`).
|
|
5
19
|
*/
|
|
6
|
-
import { existsSync } from "node:fs";
|
|
20
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
7
21
|
import { join } from "node:path";
|
|
8
22
|
import express, { Router } from "express";
|
|
9
23
|
const PLACEHOLDER_HTML = `<!doctype html>
|
|
@@ -17,13 +31,49 @@ const PLACEHOLDER_HTML = `<!doctype html>
|
|
|
17
31
|
</body>
|
|
18
32
|
</html>
|
|
19
33
|
`;
|
|
20
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Builds the inline `<script>` that bakes the boot token into the page before
|
|
36
|
+
* any SPA JS runs. JSON.stringify ensures the token is safely escaped even if
|
|
37
|
+
* it contains characters that could break a bare string interpolation.
|
|
38
|
+
*/
|
|
39
|
+
function buildTokenScript(bootToken) {
|
|
40
|
+
const safeJson = JSON.stringify({ token: bootToken }).replace(/</g, "\\u003c");
|
|
41
|
+
return `<script>window.__HARNESS__ = ${safeJson};</script>`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Injects the boot-token `<script>` block into raw HTML. The block is
|
|
45
|
+
* inserted immediately before `</head>` so it executes before any SPA modules
|
|
46
|
+
* load. Falls back to prepending to `<body>` if `</head>` is absent (shouldn't
|
|
47
|
+
* happen with our Vite output, but keeps the injection unconditional).
|
|
48
|
+
*/
|
|
49
|
+
function injectTokenScript(html, bootToken) {
|
|
50
|
+
const script = buildTokenScript(bootToken);
|
|
51
|
+
if (html.includes("</head>")) {
|
|
52
|
+
return html.replace("</head>", `${script}</head>`);
|
|
53
|
+
}
|
|
54
|
+
// Fallback: inject at the very start of <body> if </head> is missing.
|
|
55
|
+
if (html.includes("<body>")) {
|
|
56
|
+
return html.replace("<body>", `<body>${script}`);
|
|
57
|
+
}
|
|
58
|
+
// Last resort: prepend to the document.
|
|
59
|
+
return script + html;
|
|
60
|
+
}
|
|
61
|
+
export function createStaticRouter(webDir, bootToken) {
|
|
21
62
|
const router = Router();
|
|
22
63
|
const indexPath = join(webDir, "index.html");
|
|
23
64
|
if (existsSync(indexPath)) {
|
|
24
|
-
|
|
65
|
+
// Read index.html once at startup. The file doesn't change at runtime
|
|
66
|
+
// (it's a Vite build output), so a single read is fine and avoids
|
|
67
|
+
// repeated disk I/O for every page navigation request.
|
|
68
|
+
const rawHtml = readFileSync(indexPath, "utf-8");
|
|
69
|
+
const injectedHtml = injectTokenScript(rawHtml, bootToken);
|
|
70
|
+
// Serve hashed assets (JS, CSS, images) via express.static.
|
|
71
|
+
// `index: false` prevents express.static from auto-serving index.html
|
|
72
|
+
// on GET / — we handle that (and all SPA deep routes) in the catch-all
|
|
73
|
+
// below so every HTML response always carries the injected token script.
|
|
74
|
+
router.use(express.static(webDir, { index: false }));
|
|
25
75
|
router.get("*", (_req, res) => {
|
|
26
|
-
res.
|
|
76
|
+
res.status(200).set("Content-Type", "text/html").send(injectedHtml);
|
|
27
77
|
});
|
|
28
78
|
}
|
|
29
79
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,EAAE,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAEvE,MAAM,gBAAgB,GAAG;;;;;;;;;;CAUxB,CAAC;AAEF;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/E,OAAO,gCAAgC,QAAQ,YAAY,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,SAAiB;IACxD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC;IACrD,CAAC;IACD,sEAAsE;IACtE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,wCAAwC;IACxC,OAAO,MAAM,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,SAAiB;IAClE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,sEAAsE;QACtE,kEAAkE;QAClE,uDAAuD;QACvD,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE3D,4DAA4D;QAC5D,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAErD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;YAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;YAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -337,38 +337,38 @@ export type BusMessage = {
|
|
|
337
337
|
type: "session.activity";
|
|
338
338
|
harnessSessionId: string;
|
|
339
339
|
at: string;
|
|
340
|
-
};
|
|
341
|
-
/** Per-step cost summary from the spend endpoint. */
|
|
342
|
-
export interface RunStepSpend {
|
|
343
|
-
name: string;
|
|
344
|
-
totalUsd: string;
|
|
345
|
-
entryCount: number;
|
|
346
|
-
}
|
|
347
|
-
/** Full spend summary for one execution, keyed by executionId. */
|
|
348
|
-
export interface RunSpend {
|
|
349
|
-
executionId: string;
|
|
350
|
-
totalUsd: string;
|
|
351
|
-
settleState: string;
|
|
352
|
-
byStep: RunStepSpend[];
|
|
353
340
|
}
|
|
354
341
|
/**
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
* neither the browser nor this file ever carries the upstream provider/model
|
|
360
|
-
* name. Token counts are intentionally absent — the platform does not record
|
|
361
|
-
* per-call tokens for gateway LLM calls (see SAP ticket for the backend work).
|
|
342
|
+
* Auth state changed — fired after a successful sign-in (`POST
|
|
343
|
+
* /api/auth/start`) or sign-out (`POST /api/auth/disconnect`). The SPA
|
|
344
|
+
* should refetch `/api/auth/status` (or `/api/state`) on receipt to update
|
|
345
|
+
* its auth UI without a full page reload.
|
|
362
346
|
*/
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
347
|
+
| {
|
|
348
|
+
type: "auth.changed";
|
|
349
|
+
authenticated: boolean;
|
|
350
|
+
organizationName: string | null;
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* One capability call a step made during the run. Capability-scoped and
|
|
354
|
+
* provider-agnostic: `capability` is a dotted capability id (e.g.
|
|
355
|
+
* `web.search`, `models.coding.run`) — never a provider or model name.
|
|
356
|
+
* `stubUsed` records whether this call was served by a supplied stub instead
|
|
357
|
+
* of a real capability call, which is the single most load-bearing fact when
|
|
358
|
+
* explaining a local (offline) run. Optional fields are ABSENT (not null)
|
|
359
|
+
* when the source does not carry the value — honest absence.
|
|
360
|
+
*/
|
|
361
|
+
export interface StepCall {
|
|
362
|
+
/** Dotted capability id (provider-agnostic — never a provider/model name). */
|
|
367
363
|
capability: string;
|
|
368
|
-
/**
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
|
|
364
|
+
/** True when a supplied stub served this call rather than the real capability. */
|
|
365
|
+
stubUsed?: boolean;
|
|
366
|
+
/** The arguments the call was made with, when the source carries them. Any
|
|
367
|
+
* JSON shape; ABSENT (not null) otherwise. */
|
|
368
|
+
args?: unknown;
|
|
369
|
+
/** The value the call returned — the served stub value for a local run, or
|
|
370
|
+
* the capability result for a prod run. ABSENT when the source has no result. */
|
|
371
|
+
result?: unknown;
|
|
372
372
|
}
|
|
373
373
|
/**
|
|
374
374
|
* A step's render status, folded from the raw projection step status into the
|
|
@@ -378,17 +378,15 @@ export interface RunCall {
|
|
|
378
378
|
*/
|
|
379
379
|
export type StepStatus = "pending" | "running" | "passed" | "failed";
|
|
380
380
|
/** One step as the canvas renders it — status plus the deterministically
|
|
381
|
-
* derived
|
|
381
|
+
* derived latency/error/log slice. Optional fields are ABSENT (not
|
|
382
382
|
* `undefined`/`0`) when the decoded projection carries no value — honest
|
|
383
|
-
* absence,
|
|
383
|
+
* absence. The inspector surfaces logs, latency, and pass/fail only. */
|
|
384
384
|
export interface StepView {
|
|
385
385
|
/** Stable id for keyed rendering — the OTel span id, else a step-order key. */
|
|
386
386
|
id: string;
|
|
387
387
|
/** Human step label (the projection's stepName). */
|
|
388
388
|
name: string;
|
|
389
389
|
status: StepStatus;
|
|
390
|
-
/** Captured USD for this step; absent when the read carries no cost. */
|
|
391
|
-
costUsd?: number;
|
|
392
390
|
/** finishedAt − startedAt in ms; absent while running or on bad timestamps. */
|
|
393
391
|
latencyMs?: number;
|
|
394
392
|
/** Terminal error message; present only for a failed step that recorded one. */
|
|
@@ -396,13 +394,59 @@ export interface StepView {
|
|
|
396
394
|
/** Tail-preserving, character-capped executor log text — the debug-macro
|
|
397
395
|
* context source (trimmed further before injection). Absent when no logs. */
|
|
398
396
|
logSlice?: string;
|
|
397
|
+
/** The resolved input the step actually ran on, when the source carries it
|
|
398
|
+
* (populated by local stub runs today; a production run projection may
|
|
399
|
+
* expose it in future). Any JSON shape. ABSENT — never `null`/`{}` — when
|
|
400
|
+
* the source has no per-step input, so the inspector shows nothing rather
|
|
401
|
+
* than fabricating a payload. */
|
|
402
|
+
input?: unknown;
|
|
403
|
+
/** The value the step produced, on the same honest-absence terms as
|
|
404
|
+
* {@link StepView.input}: present only when the source captured a real
|
|
405
|
+
* output, absent otherwise (a still-running or output-less step shows no
|
|
406
|
+
* Output block). Any JSON shape. */
|
|
407
|
+
output?: unknown;
|
|
408
|
+
/** The capability calls this step made during the run, in call order. Each
|
|
409
|
+
* entry is capability-scoped and provider-agnostic. Absent (never `[]`)
|
|
410
|
+
* when the source records no call information for this step — honest
|
|
411
|
+
* absence, mirroring `input`/`output`. A local run populates this from
|
|
412
|
+
* the stub client's per-call sink; a prod run leaves it absent when the
|
|
413
|
+
* step projection does not carry dotted-capability call records. */
|
|
414
|
+
calls?: StepCall[];
|
|
415
|
+
}
|
|
416
|
+
/** A supplied stub key that no capability call ever matched in its step — almost
|
|
417
|
+
* always a typo or the wrong path form. Surfaced read-only in the inspector so a
|
|
418
|
+
* no-op mock (a stub that silently served nothing) is visible instead of a
|
|
419
|
+
* mystery. Mirrors agent-core's `UnusedStub` (consumed as-is). */
|
|
420
|
+
export interface UnusedStubView {
|
|
421
|
+
step: string;
|
|
422
|
+
key: string;
|
|
399
423
|
}
|
|
400
424
|
/** A whole run as the canvas renders it. `status` is the run lifecycle folded
|
|
401
|
-
* to the four states the UI distinguishes; `steps` is order-preserving.
|
|
425
|
+
* to the four states the UI distinguishes; `steps` is order-preserving.
|
|
426
|
+
*
|
|
427
|
+
* Stub fields are RUN-LEVEL and honest-absence: they are set only by
|
|
428
|
+
* {@link renderLocalRun} for an offline stub run (prod runs from renderRunState
|
|
429
|
+
* never carry them), and only when they carry real signal. A local run is
|
|
430
|
+
* stub-served by construction — every `ctx.sapiom.*` call resolves from a stub —
|
|
431
|
+
* so `stubbed` is the honest per-run truth the inspector marks each executed
|
|
432
|
+
* step with (agent-core records no per-CALL stub attribution, so the chip lives
|
|
433
|
+
* at the granularity the trace actually supports). `unusedStubs`/`stubWarnings`
|
|
434
|
+
* come from the run's terminal NDJSON summary and are ABSENT (not `[]`) when
|
|
435
|
+
* empty, so the read-only notice renders nothing when there is nothing wrong. */
|
|
402
436
|
export interface RunView {
|
|
403
437
|
executionId: string;
|
|
404
438
|
status: "running" | "completed" | "failed" | "cancelled";
|
|
405
439
|
steps: StepView[];
|
|
440
|
+
/** True when this run was served entirely by stub capabilities (an offline
|
|
441
|
+
* local run). Absent for real (prod / local-backend) runs. Drives the
|
|
442
|
+
* per-step "stubbed" chip. */
|
|
443
|
+
stubbed?: boolean;
|
|
444
|
+
/** Supplied stub keys that matched no capability call this run (likely a typo
|
|
445
|
+
* / wrong path). Absent when none — never an empty array. */
|
|
446
|
+
unusedStubs?: UnusedStubView[];
|
|
447
|
+
/** Human-readable warnings about stub values that matched a key but had the
|
|
448
|
+
* wrong shape (the silent-wrong-data trap). Absent when none. */
|
|
449
|
+
stubWarnings?: string[];
|
|
406
450
|
}
|
|
407
451
|
/** One entry in the adapter registry, as the SPA sees it (GET /api/harnesses). */
|
|
408
452
|
export interface HarnessEntry {
|
|
@@ -429,7 +473,7 @@ export interface HarnessEntry {
|
|
|
429
473
|
* See the collector README section in packages/harness/src/core/collector/
|
|
430
474
|
* for the full surface-"ui" contract.
|
|
431
475
|
*/
|
|
432
|
-
export type UiEventName = "prompt.submitted" | "session.switched" | "macro.invoked" | "visualize.triggered" | "consent.changed" | "session.created" | "
|
|
476
|
+
export type UiEventName = "prompt.submitted" | "session.switched" | "macro.invoked" | "visualize.triggered" | "consent.changed" | "session.created" | "mcp.install";
|
|
433
477
|
export interface UiTrackRequest {
|
|
434
478
|
/** Dot-canonical event name — one of the UiEventName literals. */
|
|
435
479
|
event: UiEventName;
|
|
@@ -442,7 +486,7 @@ export interface UiTrackRequest {
|
|
|
442
486
|
harnessSessionId?: string;
|
|
443
487
|
}
|
|
444
488
|
export declare const ANALYTICS_SCHEMA_VERSION = 1;
|
|
445
|
-
export type AnalyticsEventType = "session.start" | "prompt.submitted" | "tool.call" | "turn.completed" | "session.end" | "session.switched" | "macro.invoked" | "visualize.triggered" | "consent.changed" | "session.created" | "
|
|
489
|
+
export type AnalyticsEventType = "session.start" | "prompt.submitted" | "tool.call" | "turn.completed" | "session.end" | "session.switched" | "macro.invoked" | "visualize.triggered" | "consent.changed" | "session.created" | "mcp.install";
|
|
446
490
|
/**
|
|
447
491
|
* The normalized event — the shape that (with opt-in) is batched to the
|
|
448
492
|
* remote collector and always appended to events.ndjson locally.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gEAAgE;IAChE,SAAS,EAAE,GAAG,YAAY,aAAa;IACvC,mDAAmD;IACnD,QAAQ,EAAE,GAAG,YAAY,gBAAgB;IACzC,kDAAkD;IAClD,SAAS,EAAE,GAAG,YAAY,iBAAiB;IAC3C,0EAA0E;IAC1E,MAAM,EAAE,GAAG,YAAY,gBAAgB;IACvC,sDAAsD;IACtD,QAAQ,EAAE,GAAG,YAAY,gBAAgB;IACzC,6EAA6E;IAC7E,SAAS,EAAE,GAAG,YAAY,YAAY;IACtC;;4EAEwE;IACxE,aAAa,EAAE,GAAG,YAAY,iBAAiB;CACvC,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,UAAU,aAAa,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,UAAU,UAAU,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,UAAU,QAAQ,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;CACJ,CAAC;AAIX,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/F;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,SAAS,EAAE,2BAA2B;IACtC,WAAW,EAAE,6BAA6B;IAC1C,SAAS,EAAE,2BAA2B;IACtC,YAAY,EAAE,sBAAsB;CAC5B,CAAC;AAEX,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAa,EAAE,OAAO,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gEAAgE;IAChE,SAAS,EAAE,GAAG,YAAY,aAAa;IACvC,mDAAmD;IACnD,QAAQ,EAAE,GAAG,YAAY,gBAAgB;IACzC,kDAAkD;IAClD,SAAS,EAAE,GAAG,YAAY,iBAAiB;IAC3C,0EAA0E;IAC1E,MAAM,EAAE,GAAG,YAAY,gBAAgB;IACvC,sDAAsD;IACtD,QAAQ,EAAE,GAAG,YAAY,gBAAgB;IACzC,6EAA6E;IAC7E,SAAS,EAAE,GAAG,YAAY,YAAY;IACtC;;4EAEwE;IACxE,aAAa,EAAE,GAAG,YAAY,iBAAiB;CACvC,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,UAAU,aAAa,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,UAAU,UAAU,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,UAAU,QAAQ,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;CACJ,CAAC;AAIX,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/F;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,SAAS,EAAE,2BAA2B;IACtC,WAAW,EAAE,6BAA6B;IAC1C,SAAS,EAAE,2BAA2B;IACtC,YAAY,EAAE,sBAAsB;CAC5B,CAAC;AAEX,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAa,EAAE,OAAO,CAAU,CAAC;AAmbzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
+
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
+
* https://github.com/chjj/term.js
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* Originally forked from (with the author's permission):
|
|
26
|
+
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
+
* http://bellard.org/jslinux/
|
|
28
|
+
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
+
* The original design remains. The terminal itself
|
|
30
|
+
* has been extended to include xterm CSI codes, among
|
|
31
|
+
* other features.
|
|
32
|
+
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}:root,[data-theme=dark]{color-scheme:dark;--bg: #0c0c0e;--list: #0e0e11;--s1: #131316;--s2: #1a1a1e;--s3: #232327;--line: rgba(255, 255, 255, .08);--line-2: rgba(255, 255, 255, .14);--hl: rgba(255, 255, 255, .05);--hl-2: rgba(255, 255, 255, .1);--ink: #f3f3f5;--ink-muted: #a6a6ae;--ink-faint: #83838d;--btn: #f3f3f5;--btn-ink: #0c0c0e;--red: #e05a57;--red-text: #efa6a3;--amber: #d99a34;--amber-text: #e8c58a;--green: #3bb56f;--green-text: #8fdcac;--slate: #8a8a94;--shadow: 0 24px 64px -20px rgba(0, 0, 0, .6);--scrim-bg: rgba(4, 4, 6, .55)}[data-theme=light]{color-scheme:light;--bg: #fbfbfc;--list: #f3f3f5;--s1: #ffffff;--s2: #f2f2f4;--s3: #eaeaee;--line: rgba(18, 18, 22, .08);--line-2: rgba(18, 18, 22, .15);--hl: rgba(18, 18, 22, .04);--hl-2: rgba(18, 18, 22, .075);--ink: #16161a;--ink-muted: #55555f;--ink-faint: #6b6b75;--btn: #16161a;--btn-ink: #ffffff;--red: #cf3d39;--red-text: #ab2925;--amber: #b57a12;--amber-text: #855700;--green: #219d57;--green-text: #0f7740;--slate: #77777f;--shadow: 0 24px 64px -28px rgba(20, 20, 28, .28);--scrim-bg: rgba(24, 24, 30, .32)}:root,[data-theme=dark],[data-theme=light]{--background: var(--bg);--foreground: var(--ink);--card: var(--s1);--card-foreground: var(--ink);--popover: var(--s1);--popover-foreground: var(--ink);--muted: var(--s2);--muted-foreground: var(--ink-muted);--border-soft: var(--line);--border-strong: var(--line-2);--border: var(--border-soft);--input: var(--border-soft);--ring: var(--ink-muted);--primary: var(--btn);--primary-foreground: var(--btn-ink);--secondary: var(--s2);--secondary-foreground: var(--ink);--accent: var(--hl-2);--accent-foreground: var(--ink);--destructive: var(--red);--destructive-foreground: var(--btn-ink)}:root{--font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--type-title: 1.5rem;--type-h2: 1rem;--type-metric: 1.5rem;--type-body: 14px;--type-ui: 13px;--type-label: 12px;--type-meta: 11px;--type-micro: 10px;--sp1: 4px;--sp2: 8px;--sp3: 12px;--sp4: 16px;--sp5: 24px;--sp6: 32px;--sp7: 48px;--sp8: 64px;--r-sm: 6px;--r: 10px;--r-lg: 14px;--r-xl: 16px;--radius: var(--r);--header-h: 56px;--pane-header-h: var(--header-h);--control-h: 40px;--control-h-sm: 36px;--control-h-xs: 32px;--row-h: 56px;--row-h-sm: 48px;--row-h-xs: 40px;--icon: 40px;--icon-sm: 32px;--icon-lg: 44px;--card-pad: clamp(20px, 2vw, 28px);--assistant-measure: 52rem;--assistant-measure-ide: 40.625rem;--assistant-textarea-min: 64px;--command-input-h: var(--row-h);--command-row-h: var(--row-h-sm);--overlay-radius: calc(var(--r-xl) + 12px);--ui-line: var(--border-soft);--ui-line-strong: var(--border-strong);--active-shade: color-mix(in srgb, var(--ink) 8%, transparent);--nested-shade: color-mix(in srgb, var(--ink) 11%, transparent);--surface-base: var(--bg);--surface-raised: var(--s1);--surface-inset: var(--s2);--surface-hover: var(--hl);--surface-selected: var(--active-shade);--flow-grid-dot: color-mix(in srgb, var(--ink) 22%, transparent);--table-indent: calc(var(--sp5) + 32px);--shadow-soft: 0 12px 32px -18px color-mix(in srgb, var(--ink) 28%, transparent);--ease: cubic-bezier(.16, 1, .3, 1);--fast: .13s;--base: .22s;--slow: .34s;--rail: 264px;--panel: 400px;--detail: min(520px, 40vw);--drawer: min(580px, 94vw)}:root,[data-theme=dark]{--brand: #6b7a90;--brand-hover: #869ab2;--brand-ink: #0c0f14;--brand-wash: color-mix(in srgb, var(--brand) 14%, transparent);--brand-line: color-mix(in srgb, var(--brand) 38%, transparent);--focus-ring: color-mix(in srgb, var(--brand) 54%, transparent);--focus: var(--focus-ring);--violet: #9b8fc4}[data-theme=light]{--brand: #566175;--brand-hover: #454e5f;--brand-ink: #ffffff;--brand-wash: color-mix(in srgb, var(--brand) 12%, transparent);--brand-line: color-mix(in srgb, var(--brand) 30%, transparent);--focus-ring: color-mix(in srgb, var(--brand) 38%, transparent);--focus: var(--focus-ring);--violet: #7a6ea6}:root{--radius: .5rem;--radius-sm: .5rem;--radius-md: .5rem;--radius-lg: .5rem;--radius-xl: .5rem;--radius-full: 9999px;--pane-pad-x: var(--sp4);--font-sans: var(--font);--font-mono: var(--mono);--type-micro: 11px;--type-ui: 14px;--type-label: 13px;--type-meta: 12px;--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--shadow-md: var(--shadow-soft);--shadow-lg: var(--shadow);--transition-fast: var(--fast) var(--ease);--chip-h: 28px}.status-tag{display:inline-flex;align-items:center;gap:var(--sp1);padding:0;border:0;background:none;color:var(--text-dim);font-size:var(--type-meta);font-weight:510;white-space:nowrap}.status-tag svg{flex:0 0 auto}.status-tag-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;background:currentColor;opacity:.75}.status-tag-action{min-height:var(--chip-h);padding:0 var(--sp2);border-radius:var(--radius-sm);cursor:pointer;text-decoration:none;text-underline-offset:3px;transition:color var(--transition-fast)}.status-tag-action:hover{text-decoration:underline}.status-tag-action:active{color:var(--text)}.status-tag-action:focus-visible{outline:2px solid var(--focus);outline-offset:1px}@media(prefers-reduced-motion:reduce){.status-tag-action{transition:none}}:root,[data-theme=dark],[data-theme=light]{--bg-0: var(--bg);--bg-1: var(--s1);--bg-2: var(--s2);--bg-3: var(--s3);--bg-hover: var(--hl-2);--border: var(--line);--border-strong: var(--line-2);--text: var(--ink);--text-dim: var(--ink-muted);--text-faint: var(--ink-faint);--accent: var(--brand);--accent-hover: var(--brand-hover);--accent-dim: var(--brand-wash);--accent-border: var(--brand-line);--accent-foreground: var(--brand-ink);--toggle-knob-off: var(--s1);--toggle-knob-on: var(--brand-ink);--bg-warning: color-mix(in srgb, var(--amber) 12%, var(--bg));--border-warning: color-mix(in srgb, var(--amber) 38%, transparent);--text-warning: var(--amber-text)}:root,[data-theme=dark]{--brand: #6be195;--brand-hover: #8ceab0;--brand-ink: #062b16}[data-theme=light]{--brand: #167e3a;--brand-hover: #116930;--brand-ink: #ffffff}@keyframes pop-in{0%{opacity:.4;transform:scale(.96)}to{opacity:1;transform:scale(1)}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;overflow:hidden}body{background:var(--bg-0);color:var(--text);font:var(--type-ui)/1.45 var(--font-sans);-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}input{font:inherit;color:inherit}.app-status{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-dim)}.app-status-error{color:var(--red)}.connectivity-screen{padding:var(--sp6)}.connectivity-screen-inner{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--sp3);max-width:34rem}.connectivity-screen-icon{display:inline-flex;color:var(--text-dim)}.connectivity-screen[data-status=auth] .connectivity-screen-icon{color:var(--accent)}.connectivity-screen[data-status=error] .connectivity-screen-icon{color:var(--red)}.connectivity-screen-title{color:var(--text);font-size:var(--type-h2);font-weight:560}.connectivity-screen-body{color:var(--text-dim);font-size:var(--type-ui);line-height:1.55}.connectivity-screen-detail{color:var(--text-faint);font-size:var(--type-meta);font-family:var(--mono, monospace);word-break:break-word}.connectivity-screen-retry{margin-top:var(--sp2)}.connectivity-banner{display:flex;align-items:center;gap:var(--sp2);padding:var(--sp2) var(--sp4);background:var(--bg-1);border-bottom:1px solid var(--line);font-size:var(--type-label);color:var(--text-dim)}.connectivity-banner-icon{display:inline-flex;flex:0 0 auto;color:var(--text-dim)}.connectivity-banner-text{flex:1;min-width:0;line-height:1.5}.connectivity-banner-dismiss{flex-shrink:0;background:none;border:none;color:var(--text-faint);font-size:var(--type-h2);line-height:1;cursor:pointer;padding:0 2px;transition:color var(--transition-fast)}.connectivity-banner-dismiss:hover{color:var(--text)}.connectivity-banner-dismiss:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.app-shell{position:relative;display:flex;height:100vh;overflow-x:auto}.workspace-main{flex:1;min-width:40rem;display:flex;flex-direction:column}.brand-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:var(--pane-header-h);padding:0 var(--pane-pad-x);background:var(--surface-raised);border-bottom:1px solid var(--ui-line)}.brand-lockup{display:flex;align-items:center;gap:8px}.brand-header-tools{display:flex;align-items:center;gap:var(--sp1)}.brand-mark{width:18px;height:18px}.brand-name{font-size:var(--type-ui);font-weight:600;color:var(--text);letter-spacing:-.01em}.brand-divider{width:1px;height:14px;background:var(--border-strong)}.brand-product{font-size:var(--type-ui);font-weight:500;color:var(--text-dim)}.rail-search{flex:0 0 auto;display:flex;align-items:center;gap:var(--sp2);height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--ui-line)}.rail-search .palette-trigger{flex:1;min-width:0;width:auto}.palette-trigger{display:grid;grid-template-columns:1rem minmax(0,1fr) auto;align-items:center;gap:var(--sp2);width:100%;height:var(--control-h-xs);padding:0 var(--sp2) 0 var(--sp3);background:var(--surface-inset);border:1px solid var(--ui-line);border-radius:var(--radius);color:var(--text-dim);font-size:var(--type-label);text-align:left;transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.palette-trigger:hover{border-color:var(--ui-line-strong);color:var(--text)}.palette-trigger:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.palette-trigger-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.palette-trigger-hint{color:var(--text-faint);font-family:var(--font-mono);font-size:var(--type-micro);padding:1px 5px;border:1px solid var(--ui-line);border-radius:var(--radius);background:var(--bg-0)}.theme-toggle{width:var(--control-h-xs);height:var(--control-h-xs);display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-dim);transition:background-color var(--transition-fast),color var(--transition-fast)}.theme-toggle:hover{background:var(--surface-hover);color:var(--text)}.theme-toggle:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.brand-identity{display:flex;align-items:center;gap:6px;font-size:var(--type-label);color:var(--text-dim)}.identity-dot{width:6px;height:6px;border-radius:50%;background:var(--text-faint)}.identity-dot[data-authenticated=true]{background:var(--green)}.telemetry-notice{display:flex;align-items:flex-start;gap:10px;padding:8px 14px;background:var(--accent-dim);border-bottom:1px solid var(--accent-border);font-size:var(--type-label);color:var(--text-dim)}.telemetry-notice-body{flex:1;min-width:0}.telemetry-notice-text{margin:0;line-height:1.5}.telemetry-notice-settings-link{background:none;border:none;padding:0;color:var(--accent);font-size:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.telemetry-notice-settings-link:hover{color:var(--accent-hover)}.telemetry-notice-dismiss{flex-shrink:0;background:none;border:none;color:var(--text-faint);font-size:var(--type-h2);line-height:1;cursor:pointer;padding:0 2px;transition:color var(--transition-fast)}.telemetry-notice-dismiss:hover{color:var(--text)}.telemetry-notice-dismiss:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.app{position:relative;display:grid;grid-template-columns:minmax(20rem,1fr) minmax(20rem,1fr);flex:1;min-height:0;overflow-x:auto;overflow-y:hidden}.pane-resize-handle{position:absolute;top:0;bottom:0;width:7px;cursor:col-resize;z-index:20;touch-action:none}.pane-resize-handle:hover,.pane-resize-handle:active{background:var(--accent-dim)}.pane-resize-handle-rail{transform:translate(-50%)}.pane-resize-handle-canvas{transform:translate(50%)}.center-pane{display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--border)}.rail{display:flex;flex-direction:column;background:var(--bg-1);min-width:0;min-height:0}.rail-workflows{flex:0 1 auto;height:100%;padding:0}.rail-header{position:relative;flex:0 0 auto;display:flex;align-items:center;gap:var(--sp2);height:var(--pane-header-h);padding:0 var(--sp2) 0 var(--pane-pad-x);font-size:var(--type-label);font-weight:510;color:var(--text-faint)}.rail-header-actions{margin-left:auto;display:flex;align-items:center;gap:2px}.rail-header-btn{position:relative}.rail-header-btn:hover{border-color:var(--ui-line-strong);background:var(--surface-hover)}.session-dropdown-new{color:var(--text-dim)}.session-dropdown-new:hover{color:var(--text)}.rail-tree{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.connect-card{background:var(--surface-inset);border:1px solid var(--ui-line-strong);border-radius:var(--radius);box-shadow:var(--shadow-md);overflow:hidden;z-index:30;animation:pop-in var(--transition-fast) ease-out}.connect-card-header{display:flex;align-items:center;gap:var(--sp2);height:var(--pane-header-h);padding:0 var(--sp2) 0 var(--sp3);border-bottom:1px solid var(--ui-line);font-size:var(--type-label);font-weight:510;color:var(--text-faint)}.connect-card-close{margin-left:auto}.connect-card-body{display:flex;flex-direction:column;gap:var(--sp2);padding:var(--sp3)}.history-card{width:min(320px,calc(100vw - var(--sp4)))}.history-card .connect-card-body{gap:var(--tree-row-gap);padding:6px;max-height:min(360px,60vh);overflow-y:auto}.rail-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--tree-row-gap);padding:var(--sp3) var(--sp2)}.rail-footer{flex:0 0 auto;border-top:1px solid var(--ui-line)}.rail-footer-row{display:flex;align-items:center;height:var(--pane-header-h);padding:0 var(--pane-pad-x)}.rail-footer-row+.rail-footer-row{border-top:1px solid var(--ui-line)}.rail-profile-wrap{position:relative}.rail-profile{display:flex;align-items:center;gap:var(--sp2);flex:1;min-width:0;height:100%;padding:0;border:0;background:transparent;color:var(--text-dim);text-align:left}.rail-profile:hover{color:var(--text)}.rail-profile:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.rail-profile-avatar{display:grid;place-items:center;flex:0 0 auto;width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius);background:var(--surface-inset);border:1px solid var(--ui-line);color:var(--text);font-size:var(--type-ui);font-weight:590}.rail-profile-copy{display:grid;min-width:0;flex:1;gap:1px}.rail-profile-name{color:var(--text);font-size:var(--type-label);font-weight:510;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rail-profile-meta{color:var(--text-faint);font-size:var(--type-meta);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-detail-menu,.canvas-run-menu,.composer-library,.profile-menu,.session-menu,.settings-popover{display:flex;flex-direction:column;gap:var(--tree-row-gap);padding:6px;background:var(--bg-2);border:1px solid var(--border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:30;animation:pop-in var(--transition-fast) ease-out}@media(prefers-reduced-motion:reduce){.canvas-detail-menu,.canvas-run-menu,.composer-library,.connect-card,.profile-menu,.session-menu,.settings-popover{animation:none}}.profile-menu-item{display:flex;align-items:center;gap:var(--sp2);width:100%;height:var(--tree-row-h);padding:0 var(--sp2);border:0;background:transparent;border-radius:var(--radius);color:var(--text-dim);font-size:var(--type-label);text-align:left;transition:background-color var(--fast) var(--ease),color var(--fast) var(--ease)}.profile-menu-item:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.profile-menu-item:active:not(:disabled){background:var(--active-shade)}.profile-menu-item:disabled{opacity:.42;cursor:default}.profile-menu-item:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.profile-menu-item.is-selected{background:var(--active-shade);color:var(--text)}.provider-item-check{display:flex;align-items:center;justify-content:center;width:13px;flex:0 0 auto;color:var(--brand)}.provider-item.is-unavailable{opacity:.42;cursor:default}.provider-item.is-unavailable:hover,.provider-item.is-unavailable:active{background:transparent;color:var(--text-dim)}@media(prefers-reduced-motion:reduce){.profile-menu-item{transition:none}}.session-steps{display:flex;align-items:center;gap:var(--sp2);flex:0 0 auto;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--border);background:var(--surface-raised);overflow-x:auto;scrollbar-width:none;container-type:inline-size}.session-lifecycle-label,.session-preview-label{display:contents}@container (max-width: 427px){.session-step:not(.session-action-primary) .session-step-label{display:none}}@container (max-width: 347px){.session-lifecycle-label,.session-preview-label{display:none}}.session-lifecycle-chip{flex:0 0 auto}.session-lifecycle-chip[data-deployed=true]{color:var(--brand)}.session-lifecycle-chip[data-deploy-error]{color:var(--text-warning)}.session-actions{display:flex;align-items:center;gap:var(--sp1);margin-left:auto}.session-step{display:inline-flex;align-items:center;gap:var(--sp2);flex:0 0 auto;height:var(--control-h-xs);padding:0 var(--sp2);border:0;background:transparent;border-radius:var(--radius);color:var(--text-dim);font-size:var(--type-label);font-weight:510;transition:background-color var(--transition-fast),color var(--transition-fast)}.session-step:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.session-step:disabled{color:var(--text-faint);opacity:.6}.session-step:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.session-action-primary{color:var(--brand);background:var(--accent-dim);box-shadow:inset 0 0 0 1px var(--accent-border)}.session-action-primary:hover:not(:disabled){color:var(--brand);background:var(--accent-dim)}.session-step[data-pending]{outline:1px dashed var(--accent-border);outline-offset:1px;animation:session-step-pending 1.6s ease-in-out infinite}@keyframes session-step-pending{0%,to{outline-color:var(--accent-border)}50%{outline-color:var(--accent)}}@media(prefers-reduced-motion:reduce){.session-step[data-pending]{animation:none}}.session-step svg{flex:0 0 auto}.app-tooltip{position:fixed;top:0;left:0;z-index:200;max-width:260px;width:max-content;padding:5px 9px;background:var(--bg-3);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow-md);color:var(--text);font-size:var(--type-meta);line-height:1.45;white-space:normal;overflow-wrap:anywhere;pointer-events:none;opacity:0;transition:opacity var(--fast) var(--ease)}.app-tooltip[data-show=true]{opacity:1}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp1);padding:var(--sp5) var(--sp4);text-align:center}.empty-state-icon{display:grid;place-items:center;width:var(--control-h);height:var(--control-h);margin-bottom:var(--sp1);border-radius:var(--radius);border:1px dashed var(--ui-line-strong);color:var(--text-faint)}.empty-state-title{color:var(--text);font-family:var(--font-sans);font-size:var(--type-ui);font-weight:560}.empty-state-body{max-width:34ch;color:var(--text-faint);font-family:var(--font-sans);font-size:var(--type-label);line-height:1.6}.empty-state-eyebrow{color:var(--text-faint);font-family:var(--font-mono);font-size:var(--type-meta)}.empty-state-cta{display:flex;justify-content:center;margin-top:var(--sp2)}.session-step:disabled{cursor:default}.rail-empty{color:var(--text-faint);padding:6px;font-size:var(--type-label)}:root{--tree-row-h: 30px;--tree-row-gap: 3px;--tree-pad-x: 6px;--tree-indent: calc(var(--tree-pad-x) + 13px + 6px)}.workspace-group{display:flex;flex-direction:column;gap:var(--tree-row-gap);margin-bottom:var(--sp3)}.workspace-group:last-child{margin-bottom:0}.workspace-row{position:relative;display:flex;align-items:center;height:var(--tree-row-h);border-radius:var(--radius)}.workspace-row:hover{background:var(--bg-hover)}.workspace-row-main{flex:1;min-width:0;display:flex;align-items:center;gap:6px;height:100%;padding:0 var(--tree-pad-x);border:none;background:transparent;border-radius:var(--radius);font-size:var(--type-label);font-weight:560;color:var(--text-dim);text-align:left}.workspace-row-main:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.workspace-row-static{cursor:default}.workspace-row.is-selected,.workspace-row.is-selected:hover{background:var(--active-shade)}.workspace-row.is-selected .workspace-row-main{color:var(--text)}.workspace-row-trail{margin-right:var(--tree-pad-x)}.workspace-row.is-collapsed .workspace-row-action[aria-expanded]{opacity:1}.workspace-caret{display:flex;align-items:center;flex:0 0 auto;color:var(--text-faint);opacity:0;transition:opacity var(--transition-fast),transform var(--transition-fast)}.workspace-caret.is-open{transform:rotate(180deg)}.workspace-row:hover .workspace-caret,.workspace-row.is-collapsed .workspace-caret{opacity:1}.disclosure-caret{display:flex;align-items:center;transition:transform var(--transition-fast)}.disclosure-caret.is-open{transform:rotate(180deg)}@media(prefers-reduced-motion:reduce){.workspace-caret,.disclosure-caret,.canvas-step-caret{transition:none}}.workspace-row-action{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;border:none;background:transparent;border-radius:var(--radius);color:var(--text-faint);opacity:0;transition:opacity var(--transition-fast),background-color var(--transition-fast)}.workspace-row-action:last-child{margin-right:3px}.workspace-row:hover .workspace-row-action,.workspace-row-action:focus-visible{opacity:1}.workspace-row-action:hover{background:var(--surface-hover);color:var(--text)}.workspace-row-action:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.workspace-group-empty{height:var(--tree-row-h);display:flex;align-items:center;padding:0 var(--tree-pad-x) 0 var(--tree-indent);color:var(--text-faint);font-size:var(--type-meta)}.workspace-group{position:relative}.workspace-group:has(>.tree-row,>.workflow-item,>.workspace-group-empty):before{content:"";position:absolute;left:calc(var(--tree-pad-x) + 6px);top:calc(var(--tree-row-h) + var(--tree-row-gap));bottom:0;width:1px;background:var(--ui-line);pointer-events:none}.workspace-group>.tree-row,.workspace-group>.workflow-item,.workspace-group>.workspace-group-empty{position:relative}.workflow-row-actions{position:absolute;top:50%;right:calc(var(--tree-pad-x) + 32px);transform:translateY(-50%);display:flex;align-items:center;gap:2px;opacity:0;pointer-events:none;transition:opacity var(--transition-fast)}.workflow-item:hover .workflow-row-actions,.workflow-item:focus-within .workflow-row-actions{opacity:1;pointer-events:auto}.workflow-row-actions .workspace-row-action{opacity:1}.tree-row{display:flex;align-items:center;gap:6px;width:100%;height:var(--tree-row-h);padding:0 var(--tree-pad-x) 0 var(--tree-indent);border:none;background:transparent;border-radius:var(--radius);font-size:var(--type-label);color:var(--text-dim);text-align:left}.tree-row:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.tree-row-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row>svg{flex:0 0 auto;color:var(--text-faint)}.session-tree-row:hover{background:var(--bg-hover);color:var(--text)}.session-row-time{flex:0 0 auto;color:var(--text-faint);font-family:var(--font-mono);font-size:var(--type-meta);font-variant-numeric:tabular-nums}.session-tree-row.is-selected{background:var(--active-shade);color:var(--text)}.session-tree-row.is-current{color:var(--text)}.session-tree-row.is-current>svg:first-child{color:var(--brand)}.tree-trail{display:flex;align-items:center;justify-content:center;width:16px;flex:0 0 auto}.workflow-status{display:flex;align-items:center;justify-content:center;width:16px;flex:0 0 auto;color:var(--text-faint)}.workflow-status[data-deployed=true]{color:var(--green)}.workflow-item{position:relative;display:flex;align-items:center;border-radius:var(--radius);color:var(--text-dim)}.workflow-item:hover{background:var(--bg-hover);color:var(--text)}.workflow-item.is-focused{background:var(--active-shade);color:var(--text)}.workflow-item.is-focused .tree-row>svg:first-child{color:var(--brand)}.workflow-item-trigger{flex:1;min-width:0;color:inherit}.workflow-session-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;background:transparent;box-shadow:inset 0 0 0 1px var(--text-faint)}.workflow-session-dot[data-live=true]{background:var(--green);box-shadow:none}.workflow-item .workflow-expander{opacity:1}.workflow-dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex:0 0 auto}.workflow-dot-pinned{position:relative}.workflow-deployed-tag{flex:0 0 auto;color:var(--green-text, var(--green))}.workflow-row-menu-wrap{position:relative;display:flex;align-items:center;flex:0 0 auto;margin-right:3px}.workflow-item:hover .workflow-row-menu-wrap .workspace-row-action,.workflow-row-menu-wrap .workspace-row-action:focus-visible,.workflow-row-menu-wrap .workspace-row-action[aria-expanded=true]{opacity:1}.workspace-row-action:active{background:var(--surface-inset)}.workflow-row-menu{min-width:170px}.workflow-row-menu-section{padding:6px 8px 2px;font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint)}.group-name-input{flex:1;min-width:0;height:24px;margin:0 var(--sp1);padding:0 var(--sp2);border:1px solid var(--focus);border-radius:var(--radius-sm);background:var(--surface-inset);color:var(--text);font-size:var(--type-label)}.session-rename-input{flex:1;min-width:0}.session-context-rename{max-width:260px}.group-name-input:focus-visible{outline:none}@media(prefers-reduced-motion:reduce){.workspace-row-action,.group-name-input{transition:none}}.connect-trigger{display:inline-flex;align-items:center;justify-content:center;text-align:center;width:100%;height:var(--control-h-xs);border:1px dashed var(--border-strong);background:transparent;color:var(--text-faint);border-radius:var(--radius);padding:0 var(--sp3);text-align:left;font-size:var(--type-label)}.connect-trigger:hover{color:var(--text-dim);border-color:var(--text-faint)}.macro-icon-btn{position:relative;width:var(--control-h-xs);height:var(--control-h-xs);display:flex;align-items:center;justify-content:center;flex:0 0 auto;border:1px solid transparent;background:transparent;border-radius:var(--radius-md);color:var(--text-dim);transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.macro-icon-btn:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border-strong);color:var(--text)}.macro-icon-btn:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.macro-icon-btn:disabled{color:var(--text-faint);cursor:default;opacity:.5}.session-bar{display:flex;align-items:center;gap:var(--sp2);height:var(--pane-header-h);flex:0 0 auto;padding:0 var(--pane-pad-x);border-bottom:1px solid var(--border);background:var(--bg-1);position:relative}.session-context{display:flex;align-items:center;gap:var(--sp2);flex:1;min-width:0}.session-context-title{flex:0 0 auto;max-width:24ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--type-label);font-weight:510;color:var(--text)}.session-context-none{font-size:var(--type-label);color:var(--text-faint)}.session-status-tag{flex:0 0 auto}.session-status-tag[data-status=running]{color:var(--green-text)}.session-menu-wrap{position:relative;flex:0 0 auto}.session-menu{min-width:180px}.session-menu-danger:hover:not(:disabled){color:var(--red-text);background:color-mix(in srgb,var(--red) 12%,transparent)}.dir-picker-item.is-selected{background:var(--surface-hover);color:var(--text)}.session-busy{width:6px;height:6px;border-radius:50%;flex:0 0 auto;background:var(--accent);animation:session-tab-busy-pulse 1.2s ease-in-out infinite}@keyframes session-tab-busy-pulse{0%,to{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}.session-history-badge{position:absolute;top:-3px;right:-3px;min-width:14px;height:14px;padding:0 3px;border-radius:var(--radius-full);background:var(--accent);color:var(--accent-foreground);font-size:var(--type-micro);font-weight:700;line-height:14px;text-align:center}.session-workflow-chip{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 8px;border-radius:var(--radius-md);background:var(--accent-dim);border:1px solid var(--accent-border);color:var(--accent);font-size:var(--type-meta);font-weight:500}.session-context-status{margin-left:auto}.session-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;background:var(--text-faint)}.session-dot[data-status=running]{background:var(--green)}.session-dot[data-status=starting]{background:var(--amber)}.session-dot[data-status=exited]{background:var(--text-faint)}.session-tabs{display:flex;align-items:center;gap:var(--sp1);flex:0 0 auto;min-width:0;padding:var(--sp1) var(--pane-pad-x);border-bottom:1px solid var(--border);background:var(--bg-1);overflow-x:auto;scrollbar-width:none}.session-tabs::-webkit-scrollbar{display:none}.session-tab{display:inline-flex;align-items:center;flex:0 0 auto;max-width:220px;height:28px;border-radius:var(--radius-md);border:1px solid transparent;color:var(--text-dim);transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.session-tab:hover{background:var(--bg-hover);color:var(--text)}.session-tab.is-active{background:var(--active-shade);border-color:var(--ui-line);color:var(--text)}.session-tab-main{display:inline-flex;align-items:center;gap:6px;min-width:0;height:100%;padding:0 var(--sp1) 0 var(--sp2);border:none;background:transparent;border-radius:var(--radius-md) 0 0 var(--radius-md);color:inherit;font-size:var(--type-label);text-align:left}.session-tab-main:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.session-tab-main>svg{flex:0 0 auto;color:var(--text-faint)}.session-tab.is-active .session-tab-main>svg{color:var(--brand)}.session-tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-tab-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;background:var(--text-faint)}.session-tab-dot[data-status=running]{background:var(--green)}.session-tab-dot[data-status=starting]{background:var(--amber)}.session-tab-busy{width:6px;height:6px;border-radius:50%;flex:0 0 auto;background:var(--accent);animation:session-tab-busy-pulse 1.2s ease-in-out infinite}.session-tab-close{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:20px;height:20px;margin-right:4px;border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-faint);opacity:0;transition:opacity var(--transition-fast),background-color var(--transition-fast),color var(--transition-fast)}.session-tab:hover .session-tab-close,.session-tab.is-active .session-tab-close,.session-tab-close:focus-visible{opacity:1}.session-tab-close:hover{background:color-mix(in srgb,var(--red) 14%,transparent);color:var(--red-text)}.session-tab-close:active{background:color-mix(in srgb,var(--red) 22%,transparent)}.session-tab-close:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.session-tab-new{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:26px;height:26px;border:none;background:transparent;border-radius:var(--radius-md);color:var(--text-faint);transition:background-color var(--transition-fast),color var(--transition-fast)}.session-tab-new:hover{background:var(--bg-hover);color:var(--text)}.session-tab-new:active{background:var(--surface-inset)}.session-tab-new:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}@media(prefers-reduced-motion:reduce){.session-tab,.session-tab-close,.session-tab-new{transition:none}.session-tab-busy{animation:none}}.session-dropdown-section{font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint);padding:4px 8px;margin-top:var(--sp2)}.session-dropdown-section:first-child{margin-top:0}.session-dropdown-empty{color:var(--text-faint);font-size:var(--type-label);padding:4px 6px 8px}.session-dropdown-item{display:flex;align-items:flex-start;gap:var(--sp2);width:100%;padding:6px 8px;border:none;background:transparent;border-radius:var(--radius-sm);text-align:left;transition:background-color var(--transition-fast)}.session-item-icon,.session-dropdown-item>.tree-trail{display:flex;align-items:center;justify-content:center;width:16px;flex:0 0 auto;height:18px;color:var(--text-faint)}.session-item-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.session-item-copy>.session-item-title,.session-item-copy>.session-item-cwd,.session-item-copy>.session-item-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-dropdown-item:hover,.session-dropdown-item.is-selected{background:var(--surface-hover)}.session-item-title{font-size:var(--type-label);color:var(--text)}.session-item-cwd,.session-item-meta{font-size:var(--type-meta);color:var(--text-faint)}.past-session-tag{flex:0 0 auto;align-self:flex-start;padding:1px 6px;border-radius:var(--radius-md);border:1px solid var(--ui-line);background:var(--surface-inset);color:var(--text-faint);font-size:var(--type-micro);font-weight:600}.past-session-tag[data-resumable=true]{color:var(--green-text);border-color:color-mix(in srgb,var(--green) 32%,transparent);background:color-mix(in srgb,var(--green) 10%,transparent)}.gear-btn{width:var(--control-h-xs);height:var(--control-h-xs);display:flex;align-items:center;justify-content:center;border:1px solid var(--border-strong);background:var(--bg-2);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);color:var(--text-dim);transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.gear-btn:hover{background:var(--surface-hover);border-color:var(--ui-line-strong);color:var(--text)}.gear-btn:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.settings-popover{padding:var(--sp4)}.settings-identity{font-size:var(--type-label);font-weight:600;color:var(--text);padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--border)}.settings-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:var(--type-label);color:var(--text-dim)}.toggle-switch{flex:0 0 auto;width:34px;height:20px;border-radius:var(--radius-full);background:var(--bg-3);border:1px solid var(--border-strong);position:relative;padding:0;transition:background-color var(--transition-fast)}.toggle-switch.is-on{background:var(--accent);border-color:var(--accent)}.toggle-switch:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.toggle-switch:disabled{opacity:.42;cursor:default}.toggle-knob{position:absolute;top:1px;left:1px;width:16px;height:16px;border-radius:50%;background:var(--toggle-knob-off);transition:transform var(--transition-fast)}.toggle-switch.is-on .toggle-knob{background:var(--toggle-knob-on);transform:translate(14px)}.settings-note{margin:10px 0 12px;font-size:var(--type-meta);line-height:1.5;color:var(--text-faint)}.settings-note code{color:var(--text-dim);font-family:var(--font-mono);font-size:var(--type-meta)}.settings-env-note{color:var(--text-warning)}.terminal-slot{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--bg-0)}.terminal-slot>.harness-terminal{flex:1;min-height:0}.terminal-slot>.image-composer{flex:1;min-height:0;display:flex;flex-direction:column;position:relative}.image-composer-pane{flex:1;min-height:0;display:flex;flex-direction:column}.image-composer-dropzone{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp2);border:2px dashed var(--accent-border);border-radius:var(--radius-lg);background:var(--accent-dim);color:var(--accent);font-size:var(--type-ui);font-weight:500;pointer-events:none}.image-composer-bar{flex-shrink:0;display:flex;align-items:center;gap:var(--sp2);padding:var(--sp2) var(--pane-pad-x);border-top:1px solid var(--border);background:var(--bg-1)}.image-composer-thumbs{display:flex;align-items:center;gap:var(--sp2);margin:0;padding:0;list-style:none;overflow-x:auto;flex:1;min-width:0}.image-composer-thumb{position:relative;flex-shrink:0;width:40px;height:40px;border-radius:var(--radius-md);border:1px solid var(--border-strong);overflow:hidden}.image-composer-thumb img{width:100%;height:100%;object-fit:cover;display:block}.image-composer-thumb-remove{position:absolute;top:2px;right:2px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-full);background:var(--bg-0);color:var(--text-dim);cursor:pointer;transition:color var(--transition-fast),background-color var(--transition-fast)}.image-composer-thumb-remove:hover:not(:disabled){color:var(--text);background:var(--bg-2)}.image-composer-thumb-remove:active:not(:disabled){background:var(--bg-3)}.image-composer-thumb-remove:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.image-composer-thumb-remove:disabled{opacity:.42;cursor:default}.image-composer-send{flex-shrink:0;font-size:var(--type-label)}@media(prefers-reduced-motion:reduce){.image-composer-thumb-remove{transition:none}}.harness-terminal{display:flex;flex-direction:column;height:100%;width:100%;min-height:0;background:var(--bg-0);overflow:hidden}.terminal-statusbar{display:flex;align-items:center;gap:var(--sp2);flex-shrink:0;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--ui-line);font-family:var(--font-mono);font-size:var(--type-meta);font-variant-numeric:tabular-nums;color:var(--text-dim)}.terminal-status-dot{width:7px;height:7px;border-radius:999px;flex:0 0 auto;background:var(--text-faint)}.terminal-statusbar[data-status=connected] .terminal-status-dot{background:var(--green)}.terminal-statusbar[data-status=connecting] .terminal-status-dot{background:var(--amber);animation:session-tab-busy-pulse 1.2s ease-in-out infinite}.terminal-statusbar[data-status=error] .terminal-status-dot{background:var(--red)}.terminal-statusbar[data-status=error] .terminal-status-label{color:var(--red-text)}.terminal-screen{flex:1;min-height:0;overflow:hidden}.terminal-screen .xterm{height:100%;width:100%;padding:var(--pane-pad-x)}@media(prefers-reduced-motion:reduce){.terminal-statusbar[data-status=connecting] .terminal-status-dot{animation:none}}.terminal-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--text-faint);font-family:var(--font-mono);font-size:var(--type-label)}.welcome-panel{height:100%;display:flex;align-items:center;justify-content:center;padding:var(--sp4);overflow-y:auto;container:welcome / inline-size}.welcome-card{display:flex;flex-direction:column;align-items:stretch;gap:12px;width:520px;max-width:100%;padding:28px;overflow:hidden;background:var(--bg-2);border:1px solid var(--border-strong);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm)}.welcome-hero{margin:-28px -28px 0;height:200px;overflow:hidden;mask-image:linear-gradient(to bottom,black 60%,transparent 100%);-webkit-mask-image:linear-gradient(to bottom,black 60%,transparent 100%)}.welcome-hero img{display:block;width:100%;height:auto;object-fit:cover;object-position:82% 12%;transform:scale(1.25);transform-origin:82% 12%}.welcome-hero img.welcome-hero-light,[data-theme=light] .welcome-hero img.welcome-hero-dark{display:none}[data-theme=light] .welcome-hero img.welcome-hero-light{display:block}.welcome-copy{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}.welcome-title{margin:0;font-size:var(--type-h2);font-weight:600;letter-spacing:-.01em;color:var(--text)}.welcome-intro{margin:0;font-size:var(--type-ui);line-height:1.6;color:var(--text-dim)}.welcome-footer{display:flex;align-items:center;gap:var(--sp2);align-self:stretch;margin:var(--sp2) -28px -28px;padding:var(--sp3) 28px;border-top:1px solid var(--border)}.welcome-docs{display:inline-flex;align-items:center;gap:var(--sp1);margin-right:auto;color:var(--text-faint);font-size:var(--type-meta);text-decoration:none;border-radius:var(--radius-sm);transition:color var(--transition-fast)}.welcome-docs:hover{color:var(--text-dim);text-decoration:underline}.welcome-docs:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.welcome-action{padding:0 var(--sp4);font-size:var(--type-ui);white-space:nowrap}.welcome-error{font-size:var(--type-label);color:var(--red)}.welcome-hints{display:flex;flex-direction:column;align-items:center;gap:var(--sp2);margin-top:2px}.welcome-hint-chips{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--sp1) var(--sp3)}.welcome-hint-chip{display:inline-flex;align-items:center;gap:4px;color:var(--accent);font-size:var(--type-meta);font-weight:510;white-space:nowrap}.welcome-hints-kbd{display:block;text-align:center;font-size:var(--type-meta);color:var(--text-faint)}.welcome-hints-kbd kbd{font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim);padding:1px 5px;background:var(--bg-1);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-xs)}@container welcome (max-width: 420px){.welcome-title{font-size:clamp(14px,4.6cqi,16px)}.welcome-footer{flex-wrap:wrap}.welcome-docs{flex:1 0 100%;justify-content:center;margin-right:0}.welcome-action{flex:1 1 auto}}.dead-session-pane{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:24px;text-align:center}.dead-session-title{color:var(--text);font-size:var(--type-ui);font-weight:600}.dead-session-meta{color:var(--text-faint);font-size:var(--type-label);font-family:var(--font-mono);margin-bottom:6px}.dead-session-actions{display:flex;gap:8px}.dead-session-resume-reason{color:var(--text-faint);font-size:var(--type-meta);max-width:300px;line-height:1.4;margin-top:4px}.canvas-pane{display:flex;flex-direction:column;background:var(--bg-1);min-width:0}.workflow-actions-header{display:flex;align-items:center;gap:var(--sp2);flex:0 0 auto;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--border);background:var(--surface-raised);container-type:inline-size}@container (max-width: 347px){.canvas-detail-ask .canvas-detail-ask-label{display:none}}.workflow-actions-name{flex:1;min-width:0;font-size:var(--type-label);font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.canvas-refresh-btn{border-radius:var(--radius)}.canvas-frame-wrap{position:relative;flex:1;display:flex;flex-direction:column;min-height:0;overflow:clip}.canvas-visual{position:relative;flex:1;display:flex;min-height:0}.canvas-overview{position:relative;flex:0 0 auto;max-height:50%;display:flex;flex-direction:column;border-top:1px solid var(--ui-line);background:var(--surface-raised);overflow:hidden;transition:height var(--base) var(--ease)}.canvas-overview.is-resizing{transition:none}@media(prefers-reduced-motion:reduce){.canvas-overview{transition:none}}.canvas-overview-resize{position:absolute;top:-3px;left:0;right:0;height:6px;cursor:row-resize;z-index:4;touch-action:none}.canvas-overview-resize:before{content:"";position:absolute;inset:50% 0 auto 0;height:1px;transform:translateY(-50%);background:transparent;transition:height var(--fast) var(--ease),background-color var(--fast) var(--ease)}.canvas-overview-resize:hover:before,.canvas-overview-resize:active:before,.canvas-overview.is-resizing .canvas-overview-resize:before,.canvas-overview-resize:focus-visible:before{height:2px;background:var(--brand)}.canvas-overview-resize:focus-visible{outline:none}@media(prefers-reduced-motion:reduce){.canvas-overview-resize:before{transition:none}}.canvas-visual.is-offstage{display:none}.canvas-steps-surface{flex:1;min-height:0;overflow-y:auto;padding:var(--sp2) var(--pane-pad-x) var(--sp4);container-type:inline-size}@container (max-width: 420px){.canvas-step-meta{display:none}}.workflow-actions-count{font-family:var(--font-mono);font-size:var(--type-meta);color:var(--text-faint)}.canvas-slide-track{display:flex;width:200%;flex:1;min-height:0;transform:translate(0);transition:transform .26s var(--ease)}.canvas-frame-wrap[data-view=detail] .canvas-slide-track{transform:translate(-50%)}.canvas-slide-pane{width:50%;flex:0 0 50%;min-height:0;display:flex;flex-direction:column}@media(prefers-reduced-motion:reduce){.canvas-slide-track{transition:none}}.canvas-detail-ask{margin-left:auto;flex:0 0 auto}.canvas-detail-menu-wrap{position:relative;flex:0 0 auto}.canvas-detail-menu{min-width:200px}.canvas-step-item{border-radius:var(--radius)}.canvas-step-item.is-open{background:var(--surface-inset)}.canvas-step-caret{display:flex;align-items:center;flex:0 0 auto;color:var(--text-faint);transition:transform var(--transition-fast)}.canvas-step-caret.is-open{transform:rotate(180deg)}.canvas-step-expand{display:flex;flex-direction:column;gap:var(--sp2);padding:var(--sp1) var(--sp2) var(--sp3) calc(var(--sp2) + 7px + var(--sp2))}.canvas-step-desc{margin:0;font-size:var(--type-meta);line-height:1.55;color:var(--text-dim)}.canvas-step-transition{display:flex;align-items:center;gap:var(--sp2);font-size:var(--type-meta);color:var(--text-faint)}.canvas-step-transition-target{color:var(--text-dim)}.canvas-step-transition-cond{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-family:var(--font-mono);color:var(--brand)}.canvas-step-open{display:inline-flex;align-items:center;gap:var(--sp1);align-self:flex-start;padding:2px 0;border:0;background:transparent;font-size:var(--type-meta);font-weight:510;color:var(--text-dim);transition:color var(--transition-fast)}.canvas-step-open:hover{color:var(--text);text-decoration:underline}.canvas-step-open:active{color:var(--text-dim)}.canvas-steps-list{display:flex;flex-direction:column;gap:1px}.canvas-steps-label{display:flex;align-items:baseline;gap:var(--sp2);font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint);padding:var(--sp1) 0}.canvas-steps-run-note{margin-left:auto;font-family:var(--font-mono);font-weight:400;letter-spacing:0;color:var(--text-dim);white-space:nowrap}.canvas-step-band{position:relative;padding:0 0 var(--sp1);margin:var(--sp1) 0}.canvas-step-band:before{content:"";position:absolute;inset:0 calc(-1 * var(--sp1));border:1px dashed var(--ui-line-strong);background:var(--surface-raised);border-radius:var(--radius);pointer-events:none;z-index:-1}.canvas-step-group{font-family:var(--font-mono);font-size:var(--type-micro);letter-spacing:.04em;color:var(--text-faint);padding:var(--sp2) var(--sp2) var(--sp1)}.canvas-step-row{display:grid;grid-template-columns:20px 10px minmax(0,1fr) auto 16px;align-items:center;gap:var(--sp2);width:100%;min-height:44px;padding:var(--sp1) var(--sp2);border:0;background:transparent;border-radius:var(--radius);color:var(--text-dim);text-align:left;transition:background-color var(--transition-fast)}.canvas-step-row:hover{background:var(--surface-hover);color:var(--text)}.canvas-step-row:active{background:var(--surface-selected)}.canvas-step-row[aria-expanded=true]{background:var(--active-shade)}.canvas-step-row.is-static,.canvas-step-row.is-static:hover,.canvas-step-row.is-static:active{cursor:default;background:transparent;color:var(--text-dim)}.canvas-step-row.is-static:hover .canvas-step-name{color:inherit}.canvas-step-row:focus-visible,.canvas-step-open:focus-visible,.canvas-detail-edge:focus-visible{outline:1.5px solid var(--brand);outline-offset:1px}.canvas-step-index{font-family:var(--font-mono);font-size:var(--type-label);color:var(--text-faint)}.canvas-step-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}.canvas-step-copy{display:flex;flex-direction:column;gap:1px;min-width:0}.canvas-step-name{font-size:var(--type-label);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-step-row:hover .canvas-step-name,.canvas-step-row[aria-expanded=true] .canvas-step-name{color:var(--text)}.canvas-step-role{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-faint)}.canvas-step-meta{font-family:var(--font-mono);font-size:var(--type-label);color:var(--text-faint);white-space:nowrap;max-width:35cqw;overflow:hidden;text-overflow:ellipsis}.canvas-input-card,.canvas-detail-contract{display:flex;align-items:baseline;gap:var(--sp2)}.canvas-input-label{flex:0 0 auto;min-width:52px;font-size:var(--type-micro);font-weight:590;letter-spacing:.02em;color:var(--text-faint)}.canvas-input-fields{display:flex;flex-wrap:wrap;gap:var(--sp1);min-width:0}.canvas-input-field{display:inline-flex;align-items:baseline;gap:var(--sp1);padding:2px var(--sp2);border:1px solid var(--ui-line-strong);border-radius:var(--radius);background:var(--surface-inset);font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim)}.canvas-input-field.is-required{color:var(--text)}.canvas-input-type{color:var(--text-faint)}.canvas-detail-timeout{font-family:var(--font-mono);font-size:var(--type-meta);color:var(--text-dim)}.canvas-run-status{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;flex:0 0 auto}.canvas-run-status.is-passed{color:var(--green)}.canvas-run-status.is-failed{color:var(--red, #e05a57)}.canvas-run-status.is-running{border:1.5px solid var(--brand);border-right-color:transparent;border-radius:50%;width:10px;height:10px;animation:canvas-run-spin .9s linear infinite}.canvas-run-status.is-pending{width:7px;height:7px;border:1px solid var(--text-faint);border-radius:50%}@keyframes canvas-run-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.canvas-run-status.is-running{animation:none;border-right-color:var(--brand);opacity:.6}}.canvas-run-text{display:inline-flex;align-items:center;gap:var(--sp1);font-family:var(--font-mono);font-size:var(--type-meta)}.canvas-run-text.is-passed{color:var(--green-text, var(--green))}.canvas-run-text.is-failed{color:var(--red-text, var(--red))}.canvas-run-text.is-running{color:var(--text-dim)}.canvas-run-text.is-pending{color:var(--text-faint)}.canvas-run-error{margin:0;padding:var(--sp2) var(--sp3);border:1px solid color-mix(in srgb,var(--red, #e05a57) 30%,var(--ui-line));border-radius:var(--radius);background:color-mix(in srgb,var(--red, #e05a57) 6%,transparent);font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim);white-space:pre-wrap;word-break:break-word}.canvas-run-logs summary{font-size:var(--type-micro);font-weight:590;color:var(--text-faint);cursor:pointer}.canvas-run-logs pre{margin:var(--sp1) 0 0;padding:var(--sp2) var(--sp3);border:1px solid var(--ui-line);border-radius:var(--radius);background:var(--surface-inset);font-size:var(--type-micro);max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-word}.canvas-run-chip{font-family:var(--font-mono)}.canvas-run-chip.is-completed{color:var(--green-text, var(--green))}.canvas-run-chip.is-failed{color:var(--red-text, var(--red))}.canvas-run-picker-wrap{position:relative;flex:0 0 auto}.canvas-run-menu{min-width:260px}.canvas-run-menu .profile-menu-item{font-family:var(--font-mono);font-size:var(--type-micro)}.canvas-run-option-meta{margin-left:auto;padding-left:var(--sp3);color:var(--text-faint)}.session-preview-chip{color:var(--brand)}.session-preview-chip:active{color:var(--brand-hover)}.canvas-detail{display:flex;flex-direction:column;flex:1;min-height:0}.canvas-detail-groups{margin:0;font-size:var(--type-meta);color:var(--text-faint)}.canvas-detail-warnings{list-style:disc;margin:0;padding-left:18px;display:flex;flex-direction:column;gap:var(--sp1);font-size:var(--type-meta);color:var(--amber-text)}.canvas-run-stub-chip{flex:0 0 auto;padding:1px 6px;border-radius:var(--radius-md);border:1px solid var(--border-warning);background:var(--bg-warning);color:var(--amber-text);font-family:var(--font-mono);font-size:var(--type-micro);font-weight:590;letter-spacing:.01em;white-space:nowrap}.canvas-stub-notice+.canvas-stub-notice{margin-top:var(--sp2)}.canvas-stub-notice-hint{margin:2px 0 var(--sp1);font-size:var(--type-micro);color:var(--text-faint)}.canvas-links-list{display:flex;flex-direction:column;gap:var(--sp2)}.canvas-link-thumb-wrap{display:inline-flex;align-items:flex-start;border:1px solid var(--ui-line);border-radius:var(--radius-md);overflow:hidden;text-decoration:none;transition:border-color var(--transition-fast);max-width:200px}.canvas-link-thumb-wrap:hover{border-color:var(--ui-line-strong)}.canvas-link-thumb-wrap:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.canvas-link-thumb{display:block;max-width:200px;max-height:120px;object-fit:cover}.canvas-link-item{display:inline-flex;align-items:center;gap:var(--sp1);font-size:var(--type-meta);color:var(--text-dim);text-decoration:none;transition:color var(--transition-fast);max-width:100%}.canvas-link-item:hover{color:var(--text);text-decoration:underline;text-underline-offset:3px}.canvas-link-item:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.canvas-link-url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.canvas-capability-calls{display:flex;flex-direction:column;gap:var(--sp2)}.canvas-capability-call{display:flex;flex-direction:column;gap:var(--sp1);padding:var(--sp2) var(--sp3);border:1px solid var(--ui-line);border-radius:var(--radius-md);background:var(--surface-raised)}.canvas-capability-call-head{display:flex;align-items:center;gap:var(--sp2);flex-wrap:wrap}.canvas-capability-call-result{margin-top:var(--sp1)}.canvas-detail-kind{flex:0 0 auto;padding:2px 8px;border-radius:var(--radius-md);border:1px solid var(--ui-line);background:var(--surface-inset);font-size:var(--type-meta);color:var(--text-dim)}.canvas-detail-kind.node--entry,.canvas-detail-kind.node--terminal-success{color:var(--brand);border-color:var(--accent-border);background:var(--accent-dim)}.canvas-detail-kind.node--terminal-warn{color:var(--amber);border-color:var(--border-warning);background:var(--bg-warning)}.canvas-detail-body{flex:1;min-height:0;overflow-y:auto;padding:var(--sp3) var(--pane-pad-x) var(--sp4);display:flex;flex-direction:column;gap:var(--sp3)}.canvas-detail-role{margin:0;font-family:var(--font-mono);font-size:var(--type-meta);color:var(--text-faint)}.canvas-detail-desc{margin:0;font-size:var(--type-label);line-height:1.55;color:var(--text-dim)}.canvas-detail-section h4{display:flex;align-items:center;gap:var(--sp2);margin:0 0 var(--sp2);font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-dim)}.canvas-detail-count{padding:0 6px;border-radius:var(--radius-full);background:var(--surface-inset);color:var(--text-dim);font-variant-numeric:tabular-nums}.canvas-detail-empty{margin:0;font-size:var(--type-meta);color:var(--text-faint)}.canvas-detail-edges{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;border:1px solid var(--ui-line-strong);border-radius:var(--radius);background:var(--surface-raised);overflow:hidden}.canvas-detail-edges li+li{border-top:1px solid var(--ui-line)}.canvas-detail-edge{display:flex;align-items:center;gap:var(--sp2);width:100%;min-height:40px;padding:var(--sp1) var(--sp3);border:0;background:transparent;color:var(--text-dim);text-align:left;transition:background-color var(--transition-fast)}.canvas-detail-edge:hover{background:var(--surface-hover);color:var(--text)}.canvas-detail-edge:active{background:var(--surface-selected)}.canvas-detail-edge:focus-visible{outline-offset:-2px}.canvas-detail-edge>svg{flex:0 0 auto;color:var(--text-faint)}.canvas-detail-edge-target{flex:0 0 auto;font-size:var(--type-label)}.canvas-detail-edge-kind{flex:0 0 auto;padding:1px 6px;border-radius:var(--radius-full);border:1px solid var(--ui-line);background:var(--surface-inset);font-size:var(--type-micro);color:var(--text-faint)}.canvas-detail-edge:hover .canvas-detail-edge-target{text-decoration:underline}.canvas-detail-edge-cond{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-family:var(--font-mono);font-size:var(--type-meta);color:var(--brand)}.canvas-overview-head{display:flex;align-items:center;gap:var(--sp2);flex:0 0 auto;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--ui-line);color:var(--text);font-size:var(--type-label);font-weight:510}.canvas-overview-head svg{color:var(--text-faint)}.canvas-overview-close{flex:0 0 auto;margin-left:var(--sp1)}.canvas-overview-stats{margin-left:auto;display:flex;align-items:baseline;gap:var(--sp2);font-size:var(--type-meta);font-weight:400;color:var(--text-faint)}.canvas-overview-stat strong{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.canvas-overview-stat+.canvas-overview-stat:before{content:"·";margin-right:var(--sp2);color:var(--text-faint)}.canvas-overview-body{flex:1;min-height:0;overflow-y:auto;padding:var(--sp4) var(--pane-pad-x);font-size:var(--type-label);line-height:1.55;color:var(--text-dim)}.canvas-overview-content{display:flex;flex-direction:column;gap:var(--sp3)}.canvas-overview-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-overview-head .canvas-step-dot{flex:0 0 auto}.canvas-inspector-open-steps{margin-left:auto;color:var(--text-faint)}.canvas-inspector-open-steps:hover,.canvas-inspector-open-steps:focus-visible{color:var(--text-dim)}.canvas-inspector{display:flex;flex-direction:column;gap:var(--sp2)}.canvas-inspector .canvas-detail-role{margin:0}.canvas-step-transition.is-link{border:0;background:none;padding:2px var(--sp1);text-align:left;cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast)}.canvas-step-transition.is-link:hover,.canvas-step-transition.is-link:active{background:var(--active-shade)}.canvas-step-transition.is-link:hover .canvas-step-transition-target,.canvas-step-transition.is-link:active .canvas-step-transition-target{color:var(--text);text-decoration:underline;text-underline-offset:3px}.canvas-step-transition.is-link:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.canvas-inspector-run{display:flex;align-items:baseline;gap:var(--sp2);font-size:var(--type-meta)}.canvas-inspector-run-meta{color:var(--text-dim);font-variant-numeric:tabular-nums}.canvas-inspector-macros{display:flex;flex-direction:column;gap:var(--sp1);margin-top:var(--sp1);padding-top:var(--sp2);border-top:1px solid var(--ui-line)}.canvas-inspector-macro-btn{width:100%;text-align:left}.canvas-inspector-freeform{display:flex;flex-direction:column;gap:var(--sp1)}.canvas-inspector-freeform-input{width:100%;resize:vertical;padding:var(--sp1) var(--sp2);font:inherit;font-size:var(--type-label);color:var(--text);background:var(--surface-raised);border:1px solid var(--ui-line);border-radius:var(--radius-md)}.canvas-inspector-freeform-input:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-color:var(--ui-line-strong)}.canvas-inspector-freeform-ask{align-self:flex-end}.canvas-overview-desc{margin:0;color:var(--text)}.canvas-overview-notes{margin:0;padding-left:var(--sp4);display:flex;flex-direction:column;gap:var(--sp1)}.canvas-legend-row{display:flex;align-items:center;gap:var(--sp3);color:var(--text-faint);font-size:var(--type-meta)}.canvas-legend-row .dot{display:inline-block;width:7px;height:7px;border-radius:999px;margin-right:5px}.dot--entry{background:var(--brand)}.dot--step{border:1px solid var(--text-faint)}.dot--terminal{background:var(--text-faint)}.dot--pause{border:1px dashed var(--text-faint)}.dot--terminal-success{background:var(--green)}.dot--terminal-warn{background:var(--amber)}.dot--launched-workflow{border:1px dashed var(--brand)}.canvas-overview-open{position:absolute;right:var(--sp3);bottom:var(--sp3);z-index:3;background:var(--surface-raised);border:1px solid var(--ui-line);box-shadow:var(--shadow-soft);font-weight:590}.canvas-frame-wrap.is-expanded{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:var(--bg-0)}.canvas-view-controls{position:absolute;bottom:var(--sp3);left:var(--sp3);z-index:3;display:flex;align-items:center;gap:2px;padding:var(--sp1);background:var(--surface-raised);border:1px solid var(--ui-line);border-radius:var(--radius);box-shadow:var(--shadow-soft)}.canvas-view-controls .theme-toggle:disabled{opacity:.42;cursor:default}.canvas-zoom-reset{font-family:var(--font-mono);font-size:var(--type-micro);font-variant-numeric:tabular-nums}.canvas-iframe{flex:1;width:100%;border:none;background:#fff}.canvas-loading{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text-faint)}.canvas-loading--overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:var(--bg-1)}@keyframes canvas-refresh-spin{to{transform:rotate(360deg)}}.canvas-refresh-btn.is-refreshing svg{animation:canvas-refresh-spin .9s linear infinite}.canvas-skeleton{display:flex;flex-direction:column;gap:var(--sp3);padding:var(--sp5);opacity:1;transition:opacity .32s ease-out}.canvas-skeleton.is-fading{opacity:0;pointer-events:none}.canvas-skeleton-row{display:flex;gap:var(--sp3)}@keyframes canvas-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.canvas-skeleton-block{flex:1;height:44px;border-radius:var(--radius);background:linear-gradient(100deg,var(--surface-inset) 40%,var(--surface-hover) 50%,var(--surface-inset) 60%);background-size:200% 100%;animation:canvas-skeleton-shimmer 1.6s ease-in-out infinite}.canvas-skeleton-title{flex:0 0 auto;height:16px;max-width:40%}.canvas-skeleton-wide{flex:0 0 auto;height:24px}@media(prefers-reduced-motion:reduce){.canvas-refresh-btn.is-refreshing svg{animation:none;opacity:.6}.canvas-skeleton-block{animation:none}}.canvas-pan-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:grab;touch-action:none}.canvas-pan-layer.is-panning{cursor:grabbing}.canvas-pan-layer[data-over-node]{cursor:pointer}.canvas-expand-exit{position:absolute;top:var(--sp3);right:var(--sp3);z-index:4;background:var(--surface-raised);box-shadow:var(--shadow-sm)}.canvas-render-error{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp3);padding:var(--sp5);text-align:center}.canvas-error-icon{display:flex;color:var(--amber)}.canvas-error-summary{margin:0;max-width:44ch;font-size:var(--type-label);line-height:1.55;color:var(--text-dim);overflow-wrap:anywhere}.canvas-error-actions{display:flex;gap:var(--sp2)}.canvas-error-details{max-width:52ch;font-size:var(--type-meta);color:var(--text-faint)}.canvas-error-details summary{cursor:pointer}.canvas-error-details pre{margin:var(--sp2) 0 0;padding:var(--sp2) var(--sp3);text-align:left;white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--font-mono);background:var(--surface-inset);border:1px solid var(--ui-line);border-radius:var(--radius)}.code-panel{flex:1;min-height:0;display:flex;flex-direction:column}.code-panel-empty{flex:1;min-height:0}.code-panel-body{flex:1;min-height:0;overflow-y:auto;padding:var(--sp2) var(--pane-pad-x) var(--sp4)}.code-panel-header .workflow-deployed-tag,.code-panel-draft-tag{flex:0 0 auto;margin-left:auto}.code-panel .snippet-panel{border:1px solid var(--ui-line);border-bottom:1px solid var(--ui-line);border-radius:var(--radius-md);background:var(--bg-1);padding-top:var(--sp1);padding-bottom:var(--sp1)}.code-panel .snippet-panel-header,.code-panel .snippet-slug-row,.code-panel .snippet-slug-inferred,.code-panel .snippet-tabs,.code-panel .snippet-hint{padding-left:var(--sp3);padding-right:var(--sp3)}.code-panel .snippet-code-wrap{margin-left:var(--sp3);margin-right:var(--sp3)}.code-panel .snippet-code{max-height:24rem}.snippet-panel{display:flex;flex-direction:column;flex:0 0 auto;border-bottom:1px solid var(--border);background:var(--surface-raised)}.snippet-panel-header{display:flex;align-items:center;padding:var(--sp2) var(--pane-pad-x) var(--sp1)}.snippet-panel-title{font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint)}.snippet-slug-row{display:flex;align-items:center;gap:var(--sp2);padding:0 var(--pane-pad-x) var(--sp1)}.snippet-slug-label{font-size:var(--type-micro);font-weight:600;color:var(--text-faint);white-space:nowrap;flex-shrink:0}.snippet-slug{flex:1;min-width:0;overflow-x:auto;background:var(--surface-inset);border:1px solid var(--ui-line);border-radius:var(--radius);padding:3px var(--sp2);color:var(--text);font-family:var(--font-mono);font-size:var(--type-meta);white-space:nowrap}.snippet-slug-inferred{margin:0;padding:0 var(--pane-pad-x) var(--sp1);font-size:var(--type-micro);line-height:1.4;color:var(--text-faint)}.snippet-tabs{display:flex;gap:2px;padding:0 var(--pane-pad-x) var(--sp1)}.snippet-tab{padding:3px var(--sp2);font-size:var(--type-meta);font-weight:510;color:var(--text-faint);background:transparent;border:1px solid transparent;border-radius:var(--radius);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.snippet-tab:hover{color:var(--text-dim);background:var(--bg-hover)}.snippet-tab:active{transform:translateY(.5px)}.snippet-tab.is-active{color:var(--text);background:var(--bg-1);border-color:var(--border-strong);box-shadow:var(--shadow-xs)}.snippet-tab:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.snippet-code-wrap{position:relative;margin:0 var(--pane-pad-x) var(--sp1)}.snippet-code{margin:0;padding:var(--sp2) var(--sp3);padding-right:56px;background:var(--surface-inset);border:1px solid var(--ui-line);border-radius:var(--radius);font-family:var(--font-mono);font-size:var(--type-meta);line-height:1.55;color:var(--text-dim);overflow-x:auto;white-space:pre;max-height:10rem;overflow-y:auto}.snippet-copy{position:absolute;top:var(--sp1);right:var(--sp1);padding:2px var(--sp2);font-size:var(--type-micro);font-weight:510;color:var(--text-faint);background:var(--surface-raised);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow-xs);cursor:pointer;transition:color var(--transition-fast),background-color var(--transition-fast),border-color var(--transition-fast)}.snippet-copy:hover:not(.is-copied){color:var(--text);border-color:var(--accent-border)}.snippet-copy:active:not(.is-copied){transform:translateY(.5px)}.snippet-copy:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.snippet-copy.is-copied{color:var(--brand);border-color:var(--accent-border);background:var(--accent-dim);cursor:default}.snippet-hint{margin:0;padding:0 var(--pane-pad-x) var(--sp2);font-size:var(--type-micro);color:var(--text-faint);line-height:1.5}.snippet-hint code{font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim)}.snippet-link{color:var(--brand);text-decoration:none;font-weight:510}.snippet-link:hover{text-decoration:underline}.snippet-link:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-radius:2px}@media(prefers-reduced-motion:reduce){.snippet-tab,.snippet-copy{transition:none}.snippet-tab:active,.snippet-copy:active:not(.is-copied){transform:none}}.canvas-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;padding:var(--sp5) var(--pane-pad-x);color:var(--text-faint);font-size:var(--type-label);line-height:1.6;background-image:radial-gradient(color-mix(in srgb,var(--text) 10%,transparent) 1px,transparent 1px);background-size:16px 16px}.canvas-empty code{color:var(--text-dim);font-family:var(--font-mono);font-size:var(--type-meta)}.canvas-empty-hint{max-width:320px;color:var(--text-faint);font-size:var(--type-meta)}.canvas-visualize-cta{position:relative;display:flex;align-items:center;gap:6px;margin:4px 0}.canvas-task-activity,.canvas-task-failed{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp3);text-align:center;padding:var(--sp5);color:var(--text-dim);font-size:var(--type-label);line-height:1.6}.canvas-task-activity--overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:color-mix(in srgb,var(--bg-1) 88%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.canvas-task-activity--overlay:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(color-mix(in srgb,var(--text) 10%,transparent) 1px,transparent 1px);background-size:16px 16px;animation:canvas-grid-shimmer 2.6s ease-in-out infinite;pointer-events:none}@keyframes canvas-grid-shimmer{0%,to{opacity:.45}50%{opacity:1}}.canvas-task-activity--overlay>*{position:relative}.canvas-task-icon{display:flex;align-items:center;justify-content:center;color:var(--brand);animation:canvas-task-breathe 2s ease-in-out infinite}@keyframes canvas-task-breathe{0%,to{opacity:.6;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}@media(prefers-reduced-motion:reduce){.canvas-task-activity--overlay:before,.canvas-task-icon{animation:none}}.canvas-task-title{display:flex;align-items:center;gap:var(--sp2);color:var(--text);font-size:var(--type-label);font-weight:510}.canvas-task-spinner{width:8px;height:8px;border-radius:50%;flex:0 0 auto;background:var(--accent);animation:session-tab-busy-pulse 1.2s ease-in-out infinite}.canvas-task-lines{list-style:none;margin:0;padding:0;max-width:340px;width:100%;display:flex;flex-direction:column;align-items:center;text-align:center;gap:2px;font-family:var(--font-mono);font-size:var(--type-meta);text-align:left;color:var(--text-faint)}.canvas-task-lines li{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-task-lines li:last-child{color:var(--text-dim)}.canvas-task-error{max-width:340px;max-height:160px;width:100%;overflow:auto;margin:0;padding:var(--sp2) var(--sp3);text-align:left;font-family:var(--font-mono);font-size:var(--type-meta);line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--text-faint);background:var(--bg-inset, rgba(128, 128, 128, .08));border:1px solid var(--border);border-radius:var(--radius-md)}.canvas-task-actions{display:flex;align-items:center;gap:8px}.btn-ghost{background:transparent;border:1px solid var(--border-strong);color:var(--text-dim);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);padding:5px 10px;font-size:var(--type-label);font-weight:500;transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.btn-ghost:hover:not(:disabled){background:var(--surface-hover);border-color:var(--ui-line-strong);color:var(--text)}.btn-ghost:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.btn-primary{background:var(--accent);border:1px solid transparent;color:var(--accent-foreground);font-weight:500;border-radius:var(--radius-md);box-shadow:var(--shadow-xs);padding:5px 10px;font-size:var(--type-label);transition:background-color var(--transition-fast)}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-primary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.btn-ghost:disabled,.btn-primary:disabled{opacity:.42;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim-bg);display:flex;align-items:center;justify-content:center;z-index:100;animation:fade-in var(--transition-fast) ease-out}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{background:var(--bg-2);border:1px solid var(--border-strong);border-radius:var(--radius-lg);padding:24px;width:380px;max-width:calc(100vw - 32px);box-shadow:var(--shadow-lg);animation:pop-in var(--transition-fast) ease-out}.command-palette{width:480px;padding:0;overflow:hidden}.command-palette-input{width:100%;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border:none;border-bottom:1px solid var(--border);background:transparent;color:var(--text);font-size:var(--type-body);transition:border-color var(--transition-fast)}.command-palette-input:focus{outline:none;border-bottom-color:var(--accent)}.command-palette-list{max-height:320px;overflow-y:auto;padding:6px}.command-palette-empty{padding:12px 10px;color:var(--text-faint);font-size:var(--type-label)}.command-palette-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-dim);text-align:left;transition:background-color var(--transition-fast)}.command-palette-item.is-selected{background:var(--accent);color:var(--accent-foreground)}.command-palette-item-label{font-size:var(--type-ui);color:var(--text);flex:0 0 auto;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.command-palette-item-meta{font-size:var(--type-meta);color:var(--text-faint);font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.command-palette-item.is-selected .command-palette-item-label,.command-palette-item.is-selected .command-palette-item-meta{color:var(--accent-foreground)}.modal-header{font-size:var(--type-ui);font-weight:600;padding-bottom:16px;margin-bottom:12px;border-bottom:1px solid var(--border)}.modal-input{width:100%;background:var(--bg-3);border:1px solid var(--border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);height:var(--control-h-xs);padding:0 var(--sp2);color:var(--text);font-size:var(--type-ui);transition:border-color var(--transition-fast)}.modal-input:focus{outline:2px solid var(--focus);outline-offset:2px}.modal-error{color:var(--red);font-size:var(--type-label);margin-top:8px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}.recent-dirs{display:flex;align-items:center;flex-wrap:nowrap;gap:var(--sp1);height:var(--pane-header-h);margin-inline:calc(-1 * var(--modal-pad-x, var(--sp5)));padding-inline:var(--modal-pad-x, var(--sp5));border-bottom:1px solid var(--ui-line);overflow-x:auto;scrollbar-width:none}.recent-dirs::-webkit-scrollbar{display:none}.recent-dir-chip{display:inline-flex;align-items:center;flex:0 0 auto;height:var(--control-h-xs);background:var(--bg-3);border:1px solid var(--border-strong);color:var(--text-dim);border-radius:var(--radius-md);padding:0 var(--sp3);font-size:var(--type-meta);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color var(--transition-fast),border-color var(--transition-fast)}.recent-dir-chip:hover{color:var(--text);border-color:var(--accent)}.recent-dir-chip:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.modal-new-session,.modal-add-workspace,.modal-confirm{--modal-pad-x: var(--pane-pad-x);width:440px;padding:0}.modal-confirm{width:400px}.modal-close{margin-left:auto}.modal-primary-cta{min-width:128px}.modal-confirm .modal-header{display:flex;align-items:center;min-height:var(--pane-header-h);padding:0 var(--modal-pad-x);margin-bottom:0}.modal-confirm .modal-body{padding:var(--sp4) var(--modal-pad-x)}.modal-copy{margin:0;color:var(--text-dim);font-size:var(--type-ui);line-height:1.55}.modal-confirm .modal-actions{margin-top:0;padding:var(--sp3) var(--modal-pad-x)}.btn-danger{display:inline-flex;align-items:center;justify-content:center;height:var(--control-h-xs);padding:0 var(--sp3);border:1px solid transparent;border-radius:var(--radius);background:var(--red);color:#fff;font-weight:510;font-size:var(--type-label);transition:background-color var(--transition-fast),transform var(--transition-fast)}.btn-danger:hover{transform:translateY(-1px)}.btn-danger:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.modal-new-session .modal-header,.modal-add-workspace .modal-header{display:flex;align-items:center;min-height:var(--pane-header-h);padding:0 var(--modal-pad-x);margin-bottom:0}.modal-body{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp4);padding:0 var(--modal-pad-x, var(--sp5))}.modal-field-hint{margin:0;padding-bottom:var(--sp2);font-size:var(--type-meta);color:var(--text-faint);line-height:1.5}.modal-section{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp1);min-width:0}.modal-new-session .modal-actions,.modal-add-workspace .modal-actions{margin-top:0;padding:var(--sp3) var(--modal-pad-x)}.harness-select{display:inline-flex;align-items:center;gap:var(--sp2);min-width:0;margin-right:auto;height:var(--control-h-xs);padding:0 var(--sp2);max-width:15rem;background:var(--surface-inset);border:1px solid var(--ui-line);border-radius:var(--radius);color:var(--text);font-size:var(--type-label);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast)}.harness-select:hover:not(:disabled),.harness-select[aria-expanded=true]{background:var(--surface-hover)}.harness-select:active:not(:disabled){background:var(--active-shade)}.harness-select:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.harness-select:disabled{opacity:.42;cursor:default}.harness-select-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(prefers-reduced-motion:reduce){.harness-select{transition:none}}.harness-select-menu{min-width:230px;z-index:140}.dir-picker-inputrow{display:flex;align-items:center;gap:var(--sp2);height:var(--pane-header-h);margin-inline:calc(-1 * var(--modal-pad-x, var(--sp5)));padding-inline:var(--modal-pad-x, var(--sp5));border-bottom:1px solid var(--ui-line)}.dir-picker-up{flex:0 0 auto;width:var(--control-h-xs);height:var(--control-h-xs);display:flex;align-items:center;justify-content:center;background:var(--bg-3);border:1px solid var(--border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);color:var(--text-dim);transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}.dir-picker-up:hover:not(:disabled){background:var(--surface-hover);border-color:var(--ui-line-strong);color:var(--text)}.dir-picker-up:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.dir-picker-up:disabled{opacity:.42;cursor:default}.dir-picker-input{flex:1;font-family:var(--font-mono)}.dir-picker-listing{margin:0 calc(-1 * var(--modal-pad-x, var(--sp5)));border-top:0;border-block:1px solid var(--ui-line);background:var(--surface-inset);max-height:180px;overflow-y:auto}.dir-picker-path{position:sticky;top:0;padding:var(--sp1) var(--modal-pad-x, var(--sp5));font-size:var(--type-micro);font-family:var(--font-mono);color:var(--text-faint);background:var(--bg-3);border-bottom:1px solid var(--border)}.dir-picker-newdir{padding:var(--sp2) var(--modal-pad-x, var(--sp5));font-size:var(--type-label);color:var(--brand)}.dir-picker-empty{padding:var(--sp2) var(--modal-pad-x, var(--sp5));font-size:var(--type-label);color:var(--text-faint)}.dir-picker-item{display:flex;align-items:center;gap:var(--sp2);width:100%;height:var(--control-h-xs);padding:0 var(--modal-pad-x, var(--sp5));border:none;background:transparent;border-radius:0;color:var(--text-dim);font-size:var(--type-ui);text-align:left;transition:background-color var(--transition-fast)}.dir-picker-item:hover{background:var(--surface-hover);color:var(--text)}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);display:flex;align-items:center;gap:10px;max-width:480px;padding:10px 14px;background:var(--bg-2);border:1px solid var(--border-strong);border-left:3px solid var(--red);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:100;animation:pop-in var(--transition-fast) ease-out}.toast-message{color:var(--text);font-size:var(--type-ui);line-height:1.4}.toast-dismiss{border:none;background:transparent;color:var(--text-faint);font-size:var(--type-h2);line-height:1;cursor:pointer;padding:0 2px;border-radius:var(--radius-sm);transition:color var(--transition-fast)}.toast-dismiss:hover{color:var(--text)}.toast-dismiss:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.right-pane{display:flex;flex-direction:column;background:var(--bg-1);min-width:0;min-height:0;overflow:hidden;container:rightpane / inline-size}@container rightpane (max-width: 360px){.right-pane-tabs{gap:2px;padding:0 var(--sp2)}.right-pane-tab{padding:3px var(--sp2)}}.right-pane-tabs{display:flex;align-items:center;gap:var(--sp1);flex-shrink:0;height:var(--pane-header-h);padding:0 var(--pane-pad-x);border-bottom:1px solid var(--border);background:var(--surface-raised)}.right-pane-tab{padding:3px 10px;font-size:var(--type-label);font-weight:500;color:var(--text-faint);background:transparent;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.right-pane-tab:hover{color:var(--text-dim);background:var(--bg-hover)}.right-pane-tab.is-active{color:var(--text);background:var(--bg-1);border-color:var(--border-strong);box-shadow:var(--shadow-xs)}.right-pane-tab:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.right-pane-panel{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.right-pane-panel.is-hidden,.right-pane.is-collapsed{display:none}.right-pane-collapse{margin-left:auto}.right-pane-panel>.canvas-pane{flex:1;min-height:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#a1a1aabf;border-radius:var(--radius-sm)}::-webkit-scrollbar-thumb:hover{background:#a1a1aae6}*{scrollbar-width:thin;scrollbar-color:rgba(161,161,170,.75) transparent}.agent-view{position:relative;flex:1;min-height:0}.agent-view-panel{position:absolute;top:0;right:0;bottom:0;left:0;min-height:0}.shell-scrim{display:none}@media(max-width:768px){.workspace-main{min-width:0}.shell-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:79;background:var(--scrim-bg);animation:fade-in var(--transition-fast)}.rail-workflows{position:fixed;inset:0 auto 0 0;z-index:80;width:min(20rem,85vw)!important;min-width:0!important;border-right:1px solid var(--border-strong);box-shadow:var(--shadow-lg);animation:shell-drawer-in .3s var(--ease)}.right-pane{position:fixed;left:0;right:0;bottom:0;top:var(--pane-header-h);z-index:80;border-top:1px solid var(--border-strong);box-shadow:var(--shadow-lg);animation:shell-sheet-in .3s var(--ease)}}@keyframes shell-drawer-in{0%{transform:translate(-100%)}}@keyframes shell-sheet-in{0%{transform:translateY(100%)}}@media(prefers-reduced-motion:reduce){.rail-workflows,.right-pane,.shell-scrim{animation:none}}.command-palette-row{display:contents}.command-palette-section{font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint);padding:4px 10px;margin-top:var(--sp2)}.command-palette-row:first-child .command-palette-section{margin-top:0}.palette-match{font-weight:700;color:var(--text)}.command-palette-item-meta .palette-match{color:var(--text-dim)}.command-palette-item.is-selected .palette-match{color:var(--accent-foreground)}.command-palette-error{padding:12px 10px;color:var(--red);font-size:var(--type-label)}.modal-scaffold-cta{display:inline-flex;align-items:center;gap:var(--sp2);margin-bottom:var(--sp2)}.modal-scan-btn{display:inline-flex;align-items:center;gap:var(--sp2);margin-right:auto}.mcp-install{display:flex;flex-direction:column;gap:var(--sp2);margin:var(--sp2) 0 var(--sp3);padding:var(--sp3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-2)}.mcp-install-title{font-size:var(--type-label);font-weight:600;color:var(--text)}.mcp-install-hint{margin:0;font-size:var(--type-meta);color:var(--text-faint);line-height:1.5}.mcp-install-actions{display:flex;flex-wrap:wrap;gap:var(--sp2)}.mcp-install-copy{display:inline-flex;align-items:center;gap:var(--sp2)}.recent-dirs[data-fade=right]{-webkit-mask-image:linear-gradient(to right,black calc(100% - 32px),transparent);mask-image:linear-gradient(to right,black calc(100% - 32px),transparent)}.recent-dirs[data-fade=left]{-webkit-mask-image:linear-gradient(to right,transparent,black 32px);mask-image:linear-gradient(to right,transparent,black 32px)}.recent-dirs[data-fade=both]{-webkit-mask-image:linear-gradient(to right,transparent,black 32px,black calc(100% - 32px),transparent);mask-image:linear-gradient(to right,transparent,black 32px,black calc(100% - 32px),transparent)}.dir-picker-error{display:flex;align-items:center;gap:var(--sp2);padding:var(--sp2) var(--modal-pad-x, var(--sp5));font-size:var(--type-label);color:var(--red)}.dir-picker-error>span{flex:1;min-width:0}.dir-picker-retry{flex:0 0 auto}.dead-session-detail{display:flex;flex-direction:column;gap:var(--sp1);min-width:240px;max-width:360px;margin:var(--sp2) 0 var(--sp3);padding:var(--sp2) var(--sp3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-2);text-align:left}.dead-session-detail-row{display:flex;justify-content:space-between;gap:var(--sp4);font-size:var(--type-label)}.dead-session-detail-row dt{color:var(--text-faint);flex:0 0 auto}.dead-session-detail-row dd{margin:0;color:var(--text-dim);text-align:right;overflow-wrap:anywhere}.modal-templates{--modal-pad-x: var(--pane-pad-x);width:720px;max-width:calc(100vw - var(--sp6));max-height:min(600px,calc(100vh - var(--sp7)));padding:0;display:flex;flex-direction:column}.modal-templates .modal-header{display:flex;align-items:center;flex:0 0 auto;min-height:var(--pane-header-h);padding:0 var(--modal-pad-x);margin-bottom:0}.templates-layout{display:grid;grid-template-columns:232px minmax(0,1fr);flex:1;min-height:0}.templates-list{display:flex;flex-direction:column;gap:var(--sp1);padding:var(--sp2);border-right:1px solid var(--ui-line);overflow-y:auto}.templates-list-section{padding:var(--sp2) var(--sp2) 0;font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint)}.template-row{display:flex;flex-direction:column;align-items:stretch;gap:var(--sp1);padding:var(--sp2);border:none;border-radius:var(--radius-sm);background:transparent;text-align:left;transition:background-color var(--transition-fast)}.template-row:hover{background:var(--surface-hover)}.template-row:active{background:var(--active-shade)}.template-row:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.template-row.is-selected{background:var(--accent)}.template-row-name{font-size:var(--type-ui);font-weight:550;color:var(--text)}.template-row-desc{font-size:var(--type-meta);color:var(--text-faint);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.template-row.is-selected .template-row-name,.template-row.is-selected .template-row-desc{color:var(--accent-foreground)}.template-detail{display:flex;flex-direction:column;gap:var(--sp3);padding:var(--sp4) var(--modal-pad-x);overflow-y:auto}.template-detail-head{display:flex;align-items:baseline;gap:var(--sp2);flex-wrap:wrap}.template-detail-name{margin:0;font-size:var(--type-body);font-weight:600;color:var(--text)}.template-tags{display:inline-flex;gap:var(--sp1)}.template-tag{padding:0 var(--sp1);border:1px solid var(--ui-line);border-radius:var(--radius-sm);font-size:var(--type-micro);color:var(--text-faint)}.template-byline{font-size:var(--type-meta);color:var(--text-faint)}.template-byline a{color:inherit}.template-byline a:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:var(--radius-sm)}.template-lead{margin:0;font-size:var(--type-ui);color:var(--text-dim);line-height:1.55}.template-section{display:flex;flex-direction:column;gap:var(--sp2)}.template-section-title{margin:0;font-size:var(--type-micro);font-weight:700;letter-spacing:.01em;color:var(--text-faint)}.template-steps{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--sp2)}.template-step{display:flex;align-items:baseline;gap:var(--sp2)}.template-step-index{flex:0 0 auto;font-family:var(--font-mono);font-size:var(--type-meta);color:var(--text-faint)}.template-step-copy{display:flex;flex-direction:column;gap:0;min-width:0;flex:1}.template-step-name{display:inline-flex;align-items:baseline;gap:var(--sp2);font-family:var(--font-mono);font-size:var(--type-label);color:var(--text)}.template-step-exit{padding:0 var(--sp1);border:1px solid var(--ui-line);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--type-micro);color:var(--text-faint)}.template-step-desc{font-size:var(--type-meta);color:var(--text-faint);line-height:1.4}.template-graph{display:flex;flex-direction:column;gap:var(--sp2);padding:var(--sp3);border:1px solid var(--ui-line);border-radius:var(--radius);background:var(--surface-inset)}.template-graph-item{display:flex;flex-direction:column;gap:var(--sp1)}.template-graph-node{display:flex;align-items:center;gap:var(--sp2);font-size:var(--type-meta);color:var(--text)}.template-graph-name{font-weight:510}.template-graph-edge{padding-left:var(--sp4)}.template-caps{display:flex;flex-wrap:wrap;gap:var(--sp1)}.template-cap{flex:0 0 auto;padding:0 var(--sp1);border:1px solid var(--ui-line);border-radius:var(--radius-sm);background:var(--surface-inset);font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim)}.template-note{margin:0;font-size:var(--type-meta);color:var(--text-faint);line-height:1.5}.template-usecases{margin:0;padding-left:var(--sp4);display:flex;flex-direction:column;gap:var(--sp1);font-size:var(--type-meta);color:var(--text-dim);line-height:1.5}.template-example{border:1px solid var(--ui-line);border-radius:var(--radius-sm)}.template-example-summary{padding:var(--sp2);font-size:var(--type-meta);color:var(--text-dim);cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast)}.template-example-summary:hover{background:var(--surface-hover)}.template-example-summary:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.template-example-body{display:flex;flex-direction:column;gap:var(--sp1);padding:var(--sp2);border-top:1px solid var(--ui-line)}.template-example-label{font-size:var(--type-micro);font-weight:700;color:var(--text-faint)}.template-example-json{margin:0;padding:var(--sp2);border-radius:var(--radius-sm);background:var(--surface-inset);font-family:var(--font-mono);font-size:var(--type-micro);color:var(--text-dim);white-space:pre-wrap;overflow-wrap:anywhere}.template-notes{font-size:var(--type-meta);color:var(--text-dim);line-height:1.5}.template-notes p{margin:0 0 var(--sp2)}.template-notes p:last-child{margin-bottom:0}.template-handoff{margin:0;padding-top:var(--sp2);border-top:1px solid var(--ui-line);font-size:var(--type-meta);color:var(--text-faint);line-height:1.5}.templates-actions{flex:0 0 auto;align-items:center;margin-top:0;padding:var(--sp3) var(--modal-pad-x)}.templates-dest{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--sp1)}.templates-dest .modal-input{font-family:var(--font-mono);font-size:var(--type-label)}.templates-dest-hint,.templates-dest-error{font-size:var(--type-micro);line-height:1.4}.templates-dest-hint{color:var(--text-faint)}.templates-dest-error{margin-top:0}.modal-templates-cta{display:inline-flex;align-items:center;gap:var(--sp2);margin-bottom:var(--sp2);align-self:start}@media(max-width:768px){.modal-templates{max-height:calc(100dvh - var(--sp6))}.templates-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.templates-list{max-height:176px;border-right:none;border-bottom:1px solid var(--ui-line)}.templates-actions{flex-wrap:wrap}.templates-dest{flex:1 1 100%}}@media(prefers-reduced-motion:reduce){.template-row,.template-example-summary{transition:none}}body{font-size:var(--type-ui, 13px)}.session-item-meta,.session-item-cwd,.palette-trigger-hint,.session-history-badge{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.brand-name{font-size:var(--type-body);font-weight:590;letter-spacing:-.03em}.brand-product{font-weight:510;letter-spacing:-.01em}.brand-divider{height:16px;background:var(--ui-line-strong, var(--border-strong))}.theme-toggle{width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius)}.theme-toggle:active{transform:scale(.96)}.brand-identity{font-family:var(--font-mono);font-size:var(--type-meta);letter-spacing:-.01em}.rail{background:var(--surface-raised);border-right:1px solid var(--ui-line, var(--border))}.workflow-item{border-radius:var(--radius);border:1px solid transparent}.workflow-item:hover{background:var(--surface-hover, var(--bg-hover))}.pane-resize-handle{width:9px;background:transparent}.pane-resize-handle:before{content:"";position:absolute;inset:0 auto 0 50%;width:1px;transform:translate(-50%);background:var(--ui-line, var(--border));transition:width var(--fast, .13s) var(--ease),background-color var(--fast, .13s) var(--ease)}.pane-resize-handle:hover,.pane-resize-handle:active{background:transparent}.pane-resize-handle:hover:before,.pane-resize-handle:active:before,.pane-resize-handle:focus-visible:before{width:2px;background:var(--brand)}.pane-resize-handle:focus-visible{outline:none}.center-pane{border-right:1px solid var(--ui-line, var(--border));background:var(--surface-base, var(--bg-0))}.terminal-empty,.rail-empty{color:var(--text-faint)}.session-bar{background:var(--surface-raised);border-bottom:1px solid var(--ui-line, var(--border))}.session-workflow-chip{background:transparent;border:0;padding:0;color:var(--text-faint);font-size:var(--type-meta);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-ghost,.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp1);border-radius:var(--radius);height:var(--control-h-xs);padding:0 var(--sp3);font-weight:510;transition:background-color var(--fast, .13s) var(--ease),border-color var(--fast, .13s) var(--ease),color var(--fast, .13s) var(--ease),transform var(--fast, .13s) var(--ease)}.btn-ghost{border-color:var(--ui-line, var(--border));box-shadow:none}.btn-ghost:hover:not(:disabled){transform:translateY(-1px)}.btn-primary{background:var(--btn);color:var(--btn-ink);border-color:transparent;box-shadow:none}.btn-primary:hover:not(:disabled){background:var(--btn);transform:translateY(-1px);box-shadow:var(--shadow-soft)}.right-pane{background:var(--surface-raised)}.right-pane-tabs{background:var(--surface-raised);border-bottom:1px solid var(--ui-line, var(--border))}.right-pane-tab{display:inline-flex;align-items:center;border-radius:var(--radius);height:var(--control-h-xs);padding:0 var(--sp3);font-weight:510}.right-pane-tab:hover{background:var(--surface-hover, var(--bg-hover))}.right-pane-tab.is-active{background:var(--active-shade);border-color:var(--ui-line, var(--border));box-shadow:none;color:var(--text)}.canvas-pane,.right-pane-panel{background:var(--surface-raised)}.canvas-empty,.canvas-empty-hint{color:var(--text-dim)}.canvas-empty-hint code{font-family:var(--font-mono);font-size:var(--type-meta);padding:1px 5px;border-radius:var(--radius);background:var(--surface-inset, var(--bg-2))}.canvas-frame-wrap{animation:refine-content-in var(--base, .22s) var(--ease) both}.modal-backdrop{background:var(--scrim-bg, rgba(3, 3, 5, .55));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.modal,.command-palette,.settings-popover{border:1px solid var(--ui-line-strong, var(--border-strong));border-radius:var(--radius);box-shadow:var(--shadow);animation:refine-dialog-in var(--base, .22s) var(--ease) both}.settings-popover{border-radius:var(--radius)}.rail-empty,.workspace-group-empty,.terminal-empty,.canvas-empty,.skills-empty,.skills-loading,.dir-picker-empty,.session-dropdown-empty,.command-palette-empty{color:var(--text-faint);font-size:var(--type-label, 12px);line-height:1.5}.skills-error,.modal-error,.welcome-error,.command-palette-error,.dir-picker-error{color:var(--red-text);font-size:var(--type-label, 12px);line-height:1.5}.command-palette-error,.dir-picker-error{padding:var(--sp2, 8px) var(--sp3, 12px);font-family:var(--font-mono);font-size:var(--type-meta, 11px)}.dir-picker-error{padding:var(--sp2, 8px) var(--sp5, 24px)}.workflow-dot,.session-dot{box-shadow:none}@keyframes refine-content-in{0%{opacity:.35;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes refine-dialog-in{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(prefers-reduced-motion:reduce){.btn-ghost:hover:not(:disabled),.btn-primary:hover:not(:disabled){transform:none}.canvas-frame-wrap,.modal,.command-palette,.settings-popover{animation-duration:1ms}}
|