@cjhyy/code-shell-web 0.9.44 → 0.9.46
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/dist/components/ModelTraceExplorer.d.ts +10 -0
- package/dist/components/ModelTraceExplorer.js +490 -0
- package/dist/components/model-trace-presentation.d.ts +11 -0
- package/dist/components/model-trace-presentation.js +73 -0
- package/dist/hooks/useRemoteApp.d.ts +23 -7
- package/dist/hooks/useRemoteApp.js +124 -39
- package/dist/i18n/mobile.d.ts +4 -0
- package/dist/i18n/mobile.js +4 -0
- package/dist/i18n/translate.d.ts +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/lib/format.d.ts +3 -0
- package/dist/lib/format.js +24 -8
- package/dist/lib/mobileAttachments.d.ts +2 -0
- package/dist/lib/mobileAttachments.js +6 -3
- package/dist/lib/storage.js +34 -7
- package/dist/lib/streamReducer.js +26 -7
- package/dist/model-trace-api.d.ts +16 -0
- package/dist/model-trace-api.js +36 -0
- package/dist-app/assets/index-B0Ob4zoq.css +1 -0
- package/dist-app/assets/index-DcljaCB6.js +75 -0
- package/dist-app/index.html +2 -2
- package/package.json +20 -4
- package/dist-app/assets/index-DFx6OGDf.js +0 -57
- package/dist-app/assets/index-DSlekIOe.css +0 -1
package/dist/lib/storage.js
CHANGED
|
@@ -10,30 +10,57 @@ const K = {
|
|
|
10
10
|
deviceSecret: "cs.deviceSecret",
|
|
11
11
|
deviceName: "cs.deviceName",
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Values whose localStorage write failed in this page. Reads prefer them, so
|
|
15
|
+
* one page stays self-consistent even when nothing can be persisted: pairing
|
|
16
|
+
* and the authentication that follows must present the same secret.
|
|
17
|
+
*/
|
|
18
|
+
const unpersisted = new Map();
|
|
13
19
|
/**
|
|
14
20
|
* Best-effort localStorage write. On a quota-constrained mobile browser
|
|
15
21
|
* (iOS/Android default ~5MB) setItem throws QuotaExceededError; since these
|
|
16
22
|
* calls run synchronously inside ws.onopen (the auth handshake), an uncaught
|
|
17
23
|
* throw aborts onopen mid-flight → handshake never sent → blank app, no retry.
|
|
18
|
-
* Swallow the write failure and
|
|
19
|
-
*
|
|
24
|
+
* Swallow the write failure and keep the value for this page instead; losing
|
|
25
|
+
* persistence only means a fresh secret/name next session.
|
|
20
26
|
*/
|
|
21
27
|
function safeSet(key, value) {
|
|
22
28
|
try {
|
|
23
29
|
localStorage.setItem(key, value);
|
|
30
|
+
unpersisted.delete(key);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
/* quota / disabled storage — keep the value for the rest of this page */
|
|
34
|
+
unpersisted.set(key, value);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function safeGet(key) {
|
|
38
|
+
const local = unpersisted.get(key);
|
|
39
|
+
if (local !== undefined)
|
|
40
|
+
return local;
|
|
41
|
+
try {
|
|
42
|
+
return localStorage.getItem(key);
|
|
24
43
|
}
|
|
25
44
|
catch {
|
|
26
|
-
|
|
45
|
+
return null;
|
|
27
46
|
}
|
|
28
47
|
}
|
|
29
48
|
export const deviceStore = {
|
|
30
|
-
getId: () =>
|
|
49
|
+
getId: () => safeGet(K.deviceId) ?? "",
|
|
31
50
|
setId: (v) => safeSet(K.deviceId, v),
|
|
32
|
-
clearId: () =>
|
|
51
|
+
clearId: () => {
|
|
52
|
+
unpersisted.delete(K.deviceId);
|
|
53
|
+
try {
|
|
54
|
+
localStorage.removeItem(K.deviceId);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* disabled storage has nothing persisted to remove */
|
|
58
|
+
}
|
|
59
|
+
},
|
|
33
60
|
/** Get the stable per-browser secret, minting+persisting one on first use.
|
|
34
61
|
* Mirrors the old getSecret() so existing devices keep the same secret. */
|
|
35
62
|
getOrCreateSecret: (mint) => {
|
|
36
|
-
let s =
|
|
63
|
+
let s = safeGet(K.deviceSecret);
|
|
37
64
|
if (!s) {
|
|
38
65
|
s = mint();
|
|
39
66
|
safeSet(K.deviceSecret, s);
|
|
@@ -42,7 +69,7 @@ export const deviceStore = {
|
|
|
42
69
|
},
|
|
43
70
|
/** Device display name, defaulting to a platform-derived label on first use. */
|
|
44
71
|
getOrCreateName: () => {
|
|
45
|
-
let n =
|
|
72
|
+
let n = safeGet(K.deviceName);
|
|
46
73
|
if (!n) {
|
|
47
74
|
const platform = (typeof navigator !== "undefined" && navigator.platform) || "Phone";
|
|
48
75
|
n = translate(loadUILanguage(), "mobile.storage.browserDevice", { platform });
|
|
@@ -118,7 +118,7 @@ export function reduceStream(state, raw) {
|
|
|
118
118
|
...s2,
|
|
119
119
|
items: [...s2.items, item],
|
|
120
120
|
liveByAgent: { ...s2.liveByAgent, [key]: id },
|
|
121
|
-
run: "running",
|
|
121
|
+
run: event.agentId ? s.run : "running",
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
124
|
case "text_delta": {
|
|
@@ -129,7 +129,7 @@ export function reduceStream(state, raw) {
|
|
|
129
129
|
if (live) {
|
|
130
130
|
return {
|
|
131
131
|
...s,
|
|
132
|
-
run: "running",
|
|
132
|
+
run: event.agentId ? s.run : "running",
|
|
133
133
|
items: s.items.map((i) => i.id === liveId && i.kind === "assistant" ? { ...i, text: i.text + text } : i),
|
|
134
134
|
};
|
|
135
135
|
}
|
|
@@ -148,7 +148,7 @@ export function reduceStream(state, raw) {
|
|
|
148
148
|
...s2,
|
|
149
149
|
items: [...s2.items, item],
|
|
150
150
|
liveByAgent: { ...s2.liveByAgent, [key]: id },
|
|
151
|
-
run: "running",
|
|
151
|
+
run: event.agentId ? s.run : "running",
|
|
152
152
|
};
|
|
153
153
|
}
|
|
154
154
|
case "thinking_delta": {
|
|
@@ -158,7 +158,7 @@ export function reduceStream(state, raw) {
|
|
|
158
158
|
if (liveId && s.items.some((i) => i.id === liveId && i.kind === "assistant")) {
|
|
159
159
|
return {
|
|
160
160
|
...s,
|
|
161
|
-
run: "running",
|
|
161
|
+
run: event.agentId ? s.run : "running",
|
|
162
162
|
items: s.items.map((i) => i.id === liveId && i.kind === "assistant" ? { ...i, reasoning: i.reasoning + text } : i),
|
|
163
163
|
};
|
|
164
164
|
}
|
|
@@ -175,7 +175,7 @@ export function reduceStream(state, raw) {
|
|
|
175
175
|
...s2,
|
|
176
176
|
items: [...s2.items, item],
|
|
177
177
|
liveByAgent: { ...s2.liveByAgent, [key]: id },
|
|
178
|
-
run: "running",
|
|
178
|
+
run: event.agentId ? s.run : "running",
|
|
179
179
|
};
|
|
180
180
|
}
|
|
181
181
|
case "tool_use_start": {
|
|
@@ -205,7 +205,12 @@ export function reduceStream(state, raw) {
|
|
|
205
205
|
const { [call.id]: _used, ...restOrphans } = s.orphanResults;
|
|
206
206
|
orphanResults = Object.keys(restOrphans).length > 0 ? restOrphans : undefined;
|
|
207
207
|
}
|
|
208
|
-
return {
|
|
208
|
+
return {
|
|
209
|
+
...s,
|
|
210
|
+
run: event.agentId ? s.run : "running",
|
|
211
|
+
items: [...s.items, item],
|
|
212
|
+
orphanResults,
|
|
213
|
+
};
|
|
209
214
|
}
|
|
210
215
|
case "tool_use_args_delta": {
|
|
211
216
|
// Tool args stream incrementally (large Edit/Write/Bash payloads). Merge
|
|
@@ -238,7 +243,7 @@ export function reduceStream(state, raw) {
|
|
|
238
243
|
orphanResults: {
|
|
239
244
|
...(s.orphanResults ?? {}),
|
|
240
245
|
[result.id]: {
|
|
241
|
-
result: result.result ?? result.error ?? "",
|
|
246
|
+
result: stripSystemReminders(result.result ?? result.error ?? ""),
|
|
242
247
|
error: Boolean(result.isError || result.error),
|
|
243
248
|
},
|
|
244
249
|
},
|
|
@@ -511,6 +516,20 @@ export function reduceStream(state, raw) {
|
|
|
511
516
|
}
|
|
512
517
|
case "error": {
|
|
513
518
|
const [id, s2] = freshId("err");
|
|
519
|
+
if (event.agentId) {
|
|
520
|
+
const key = agentKey(event);
|
|
521
|
+
const { [key]: _gone, ...rest } = s2.liveByAgent;
|
|
522
|
+
return {
|
|
523
|
+
...s2,
|
|
524
|
+
liveByAgent: rest,
|
|
525
|
+
items: [
|
|
526
|
+
...s2.items.map((item) => item.kind === "assistant" && !item.done && item.agentId === key
|
|
527
|
+
? { ...item, done: true }
|
|
528
|
+
: item),
|
|
529
|
+
{ kind: "system_error", id, text: event.error || "运行出错" },
|
|
530
|
+
],
|
|
531
|
+
};
|
|
532
|
+
}
|
|
514
533
|
return {
|
|
515
534
|
...s2,
|
|
516
535
|
run: "error",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ModelTraceConfig, ModelTraceEvent, ModelTraceListQuery, ModelTracePage, ModelTraceSessionPage, ModelTraceRecord } from "@cjhyy/code-shell-core/internal";
|
|
2
|
+
export type { ModelTraceAttempt, ModelTraceCallType, ModelTraceConfig, ModelTraceContentState, ModelTraceEvent, ModelTraceListQuery, ModelTraceOutput, ModelTracePage, ModelTraceSessionPage, ModelTraceRecord, ModelTraceStatus, ModelTraceSummary, ModelTraceSessionSummary, } from "@cjhyy/code-shell-core/internal";
|
|
3
|
+
type RemoteModelTraceQuery = Omit<ModelTraceListQuery, "workspacePath" | "workspaceScopes">;
|
|
4
|
+
export interface RemoteModelTraceApi {
|
|
5
|
+
list(query?: RemoteModelTraceQuery): Promise<ModelTracePage>;
|
|
6
|
+
sessions(query?: RemoteModelTraceQuery): Promise<ModelTraceSessionPage>;
|
|
7
|
+
get(id: string): Promise<{
|
|
8
|
+
record: ModelTraceRecord;
|
|
9
|
+
events: ModelTraceEvent[];
|
|
10
|
+
} | null>;
|
|
11
|
+
getConfig(): Promise<ModelTraceConfig>;
|
|
12
|
+
}
|
|
13
|
+
/** Supply the client's existing authenticated, workspace-bound JSON requester. */
|
|
14
|
+
export declare function createRemoteModelTraceApi(options: {
|
|
15
|
+
request: (path: string, init?: RequestInit) => Promise<unknown>;
|
|
16
|
+
}): RemoteModelTraceApi;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Supply the client's existing authenticated, workspace-bound JSON requester. */
|
|
2
|
+
export function createRemoteModelTraceApi(options) {
|
|
3
|
+
const querySuffix = (query) => {
|
|
4
|
+
const params = new URLSearchParams();
|
|
5
|
+
for (const [key, value] of Object.entries(query)) {
|
|
6
|
+
if (["workspacePath", "workspaceScopes", "storageDir"].includes(key))
|
|
7
|
+
throw new Error("Model history scope belongs to the Host");
|
|
8
|
+
if (value !== undefined)
|
|
9
|
+
params.set(key, String(value));
|
|
10
|
+
}
|
|
11
|
+
return params.size ? `?${params}` : "";
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
async list(query = {}) {
|
|
15
|
+
return (await options.request(`/api/v1/model-traces${querySuffix(query)}`));
|
|
16
|
+
},
|
|
17
|
+
async sessions(query = {}) {
|
|
18
|
+
return (await options.request(`/api/v1/model-traces/sessions${querySuffix(query)}`));
|
|
19
|
+
},
|
|
20
|
+
async get(id) {
|
|
21
|
+
if (!/^[A-Za-z0-9_-]{1,128}$/.test(id))
|
|
22
|
+
throw new Error("Invalid model trace id");
|
|
23
|
+
try {
|
|
24
|
+
return (await options.request(`/api/v1/model-traces/${encodeURIComponent(id)}`));
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error?.status === 404)
|
|
28
|
+
return null;
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
async getConfig() {
|
|
33
|
+
return (await options.request("/api/v1/model-traces/config"));
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.environment-trigger{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.environment-dialog{width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 32px);box-sizing:border-box;overflow:auto;border:1px solid var(--border, #777);border-radius:16px;padding:20px;background:var(--bg, #151719);color:var(--text, #f5f5f5)}.environment-dialog::backdrop{background:#0008}.environment-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px}.environment-dialog h2{margin:0;font-size:20px}.environment-dialog p{line-height:1.6}.environment-location,.environment-list small{overflow-wrap:anywhere}.environment-list{padding:0;list-style:none;display:grid;gap:12px}.environment-list li{display:flex;align-items:center;gap:8px;padding-block:10px;border-bottom:1px solid var(--border, #777)}.environment-list li>div{flex:1;min-width:0}.environment-list small{display:block;margin-top:4px;opacity:.7}.environment-dialog form{display:grid;gap:12px;margin-top:20px}.environment-dialog label{display:grid;gap:6px}.environment-dialog input{box-sizing:border-box;width:100%;min-height:44px;padding:10px;border:1px solid var(--border, #777);border-radius:8px;background:transparent;color:inherit;font-size:16px}.environment-dialog button{min-height:44px}.environment-hint{font-size:12px;opacity:.7}@media(max-width:420px){.environment-list li{flex-wrap:wrap}.environment-list li>div{flex-basis:100%}}.hub-skills{max-width:1060px;width:100%;margin:0 auto;padding:36px 40px 64px;color:var(--text);box-sizing:border-box}.skills-heading,.skills-heading>div:last-child,.skills-actions,.skills-filter,.skills-card-heading,.skills-workspace-panel>header{display:flex;align-items:center;gap:10px}.skills-heading{justify-content:space-between;gap:20px;margin-bottom:28px}.skills-heading h1{font-size:26px;letter-spacing:-.7px;margin:6px 0 8px}.skills-heading p,.skills-eyebrow,.skills-count,.skills-source,.skills-progress{color:var(--muted);font-size:13px}.skills-heading p{margin:0;line-height:1.6}.skills-eyebrow{font-size:11px;letter-spacing:.06em}.skills-actions{flex-wrap:wrap}.skills-filter{margin:24px 0 12px}.skills-filter>label{position:relative;flex:1}.hub-skills input:not([type=radio]),.hub-skills select,.hub-skills textarea{box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font:inherit;min-width:0}.hub-skills input:not([type=radio]),.hub-skills textarea{width:100%}.hub-skills input:focus,.hub-skills textarea:focus,.hub-skills select:focus{outline:2px solid var(--accent);outline-offset:2px}.hub-skills input:read-only,.hub-skills textarea:read-only{background:var(--panel)}.hub-skills label>span:first-child{display:block;font-size:12px;font-weight:600;margin-bottom:8px}.skills-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.skills-card{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:18px;min-width:0;display:flex;flex-direction:column}.skills-card-heading{justify-content:space-between;align-items:flex-start}.skills-card h2{font-size:15px;margin:0 0 10px;overflow-wrap:anywhere}.skills-card .config-badge{margin:0 5px 4px 0}.skills-card>p{font-size:13px;line-height:1.65;overflow-wrap:anywhere}.skills-card footer{margin-top:auto;padding-top:12px;gap:4px}.skills-remove{margin-left:auto}.skills-danger{background:var(--danger);border-color:var(--danger);color:#fff}.skills-source{font-family:ui-monospace,monospace;font-size:11px!important}.skills-empty{padding:48px 20px;text-align:center;border:1px dashed var(--border);border-radius:12px}.skills-empty h2{font-size:18px}.skills-empty p{font-size:14px;color:var(--muted)}.skills-workspace-panel{margin:20px 0 28px;padding:24px;border:1px solid var(--border);border-radius:14px;background:var(--panel)}.skills-workspace-panel>header{justify-content:space-between;margin-bottom:20px}.skills-workspace-panel h2{font-size:18px;margin:0;overflow-wrap:anywhere}.skills-workspace-panel h2:focus{outline:none}.skills-workspace-panel fieldset{padding:0;border:0;min-width:0;margin:0}.skills-workspace-panel label{display:block;margin:0 0 18px}.skills-workspace-panel textarea{font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;min-height:160px;tab-size:2}.skills-workspace-panel small{display:block;color:var(--muted);font-size:11px;line-height:1.6;margin-top:6px}.skills-editor .skills-actions{justify-content:space-between}.skills-editor .config-help{max-width:70%}.skills-unsaved{display:inline!important;margin-left:10px;color:var(--accent)!important}.skills-field-error{color:var(--danger);font-size:12px}.skills-source-choices{max-height:350px;overflow:auto;margin:12px 0 20px}.skills-source-choices label{display:flex;align-items:flex-start;gap:12px;padding:14px;border:1px solid var(--border);border-radius:8px;cursor:pointer;margin-bottom:8px}.skills-source-choices input{margin-top:4px;accent-color:var(--accent)}.skills-source-choices strong{font-size:14px}.skills-source-choices small{overflow-wrap:anywhere}.skills-import-preview a{color:var(--accent);overflow-wrap:anywhere}.skills-update-preview>p,.skills-remove-confirm>p{font-size:13px;line-height:1.75}.skills-update-preview details{margin:16px 0}.skills-update-preview ul{list-style:none;padding:0;max-height:220px;overflow:auto}.skills-update-preview li{font-size:12px;display:flex;justify-content:space-between;gap:12px;padding:5px 0}.skills-update-preview li code{overflow-wrap:anywhere}.skills-update-preview li span{white-space:nowrap;color:var(--muted)}.skills-directories{margin-top:28px;font-size:12px;color:var(--muted);line-height:1.8}.skills-directories summary{cursor:pointer;color:var(--text)}.skills-directories code{overflow-wrap:anywhere}.skills-progress{padding:0 2px}.hub-skills button:disabled{opacity:.5;cursor:not-allowed}.hub-skills .config-switch{flex-shrink:0}.hub-skills .config-help{font-size:12px;color:var(--muted);line-height:1.6}@media(max-width:1000px){.skills-heading{align-items:flex-start;flex-direction:column}.skills-list{grid-template-columns:1fr}}@media(max-width:600px){.hub-skills{padding:24px 16px 44px}.skills-heading{gap:16px}.skills-heading h1{font-size:24px}.skills-heading .skills-actions{width:100%}.skills-heading .skills-actions button{flex:1}.skills-filter{flex-wrap:wrap}.skills-filter>label{flex-basis:100%}.skills-filter select{flex:1}.skills-workspace-panel{padding:16px}.skills-editor .config-help{max-width:100%}.skills-editor .skills-actions{align-items:flex-start;flex-direction:column}.skills-card{padding:16px}.skills-card footer{flex-wrap:wrap}.skills-update-preview li{flex-direction:column;gap:2px}}.skills-conflict{display:grid;gap:8px}.hub-mcp{min-width:0}.hub-mcp-toolbar{margin-top:0;flex-wrap:wrap}.hub-mcp-toolbar-actions{display:flex;gap:6px}.hub-mcp-list{display:flex;flex-direction:column;gap:12px}.hub-mcp-card{padding:18px 20px}.hub-mcp-card-head{display:flex;align-items:center;gap:12px}.hub-mcp-endpoint{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:17px 0 10px 44px;font-size:11px}.hub-mcp-endpoint code{overflow-wrap:anywhere;color:var(--text)}.hub-mcp-endpoint>span{color:var(--muted);font-size:10px}.hub-mcp-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:10px;margin-left:44px}.hub-mcp-card-actions{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin:16px 0 0 44px}.hub-mcp .hub-mcp-remove{color:var(--danger, #c5443c)}.hub-mcp-delete{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:12px;margin-top:15px;background:var(--panel);border-radius:8px;font-size:11px}.hub-mcp-delete>div{display:flex;gap:6px}.hub-mcp-editor-card{padding:20px;margin-bottom:16px}.hub-mcp-editor-card>h2{margin:0 0 18px}.hub-mcp-editor{position:relative;margin-top:20px}.hub-mcp-operation-error{min-width:0;max-height:min(12rem,35dvh);overflow:auto;overflow-wrap:anywhere;overscroll-behavior:contain}.hub-mcp-delete>.hub-mcp-operation-error{flex-basis:100%}.hub-mcp-editor-card .hub-mcp-editor{margin-top:0}.hub-mcp textarea{display:block;width:100%;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font-family:inherit;font-size:12px;line-height:1.6;resize:vertical}.hub-mcp textarea:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.hub-mcp textarea::placeholder{color:var(--muted);opacity:.75}.hub-mcp textarea:disabled{opacity:.55}.hub-mcp .hub-mcp-check{display:flex;flex-direction:row;align-items:flex-start;gap:8px;font-size:11px;margin:15px 0}.hub-mcp .hub-mcp-check input{width:14px;min-width:14px;height:14px;min-height:14px;margin:2px 0 0;padding:0;accent-color:var(--accent)}.hub-mcp-check span{flex:1}.hub-mcp-reuse{padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.hub-mcp-keys{margin:20px 0}.hub-mcp-key-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.hub-mcp-key-heading h3{margin:0;font-size:12px}.hub-mcp-key-row{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr) auto;gap:7px;align-items:center;margin-top:7px}.hub-mcp-key-row label{display:block;min-width:0}.hub-mcp-key-removed label{opacity:.5}.hub-mcp-key-removed label:first-child input{text-decoration:line-through}.hub-mcp-advanced{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:13px 0;margin:19px 0}.hub-mcp-advanced>summary{cursor:pointer;font-size:12px;color:var(--muted)}.hub-mcp-advanced[open]>summary{margin-bottom:16px}.hub-mcp-probing{margin:16px 0 0;font-size:11px;color:var(--muted)}.hub-mcp-probe-result{margin-top:17px;padding:13px 15px;border-radius:8px;border:1px solid var(--border);background:var(--panel);font-size:11px}.hub-mcp-probe-summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.hub-mcp-probe-summary strong{font-weight:500}.hub-mcp-probe-summary>span{color:var(--muted);font-size:10px}.hub-mcp-probe-result>p{margin:7px 0 0;color:var(--muted)}.hub-mcp-probe-ok .hub-mcp-probe-summary strong{color:var(--accent)}.hub-mcp-probe-error .hub-mcp-probe-summary strong{color:var(--danger, #c5443c)}.hub-mcp-probe-result details{margin-top:12px}.hub-mcp-probe-result summary{cursor:pointer}.hub-mcp-probe-result ul{list-style:none;padding:0;margin:10px 0 0;max-height:300px;overflow-y:auto}.hub-mcp-probe-result li{padding:10px 0;border-top:1px solid var(--border)}.hub-mcp-probe-result li>div{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.hub-mcp-probe-result li p{color:var(--muted);margin:5px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.hub-mcp-explanation{margin-top:24px;line-height:1.8}.hub-mcp-removed{margin-top:20px;color:var(--muted);font-size:11px}.hub-mcp-removed summary{cursor:pointer}.hub-mcp-removed-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0}@media(max-width:700px){.hub-mcp-card,.hub-mcp-editor-card{padding:16px}.hub-mcp-endpoint,.hub-mcp-metadata,.hub-mcp-card-actions{margin-left:0}.hub-mcp-toolbar .config-search{width:100%}.hub-mcp-toolbar-actions{margin-left:auto}.hub-mcp-key-row{grid-template-columns:minmax(0,1fr) auto;padding-bottom:8px}.hub-mcp-key-row label:first-child{grid-column:1/-1}.hub-mcp-probe-summary{flex-wrap:wrap;gap:4px}.hub-mcp .config-form-actions{flex-wrap:wrap}}.hub-settings{flex:1;min-height:0;overflow-y:auto;width:min(920px,100%);margin:0 auto;padding:40px 42px 56px;color:var(--text);font-size:13px;line-height:1.55;overflow-wrap:anywhere}.hub-settings *{box-sizing:border-box}.hub-settings-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.hub-settings-eyebrow{display:block;color:var(--muted);font-size:11px;margin-bottom:6px;letter-spacing:.04em}.hub-settings h1{margin:0;font-size:26px;font-weight:600;letter-spacing:-.035em}.hub-settings-heading p{margin:7px 0 0;color:var(--muted)}.hub-settings h2{font-size:14px;font-weight:600}.hub-settings h3{font-size:13px;font-weight:600;margin:0 0 16px}:is(.hub-settings,.hub-skills) .config-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:5px;border:1px solid var(--border);border-radius:7px;padding:7px 11px;min-height:33px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px;line-height:1.3;cursor:pointer;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-button:hover{background:var(--hover, var(--panel))}:is(.hub-settings,.hub-skills) .config-button-quiet{background:transparent;border-color:transparent;color:var(--muted)}:is(.hub-settings,.hub-skills) .config-button-primary{background:var(--accent);color:var(--accent-text, white);border-color:var(--accent)}:is(.hub-settings,.hub-skills) .config-button-primary:hover{filter:brightness(.94);background:var(--accent)}.hub-settings button:disabled{opacity:.45;cursor:default}:is(.hub-settings,.hub-skills) button:focus-visible,:is(.hub-settings,.hub-skills) summary:focus-visible,:is(.hub-settings,.hub-skills) input:focus-visible,:is(.hub-settings,.hub-skills) select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.config-card{border:1px solid var(--border);border-radius:12px;background:var(--surface, var(--bg))}.config-workspace-card{display:flex;align-items:flex-start;gap:14px;padding:20px;border-radius:12px;background:var(--panel)}.config-workspace-card>div{min-width:0;flex:1}.config-workspace-card strong{display:block;font-weight:500}.config-workspace-card code{display:block;margin:6px 0;font-size:11px;word-break:break-all}.config-workspace-card p{margin:0;color:var(--muted);font-size:12px}.config-workspace-icon,.config-row-icon,.config-model-icon,.config-skill-icon{display:grid;place-items:center;flex-shrink:0;width:32px;height:32px;border-radius:8px;background:var(--panel);color:var(--muted);font-size:20px}.config-workspace-icon{background:var(--surface, var(--bg))}:is(.hub-settings,.hub-skills) .config-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 7px;min-height:21px;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:10px;font-weight:400;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-badge-accent{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 25%,transparent);background:color-mix(in srgb,var(--accent) 6%,transparent)}.config-section-title{margin:28px 0 12px}.config-overview-list{overflow:hidden}.hub-settings .config-overview-row{display:flex;align-items:center;gap:13px;padding:17px 20px;width:100%;background:transparent;text-align:left;border:none;border-radius:0;color:inherit;font:inherit}.hub-settings button.config-overview-row{cursor:pointer}.hub-settings button.config-overview-row:hover{background:var(--hover, var(--panel))}.config-overview-row+.config-overview-row{border-top:1px solid var(--border)}.config-row-copy{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}.config-row-copy strong{font-weight:500}.config-row-copy>span{color:var(--muted);font-size:11px}.config-chevron{font-size:21px;color:var(--muted)}.config-explanation{margin-top:28px}.config-explanation h2{margin:0 0 8px}.config-explanation p{color:var(--muted);font-size:12px;margin:8px 0;line-height:1.8}.config-scope-note{border-top:1px solid var(--border);padding-top:18px;margin:32px 0 0;color:var(--muted);font-size:11px}.config-message{padding:10px 13px;border:1px solid var(--border);border-radius:8px;margin:0 0 18px;font-size:12px}.config-error{color:var(--danger, #c5443c);background:color-mix(in srgb,var(--danger, #c5443c) 6%,transparent);border-color:color-mix(in srgb,var(--danger, #c5443c) 22%,transparent)}.config-success{color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,transparent)}.hub-settings .config-action-feedback{max-height:min(12rem,30dvh);min-width:0;overflow:auto;overscroll-behavior:contain;margin:12px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.hub-settings .config-action-feedback:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.config-loading,.config-help{color:var(--muted);font-size:11px}.config-section-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:26px 0 12px}.config-section-heading h2{margin:0}.config-count{font-size:11px;font-weight:400;color:var(--muted);margin-left:5px}.config-defaults{padding:20px}.hub-settings fieldset{margin:0;padding:0;border:0;min-width:0}.hub-settings legend{padding:0;margin:0 0 15px;font-weight:500;font-size:13px}.config-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.config-form-grid label{display:flex;flex-direction:column;align-items:stretch;gap:7px;min-width:0;font-size:11px}.hub-settings input,.hub-settings select{display:block;width:100%;min-width:0;min-height:35px;padding:8px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px}.hub-settings input::placeholder{color:var(--muted);opacity:.75}.hub-settings input[readonly]{color:var(--muted);background:var(--panel)}.hub-settings input:disabled,.hub-settings select:disabled{opacity:.6}.config-form-grid small{color:var(--muted);font-size:10px}.config-full-width{grid-column:1 / -1}.config-form-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:14px}.config-form-footer p{margin:0}.config-form-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:20px}.config-connection-list{display:flex;flex-direction:column;gap:12px}.config-connection-card,.config-editor-card{padding:18px 20px}.config-editor-card{margin-bottom:12px}.config-connection-head{display:flex;align-items:center;gap:11px}.config-connection-facts{margin:18px 0 0 43px;font-size:11px}.config-connection-facts>div{display:grid;grid-template-columns:75px minmax(0,1fr);gap:12px;margin-top:7px}.config-connection-facts dt{color:var(--muted)}.config-connection-facts dd{margin:0;overflow-wrap:anywhere}.config-connection-editor{position:relative;margin-top:18px}.config-field-meta{color:var(--muted);margin-left:5px;font-size:10px}.config-empty{padding:34px 24px;border:1px dashed var(--border);border-radius:12px;text-align:center}.config-empty>span{color:var(--muted);font-size:27px}.config-empty h3{margin:9px 0 6px}.config-empty p{max-width:440px;margin:0 auto;color:var(--muted);font-size:12px}.config-skills-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.config-search{position:relative;display:block;width:min(360px,100%)}.config-search>span{position:absolute;top:5px;left:10px;font-size:21px;color:var(--muted)}.hub-settings .config-search input{padding-left:33px}.config-skills-toolbar>.config-help{white-space:nowrap}.config-skill-list{overflow:hidden}.config-skill+.config-skill{border-top:1px solid var(--border)}.config-skill-row{display:flex;align-items:flex-start;gap:12px;padding:18px 20px}.config-skill-copy{flex:1;min-width:0}.config-skill-copy>strong{display:block;font-size:12px;font-weight:500}.config-skill-copy>p{margin:4px 0 9px;color:var(--muted);font-size:11px;line-height:1.6}.config-skill-meta{display:flex;align-items:center;gap:12px}.hub-settings .config-text-button{background:none;border:0;padding:0;color:var(--muted);font:inherit;font-size:10px;cursor:pointer}.hub-settings .config-text-button:hover{color:var(--text)}:is(.hub-settings,.hub-skills) .config-switch{flex-shrink:0;width:29px;height:17px;min-height:0;border:none;border-radius:999px;padding:2px;background:var(--border);margin-top:4px;cursor:pointer}:is(.hub-settings,.hub-skills) .config-switch>span{display:block;height:13px;width:13px;border-radius:50%;background:#fff;transform:translate(0);box-shadow:0 1px 2px #0002;transition:transform .12s ease}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]{background:var(--accent)}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]>span{transform:translate(12px)}.config-skill-detail{margin:0 20px 18px 64px;padding:14px 16px;background:var(--panel);border-radius:8px}.config-skill-detail pre{margin:0;max-height:430px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace}.config-skill-detail>p{color:var(--muted);font-size:11px;margin:0}.config-detail-error{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--danger, #c5443c);font-size:11px}.config-directories{margin-top:24px;font-size:11px;color:var(--muted)}.config-directories summary{cursor:pointer;width:fit-content}.config-directories p{margin:12px 0 8px}.config-directories ul{padding-left:16px;margin:0}.config-directories li{margin-top:6px}.config-directories code{font-size:10px;word-break:break-all}.config-mcp-row{display:flex;align-items:center;gap:12px;padding:17px 20px}.config-mcp-row+.config-mcp-row{border-top:1px solid var(--border)}.config-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:700px){.hub-settings{padding:24px 20px 40px}.hub-settings-heading{gap:12px;margin-bottom:24px}.hub-settings h1{font-size:23px}.config-workspace-card{flex-wrap:wrap;padding:17px}.config-workspace-card>.config-badge{margin-left:46px}.config-form-grid{grid-template-columns:minmax(0,1fr)}.config-form-footer{align-items:flex-start;flex-direction:column;gap:12px}.config-defaults,.config-connection-card,.config-editor-card{padding:17px}.config-connection-facts{margin-left:0}.config-connection-facts>div{grid-template-columns:65px minmax(0,1fr);gap:8px}.config-skill-row{padding:16px;gap:10px}.config-skill-icon{display:none}.config-skill-detail{margin:0 16px 16px;padding:12px}.config-skills-toolbar{flex-wrap:wrap;gap:9px}.config-search{width:100%}.config-section-heading{gap:8px}.config-mcp-row{padding:16px}}@media(prefers-reduced-motion:reduce){:is(.hub-settings,.hub-skills) .config-switch>span{transition:none}}.config-model-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:16px 18px 0}.config-remove-connection{margin-left:auto}.config-probe-result{display:flex;flex-direction:column;gap:4px;margin:12px 18px 0;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:var(--muted);background:var(--panel)}.config-probe-result.is-success{color:var(--success)}.config-probe-result small{font-size:11px;color:var(--muted)}.config-remove-confirm{margin:16px 18px 0;padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.config-remove-confirm h3{margin-bottom:8px}.config-remove-confirm p{font-size:12px;line-height:1.6}.config-remove-confirm label{display:block;margin:14px 0}.config-remove-confirm label>span{display:block;margin-bottom:7px;font-size:12px}.hub-settings .config-button-danger{background:var(--danger);border-color:var(--danger);color:#fff}.hub-settings .config-button-danger:hover{background:var(--danger);filter:brightness(.94)}.config-connection-editor .config-remove-confirm{margin:14px 0}@media(max-width:600px){.config-model-actions .config-help{flex-basis:100%;order:3}.config-model-actions,.config-probe-result,.config-remove-confirm{margin-left:14px;margin-right:14px}}.hub-library{height:100%;overflow:auto;padding:30px clamp(18px,4vw,52px) 44px}.library-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.library-heading h1{margin:0 0 8px;font-size:24px;font-weight:650;letter-spacing:-.5px}.library-heading p,.library-hint{margin:0;color:var(--muted);line-height:1.7;font-size:13px}.library-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:7px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:13px;text-decoration:none;cursor:pointer;white-space:nowrap}.library-button:hover{background:var(--hover)}.library-button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.library-button.danger{color:var(--danger)}.library-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.library-error{background:color-mix(in srgb,var(--danger) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--danger) 28%,var(--border));padding:12px 14px;border-radius:9px;margin:12px 0;overflow-wrap:anywhere}.library-empty{padding:32px 18px;text-align:center;color:var(--muted);line-height:1.8}.library-search input,.hub-library select,.library-title-input{width:100%;min-height:38px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);padding:8px 11px}.file-breadcrumbs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:16px 0;color:var(--muted);font-size:13px}.file-breadcrumbs button{border:none;background:none;color:inherit;padding:4px;max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.file-breadcrumbs button:hover{color:var(--text);text-decoration:underline}.file-columns{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}.file-columns.has-preview{grid-template-columns:minmax(230px,1fr) minmax(0,1.7fr)}.file-directory{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:hidden}.file-directory .library-search{display:block;padding:12px;border-bottom:1px solid var(--subtle)}.file-directory .library-hint{padding:14px}.file-entry{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;text-align:left;border:none;border-bottom:1px solid var(--subtle);background:transparent;color:var(--text);padding:10px 14px;cursor:pointer}.file-entry:last-child{border-bottom:none}.file-entry:hover,.file-entry.selected{background:var(--hover)}.file-glyph{font-size:24px;line-height:1;color:var(--muted)}.file-entry-name{min-width:0;flex:1;overflow-wrap:anywhere;font-size:13px}.file-entry-size{color:var(--muted);font-size:11px;white-space:nowrap}.file-preview{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.file-preview header{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px;border-bottom:1px solid var(--subtle);flex-wrap:wrap}.file-preview header strong{display:block;font-size:13px;overflow-wrap:anywhere}.file-preview header>div>span{display:block;font-size:11px;color:var(--muted);margin-top:4px}.file-preview pre{max-height:65vh;overflow:auto;margin:0;padding:18px;font:12px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;tab-size:2}.file-preview>img{display:block;max-width:100%;max-height:65vh;object-fit:contain;margin:auto;padding:16px}.file-preview .library-hint{padding:12px 18px;border-top:1px solid var(--subtle)}.file-read-error{margin:14px}.file-read-error p{margin:8px 0 12px;line-height:1.6}.file-back-label{display:none}.file-directory:focus-visible,.file-preview:focus-visible,.file-preview pre:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-toolbar{display:flex;gap:12px;margin:20px 0}.session-toolbar .library-search{flex:1}.session-toolbar select{width:auto;min-width:110px}.session-history-list{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:visible}.session-history-row{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--subtle);padding:17px 18px}.session-history-row:last-child{border-bottom:none}.session-history-info{flex:1;min-width:0}.session-history-title{border:none;padding:0;background:none;color:var(--text);text-align:left;font-weight:550;cursor:pointer;overflow-wrap:anywhere}.session-history-info p{color:var(--muted);font-size:12px;margin:6px 0 0;line-height:1.6;overflow-wrap:anywhere}.session-history-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;color:var(--muted);font-size:11px}.session-history-editor{width:100%;display:flex;flex-direction:column;gap:14px;padding:18px;margin-bottom:18px;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow-wrap:anywhere}.session-history-editor h2{margin:0 0 6px;font-size:16px}.session-history-editor label>span{display:block;margin-bottom:7px;font-size:13px}.session-history-editor .library-error{margin:0}.session-title-review{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.session-title-review strong{color:var(--text)}.session-history-editor .library-error:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.session-load-more{display:flex;justify-content:center;padding:20px}.session-export{position:relative}.session-export summary{list-style:none}.session-export summary::-webkit-details-marker{display:none}.session-export>div{position:absolute;right:0;z-index:2;min-width:160px;padding:5px;margin-top:5px;border:1px solid var(--border);border-radius:9px;background:var(--surface);box-shadow:var(--shadow)}.session-export a{display:block;color:var(--text);text-decoration:none;font-size:12px;white-space:nowrap;padding:10px;border-radius:5px}.session-export a:hover{background:var(--hover)}.navigation-prompt{max-width:min(440px,calc(100vw - 32px));border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);padding:24px;box-shadow:var(--shadow)}.navigation-prompt::backdrop{background:#0006}.navigation-prompt h2{font-size:18px;margin:0 0 12px}.navigation-prompt p{color:var(--muted);font-size:13px;line-height:1.8;margin:0 0 20px}.attachment-open{color:inherit;cursor:pointer}.attachment-open:hover{background:var(--hover)}@media(max-width:1000px){.file-columns.has-preview{grid-template-columns:minmax(0,1fr)}.file-columns.has-preview .file-directory{display:none}.file-back-label{display:inline}.file-close-label{display:none}}@media(max-width:600px){.hub-library{padding:22px 16px 32px}.library-heading{align-items:flex-start}.library-heading h1{font-size:22px}.session-history-row{align-items:flex-start;flex-direction:column;gap:12px}.session-history-row .library-actions{width:100%}.file-preview .library-actions{gap:6px}}.hub-sessions .session-operation-receipt,.hub-sessions .session-read-error,.hub-sessions .session-history-editor .library-error{max-height:min(12rem,30dvh);min-width:0;overflow:auto;overscroll-behavior:contain;white-space:pre-wrap;overflow-wrap:anywhere}.hub-sessions .session-operation-receipt{flex-basis:100%;margin:0}.hub-sessions .session-history-row.has-feedback{flex-wrap:wrap}.hub-sessions .session-read-error:focus-visible,.hub-sessions .session-operation-receipt:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.hub-links{max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-links h1{margin:0 0 8px;font-size:26px}.hub-links h2{font-size:18px;margin:24px 0 16px}.hub-links h3{font-size:15px}.hub-links p{line-height:1.6}.links-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.links-heading p,.links-muted,.links-host,.links-provider p,.links-connection p,.hub-links small{color:var(--muted)}.links-host{padding-bottom:16px;border-bottom:1px solid var(--border)}.links-heading input{max-width:240px;min-width:0}.hub-links input{display:block;box-sizing:border-box;width:100%;margin-top:8px;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:inherit;font:inherit}.hub-links button{border:1px solid var(--border);border-radius:7px;padding:7px 12px;background:var(--panel);color:inherit;cursor:pointer}.hub-links button:disabled{opacity:.5;cursor:default}.hub-links a{color:var(--accent)}.links-providers{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.links-provider,.links-connection,.links-editor{border:1px solid var(--border);border-radius:12px;padding:20px;background:var(--panel)}.links-provider{display:flex;flex-direction:column;align-items:flex-start}.links-provider p{margin-top:0;flex:1}.links-provider button{margin-top:16px}.links-brand{font-weight:700;font-size:19px;min-width:38px;min-height:38px;display:grid;place-items:center;border-radius:9px;background:var(--bg)}.links-connections{display:grid;gap:12px}.links-connection{display:flex;justify-content:space-between;gap:16px}.links-connection p{margin:6px 0}.links-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.links-state{font-size:12px;display:inline-block;padding:3px 8px;border-radius:5px;margin:4px 10px 4px 0;background:var(--bg)}.links-state.ready,.links-notice{color:var(--success)}.links-editor-backdrop{position:fixed;inset:0;z-index:999;background:#00000073}.links-editor{position:fixed;z-index:1000;left:50%;top:50%;transform:translate(-50%,-50%);width:min(540px,calc(100vw - 48px));max-height:calc(100dvh - 64px);box-sizing:border-box;overflow-y:auto;padding:28px;box-shadow:0 24px 80px #0000003d}.links-editor h2{margin-top:0}.links-editor label{display:block;margin:16px 0}.links-auth-option{padding:16px 0;border-top:1px solid var(--border);margin-top:20px}.links-auth-option details{margin-top:14px}.hub-links details li{padding:4px 0;line-height:1.6}.hub-links summary{cursor:pointer}.links-device-code{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;margin-top:16px}.links-device-code>strong{font-size:26px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.links-confirm,.links-conflict{border:1px solid var(--border);padding:16px;border-radius:9px;margin:16px 0;background:var(--bg)}.links-confirm button+button{margin-left:8px}.links-authorization{margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}.links-authorization>.links-actions{margin:20px 0 12px}.link-authorization-step{margin:20px 0}.link-authorization-actions,.links-methods{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.link-authorization-code{display:block;padding:18px;border:1px solid var(--border);border-radius:10px;background:var(--bg);text-align:center;font-size:28px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.link-authorization-expires,.links-other-methods{color:var(--muted);font-size:12px}.link-authorization-error{color:var(--danger, #d04c4c)}.link-authorization-qr{text-align:center}.link-authorization-qr img{display:block;margin:16px auto;border-radius:12px;background:#fff}.link-authorization-fields>button,.link-authorization-consent>button{width:100%;padding:11px 16px;margin-top:12px;background:var(--accent);color:#fff}.link-authorization-consent label{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}.link-authorization-consent input[type=checkbox]{width:auto;margin:3px 0 0}.link-authorization-consent small{display:block;flex-basis:100%;margin-left:24px}.link-authorization-consent fieldset{margin:16px 0;border:1px solid var(--border);border-radius:8px}@media(max-width:640px){.hub-links{padding:20px 16px}.links-connection{flex-direction:column}.links-heading{align-items:flex-start}.links-heading input{max-width:160px}.links-editor{padding:16px}.links-providers{grid-template-columns:1fr}}.links-heading>button{flex-shrink:0;white-space:nowrap}.links-editor-error{max-height:min(12rem,40dvh);overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}.links-editor-error:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hub-panels{flex:1;min-height:0;width:100%;overflow-y:auto;max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-panels h1{margin:0 0 8px;font-size:26px}.hub-panels h2{margin:0;font-size:18px}.hub-panels h3{margin:0;font-size:15px}.hub-panels p{line-height:1.6}.panels-muted,.hub-panels small,.panels-card>p,.panels-heading p{color:var(--muted)}.panels-heading,.panels-card-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.panels-heading{margin-bottom:20px}.panels-heading p{margin:8px 0 0}.panels-section{margin-top:28px}.panels-card,.panels-import,.panels-review,.panels-empty{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:20px}.panels-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.panels-card{display:flex;flex-direction:column;min-width:0}.panels-card>p{margin:10px 0}.panels-card .panels-actions{margin-top:auto;padding-top:18px}.panels-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.hub-panels button{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);font:inherit;cursor:pointer}.hub-panels button:disabled{opacity:.5;cursor:default}.hub-panels button.panels-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text, white)}.hub-panels button.panels-danger{color:var(--danger)}.hub-panels input:not([type=checkbox]){box-sizing:border-box;display:block;width:100%;min-width:0;margin-top:7px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:inherit;background:var(--bg);font:inherit}.panels-heading input{max-width:240px}.hub-panels label{display:block}.panels-import form>label{margin:20px 0 14px}.panels-import details{margin:16px 0}.hub-panels summary{cursor:pointer}.panels-source-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-top:16px}.panels-candidates{margin-top:24px}.panels-candidates>h3{margin-bottom:14px}.panels-batch-start{margin:16px 0}.panels-badges{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0}.panels-badge{display:inline-block;border:1px solid var(--border);border-radius:5px;padding:3px 7px;font-size:12px;background:var(--bg)}.panels-badge-ready,.panels-notice{color:var(--success)}.panels-warning,.panels-confirm{padding:14px 16px;border:1px solid var(--border);border-radius:8px;background:var(--bg);line-height:1.6;margin:16px 0}.panels-warning p,.panels-confirm p{margin:0 0 8px}.panels-warning ul{margin:6px 0 0;padding-left:22px}.panels-review{margin:24px 0}.panels-review section{margin:22px 0}.panels-review dl,.panels-card dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px 14px;font-size:13px}.panels-review dt,.panels-card dt{color:var(--muted)}.panels-review dd,.panels-card dd{margin:0}.panels-review .panels-permission{display:flex;flex-direction:column;gap:4px;padding:9px 0;border-bottom:1px solid var(--border)}.panels-review footer{border-top:1px solid var(--border);padding-top:20px}.panels-check{margin-bottom:16px}.panels-check input{margin-right:8px}.panels-empty p{margin:8px 0 0}@media(max-width:640px){.hub-panels{padding:20px 16px}.panels-heading{flex-wrap:wrap}.panels-heading input{max-width:none}.panels-grid,.panels-source-fields{grid-template-columns:1fr}.panels-card,.panels-import,.panels-review,.panels-empty{padding:16px}}.panel-host{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto;padding:16px 20px 20px;gap:12px}.panel-host-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-shrink:0}.panel-host-heading h1{margin:0;font-size:18px}.panel-host-heading p{margin:5px 0 0;color:var(--muted);font-size:12px}.panel-host button,.panel-host-actions a{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);cursor:pointer;text-decoration:none;font:inherit}.panel-host button.panel-host-primary,.panel-host-actions a{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.panel-host-limitations,.panel-host-notice,.panel-host-error{border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin:0;background:var(--panel);font-size:13px;line-height:1.5;max-height:160px;overflow:auto;flex-shrink:0}.panel-host-limitations summary{cursor:pointer;font-weight:600}.panel-host-limitations p,.panel-host-limitations ul,.panel-host-error p{margin:6px 0}.panel-host-limitations ul{padding-left:20px}.panel-host-directory p{margin:0 0 8px;overflow-wrap:anywhere}.panel-host-directory a{display:inline-block;padding:7px 12px;border-radius:7px;background:var(--accent);color:var(--accent-text);font-weight:600;text-decoration:none}.panel-host-loading{color:var(--muted)}.panel-host-frame{display:block;border:1px solid var(--border);border-radius:10px;background:var(--surface);width:100%;min-height:280px;flex:1}.panel-host-frame[inert]{pointer-events:none;opacity:.5}.panel-host-confirm{border:2px solid var(--accent);border-radius:10px;background:var(--surface);box-shadow:var(--shadow);padding:18px;flex-shrink:0}.panel-host-confirm h2{margin:0 0 12px;font-size:16px}.panel-host-confirm pre,.panel-host-url{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.6;background:var(--bg);padding:12px;border-radius:7px}.panel-host-actions{display:flex;gap:8px}.panel-host-video .panel-host-actions{flex-wrap:wrap;align-items:center}.panel-host-video button,.panel-host-video .panel-host-actions a{min-height:44px}.panel-host-video .panel-host-actions a{flex-shrink:0;white-space:nowrap}@media(max-width:640px){.panel-host{padding:12px 10px}.panel-host-frame{min-height:380px}.panel-host-confirm pre{max-height:160px}}.panel-host-preview{border:1px solid var(--border);border-radius:8px;padding:12px;background:var(--panel);flex-shrink:0}.panel-host-preview header{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-host-preview h2{font-size:15px;overflow-wrap:anywhere;min-width:0}.panel-host-preview button{flex-shrink:0}.panel-host-preview video,.panel-host-preview audio,.panel-host-preview img{display:block;width:100%;max-height:50vh;object-fit:contain;margin-bottom:12px}.panel-host-preview a{display:inline-block;padding:10px 12px;background:var(--accent);color:var(--accent-text);border-radius:7px;text-decoration:none}.message-content{min-width:0;max-width:100%;white-space:normal;line-height:1.8;overflow-wrap:anywhere}.message-content>:first-child{margin-top:0}.message-content>:last-child{margin-bottom:0}.message-content p{margin:10px 0}.message-content h1,.message-content h2,.message-content h3,.message-content h4{margin:20px 0 8px;font-weight:600;line-height:1.5;letter-spacing:-.025em}.message-content h1{font-size:23px}.message-content h2{font-size:19px}.message-content h3{font-size:16px}.message-content h4{font-size:14px}.message-content ul,.message-content ol{margin:10px 0;padding-left:24px}.message-content li{margin:4px 0}.message-content li>p{margin:4px 0}.message-content .contains-task-list{list-style:none;padding-left:4px}.message-content .task-list-item>input{margin-right:8px;accent-color:var(--accent)}.message-content blockquote{margin:14px 0;padding:2px 16px;border-left:3px solid var(--border);color:var(--muted)}.message-content a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 35%,transparent);text-underline-offset:3px}.message-content a:hover{text-decoration-color:currentColor}.message-content hr{margin:20px 0;border:0;border-top:1px solid var(--border)}.message-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}.message-content :not(pre)>code{background:var(--panel);padding:2px 5px;border-radius:5px}.message-code-block{margin:14px 0;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}.message-code-heading{display:flex;justify-content:space-between;align-items:center;padding:7px 12px;border-bottom:1px solid var(--subtle);color:var(--muted);background:var(--panel);font-size:11px}.message-code-block pre{margin:0;padding:14px;overflow-x:auto;line-height:1.7;white-space:pre;tab-size:2}.message-code-block pre code{font-size:12px}.message-copy{color:var(--muted);background:transparent;border:0;border-radius:5px;padding:3px 6px;font-size:10px;cursor:pointer;white-space:nowrap}.message-copy:hover{background:var(--hover);color:var(--text)}.message-actions{display:flex;margin-top:8px}.message-actions .message-copy{padding-left:0}.message-reasoning{color:var(--muted);margin-bottom:14px;font-size:12px}.message-reasoning summary{cursor:pointer;padding:3px 0}.message-reasoning pre{margin:8px 0 0;white-space:pre-wrap;font:inherit;line-height:1.8;max-height:320px;overflow:auto;padding:10px 14px;border-left:2px solid var(--border)}.message-streaming{white-space:pre-wrap}.message-table-scroll{max-width:100%;overflow-x:auto;margin:14px 0;border:1px solid var(--border);border-radius:8px}.message-table-scroll table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.message-table-scroll th,.message-table-scroll td{padding:8px 12px;border-right:1px solid var(--subtle);border-bottom:1px solid var(--subtle);vertical-align:top}.message-table-scroll th{text-align:left;background:var(--panel);font-weight:550}.message-table-scroll tr:last-child td{border-bottom:0}.message-table-scroll th:last-child,.message-table-scroll td:last-child{border-right:0}.message-image-reference{display:inline-flex;align-items:center;gap:8px;max-width:100%;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:var(--panel);color:var(--accent);font-family:inherit;font-size:12px}button.message-image-reference{cursor:pointer}button.message-image-reference:hover{background:var(--hover)}.message-image-reference span{color:var(--muted);font-size:10px}.message-file-reference{background:var(--panel);border-radius:4px;padding:1px 4px}.message-file-reference .message-copy{display:inline;margin-left:4px}.message-tool-card{border:1px solid var(--subtle);border-radius:10px;background:var(--surface);white-space:normal;overflow:hidden}.message-tool-card>summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;min-width:0;padding:10px 12px;font-size:11px}.message-tool-card>summary::-webkit-details-marker{display:none}.message-tool-card>summary:after{content:"›";color:var(--muted);margin-left:3px;font-size:16px}.message-tool-card[open]>summary:after{transform:rotate(90deg)}.message-tool-indicator{display:grid;place-items:center;flex:0 0 17px;width:17px;height:17px;border:1px solid var(--border);border-radius:50%;font-size:10px;color:var(--muted)}.message-tool-name{color:var(--text);font-weight:550;flex-shrink:0}.message-tool-summary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.message-tool-status{margin-left:auto;color:var(--muted);white-space:nowrap;font-size:10px}.message-tool-error .message-tool-status,.message-tool-error .message-tool-indicator{color:var(--danger)}.message-tool-section{padding:0 12px 12px;color:var(--muted)}.message-tool-section strong{font-size:10px;font-weight:550}.message-tool-section pre{max-height:320px;overflow:auto;padding:10px;margin:6px 0 0;border-radius:6px;background:var(--panel);white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace}.message-tool-result-heading{display:flex;align-items:center;justify-content:space-between}@media(max-width:760px){.message-content h1{font-size:20px}.message-content h2{font-size:17px}.message-tool-summary{max-width:34vw}.message-code-block pre{padding:12px}}.message-file-open{border:0;padding:0;color:var(--accent);background:transparent;font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}:root{color-scheme:light;--bg: hsl(240 20% 99%);--surface: hsl(0 0% 100%);--panel: hsl(240 6% 95.5%);--text: hsl(240 10% 3.9%);--muted: hsl(240 4% 43%);--accent: hsl(19 63% 39%);--accent-text: hsl(0 0% 98%);--border: hsl(240 5% 78% / 65%);--hover: hsl(240 6% 92.5%);--subtle: hsl(240 5% 78% / 35%);--danger: hsl(0 72% 50%);--warning: hsl(38 92% 38%);--success: hsl(145 63% 32%);--shadow: 0 8px 28px hsl(240 10% 3.9% / 3.5%), 0 1px 3px hsl(240 10% 3.9% / 4%)}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--bg: hsl(240 9% 5.5%);--surface: hsl(240 7% 8.5%);--panel: hsl(240 4% 11%);--text: hsl(0 0% 98%);--muted: hsl(240 5% 67%);--accent: hsl(22 70% 55%);--accent-text: hsl(22 30% 8%);--border: hsl(240 4% 19%);--hover: hsl(240 4% 17%);--subtle: hsl(240 4% 19% / 65%);--danger: hsl(0 84% 65%);--warning: hsl(42 92% 62%);--success: hsl(142 64% 48%);--shadow: 0 8px 28px #0002, 0 1px 3px #0003}}*{box-sizing:border-box}[hidden]{display:none!important}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button{-webkit-tap-highlight-color:transparent}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button svg{flex-shrink:0}.shell{display:flex;height:100dvh;overflow:hidden}.rail{width:248px;flex:0 0 248px;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--subtle);background:var(--panel)}.rail-content{flex:1;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;scroll-padding-block:6px}.rail-content:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}.rail-head{display:flex;align-items:center;gap:8px;height:64px;padding:14px 16px;flex-shrink:0}.rail-head strong{font-size:15px;letter-spacing:-.4px;font-weight:650}.brand-mark,.welcome-mark{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--surface);border-radius:8px;width:28px;height:28px;color:var(--accent);flex-shrink:0}.hub-badge{color:var(--muted);font-size:10px;line-height:18px;padding-inline:5px;border:1px solid var(--border);border-radius:5px}button.icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex-shrink:0;padding:0;border:0;border-radius:7px;color:var(--muted);background:transparent;cursor:pointer}button.icon-button:hover:not(:disabled){background:var(--hover);color:var(--text)}.rail-head .sidebar-close{margin-left:auto;width:26px}.workbench-nav{display:flex;flex-direction:column;gap:3px;padding:0 12px 18px}.nav-button{display:flex;align-items:center;gap:10px;min-height:36px;padding:8px 10px;text-align:left;color:var(--muted);background:transparent;border:0;border-radius:8px;cursor:pointer;font-size:13px}.nav-button:hover,.nav-button.active{background:var(--hover);color:var(--text)}.nav-button.active{font-weight:550}.nav-button.new-chat-button{margin-bottom:10px;color:var(--text);background:var(--surface);border:1px solid var(--border);box-shadow:0 1px 2px #00000004}.nav-button.new-chat-button:hover{border-color:var(--muted)}.rail-section-label{color:var(--muted);font-size:11px;font-weight:550;margin:0 22px 8px}.workspace-button{display:flex;align-items:center;gap:9px;margin:0 12px;padding:9px 10px;color:var(--text);border:0;background:transparent;border-radius:8px;min-width:0;text-align:left;font-size:12px}button.workspace-button{cursor:pointer}button.workspace-button:hover{background:var(--hover)}.workspace-button>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.workspace-button>svg{width:16px;color:var(--muted);flex-shrink:0}.workspace-button>svg:last-child{width:12px}.history-label{display:flex;justify-content:space-between;margin-top:24px}.sessions{list-style:none;margin:0;padding:0 12px 16px}.sessions .empty{padding:12px 10px;color:var(--muted);font-size:12px;line-height:1.7}.session{width:100%;display:flex;flex-direction:column;gap:5px;margin:2px 0;text-align:left;color:var(--text);background:transparent;border:0;border-radius:8px;padding:10px;cursor:pointer}.session:hover,.session.active{background:var(--hover)}.session-title{font-size:12px;line-height:1.5;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.session-meta{font-size:10px;color:var(--muted)}.rail-footer{flex-shrink:0;padding:10px 12px 12px;border-top:1px solid var(--subtle)}.host-label{display:flex;gap:7px;align-items:center;color:var(--muted);font-size:10px;padding:2px 10px 8px}.dot{display:inline-block;flex:0 0 6px;width:6px;height:6px;border-radius:50%;background:var(--muted)}.dot.open{background:var(--success)}.dot.connecting{background:var(--warning)}.dot.closed{background:var(--danger)}.account-button{display:flex;width:100%;align-items:center;gap:10px;color:var(--text);background:transparent;border:0;border-radius:8px;text-align:left;padding:8px 10px;cursor:pointer}.account-button:hover{background:var(--hover)}.account-avatar{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:1px solid var(--border);font-size:11px;flex-shrink:0}.account-copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.account-copy strong{font-size:12px;font-weight:550;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.account-copy>span{color:var(--muted);font-size:10px}.account-button>svg{width:12px;color:var(--muted)}.workbench-main{display:flex;flex:1;flex-direction:column;min-width:0;min-height:0}.workbench-topbar{flex-shrink:0;display:flex;height:54px;align-items:center;gap:10px;padding:0 20px;border-bottom:1px solid var(--subtle)}.topbar-context{display:flex;flex:1;min-width:0;flex-direction:column;gap:2px}.topbar-project{font-size:12px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.topbar-title{color:var(--muted);font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.connection-pill{display:inline-flex;align-items:center;gap:6px;font-size:10px;color:var(--muted);margin-left:auto;white-space:nowrap}.sidebar-backdrop{display:none}.chat{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.banner{padding:8px 20px;overflow-wrap:anywhere;font-size:12px;color:var(--warning);background:color-mix(in srgb,var(--warning) 7%,transparent);border-bottom:1px solid var(--subtle);flex-shrink:0;line-height:1.6}.banner.goal{align-self:stretch;border:1px solid var(--border);border-radius:8px}.banner .ghost{margin-left:8px;padding:2px 8px}.message-viewport{position:relative;display:flex;flex:1;min-width:0;min-height:0}.latest-messages{position:absolute;z-index:2;bottom:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:8px;max-width:calc(100% - 24px);min-height:36px;padding:8px 14px;border:1px solid var(--border);border-radius:24px;background:var(--surface);color:var(--text);box-shadow:var(--shadow);font-size:12px;cursor:pointer;white-space:nowrap}.latest-messages:hover{background:var(--hover)}.latest-count{color:var(--muted);font-size:11px}.latest-announcement{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.messages{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:28px 24px 16px}.transcript{max-width:736px;width:100%;display:flex;flex-direction:column;gap:18px;margin:0 auto}.chat-empty .messages{display:flex;padding-top:32px}.chat-empty .transcript{justify-content:center}.empty-chat{text-align:center;padding:24px 0 32px}.welcome-mark{width:44px;height:44px;border-radius:13px;margin-bottom:22px;box-shadow:var(--shadow)}.welcome-mark svg{width:25px;height:25px}.empty-chat h1{font-size:clamp(24px,2.5vw,32px);margin:0 0 12px;letter-spacing:-.8px;font-weight:550}.empty-chat p{color:var(--muted);font-size:13px;line-height:1.7;margin:0 0 20px}.welcome-workspace{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px;max-width:100%;overflow-wrap:anywhere}.welcome-workspace svg{width:14px;flex-shrink:0}.msg{max-width:100%;font-size:14px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.msg.user{align-self:flex-end;max-width:88%;padding:10px 16px;background:var(--panel);border-radius:16px}.msg.assistant{align-self:stretch;padding:3px 0}.msg.tool{align-self:stretch;color:var(--muted);font-size:12px;padding:2px 0}.msg.tool .tool-result{max-height:280px;margin:8px 0 0;overflow:auto;padding:12px;font-family:ui-monospace,monospace;white-space:pre-wrap;background:var(--panel);border:1px solid var(--subtle);border-radius:8px}.msg.tool details>summary{cursor:pointer}.msg.tool-error{color:var(--danger)}.msg.info{align-self:stretch;color:var(--muted);font-size:12px}.msg.error{align-self:stretch;background:color-mix(in srgb,var(--danger) 8%,transparent);border-radius:8px;padding:10px 14px;color:var(--danger)}.cursor{animation:blink 1s step-start infinite;color:var(--accent)}@keyframes blink{50%{opacity:0}}.composer-wrap{flex-shrink:0;width:100%;max-width:784px;padding:12px 24px 20px;margin:0 auto}.chat-empty .composer-wrap{margin-bottom:clamp(36px,13vh,180px)}.composer{padding:12px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow);transition:border-color .15s ease,box-shadow .15s ease}.composer:focus-within{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 7%,transparent),var(--shadow)}.composer textarea{display:block;width:100%;resize:none;min-height:64px;max-height:180px;overflow-y:auto;color:var(--text);background:transparent;border:0;border-radius:0;padding:6px 8px 10px;line-height:1.65;font-size:14px}.composer textarea:focus{outline:none}.composer textarea::placeholder{color:var(--muted)}.composer-toolbar{display:flex;align-items:center;gap:6px;padding:2px 1px 0;min-width:0}.model-button{display:flex;align-items:center;gap:5px;min-width:0;max-width:50%;padding:7px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}.model-button:hover{background:var(--panel);color:var(--text)}.model-button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-button svg{width:10px;transform:rotate(90deg)}.composer-run-status{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap}button.send,button.stop{border:0;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:550;cursor:pointer}button.send{background:var(--accent);color:var(--accent-text)}button.stop{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,var(--surface))}button.composer-submit{display:grid;place-items:center;flex:0 0 32px;width:32px;height:32px;border-radius:50%;padding:0;margin-left:4px}.composer-submit.send{background:var(--text);color:var(--bg)}.composer-submit.stop{color:var(--text);background:var(--panel);border:1px solid var(--border)}.composer-caption{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px;padding:10px 6px 0}.attachments{display:flex;flex-wrap:wrap;gap:6px;color:var(--muted);font-size:12px;padding:0 6px 8px}.attachment{display:inline-flex;align-items:center;gap:5px;max-width:100%;overflow-wrap:anywhere;padding:4px 7px;background:var(--panel);border:1px solid var(--border);border-radius:6px;font-size:11px;margin-top:4px}.msg .attachment{display:flex}.attachment svg{width:13px;flex-shrink:0}.attachment button.ghost{padding:0 4px;border:0}.approval{align-self:stretch;min-width:0;overflow-wrap:anywhere;border:1px solid color-mix(in srgb,var(--warning) 60%,var(--border));background:color-mix(in srgb,var(--warning) 5%,var(--surface));border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}.approval-title{font-size:13px;font-weight:600}.approval-title em{color:var(--muted);font-style:normal;font-weight:400}.approval-desc{font-size:13px;color:var(--muted)}.approval-summary{font-size:13px;overflow-wrap:anywhere}.approval-raw>summary{color:var(--muted);cursor:pointer;font-size:12px}.approval-args{margin:8px 0 0;font-size:12px;background:var(--panel);border-radius:8px;padding:10px;overflow-x:auto;max-height:180px}.approval-answer{background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:10px;min-height:64px}.approval-options{display:grid;gap:8px;min-width:0}.approval-option{display:flex;flex-direction:column;gap:4px;min-width:0;min-height:44px;border:1px solid var(--border);border-radius:8px;padding:10px;color:var(--text);background:var(--surface);text-align:left;overflow-wrap:anywhere;cursor:pointer}.approval-option:hover:not(:disabled){background:var(--hover)}label.approval-option{flex-direction:row;align-items:flex-start;gap:8px}.approval-option>span{min-width:0}.approval-option-description{display:block;color:var(--muted);font-size:12px}.approval-actions{display:flex;gap:8px}.approval-actions button{min-height:36px}button.ghost{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:8px;padding:6px 10px;cursor:pointer}button.ghost:hover:not(:disabled){background:var(--hover)}.auth-page{min-height:100%;display:grid;place-items:center;padding:24px}.auth-card{width:100%;max-width:420px;padding:28px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow)}.auth-brand{font-size:21px;font-weight:650;margin-bottom:28px}.auth-brand span{font-size:12px;font-weight:500;color:var(--accent);border:1px solid var(--border);border-radius:5px;padding:2px 5px;vertical-align:middle}.auth-card h1{font-size:20px;margin:0}.auth-card p,.muted{color:var(--muted);font-size:13px;line-height:1.6}.auth-card form{display:flex;flex-direction:column;gap:14px}.auth-card label{display:flex;flex-direction:column;gap:7px;font-size:13px}.auth-card label span,.auth-card small{color:var(--muted);font-size:12px}.auth-card input{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:11px}.auth-card .send{min-height:42px}.form-error{color:var(--danger)!important;overflow-wrap:anywhere}.devices-dialog{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:0;width:min(560px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow:hidden}.devices-dialog[open]{display:flex;flex-direction:column}.devices-dialog .dialog-head{flex-shrink:0;padding:16px 18px;border-bottom:1px solid var(--border)}.devices-body{min-height:48px;overflow-y:auto;overscroll-behavior:contain;padding:0 18px}.devices-summary{overflow-wrap:anywhere}.devices-error{min-height:20px;max-height:min(144px,25dvh);overflow-y:auto;overscroll-behavior:contain;white-space:pre-wrap;margin:10px 18px 0}.devices-footer{flex-shrink:0;display:flex;flex-wrap:wrap;gap:8px;padding:12px 18px;border-top:1px solid var(--border)}.devices-dialog [aria-disabled=true]{opacity:.55;cursor:default}@media(max-height:320px){.devices-dialog .dialog-head,.devices-footer{padding:8px 12px}.devices-body{padding-inline:12px}.devices-error{margin-inline:12px}}.devices-dialog::backdrop{background:#0006}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.dialog-head h2{font-size:18px;margin:0}.device-list{margin:20px 0;padding:0;list-style:none}.device-list li{display:flex;align-items:center;gap:12px;padding:14px 0;border-top:1px solid var(--border)}.device-list li div{flex:1;min-width:0;overflow-wrap:anywhere}.device-list strong{font-size:13px}.device-list span{display:block;margin-top:5px;font-size:11px;color:var(--muted)}.device-list button{flex-shrink:0;font-size:12px}.devices-footer>.stop{padding:10px 14px}@media(max-width:760px){.rail{position:fixed;inset:0 auto 0 0;z-index:30;width:min(280px,calc(100vw - 48px));box-shadow:10px 0 40px #0002}.sidebar-backdrop{display:block;position:fixed;inset:0;background:#0005;z-index:29}.rail-head{padding-top:max(14px,env(safe-area-inset-top))}.rail-footer{padding-bottom:max(12px,env(safe-area-inset-bottom))}.workbench-topbar{padding:0 12px;gap:8px;height:50px}.messages{padding:24px 18px 12px}.transcript{gap:16px}.msg{font-size:14px}.msg.user{max-width:92%}.composer-wrap{padding:10px 12px max(12px,env(safe-area-inset-bottom))}.chat-empty .composer-wrap{margin-bottom:clamp(18px,10vh,80px)}.empty-chat{padding:20px 12px}.empty-chat p{font-size:12px}.composer{padding:10px;border-radius:16px}.composer textarea,.approval-answer{font-size:16px}.composer-caption{justify-content:center;font-size:9px}.composer-caption>span:last-child{display:none}.composer-run-status{font-size:10px}.model-button{max-width:47%;font-size:10px}.banner{padding:8px 14px}}@media(max-height:640px){.chat-empty .composer-wrap{margin-bottom:0}.empty-chat{padding:12px 0}.welcome-mark{margin-bottom:12px}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}.composer{transition:none}}.cloud-account-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;max-width:100%}.rail-footer .cloud-account-controls{flex-direction:column;align-items:stretch}.cloud-account-controls .form-error{flex-basis:100%;overflow-wrap:anywhere}#app{height:100%}.desktop-sidebar-controls{display:grid;gap:10px;padding:8px 12px 12px;border-bottom:1px solid var(--border)}.desktop-project-picker,.desktop-approval-scope label,.desktop-chat-controls label{display:grid;gap:5px;font-size:12px;color:var(--muted)}.desktop-project-picker select,.desktop-approval-scope select,.desktop-chat-controls select{min-width:0;min-height:34px;max-width:100%;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);padding:4px 8px}.desktop-sidebar-actions{display:flex;flex-wrap:wrap;gap:6px}.desktop-root-picker,.desktop-cli-sessions{min-width:0;max-height:38dvh;overflow:auto}.desktop-root-picker summary,.desktop-cli-sessions summary{cursor:pointer;padding:6px 0;font-size:12px;color:var(--muted)}.desktop-cli-sessions .session,.desktop-root-picker .session{width:100%;margin-top:5px}.desktop-chat-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 16px;font-size:12px}.desktop-room-label{min-width:0;overflow-wrap:anywhere}.desktop-mode-options,.desktop-ask-options{display:grid;gap:8px;margin:12px 0}.desktop-cli-mode{overflow-wrap:anywhere}.desktop-mode-options .library-button{display:grid;gap:5px;text-align:left;white-space:normal}.desktop-mode-options span{font-size:12px;font-weight:400;color:var(--muted)}.desktop-approval-scope{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}.desktop-ask-options .library-button{white-space:normal;text-align:left}.session-unread{color:var(--accent)}.goal{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.goal>span{flex:1;min-width:0}.desktop-connection{min-height:100dvh;display:grid;place-items:center;padding:24px;background:var(--bg);color:var(--text)}.desktop-connection-card{width:min(400px,100%);padding:26px;border:1px solid var(--border);border-radius:18px;background:var(--surface)}.desktop-connection-card h1{margin:0 0 12px;font-size:22px}.desktop-connection-card p{line-height:1.7;color:var(--muted)}.desktop-cli-path{margin:4px 0 10px;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.projects-page{max-width:1120px;min-height:100dvh;margin:auto;padding:48px 28px;color:var(--text, #e5e7eb)}.projects-header{margin-bottom:32px}.projects-header h1{margin:24px 0 10px;font-size:28px;letter-spacing:-.04em}.projects-header p,.project-date,.project-empty{color:var(--muted, #9ca3af);line-height:1.6}.project-create{display:flex;align-items:end;gap:12px;max-width:600px;margin:24px 0 32px}.project-create label{display:grid;flex:1;gap:8px;font-size:13px}.project-create input{width:100%;padding:11px 12px;border:1px solid var(--border, #303541);border-radius:8px;background:var(--surface, #171b24);color:inherit}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px}.project-card{padding:22px;border:1px solid var(--border, #303541);border-radius:14px;background:var(--surface, #171b24)}.project-card-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.project-card h2{font-size:17px;margin:0;overflow-wrap:anywhere}.project-status{flex-shrink:0;padding:4px 8px;border-radius:20px;color:var(--muted, #9ca3af);background:#ffffff08;font-size:12px}.project-status.running{color:var(--success, #70d4b3);background:#4fc69d12}.project-status.error{color:var(--danger, #fb9d9d)}.project-date{font-size:12px;margin:12px 0 22px}.project-stop-confirm{position:fixed;z-index:100;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;color:inherit;max-width:480px;width:calc(100% - 40px);padding:28px;background:var(--surface, #171b24);border:1px solid var(--border, #303541);border-radius:16px;box-shadow:var(--shadow)}.project-stop-confirm::backdrop{background:#0009}.project-stop-confirm h2{margin-top:0;font-size:19px}.project-stop-confirm p{line-height:1.7}.project-connection-note{position:fixed;z-index:90;top:0;left:50%;transform:translate(-50%);max-width:min(700px,90vw);padding:8px 14px;background:#453919;color:#ffe6a0;border-radius:0 0 8px 8px;font-size:12px}@media(max-width:600px){.projects-page{padding:28px 18px}.project-create{align-items:stretch;flex-direction:column}}.website-login{min-height:100dvh;padding:30px max(24px,calc((100vw - 1200px)/2))}.website-brand{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:650}.website-brand>span{color:var(--muted);font-size:11px;border:1px solid var(--border);padding:4px 7px;border-radius:5px;font-weight:450}.website-welcome{display:grid;grid-template-columns:1fr 390px;gap:80px;max-width:1060px;margin:75px auto 60px;align-items:start}.website-eyebrow{color:var(--muted);font-size:11px;letter-spacing:.08em;margin:0 0 15px}.website-introduction{padding-top:30px}.website-introduction h1{font-size:clamp(40px,5vw,64px);letter-spacing:-2px;line-height:1.12;font-weight:550;margin:22px 0}.website-introduction>p:not(.website-eyebrow){color:var(--muted);line-height:1.9}.website-features{display:grid;gap:13px;margin-top:35px}.website-features p{display:grid;gap:5px;margin:0;padding:13px 0;border-top:1px solid var(--subtle)}.website-features strong{font-size:13px;font-weight:550}.website-features span{color:var(--muted);font-size:12px}.website-auth{width:100%;max-width:none;padding:30px;box-shadow:var(--shadow)}.website-auth h2{font-size:25px;margin:10px 0 12px;font-weight:550;letter-spacing:-.6px}.website-muted{color:var(--muted);line-height:1.7}.website-hint{font-size:11px;color:var(--muted);line-height:1.7}.website-auth form,.website-settings-card form{display:grid;gap:16px}.website-auth label,.website-settings-card label{display:grid;gap:8px;font-size:12px;font-weight:500}.website-auth input,.website-settings-card input{width:100%;padding:11px 12px;background:var(--surface);border:1px solid var(--border);border-radius:7px;color:var(--text);min-width:0}.website-auth label small,.website-settings-card label small{font-size:11px;color:var(--muted);font-weight:400;line-height:1.6}.website-button{display:inline-flex;justify-content:center;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border);padding:9px 13px;border-radius:7px;font-size:12px;color:var(--text);cursor:pointer;line-height:1.4}.website-button:hover{background:var(--hover)}.website-button.primary{color:var(--surface);background:var(--text);border-color:var(--text)}.website-wide{width:100%;margin-top:10px}.website-divider{display:flex;align-items:center;gap:13px;color:var(--muted);font-size:10px;margin:25px 0}.website-divider:before,.website-divider:after{content:"";flex:1;border-top:1px solid var(--subtle)}.website-login-footer{font-size:11px;color:var(--muted);text-align:center;padding:30px 0}.website-workbench-root{height:100%}.website-account-menu{position:relative;flex:0 0 auto}.website-account-menu>summary{width:34px;height:34px;border-radius:50%;border:1px solid var(--border);background:var(--surface);display:grid;place-items:center;cursor:pointer;list-style:none;font-size:12px;font-weight:600}.website-account-menu>summary::-webkit-details-marker{display:none}.website-account-menu>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.website-account-popover{position:absolute;z-index:60;bottom:43px;left:0;width:200px;display:grid;gap:3px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;padding:10px}.website-account-popover strong,.website-account-popover small{padding:3px 8px;overflow-wrap:anywhere;font-size:12px}.website-account-popover small{color:var(--muted);padding-bottom:10px}.website-account-popover button{border:0;border-radius:5px;color:var(--text);background:transparent;text-align:left;padding:9px;font-size:12px;cursor:pointer}.website-account-popover button:hover{background:var(--hover)}.website-account-popover button:last-child{border-top:1px solid var(--subtle);margin-top:5px;border-radius:0;color:var(--danger)}.rail-footer>.website-account-menu{margin-top:12px}.projects-header>.website-account-menu{position:absolute;right:0;top:0}.projects-header>.website-account-menu .website-account-popover,.website-environment-empty .website-account-popover{inset:43px 0 auto auto}.website-environment-empty{height:100%;padding:25px 40px}.website-environment-empty header{justify-content:space-between}.website-environment-empty>section{max-width:560px;margin:15vh auto;text-align:center}.website-environment-empty h1{font-size:28px;font-weight:550}.website-environment-empty section>button{margin:14px 5px}.website-settings-shell{min-height:100dvh;display:grid;grid-template-columns:220px minmax(0,1fr)}.website-settings-nav{position:sticky;top:0;height:100dvh;background:var(--panel);border-right:1px solid var(--subtle);padding:25px 15px;display:flex;flex-direction:column}.website-back{border:0;background:transparent;color:var(--text);text-align:left;padding:12px 10px;cursor:pointer;margin-bottom:32px;font-size:12px}.website-settings-nav>p{margin:25px 11px 10px}.website-settings-nav nav{display:grid;gap:4px}.website-settings-nav nav button{text-align:left;border:0;border-radius:6px;background:transparent;color:var(--text);padding:11px 12px;font-size:12px;cursor:pointer}.website-settings-nav nav button:hover,.website-settings-nav nav button[aria-current=page]{background:var(--hover)}.website-settings-avatar{margin-top:auto;padding:15px 10px 0}.website-settings-content{max-width:1000px;padding:50px 55px;margin:auto}.website-settings-heading{margin-bottom:30px}.website-settings-heading h1{font-size:29px;letter-spacing:-.8px;font-weight:550;margin:0 0 15px}.website-settings-heading p{margin-top:0}.website-settings-card{padding:28px;border:1px solid var(--border);border-radius:11px;background:var(--surface);margin:20px 0 30px;display:grid;gap:21px}.website-settings-card h2,.website-settings-content>h2{margin:0;font-size:15px;font-weight:550}.website-settings-card input{max-width:460px}.website-settings-card>button,.website-settings-card form>button{justify-self:start}.website-setting-line{display:flex;align-items:center;justify-content:space-between;gap:20px}.website-setting-line p{font-size:12px;margin-bottom:0}.website-tag{display:inline-block;border:1px solid var(--border);border-radius:5px;padding:4px 7px;font-size:10px;color:var(--muted);margin-left:10px;white-space:nowrap}.website-action-row{display:flex;gap:8px;flex-wrap:wrap;margin:15px 0}.website-list{border:1px solid var(--border);border-radius:10px;overflow:hidden;margin:20px 0;background:var(--surface)}.website-list>p{padding:15px 20px}.website-list article{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:20px 24px;border-bottom:1px solid var(--subtle)}.website-list article:last-child{border-bottom:0}.website-list article>div:first-child{min-width:0}.website-list strong{font-size:13px;font-weight:550;overflow-wrap:anywhere}.website-list article p{color:var(--muted);font-size:11px;margin:7px 0 0;line-height:1.6;overflow-wrap:anywhere}.website-notice{color:var(--success);font-size:12px;line-height:1.7}.website-statistics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;margin:25px 0}.website-statistics article{display:grid;gap:14px;padding:22px;border:1px solid var(--border);border-radius:10px}.website-statistics span{color:var(--muted);font-size:12px}.website-statistics strong{font-size:29px;font-weight:550}@media(max-width:760px){.website-login{padding:23px}.website-welcome{display:flex;flex-direction:column;gap:30px;margin:35px auto;max-width:440px}.website-introduction{padding:0}.website-introduction h1{font-size:40px}.website-introduction>p:not(.website-eyebrow){font-size:13px}.website-features{display:none}.website-auth{padding:25px}.website-settings-shell{display:block}.website-settings-nav{position:static;height:auto;border-right:0;border-bottom:1px solid var(--subtle);padding:15px}.website-back{margin-bottom:5px}.website-settings-nav>p{margin:15px 10px 8px}.website-settings-nav nav{display:flex;flex-wrap:wrap;gap:3px}.website-settings-nav nav button{padding:9px 10px}.website-settings-avatar{position:absolute;top:21px;right:22px;padding:0}.website-settings-avatar .website-account-popover{inset:43px 0 auto auto}.website-settings-content{padding:30px 22px}.website-settings-card{padding:21px}.website-list article{padding:18px;flex-wrap:wrap}.website-statistics{grid-template-columns:repeat(2,minmax(0,1fr))}.website-environment-empty{padding:22px}}
|