@wudao-org/web 0.0.0-stage → 0.4.20

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 feiniaojin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,88 @@
1
- # Temporary Holding Version
1
+ # @wudao-org/web — wudao ui
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The browser frontend of `wudao ui` (M43-B): **TUI full parity** over the WS
4
+ protocol — a pure protocol consumer with zero agent logic. The contract is
5
+ [`packages/server/PROTOCOL.md`](../server/PROTOCOL.md); its types are
6
+ hand-mirrored into [`src/protocol.ts`](src/protocol.ts), the only file that
7
+ knows the server exists.
8
+
9
+ ## Run
10
+
11
+ ```sh
12
+ pnpm --filter @wudao-org/web build # → dist/ (also part of the root build chain)
13
+ wudao ui # serves dist/ at the printed loopback URL
14
+ ```
15
+
16
+ `wudao ui` prints `http://127.0.0.1:<port>/#<token>`; the token rides the URL
17
+ fragment (never a request line) and is sent as the first WS frame. Dev loop:
18
+ `pnpm --filter @wudao-org/web dev` (vite on :5173) against a running server.
19
+
20
+ ## Surface (the TUI parity checklist)
21
+
22
+ - **Conversation** — streaming markdown (the TUI's block/inline grammar) with
23
+ a zero-dep per-line code highlighter, collapsible reasoning (head-of-thought
24
+ summary), ⏺/↳ tool cards (⏹ + `[error]` on failures), ✏️ red/green inline
25
+ diffs (context runs collapse), 📋 todo board (☑/◐/☐), `── dividers ──`,
26
+ resume history, warn notices, err errors.
27
+ - **Input** — multi-line (Enter send · Shift+Enter newline · `\`+Enter
28
+ continuation), ↑/↓ submitted-prompt history at the buffer's first/last line,
29
+ `/` suggestion menu (live `listSlashCommands` data, ≤7-row scrolled window,
30
+ Tab/Enter complete, Esc dismisses per token), `@` mention hint.
31
+ - **Controls** — steering (submit while busy → ⏳ queue), interrupt (Esc /
32
+ button), mode cycling (shift+tab / chip: ask → auto → read-only, live in
33
+ the status bar), permission modal (y/a/N + typed deny reason; policy-file
34
+ asks degrade to y/N; git-risk warning + sidecar reason render), plan review
35
+ (ok / 改 …), `/resume` picker, `/rewind` (text-routed, list lands as a
36
+ notice), `/clear` confirm, `/help` from the live command list.
37
+ - **Status bar** — `wudao · <session8> │ mode │ ctx N/M ⚠ │ cache % │ ▣ d/t │
38
+ bg n/m │ sidecar N │ 🛡✕` (absent segments omitted). The server-side
39
+ shutdown path terminates sockets and aborts the in-flight run, so Ctrl+C
40
+ exits `wudao ui` promptly even with a connected tab and a live run (the
41
+ browser then shows the reconnect flow instead of a hung 1006).
42
+ - **Connection** — reconnect banner with capped backoff (1s → 2s → 4s → 8s →
43
+ 16s → 30s, **8 attempts max**); the re-run auth replays the full history
44
+ (`reset:true`) and restores the surface. 4401 stops (bad token); 4000
45
+ retries (the other tab may close). Past the cap the banner turns terminal —
46
+ `连接已断开 — server 可能已退出,重启 wudao ui 后点击重连` — with a manual
47
+ 重连 button. While offline the send control disables (the draft is kept)
48
+ and mode clicks queue client-side (latest wins) and flush on reconnect — a
49
+ click on a dead socket never surfaces an error toast.
50
+
51
+ Terminal-dark theme keyed by the TUI's ink names (`cli/src/tui/theme.ts`),
52
+ monospace, responsive (hints/status shrink under 640px).
53
+
54
+ ## Layout
55
+
56
+ ```
57
+ src/
58
+ protocol.ts PROTOCOL.md mirror + WudaoClient (store + reconnect)
59
+ use-ui.ts useSyncExternalStore adapter
60
+ input-state.ts the reused M44 input-machine rules (history, Enter, caret)
61
+ slash.ts slash menu + /help rules (TUI mirror)
62
+ frontend-commands.ts the frontend-owned command router (exit/clear/help/resume)
63
+ markdown.tsx block/inline grammar + fenced-code render
64
+ highlight.ts zero-dep per-line tokenizer (why: highlight.js ~1MB vs a
65
+ fenced-code contract the TUI itself serves per-line)
66
+ diff.ts / board.ts / log.ts hunk math, ☑◐☐ marks, display helpers
67
+ components/ App, HistoryList, LiveArea, StatusBar, InputBox,
68
+ PermissionModal, AskUserCards, PlanReview, ResumePicker,
69
+ ClearConfirm
70
+ tests/ fake-WS protocol round-trips, input-machine/slash rules,
71
+ jsdom component + App interaction suites
72
+ ```
73
+
74
+ ## Known v1 gaps (protocol, not UI)
75
+
76
+ - **No model label** — the state snapshot has no model field, so the status
77
+ head is `wudao · <session8>` (the TUI shows the provider label).
78
+ - **`/clear` is view-level** — protocol v1 has no driver-clear op; the saved
79
+ session persists (a reconnect replay or `/resume` restores it).
80
+ - **`a` (allow-this-session) answers allow-once** — answerPermission carries
81
+ only `{allow, reason}`; the TUI's client-side session-allowlist rule has no
82
+ op counterpart.
83
+ - **ask_user has no trigger** — `wudao ui` leaves the tool fail-closed
84
+ unwired and the protocol has no ask frame; `AskUserCards` is component-
85
+ complete and tested for the v1.1 seam.
86
+ - **Plugin/extension commands** — a `"frontend"` submit outcome (their
87
+ execution is caller-owned) shows an honest notice; the templates cannot be
88
+ expanded over v1.
@@ -0,0 +1 @@
1
+ :root{color-scheme:dark}[data-theme=light]{color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}html,body{overflow:hidden}body{margin:0;background:var(--bg);color:var(--text-1);transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease);font-family:var(--font);font-size:14px;line-height:1.65}:focus-visible{outline:1.5px solid var(--accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}html.input-pointer :focus-visible{outline:none;box-shadow:none}button,.sb-i,.sb-search,.chip,.icobtn,a{transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),opacity var(--dur-fast) var(--ease)}.app{display:flex;flex-direction:column;height:100%}.topbar{height:34px;flex:none;display:flex;align-items:center;gap:var(--sp-1);padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1);background:none;-webkit-app-region:drag}[data-shell=desktop] .topbar{padding-left:84px}.topbar .sp{flex:1;min-width:0;display:flex;align-items:center;gap:var(--sp-2)}.tb-name{font-size:var(--fs-ui);color:var(--text-1);font-weight:var(--fw-medium);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tb-run{display:inline-flex;align-items:center;flex:none;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);white-space:nowrap}.tb-run .ok{color:var(--ok)}.icobtn{width:26px;height:26px;flex:none;border-radius:var(--radius-sm);border:0;background:transparent;color:var(--text-3);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-ui);line-height:1;padding:0;-webkit-app-region:no-drag}.icobtn:hover{background:var(--surface);color:var(--text-1)}.ic{display:inline-block;vertical-align:-.14em;flex:none}.ic-warn{color:var(--warn)}.ic-danger{color:var(--danger)}.chat{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;flex:1;overflow-y:auto;padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--sp-2)}.entry{white-space:normal}.entry-gap{min-height:var(--sp-2)}.history-hydrate-sentinel{display:block;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);text-align:center;cursor:pointer;user-select:none}.history-hydrate-sentinel:hover,.history-hydrate-sentinel:focus-visible{background:var(--hover);outline:none}.msg-user{display:flex;justify-content:flex-end;margin-top:var(--sp-3)}.msg-user .bub{background:var(--bubble-user-bg);color:var(--bubble-user-ink);border-radius:var(--radius-bubble);padding:10px 14px;max-width:78%;font-size:var(--fs-body);line-height:var(--lh-body);overflow-wrap:anywhere}.msg-a{display:flex;flex-direction:column}.msg-sig{display:flex;align-items:center;gap:var(--sp-1);margin-bottom:var(--sp-1);font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-2)}.sig-glyph{width:16px;height:16px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-caption);font-weight:var(--fw-strong)}.sig-avatar{flex:0 0 auto;width:16px;height:16px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat}[data-pet-skin=default] .sig-avatar{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .sig-avatar{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .sig-avatar{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .sig-avatar{background-image:url(/pet/skin-honey.png)}.hero .logo,.connect-card .logo{width:64px;height:40px;background-size:200% auto;background-position:0 center;background-repeat:no-repeat;background-image:url(/pet/skin-default.png)}[data-pet-skin=default] .hero .logo,[data-pet-skin=default] .connect-card .logo{background-image:url(/pet/skin-default.png)}[data-pet-skin=sakura] .hero .logo,[data-pet-skin=sakura] .connect-card .logo{background-image:url(/pet/skin-sakura.png)}[data-pet-skin=lake] .hero .logo,[data-pet-skin=lake] .connect-card .logo{background-image:url(/pet/skin-lake.png)}[data-pet-skin=honey] .hero .logo,[data-pet-skin=honey] .connect-card .logo{background-image:url(/pet/skin-honey.png)}.reply-card{background:none;border:0;border-radius:0;padding:0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1)}.reply-card .reply-meta{margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);color:var(--text-3)}.msg-user{flex-wrap:wrap}.msg-user .img-rail{display:flex;justify-content:flex-end;gap:var(--sp-2);width:100%}.img-bub{width:132px;height:88px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);display:inline-block}.img-bub.pending{opacity:.5}.img-bub.err{display:inline-grid;place-items:center;color:var(--danger);font-size:var(--fs-ui)}.entry-notice{display:flex;flex-direction:column;align-items:center}.notice-bub{display:inline-flex;align-items:center;gap:var(--sp-1);background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-caption);max-width:78%;overflow-wrap:anywhere;text-align:center;white-space:pre-wrap}.notice-bub[data-variant=warn]{color:var(--warn)}.notice-bub[data-variant=ok]{color:var(--ok)}.notice-exp{display:inline-flex;padding:0;border:0;background:none;color:var(--text-3);cursor:pointer;flex:none}.notice-detail{background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-ui);line-height:var(--lh-ui);max-width:78%;max-height:220px;overflow-y:auto;margin-top:var(--sp-1);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.msg-inject .sig-glyph{color:var(--text-2)}.inject-head{display:flex;align-items:center;gap:var(--sp-1);width:100%;border:0;background:none;padding:0;text-align:left;font:inherit}button.inject-head{cursor:pointer}.inject-head .inject-line{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-size:var(--fs-ui);line-height:var(--lh-ui)}.inject-head .inject-chev{display:inline-flex;flex:none;color:var(--text-3)}.reply-card .notice-detail{margin-top:var(--sp-2);max-width:none}.entry-error{color:var(--danger);white-space:pre-wrap}.entry-error-hint{color:var(--text-3);font-size:var(--fs-ui);margin-top:var(--sp-1);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.entry-divider{color:var(--text-2);user-select:none}.md{display:flex;flex-direction:column;gap:.35rem;overflow-wrap:anywhere}.md-heading{font-weight:var(--fw-strong)}.md-heading[data-level="1"],.md-heading[data-level="2"]{font-size:var(--fs-title)}.md-table{display:block;overflow-x:auto;border-collapse:collapse;font-size:var(--fs-ui)}.md-table th,.md-table td{border-width:1px 0 0 1px;border-style:solid;border-color:var(--hair-1);padding:var(--sp-1) var(--sp-2);text-align:left;white-space:nowrap}.md-table th{background:var(--surface-2);color:var(--text-1);font-weight:var(--fw-strong)}.md-table td{color:var(--text-2)}.md-list{display:flex;flex-direction:column;gap:.1rem;padding-left:1.1rem}.md-quote{color:var(--text-2);padding-left:.8rem;border-left:2px solid var(--hair-1);white-space:pre-wrap}.md-para{white-space:pre-wrap}.md code.inline,.msg-a code.inline{background-color:var(--surface-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:1px 5px;font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);color:var(--tok-str)}.md .bold{font-weight:700}.md a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.pre{position:relative;background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-md);overflow:hidden}.pre-head{display:flex;justify-content:space-between;padding:var(--sp-1) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3);border-bottom:1px solid var(--hair-1)}.pre-file{overflow-wrap:anywhere}.pre pre{margin:0;overflow-x:auto}.pre code{display:block;padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;color:var(--text-1)}.pre-copy{position:absolute;top:6px;right:6px;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.pre:hover .pre-copy,.pre-copy:focus-visible,.pre-copy.done{opacity:1}.pre-copy.done{color:var(--ok)}.pre.has-pre-head .pre-copy{top:var(--sp-8)}.tok-key{color:var(--tok-key)}.tok-str{color:var(--tok-str)}.tok-com{color:var(--tok-com);font-style:italic}.tok-num{color:var(--tok-num)}.tok-fn{color:var(--tok-fn)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes sweep{0%{transform:translate(-100%)}to{transform:translate(300%)}}.shimmer{background:linear-gradient(100deg,var(--text-3) 40%,var(--text-1) 50%,var(--text-3) 60%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer var(--dur-shimmer) var(--ease) infinite}.sweep-line{position:relative;overflow:hidden}.sweep-line:after{content:"";position:absolute;inset:0;width:33%;background:linear-gradient(90deg,transparent,transparent 0%,var(--hair-1) 50%,transparent 100%);animation:sweep var(--dur-sweep) var(--ease) infinite}html.glass body{background:transparent}html.glass .sb,html.glass .ide-cell.ide-left,html.glass .set-nav{background-color:transparent;background-image:linear-gradient(180deg,rgb(var(--accent-rgb) / .08),transparent 60%)}html.glass .chat,html.glass .ide-cell.ide-center,html.glass .set-body{background:var(--bg)}.toolcard{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolcard .head{display:flex;align-items:center;gap:var(--sp-2);min-height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);font-family:var(--mono);text-align:left;width:100%;cursor:pointer}.toolcard .head:hover{background:var(--surface-2);color:var(--text-1)}.toolcard .mark{color:var(--text-1);flex:none}.toolcard[data-status=ok] .mark{color:var(--ok)}.toolcard[data-status=run] .mark{color:var(--accent)}.toolcard[data-status=err] .mark{color:var(--danger)}.toolcard .name{font-weight:var(--fw-strong);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolcard .args{flex:1;color:var(--text-3);font-size:var(--fs-caption);overflow-wrap:anywhere}.toolcard .chev{margin-left:auto;color:var(--text-3);flex:none}.toolcard .result{color:var(--text-2);white-space:pre-wrap;overflow-wrap:anywhere;padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:1.6;max-height:132px;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.toolcard .result.err{color:var(--danger)}.toolcard.err{border-color:rgb(var(--danger-rgb) / .4)}.toolcard.err .head{color:var(--danger)}.toolgroup{display:flex;flex-direction:column;font-family:var(--mono);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.toolgroup>.grp-head{color:var(--text-1)}.toolgroup .mark{color:var(--ok)}.toolgroup .name{font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolgroup .count,.toolgroup .exp{color:var(--text-2)}.toolgroup .toolcard{border-width:0;border-radius:0;border-top:1px solid var(--hair-1)}.noticegroup{display:flex;flex-direction:column;gap:0;align-items:center}.noticegroup>.grp-head{display:inline-flex;align-items:center;gap:var(--sp-1);width:fit-content;padding:var(--sp-1) var(--sp-3);border:0;background:var(--surface-2);color:var(--text-2);cursor:pointer;font-size:var(--fs-caption);line-height:var(--lh-caption);border-radius:var(--radius-md);max-width:78%;white-space:pre-wrap;overflow-wrap:anywhere;text-align:center}.noticegroup>.grp-head[data-variant=warn] .text{color:var(--warn)}.noticegroup>.grp-head[data-variant=ok] .text{color:var(--ok)}.diff{display:flex;flex-direction:column;font-family:var(--mono)}.diff .path{color:var(--text-1);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.diff .del{color:var(--danger);background:rgb(var(--danger-rgb) / .1);white-space:pre-wrap}.diff .add{color:var(--ok);background:rgb(var(--ok-rgb) / .1);white-space:pre-wrap}.diff .ctx{color:var(--text-2);white-space:pre-wrap}.diff .del .wchg{background:rgb(var(--danger-rgb) / .3);border-radius:var(--radius-sm)}.diff .add .wchg{background:rgb(var(--ok-rgb) / .3);border-radius:var(--radius-sm)}.fv-chip{border:none;background:transparent;padding:0;font:inherit;color:var(--accent);cursor:pointer;text-decoration:underline dotted}.fv-chip:hover{color:var(--text-1)}.fv-btn{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fv-btn:hover:not(:disabled){color:var(--text-1);background:var(--surface-2)}.fv-btn:disabled{opacity:.5;cursor:default}.fv-btn.primary{color:var(--accent);border-color:var(--accent)}.fv-btn.primary:hover:not(:disabled){color:var(--accent)}.editor-root{flex:1;min-height:0;display:flex;flex-direction:column}.fv-edit{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fv-edit .grow{flex:1}.fv-edit-path{color:var(--text-3);font-size:var(--fs-caption)}.fv-conflict{flex:none;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border-bottom:1px solid var(--hair-1)}.fileviewer .fv-saved{flex:none;padding:var(--sp-1) var(--sp-3);color:var(--ok);border-bottom:1px solid var(--hair-1)}.editor-wrap{flex:1;min-height:0;display:flex;overflow:hidden}.editor-gutter{flex:none;overflow:hidden;min-width:3ch;text-align:right;color:var(--text-3);font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;padding:var(--sp-1) var(--sp-2) 0 var(--sp-3);user-select:none}.editor-stack{position:relative;flex:1;min-width:0;overflow:hidden}.editor-hl,.editor-ta{font-family:var(--mono);font-size:calc(var(--fs-body) - 2px);line-height:1.6;tab-size:2;margin:0;padding:var(--sp-1) var(--sp-2) var(--sp-2) 0;white-space:pre;word-break:normal;overflow-wrap:normal}.editor-hl{position:absolute;inset:0;overflow:hidden;color:var(--text-1);pointer-events:none}.editor-ta{position:absolute;inset:0;overflow:auto;resize:none;border:none;outline:none;background:transparent;color:transparent;caret-color:var(--text-1)}.board{display:flex;flex-direction:column}.board .head{color:var(--text-2);margin-bottom:var(--sp-1)}.board .done{color:var(--ok)}.board .wip{color:var(--warn)}.board .todo{color:var(--text-2)}.todo{display:flex;flex-direction:column;gap:var(--sp-1)}.todo-bar{height:2px;background:var(--ok);transition:width var(--dur-med) var(--ease)}.todo-item{display:flex;align-items:center;gap:var(--sp-2);min-width:0;font-size:var(--fs-ui);color:var(--text-2)}.todo-item>span:last-child{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.todo-box{flex:none;width:16px;height:16px;border-radius:var(--radius-sm);border-width:1px;border-style:solid;border-color:var(--hair-2);display:inline-flex;align-items:center;justify-content:center;color:var(--ok);background:none}.todo-box.done{background:rgb(var(--ok-rgb) / .12);border-color:rgb(var(--ok-rgb) / .3)}.statusline{height:28px;flex:none;display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--sp-4);border-top:1px solid var(--hair-1);font-size:var(--fs-caption);font-family:var(--mono);color:var(--text-3);user-select:none;white-space:nowrap;overflow:hidden}.statusline .warn{color:var(--warn)}.statusline .board,.statusline .cache{color:var(--ok)}.statusline .seg-branch{flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);color:var(--text-3)}.statusline .seg-goal{min-width:0;overflow:hidden;text-overflow:ellipsis}.statusline .seg-busy{margin-left:auto;color:var(--accent);flex:none}.statusline[data-stale]{opacity:.55}.banner{padding:var(--sp-1) var(--sp-4);background:rgb(var(--warn-rgb) / .12);color:var(--warn);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.banner .action{margin-left:var(--sp-2)}.banner.quiet{padding:var(--sp-1) var(--sp-3);background:none;color:var(--text-3);font-size:var(--fs-caption);font-family:var(--mono)}.btnrow{display:flex;gap:var(--sp-2);flex-wrap:wrap}button.wudao{font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-3);cursor:pointer}button.wudao:hover{border-color:var(--hair-2);color:var(--text-1)}button.wudao.primary{border-color:transparent;background:var(--accent);color:var(--accent-ink)}button.wudao.primary:hover:not(:disabled){filter:brightness(1.08)}button.wudao.primary:disabled{background:var(--accent);color:var(--accent-ink)}button.wudao.danger{border-color:var(--danger);color:var(--danger)}button.wudao:disabled{opacity:.45;cursor:default}.optioncards{display:flex;flex-direction:column;gap:var(--sp-2);overflow-y:auto}.optioncard{text-align:left;font:inherit;background:var(--surface);color:var(--text-1);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);cursor:pointer}.optioncard:hover{border-color:var(--hair-2)}.optioncard .desc{color:var(--text-2);display:block}.picker{display:flex;flex-direction:column;gap:var(--sp-1);max-height:50vh;overflow-y:auto}.pickrow{display:flex;gap:var(--sp-2);align-items:baseline;text-align:left;font-family:var(--mono);color:var(--text-1);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);cursor:pointer}.pickrow:hover{background:var(--surface)}.pickrow.cur{border-color:var(--accent);background:var(--surface)}.pickrow .rank,.pickrow .meta{color:var(--text-2)}.pickrow:disabled{cursor:not-allowed;opacity:.55}.pop-in{animation:pop var(--dur-med) var(--ease)}.scrim{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;padding:var(--sp-4);animation:fade var(--dur-med) var(--ease)}@keyframes fade{0%{opacity:0}}.modal-card{background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);max-width:480px;width:calc(100% - var(--sp-8));overflow:hidden}.menu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-2);border-radius:var(--radius-lg);padding:var(--sp-1);min-width:180px}.menu-item{display:flex;align-items:center;height:26px;padding:0 var(--sp-2);border-radius:var(--radius-sm);font-size:var(--fs-ui);color:var(--text-2)}.menu-item:hover{background:var(--surface-2);color:var(--text-1)}.menu-kbd{margin-left:auto;font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.scrim{z-index:var(--z-modal)}.modal-card{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4);max-height:calc(100dvh - var(--sp-8))}.modal-card h3{margin:0;font-size:var(--fs-title)}.modal-card .warn{color:var(--warn)}.modal-card .muted{color:var(--text-2)}.menu.ctx{--ctx-cap: 180px;--ctx-w: 224px;position:fixed;z-index:var(--z-ctx-menu);display:flex;flex-direction:column;min-width:var(--ctx-w);max-width:var(--ctx-w);left:min(var(--ctx-x, 0px),calc(100vw - var(--ctx-w) - var(--sp-4)));top:min(var(--ctx-y, 0px),calc(100dvh - var(--ctx-cap) - var(--sp-4)));max-height:var(--ctx-cap);overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}button.menu-item{border:0;background:transparent;font:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;width:100%;flex:none}.planboard{border:1px solid rgb(var(--accent-rgb) / .35);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3)}.planboard .label{color:var(--accent);font-weight:var(--fw-strong)}.planboard .body{white-space:pre-wrap;margin:var(--sp-1) 0 var(--sp-2)}.inputarea{flex:none;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0 var(--sp-1)}.composer{max-width:calc(var(--content-max) + 32px);width:100%;margin:0 auto;background:var(--surface);border:0;border-radius:var(--radius-md);box-shadow:var(--elev-2);padding:var(--sp-2) var(--sp-3) var(--sp-2);display:flex;flex-direction:column}.composer-ta{width:100%;font-family:var(--font);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--text-1);padding:var(--sp-2) 0 var(--sp-1);background:none;border:0;outline:0;resize:none;min-height:22px;max-height:40vh}.composer-ta::placeholder{color:var(--text-3)}.composer-tools{display:flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}.composer-right{margin-left:auto;display:flex;align-items:center;gap:var(--sp-2)}.chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 calc(var(--sp-2) + 1px);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--bg);font-family:var(--font);font-weight:var(--fw-strong);font-size:calc(var(--fs-ui) - 1px);color:var(--text-2);cursor:pointer;white-space:nowrap;transition:opacity var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.chip:hover:not(:disabled):not(.on):not(.sel){border-color:var(--hair-2);color:var(--text-1)}.chip.on,.chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.chip:disabled{opacity:.5;cursor:default}.chip.model{max-width:12rem}.chip.model .chip-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.chip.model .caret{flex:none}.composer .chip{background:transparent;border-color:transparent}.composer .chip:hover:not(:disabled):not(.on):not(.sel){background:var(--surface-2);border-color:transparent;color:var(--text-1)}.composer .chip.on,.composer .chip.sel{background:var(--surface-2);border-color:var(--hair-2);color:var(--text-1)}.composer .chip.interrupt{color:var(--danger)}.composer .chip.interrupt:hover:not(:disabled){background:rgb(var(--danger-rgb) / .1);border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.send{width:34px;height:34px;flex:none;border-radius:50%;border:0;background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer}.send:hover:not(:disabled){filter:brightness(1.08)}.send.off{opacity:.4;pointer-events:none}.send:disabled{cursor:default}.pop{position:relative;display:inline-flex}.pop .menu{position:absolute;bottom:40px;left:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);padding:var(--sp-2);min-width:224px;display:flex;flex-direction:column;gap:var(--sp-1);z-index:var(--z-float);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.pop .mi{display:flex;gap:var(--sp-2);align-items:center;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-ui);color:var(--text-2);background:transparent;border:0;cursor:pointer;text-align:left;white-space:nowrap}.pop .mi:hover{background:var(--surface-2)}.pop .mi.on{background:var(--accent-weak);color:var(--accent);font-weight:var(--fw-strong)}.pop .mi .confirm{color:var(--warn);font-size:var(--fs-caption);white-space:normal}.pop .mi .warned{font-size:var(--fs-caption);color:var(--danger);margin-left:var(--sp-1);border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.pop .mi .msub{margin-left:auto;font-size:var(--fs-caption);color:var(--text-2)}.pop .menu.model-menu{min-width:max-content;max-width:min(40rem,92vw);padding:0;gap:0;overflow:hidden;display:flex;flex-direction:row;align-items:stretch}.pop .menu.model-menu .mroot,.pop .menu.model-menu .mpane{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);max-height:min(24rem,60vh);overflow-y:auto;overscroll-behavior:contain}.pop .menu.model-menu .mroot{min-width:11rem;max-width:13rem;border-right:1px solid var(--hair-1)}.pop .menu.model-menu .mpane{min-width:12rem}.pop.down .menu{bottom:auto;top:calc(100% + 4px)}.pop .menu.model-menu .mgroup{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;text-transform:uppercase;color:var(--text-3)}.pop .menu.model-menu .mgroup:not(:first-child){margin-top:var(--sp-1);padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}.pop .menu.model-menu .mi.mprov .mlabel{font-weight:var(--fw-strong)}.pop .menu.model-menu .mi.mprov.mfoc:not(.on){background:var(--surface-2)}.pop .menu.model-menu .mi.mrec{border-bottom:1px solid var(--hair-1);border-bottom-left-radius:0;border-bottom-right-radius:0}.pop .menu .menu-sep{height:1px;background:var(--hair-1);margin:var(--sp-1) 0}.pop .mf{display:flex;align-items:center;width:100%;padding:var(--sp-1) var(--sp-3);border:0;border-top:1px solid var(--hair-1);margin-top:var(--sp-1);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--fs-caption);color:var(--text-2);background:transparent;cursor:pointer;text-align:left;white-space:nowrap}.pop .mf:hover{background:var(--surface-2);color:var(--text-1)}.pop .menu.lang-menu{min-width:max-content}.pop .lang-head{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-caption);letter-spacing:.04em;color:var(--text-3);user-select:none}.pop .lang-head+.mi{margin-top:0}textarea.wudao-input:focus{border-color:var(--accent)}.hint{color:var(--text-2);font-size:var(--fs-ui);user-select:none}.inputarea>.hint{text-align:center}.composer:focus-within{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .55),var(--elev-2-soft)}.composer.dragover{box-shadow:0 0 0 1px rgb(var(--accent-rgb) / .8),var(--elev-2-soft)}.composer .img-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.img-thumb{position:relative;width:48px;height:48px;flex:none;border-radius:var(--radius-sm);border:1px solid var(--hair-1);overflow:hidden;background:var(--surface-2)}.img-thumb img{width:100%;height:100%;object-fit:cover;display:block}.img-thumb .rm{position:absolute;top:0;right:0;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:0 0 0 var(--radius-sm);background:rgb(var(--bg-rgb) / .72);color:var(--text-1);cursor:pointer}.img-thumb .rm:hover{color:var(--danger)}.img-thumb .rm:disabled{cursor:default;opacity:.6}.chip.attach .n{font-size:var(--fs-caption);color:var(--text-1)}.img-notice{color:var(--warn)}.composer .file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}.file-card{display:flex;align-items:center;gap:var(--sp-2);max-width:260px;min-height:48px;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2)}.file-card .glyph{flex:none;font-size:16px;line-height:1}.file-card .meta{display:flex;flex-direction:column;min-width:0}.file-card .name{font-size:var(--fs-ui);color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-card .size{font-size:var(--fs-caption);color:var(--text-3)}.file-card .rm{flex:none;width:16px;height:16px;display:grid;place-items:center;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);cursor:pointer}.file-card .rm:hover{color:var(--danger)}.file-card .rm:disabled{cursor:default;opacity:.6}.chip.attachfile .n{font-size:var(--fs-caption);color:var(--text-1)}.hist-file-rail{display:flex;flex-wrap:wrap;gap:var(--sp-1);justify-content:flex-end;margin-bottom:var(--sp-1)}.hist-file-chip{display:inline-flex;align-items:center;gap:var(--sp-1);max-width:240px;padding:0 var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--hair-1);background:var(--surface-2);font-size:var(--fs-caption);color:var(--text-2)}.hist-file-chip .name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hist-file-chip .size{color:var(--text-3);flex:none}.slashmenu{background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:1px solid var(--hair-1);border-radius:var(--radius-lg);padding:var(--sp-1) 0;max-height:12rem;overflow-y:auto;animation:pop var(--dur-fast) var(--ease)}.slashmenu .row{padding:0 var(--sp-2);white-space:pre;font-family:var(--mono)}.slashmenu .row.sel{color:var(--accent)}.slashmenu .row .args,.slashmenu .row .desc{color:var(--text-2)}.slashmenu .row.sel .args,.slashmenu .row.sel .desc{color:var(--accent);opacity:.8}.slashmenu .more{color:var(--text-2);padding:0 var(--sp-2)}.connect-shell{flex:1;display:grid;place-items:center;padding:var(--sp-4)}.connect-card{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);background:var(--surface);border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2);padding:var(--sp-8) var(--sp-6);text-align:center;max-width:400px}.connect-card .connect-title{color:var(--text-1);font-size:var(--fs-title)}.connect-card .connect-row{display:flex;align-items:center;gap:var(--sp-2)}.connect-card .connect-row .spin{color:var(--text-2);flex:none}.connect-card .connect-msg{color:var(--text-2);font-size:var(--fs-ui)}.connect-card .connect-msg.err{color:var(--danger)}.connect-card .connect-meta{color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption)}.simple{display:flex;flex-direction:column;flex:1;min-height:0;padding:var(--sp-3) var(--sp-8) var(--sp-4)}.simple .chat{flex:1;padding-inline:0}.simple .chat{max-width:none;margin:0;width:100%}.simple .simple-composer{width:100%}.simple .inputarea{width:100%;padding-inline:0}.simple .composer{max-width:none;margin:0;width:100%;margin-top:var(--sp-3)}.simple .chat{scrollbar-width:none}.simple .chat::-webkit-scrollbar{display:none}.act{border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.act-row{display:flex;align-items:center;gap:var(--sp-2);height:32px;padding:0 var(--sp-2);border:0;background:none;color:var(--text-2);font:inherit;font-size:var(--fs-ui);text-align:left;width:100%;cursor:pointer}.act-row:hover{background:var(--surface-2);color:var(--text-1)}.act-row[data-status=ok] .act-st{color:var(--ok)}.act-row[data-status=run] .act-st{color:var(--accent)}.act-row[data-status=err] .act-st,.act-row[data-status=err],.act-row[data-status=err] .act-tail{color:var(--danger)}.act-verb,.act-file,.act-tail{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px}.act-file{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.act-tail{margin-left:auto;color:var(--text-3);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-tail-line{padding:var(--sp-1) var(--sp-3) var(--sp-1) calc(var(--sp-3) + var(--sp-4));font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-chev{color:var(--text-3);flex:none;transition:transform var(--dur-fast) var(--ease)}.act[data-open=true] .act-chev{transform:rotate(180deg)}.act-file-card{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-top:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}.act-file-icon{flex:none;user-select:none;color:var(--text-2)}.act-file-name{color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-file-size{color:var(--text-3);flex:none}.act-file-reveal{margin-left:auto;flex:none;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-3);cursor:pointer}.act-file-reveal:hover{border-color:var(--hair-2);color:var(--text-1)}.act-body{border-top:1px solid var(--hair-1);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2);max-height:13.2em;overflow-y:auto;animation:fade var(--dur-fast) var(--ease)}.act .act-body .block{display:flex;flex-direction:column;gap:0}.act .act-body .blocklabel{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.act .act-body .block.err .blocktext{color:var(--danger)}.act .act-body .blocktext{white-space:pre-wrap;overflow-wrap:anywhere}.activity-foot{color:var(--text-3);font-size:var(--fs-caption);user-select:none}.activity-toggle{display:block;margin-top:var(--sp-1);border:0;background:transparent;color:var(--text-3);font-size:var(--fs-caption);padding:0;cursor:pointer;user-select:none}.activity-toggle:hover{color:var(--accent)}.act.err{border-color:rgb(var(--danger-rgb) / .4)}.spin{animation:spin var(--dur-slow) linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.panel{display:flex;flex-direction:column;border-left-width:1px;border-left-style:solid;border-left-color:var(--hair-1)}.panel-head{display:flex;align-items:center;justify-content:space-between;height:34px;padding-left:var(--sp-3);padding-right:var(--sp-3);border-bottom:1px solid var(--hair-1)}.panel-title{font-size:var(--fs-ui);font-weight:var(--fw-medium);color:var(--text-1)}.panel-count{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.panel-list{overflow-y:auto}.panel-list>*+*{border-top:1px solid var(--hair-1)}.panel-list>.act{border-width:0;border-radius:0;background:none}.panel-list .act-row{cursor:default}.panel-list>details.reasoning,.panel-list>.steer{padding:var(--sp-1) var(--sp-2)}.panel-list .act-tail.gating{color:var(--warn)}.live-answer{margin-top:var(--sp-2)}.live-answer .caret{color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}details.reasoning{color:var(--text-2)}details.reasoning>summary{cursor:pointer;user-select:none;list-style:none}details.reasoning>summary::-webkit-details-marker{display:none}details.reasoning>summary:hover{color:var(--text-1)}details.reasoning>summary:before{content:"▸ "}details.reasoning[open]>summary:before{content:"▾ "}details.reasoning .body{white-space:pre-wrap;border-left:2px solid var(--hair-1);padding-left:var(--sp-2);margin-top:var(--sp-1);max-height:220px;overflow-y:auto}.reply-card>details.reasoning{margin-bottom:var(--sp-2)}.steer{color:var(--text-2)}.simple-error{display:flex;flex-direction:column;gap:var(--sp-1);border-width:1px;border-style:solid;border-color:rgb(var(--danger-rgb) / .4);border-radius:var(--radius-md);padding:var(--sp-2)}.simple-error .err-head{color:var(--danger);font-weight:700}.simple-error .err-text{color:var(--text-1);white-space:pre-wrap;overflow-wrap:anywhere}.simple-error .err-recovery{display:flex;gap:var(--sp-2);align-items:baseline;flex-wrap:wrap;color:var(--warn)}.simple-error .err-recovery .label{font-weight:var(--fw-strong);user-select:none}.approval{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;max-height:calc(100% - 3.5rem);overflow:hidden}.simple .approval{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.approval .ap-scroll{display:flex;flex-direction:column;min-height:0;overflow-y:auto}.approval .strip,.permission-card .strip{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--warn);letter-spacing:.3px;margin-bottom:var(--sp-2)}.approval .why{font-size:var(--fs-ui);font-weight:var(--fw-strong);color:var(--text-1);margin-bottom:var(--sp-1);overflow-wrap:anywhere}.approval .warn,.approval .sidecar{color:var(--warn);font-size:var(--fs-ui);overflow-wrap:anywhere}.approval .btns{display:flex;gap:var(--sp-3);justify-content:flex-end}.approval .btns button{font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-sm);cursor:pointer}.approval .btns button:disabled{opacity:.5;cursor:default}.approval .deny{border:1px solid var(--hair-2);background:var(--surface);color:var(--text-2)}.approval .deny:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.approval .allow{border:0;background:var(--accent);color:var(--accent-ink)}.approval .allow:hover:not(:disabled){filter:brightness(1.08)}.approval-note{text-align:center;font-size:var(--fs-caption);color:var(--text-3);margin-top:var(--sp-2)}.approval.agent-root{background:rgb(var(--accent-rgb) / .06);border-color:rgb(var(--accent-rgb) / .3)}.approval.agent-root .strip{color:var(--accent)}.approval.agent-root .deny:hover:not(:disabled){color:var(--text-1);border-color:var(--text-3)}.permission-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--warn-rgb) / .07);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.simple .permission-card{width:calc(100% - 2.5rem);margin-left:var(--sp-2);margin-right:var(--sp-2)}.permission-card h3{margin:0;font-size:var(--fs-title)}.permission-card .warn{color:var(--warn);overflow-wrap:anywhere}.permission-card .muted{color:var(--text-2)}.permission-card .pc-scroll{display:flex;flex-direction:column;gap:var(--sp-2);min-height:0;overflow-y:auto}.approval .cmd,.permission-card .cmd{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);background:var(--surface-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);max-height:76px;overflow:auto;margin:var(--sp-2) 0;white-space:pre-wrap;overflow-wrap:anywhere}.approval .spoof,.permission-card .spoof{display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-ui);border-top:1px dashed rgb(var(--warn-rgb) / .35);padding-top:var(--sp-2)}.approval .spoof-title,.permission-card .spoof-title{color:var(--warn);font-weight:var(--fw-strong)}.approval .spoof-row,.permission-card .spoof-row{display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:baseline}.approval .spoof-key,.permission-card .spoof-key{font-family:var(--mono);color:var(--text-2);overflow-wrap:anywhere}.approval .spoof-badge,.permission-card .spoof-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .08);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);padding:0 var(--sp-2);white-space:nowrap}.approval .spoof-more,.permission-card .spoof-more{color:var(--text-3)}.approval .spoof-url,.permission-card .spoof-url{overflow-wrap:anywhere}.approval .spoof-target,.permission-card .spoof-target{font-family:var(--mono);color:var(--warn);overflow-wrap:anywhere}.approval .spoof-note,.permission-card .spoof-note{color:var(--text-3);font-size:var(--fs-caption);padding-left:var(--sp-3)}.permission-card .btnrow{justify-content:flex-end}.permission-card .btnrow button{font-weight:var(--fw-strong);border-radius:var(--radius-sm)}.permission-card .btnrow button.wudao.primary{background:var(--accent);color:var(--accent-ink)}.hero{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);flex:1;text-align:center;padding:calc(var(--sp-8) + var(--sp-2)) var(--sp-4);color:var(--text-1)}.hero h1{margin:var(--sp-2) 0 0;font-size:var(--fs-head)}.hero p{margin:0;color:var(--text-3);font-size:var(--fs-ui)}.hero .hero-hint{margin-top:var(--sp-3)}.hero .hero-await{margin-top:var(--sp-3);color:var(--text-2)}.hero .hero-await-name{padding:0;border:none;background:none;color:var(--accent);font:inherit;cursor:pointer}.hero .hero-await-name:hover{text-decoration:underline}.hero .hero-await-name:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}.hero .hero-actions{margin-top:var(--sp-4);display:flex;gap:var(--sp-2)}.hero .hero-act{padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-2);background:transparent;color:var(--text-2);font:inherit;font-size:var(--fs-ui);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap}.hero .hero-act:hover{color:var(--accent);border-color:var(--accent)}.hero .hero-act:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap}.recall{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:var(--sp-2);cursor:pointer;border-radius:var(--radius-sm)}.recall:hover{color:var(--danger)}.recall:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.act-row .detach{font-family:var(--font);font-size:var(--fs-caption);color:var(--text-3);background:none;border:0;padding:0 var(--sp-1);margin-left:auto;cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap}.act-row .detach:hover{color:var(--accent)}.act-row .detach:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ask-card{width:min(calc(var(--content-max) + 32px),calc(100% - 2.5rem));margin:var(--sp-2) auto var(--sp-4);background:rgb(var(--accent-rgb) / .06);border:1px solid rgb(var(--accent-rgb) / .3);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);max-height:calc(100dvh - var(--sp-8))}.ask-card h3{margin:0;font-size:var(--fs-title)}.ask-card .muted{color:var(--text-2)}.turnlive{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.turnlive .act-row{cursor:default}.turnstatus{display:flex;flex-direction:column;gap:var(--sp-1);color:var(--text-1)}.turnstatus .ts-head{display:flex;align-items:center;gap:var(--sp-2);min-height:16px}.turnstatus .label{font-weight:var(--fw-strong)}.turnstatus .clock{color:var(--text-3)}.turnstatus .queue-line{color:var(--text-2);font-size:var(--fs-ui)}.simple-composer{display:flex;flex-direction:column}.lane-toggle{display:inline-flex;align-items:center;gap:var(--sp-1)}.parked-row{display:inline-flex;gap:var(--sp-1);flex-wrap:wrap}.parked-chip{display:inline-flex;align-items:center;gap:var(--sp-1);height:26px;padding:0 var(--sp-3);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border:1px solid rgb(var(--warn-rgb) / .3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);max-width:100%}.parked-chip .drop{font:inherit;color:var(--text-3);background:transparent;border:none;padding:0;cursor:pointer}.parked-chip .drop:hover{color:var(--danger)}.composer-right .ctx{position:relative;display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.ctx-btn{font:inherit;background:none;border:0;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1)}.ctx-btn:hover{color:var(--text-1)}.ctxmeter-backdrop{position:fixed;inset:0;z-index:calc(var(--z-legend) - 1)}.ctxmeter-legend{position:absolute;bottom:calc(100% + var(--sp-1));right:0;z-index:var(--z-legend);display:flex;flex-direction:column;gap:0;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-1);border-radius:var(--radius-lg);padding:var(--sp-1) var(--sp-2);font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);white-space:nowrap}.ctxmeter-legend .warn{color:var(--warn)}.settings-page{flex:1;min-height:0;display:flex;position:relative}.set{display:flex;height:100%;flex:1;min-width:0}.set-nav{width:180px;flex:none;border-right:1px solid var(--hair-1);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2)}.settings-head{display:flex;align-items:center;justify-content:space-between}.settings-head h3{margin:0;font-size:var(--fs-title)}.settings-receipts{color:var(--warn);display:flex;flex-direction:column;gap:var(--sp-1);white-space:pre-wrap}.settings-receipts>div{display:flex;align-items:flex-start;gap:var(--sp-1)}.settings-receipts>div[data-variant=ok]{color:var(--ok)}.settings-receipts>div[data-variant=info]{color:var(--text-2)}.settings-receipts .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.set-body{flex:1;min-width:0;overflow-y:auto;scrollbar-gutter:stable;padding:var(--sp-6) var(--sp-8);max-width:calc(var(--content-max) + 32px);margin:0 auto}.set-body>.entry-error,.set-body>.hint{margin-bottom:var(--sp-4)}.settings-pending-ask{margin-bottom:var(--sp-4);padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);background:rgb(var(--warn-rgb) / .1);color:var(--warn);font-size:var(--fs-ui);line-height:var(--lh-ui)}.settings-toasts{position:absolute;right:var(--sp-4);bottom:var(--sp-4);z-index:var(--z-float);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(420px,calc(100% - var(--sp-8)))}.settings-toast{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:0;border-radius:var(--radius-lg);background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:var(--elev-2);color:var(--text-1);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;animation:toast-in var(--dur-med) var(--ease)}.settings-toast[data-variant=warn]{color:var(--warn)}.settings-toast[data-variant=ok]{color:var(--ok)}.settings-toast .ic{flex:none;margin-top:calc(var(--sp-1) / 2)}.settings-toast-close{flex:none;border:none;background:none;padding:0;font:inherit;font-size:var(--fs-ui);line-height:inherit;color:var(--text-3);cursor:pointer}.settings-toast-close:hover{color:var(--text-1)}@keyframes toast-in{0%{opacity:0;transform:translateY(4px)}}.settings-section{display:flex;flex-direction:column;gap:var(--sp-3)}.set-sec+.set-sec{margin-top:var(--sp-8)}.set-title{font-size:var(--fs-title);font-weight:var(--fw-strong);line-height:var(--lh-title);letter-spacing:-.2px;color:var(--text-1);margin:0 0 var(--sp-3)}.ctl{height:28px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui)}.ctl:hover{border-color:var(--hair-2)}.ctl:disabled{opacity:.5;cursor:default}.segctl{display:inline-flex;align-items:center;gap:calc(var(--sp-1) / 2);padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2)}.segctl-opt{height:28px;padding:0 var(--sp-3);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);line-height:1;white-space:nowrap;cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1);transition:color var(--dur-fast) var(--ease),background-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.segctl-opt:hover:not(:disabled):not(.on){color:var(--text-1)}.segctl-opt.on{background:var(--surface);color:var(--text-1);font-weight:var(--fw-strong);box-shadow:var(--elev-1)}.segctl-opt:disabled{opacity:.45;cursor:default}.segctl-dot{width:10px;height:10px;flex:none;border-radius:50%}.segctl-opt[data-swatch=black] .segctl-dot{background:rgb(var(--swatch-ink-rgb))}.segctl-opt[data-swatch=blue] .segctl-dot{background:rgb(var(--swatch-royal-rgb))}.segctl-opt[data-swatch=green] .segctl-dot{background:rgb(var(--swatch-jade-rgb))}input.wudao-switch{appearance:none;-webkit-appearance:none;flex:none;position:relative;width:36px;height:20px;margin:0;padding:0;border:0;border-radius:var(--radius-sm);background:var(--hair-3);cursor:pointer;transition:background-color var(--dur-fast) var(--ease)}input.wudao-switch:before{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--surface);box-shadow:var(--elev-1);transition:transform var(--dur-fast) var(--ease)}input.wudao-switch:checked{background:var(--accent)}input.wudao-switch:checked:before{transform:translate(16px);background:var(--accent-ink)}input.wudao-switch:disabled{opacity:.45;cursor:default}.setrow{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;cursor:default}.setrow+.setrow{border-top:1px solid var(--hair-1)}.setrow-main{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);min-width:0;flex:1}.setrow-title{color:var(--text-1);font-size:var(--fs-ui);line-height:1.5}.setrow-note{color:var(--text-3);font-size:var(--fs-caption);line-height:1.5}label.setrow{cursor:pointer}label.setrow:active input.wudao-switch{filter:brightness(.96)}.provider-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.provider-card{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.provider-card .card-head{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-name{font-weight:var(--fw-strong)}.provider-card .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-card .card-endpoint{color:var(--text-2);font-size:var(--fs-ui);overflow-wrap:anywhere;font-family:var(--mono)}.provider-card .card-models{display:flex;gap:var(--sp-1);flex-wrap:wrap}.dot{display:inline-block;width:8px;height:8px;border-radius:50%}.dot.ready{background:var(--ok)}.dot.missing-key{background:var(--danger)}.dot.missing-endpoint{background:var(--warn)}.card-status{font-size:var(--fs-ui);color:var(--text-2)}.model-chip{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1);background:var(--surface);border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-2);cursor:pointer}.model-chip:hover:not(:disabled){border-color:var(--hair-2)}.keyrow{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}.keyrow .key-input{flex:1;min-width:14rem}input.wudao-input.key-input{font-family:var(--mono)}input.wudao-input.key-input:focus{border-color:var(--accent)}.test-result{font-size:var(--fs-ui)}.test-result.ok{color:var(--ok)}.test-result.fail{color:var(--danger)}.test-result.fail.network,.test-result.fail.no-endpoint{color:var(--warn)}.prefrow{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.pref-label{color:var(--text-2)}.hint .short{display:none}@media (max-width: 640px){.hint .long{display:none}.hint .short{display:inline}}.settings-tabs{display:flex;flex-direction:column;gap:var(--sp-1)}.settings-tabs .sb-i.on{box-shadow:none;font-weight:var(--fw-strong)}.plugin-tab{display:flex;flex-direction:column;gap:var(--sp-3)}.plugin-tab .market-source-input{flex:1;min-width:14rem;font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-2);border-width:1px;border-style:solid;border-color:var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1)}.plugin-pending{color:var(--text-3);font-size:var(--fs-ui)}.market-list,.plugin-list{display:flex;flex-direction:column;gap:var(--sp-2)}.market-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.market-name{font-weight:var(--fw-strong)}.market-source{flex:1;min-width:12rem;color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono);overflow-wrap:anywhere}.plugin-entry{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.plugin-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.plugin-name{font-weight:var(--fw-strong);font-family:var(--mono)}.plugin-desc{color:var(--text-2);font-size:var(--fs-ui)}.plugin-detail{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.plugin-actions{display:flex;gap:var(--sp-1)}.installed-group{display:flex;flex-direction:column;gap:var(--sp-1)}.installed-group .group-title{color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.installed-row{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2) var(--sp-2);display:flex;align-items:center;gap:var(--sp-1) var(--sp-2);flex-wrap:wrap}.installed-row .state.on{color:var(--ok)}.installed-row .state.off{color:var(--warn)}.no-key-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-1) var(--sp-4);color:var(--warn);background:rgb(var(--warn-rgb) / .1);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui)}.wizard-overlay{position:fixed;inset:0;z-index:var(--z-wizard);display:flex;align-items:center;justify-content:center;background:rgb(var(--bg-rgb) / .86);backdrop-filter:blur(2px)}.wiz{width:min(40rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);display:flex;flex-direction:column;background:var(--surface);border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);overflow:hidden}@keyframes pop{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.wiz-bar{height:2px;background:var(--accent);transition:width var(--dur-med) var(--ease)}.wiz-head{display:flex;align-items:baseline;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--hair-1)}.wiz-step{font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.wiz-title{font-size:var(--fs-title);font-weight:var(--fw-strong);color:var(--text-1)}.wiz-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4)}.wiz-body h2{margin:0;font-size:var(--fs-head)}.wiz-body h3{margin:0;font-size:var(--fs-title)}.wizard-sub{margin:0;color:var(--text-2)}.wizard-points{margin:0;padding-left:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-1)}.wizard-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.wizard-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.wizard-provider-card{display:flex;align-items:baseline;gap:var(--sp-2);text-align:left;font:inherit;color:var(--text-1);background:var(--bg);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2);cursor:pointer}.wizard-provider-card .card-name{font-weight:var(--fw-strong)}.wizard-provider-card .meta{color:var(--text-2);font-size:var(--fs-ui);font-family:var(--mono)}.wizard-provider-card:hover{border-color:var(--hair-2)}.wizard-provider-card.sel{border-color:var(--accent)}.wizard-provider-card.sel .card-name{color:var(--accent)}.wizard-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);border-top:1px solid var(--hair-1);padding:var(--sp-3) var(--sp-4)}.wizard-skip{font:inherit;font-size:var(--fs-ui);color:var(--text-2);background:none;border:none;cursor:pointer;text-decoration:underline;padding:var(--sp-1)}.wizard-skip:hover{color:var(--text-1)}.wizard-badge{font-family:var(--mono);font-size:var(--fs-caption);color:var(--warn);background:rgb(var(--warn-rgb) / .12);border:1px solid rgb(var(--warn-rgb) / .35);border-radius:var(--radius-sm);padding:0 var(--sp-1);white-space:nowrap}.wizard-nav{display:flex;align-items:center;gap:var(--sp-2)}.scrim.wizard-confirm{z-index:calc(var(--z-wizard) + 1)}.ide{flex:1;min-height:0;display:grid;grid-template-columns:var(--tree-w, 220px) var(--mid-w, 1fr) var(--chat-w, 360px);justify-content:space-between;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.ide-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.ide-cell.ide-right{border-left:1px solid var(--hair-1)}.ide-cell.ide-right>.chat{flex:1;min-height:0}.ide-toggle{position:absolute;top:10px;width:16px;height:16px;z-index:var(--z-toggle);display:flex;align-items:center;justify-content:center;border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-3);cursor:pointer;padding:0;font-size:var(--fs-caption);line-height:1}.ide-toggle:hover{background:var(--surface-2);color:var(--text-1)}.ide-toggle[data-side=left]{left:max(calc(var(--tree-w, 240px) - 8px),0px)}.ide-toggle[data-side=right]{right:max(calc(var(--chat-w, 400px) - 8px),0px)}.ide-toggle[data-side=center]{left:max(calc(var(--tree-w, 240px) + 12px),12px)}.ide-drag{position:absolute;top:0;bottom:0;width:4px;z-index:var(--z-float);cursor:col-resize}.ide-drag[data-side=left]{left:max(calc(var(--tree-w, 240px) - 2px),0px)}.ide-drag[data-side=right]{right:max(calc(var(--chat-w, 400px) - 2px),0px)}.ide-drag:hover{background:var(--hover)}.buddy{flex:1;min-height:0;display:grid;grid-template-columns:var(--buddy-w, 260px) 1fr;position:relative;transition:grid-template-columns var(--dur-med) var(--ease)}.buddy-cell{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.buddy-cell.buddy-left>.sb{flex:1 1 auto;min-height:0}.buddy-cell.buddy-main>.chat{flex:1;min-height:0}.buddy-cell.buddy-main{position:relative}.buddy-toggle{left:max(calc(var(--buddy-w, 260px) - 8px),0px)}.sb{width:100%;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1)}.sb-new{display:flex;align-items:center;gap:var(--sp-1);height:28px;margin:var(--sp-3) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);cursor:pointer}.sb-new:hover{border-color:var(--hair-2);color:var(--text-1);background:var(--surface-2)}.sb-search{display:flex;align-items:center;gap:var(--sp-1);height:26px;margin:var(--sp-1) var(--sp-2) 0;padding:0 var(--sp-2);border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-3);font-size:calc(var(--fs-ui) - .5px);cursor:pointer}.sb-search:hover{background:var(--surface);border-color:var(--hair-1)}.sb-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;padding:var(--sp-1) var(--sp-2) var(--sp-2);gap:calc(var(--sp-1) / 2)}.sb-g{font-size:var(--fs-caption);font-family:var(--mono);letter-spacing:.4px;color:var(--text-3);padding:var(--sp-3) var(--sp-2) var(--sp-1);flex-shrink:0}.buddy .sb-list{scrollbar-width:thin}.buddy .sb-list::-webkit-scrollbar{width:6px}.buddy .sb-list::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .sb-list::-webkit-scrollbar-track{background:transparent}.buddy .chat{scrollbar-width:thin}.buddy .chat::-webkit-scrollbar{width:6px}.buddy .chat::-webkit-scrollbar-thumb{background:var(--hair-3);border-radius:var(--radius-sm)}.buddy .chat::-webkit-scrollbar-track{background:transparent}.sb-i{display:flex;align-items:center;height:32px;padding:0 var(--sp-2);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-i:hover{background:var(--surface);color:var(--text-1)}.sb-i.on{background:var(--accent-weak);color:var(--text-1);box-shadow:inset 2px 0 0 var(--accent)}.sb-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-main{display:flex;align-items:center;flex:1;min-width:0}.sb-i .sb-rename{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font:inherit;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-rename,.sb-i.on .sb-rename,.sb-i .sb-rename:focus-visible{opacity:1}.sb-i .sb-rename:hover{color:var(--text-1)}.sb-i input.sb-rename-in{flex:1;min-width:0;height:20px;font-family:inherit;font-size:var(--fs-ui);color:var(--text-1);background:var(--bg);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sb-i input.sb-rename-in:focus{outline:none;border-color:var(--accent)}.sb-i .sb-act,.sb-arch-i .sb-act{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-act,.sb-arch-i:hover .sb-act,.sb-i .sb-act:focus-visible,.sb-arch-i .sb-act:focus-visible{opacity:1}.sb-i .sb-act:hover,.sb-arch-i .sb-act:hover{color:var(--text-1);background:var(--surface-2)}.sb-i .sb-follow{flex:none;color:var(--text-3);opacity:0;padding:1px var(--sp-1);border:0;background:transparent;font-family:inherit;border-radius:var(--radius-sm);font-size:var(--fs-caption);white-space:nowrap;cursor:pointer;transition:opacity var(--dur-fast) var(--ease)}.sb-i:hover .sb-follow,.sb-i.on .sb-follow,.sb-i .sb-follow:focus-visible{opacity:1}.sb-i .sb-follow:hover{color:var(--text-1);background:var(--surface-2)}.sb-arch{flex:none;display:flex;flex-direction:column;margin:0 var(--sp-2);padding:0 0 var(--sp-1);border-top:1px solid var(--hair-1)}.sb-arch-h{display:flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 var(--sp-1);border:0;background:transparent;color:var(--text-3);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;white-space:nowrap;overflow:hidden;cursor:pointer}.sb-arch-h:hover{color:var(--text-1)}.sb-arch-h .sb-arch-caret,.sb-arch-h .sb-arch-t{flex:none}.sb-arch-h .sb-arch-hint{flex:1;min-width:0;text-align:right}.sb-arch-list{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:0 var(--sp-1) var(--sp-1);max-height:160px;overflow-y:auto}.sb-arch-i{display:flex;align-items:center;height:28px;padding:0 var(--sp-1);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-ui);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;flex-shrink:0}.sb-arch-i:hover{background:var(--surface);color:var(--text-1)}.sb-arch-i .sb-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.sb-arch-i .sb-when{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-i .sb-unread,.sb-i .sb-await{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-ink);font-size:var(--fs-caption);font-weight:var(--fw-strong);line-height:1;white-space:nowrap}.sb-i .sb-sched{flex:none;margin-left:var(--sp-1);font-size:var(--fs-caption);line-height:1;color:var(--text-2)}.sb-i .sb-run{flex:none;margin-left:var(--sp-1);display:inline-flex;align-items:center;line-height:1;color:var(--text-2)}.sb-toast{flex:none;margin:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);text-align:center}.sb-f{flex:none;display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);border-top:1px solid var(--hair-1);padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.sb-f .sb-note{flex:none;color:var(--text-3);font-size:var(--fs-caption)}.sb-f .settings-link{width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);padding:0;cursor:pointer}.sb-f .settings-link:hover{background:var(--surface);color:var(--text-1)}.dash{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:var(--sp-4);gap:var(--sp-3)}.dash-head{display:flex;align-items:center;gap:var(--sp-2);flex:none}.dash-head h2{margin:0;font-size:var(--fs-title);font-weight:var(--fw-strong)}.dash-head .spacer{flex:1}.dash-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--sp-2);flex:none}.dash-kpi{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.dash-kpi .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-kpi .v{font-size:var(--fs-title);font-weight:var(--fw-strong);font-variant-numeric:tabular-nums}.dash-kpi .s{color:var(--text-2);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}.dash-chart{border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);flex:none;display:flex;flex-direction:column;gap:var(--sp-1)}.dash-chart svg{width:100%;height:44px;display:block}.dash-chart .k{color:var(--text-2);font-size:var(--fs-caption)}.dash-cols{display:grid;grid-template-columns:minmax(260px,5fr) minmax(300px,7fr);gap:var(--sp-3);min-height:0;flex:1}@media (max-width: 900px){.dash-cols{grid-template-columns:1fr}}.dash-panel{border:1px solid var(--hair-1);border-radius:var(--radius-md);display:flex;flex-direction:column;min-height:0;overflow:hidden}.dash-panel-head{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-ui);color:var(--text-2);flex:none}.dash-panel-head .spacer{flex:1}.dash-scroll{overflow-y:auto;min-height:0}table.dash-tools{width:100%;border-collapse:collapse;font-size:var(--fs-caption);font-variant-numeric:tabular-nums}table.dash-tools th,table.dash-tools td{text-align:right;padding-block:var(--sp-1);padding-inline:var(--sp-3);border-bottom:1px solid var(--hair-1);white-space:nowrap}table.dash-tools th:first-child,table.dash-tools td:first-child{text-align:left}table.dash-tools th{color:var(--text-2);position:sticky;top:0;background:var(--bg-1)}.dash-cat-chips{display:flex;gap:var(--sp-1)}.dash-cat-chips button{border:1px solid var(--hair-1);background:none;color:var(--text-2);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);font-size:var(--fs-caption);cursor:pointer}.dash-cat-chips button.on{color:var(--text-1);border-color:var(--acc, currentColor)}.dash-stream{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-caption);line-height:1.7;padding:var(--sp-1) 0}.dash-row{display:flex;gap:var(--sp-2);padding:0 var(--sp-3);white-space:nowrap}.dash-row .t{color:var(--text-2);flex:none}.dash-row .c{flex:none;width:52px}.dash-row .n{color:var(--text-1);flex:none}.dash-row .d{color:var(--text-2);overflow:hidden;text-overflow:ellipsis}.dash-empty{color:var(--text-2);padding:var(--sp-3);font-size:var(--fs-caption)}.dash-banner{display:flex;align-items:center;gap:var(--sp-2);border:1px solid var(--hair-1);border-left:2px solid var(--warn, currentColor);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);color:var(--text-2);flex:none}.dash-banner button{border:1px solid var(--hair-1);background:none;color:var(--text-1);border-radius:var(--radius-sm);padding-block:var(--sp-1);padding-inline:var(--sp-2);cursor:pointer}.dash-anatomy{grid-template-columns:minmax(300px,1fr) minmax(300px,1fr)}.dash-prompt{border-bottom:1px solid var(--hair-1)}.dash-prompt summary{cursor:pointer;padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);user-select:none}.dash-prompt pre{margin:0;padding:0 var(--sp-3) var(--sp-2);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:300px;overflow-y:auto}.dash-msg{border-bottom:1px solid var(--hair-1);padding:var(--sp-1) 0}.dash-msg-head{display:flex;gap:var(--sp-2);align-items:center;padding:0 var(--sp-3)}.dash-msg-head .role{font-size:var(--fs-caption);color:var(--text-2);font-weight:var(--fw-strong)}.dash-msg-head .err{font-size:var(--fs-caption);color:var(--danger)}.dash-detail{margin-block:var(--sp-1);margin-inline:0 var(--sp-3)}.dash-detail summary{cursor:pointer;font-size:var(--fs-caption);color:var(--text-2);user-select:none;padding:1px 0}.dash-detail pre{margin-block:var(--sp-1) var(--sp-1);white-space:pre-wrap;word-break:break-word;font-size:var(--fs-caption);line-height:1.6;max-height:260px;overflow-y:auto;background:color-mix(in srgb,var(--hair-1) 30%,transparent);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm)}.dash-row .dash-detail{flex:1;min-width:0}.filetree{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.filetree .tree-top{flex:none;display:flex;align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-1) var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1);position:relative}.filetree .ws-switcher{flex:1;min-width:0;display:flex;align-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:1px 4px;cursor:pointer}.filetree .ws-switcher:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-root{flex:1;min-width:0;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ws-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ws-menu) - 1)}.ws-menu{position:absolute;top:100%;left:0;right:0;z-index:var(--z-ws-menu);margin-top:var(--sp-1);display:flex;flex-direction:column;max-height:220px;overflow-y:auto;background:var(--surface);border:0;border-radius:var(--radius-lg);padding:var(--sp-1);box-shadow:var(--elev-2);animation:pop var(--dur-fast) var(--ease)}.ws-item{display:block;width:100%;flex:none;border:0;background:transparent;color:var(--text-2);font:inherit;text-align:left;padding:var(--sp-1) var(--sp-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.ws-item:hover{background:var(--surface-2);color:var(--text-1)}.ws-open-other{border-top:1px solid var(--hair-1);border-radius:0 0 var(--radius-lg) var(--radius-lg);color:var(--text-3)}.ws-loading{flex:none;padding:var(--sp-1) var(--sp-2);color:var(--text-3)}.composer-tools{position:relative}.composer-tools .ws-menu{inset:auto auto 100% 0;min-width:220px;margin-top:0;margin-bottom:var(--sp-1)}.ctx-backdrop{position:fixed;inset:0;z-index:calc(var(--z-ctx-menu) - 1)}.filetree .tree-toggle,.filetree .tree-refresh{flex:none;width:22px;height:22px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.filetree .tree-toggle:hover,.filetree .tree-refresh:hover{background:var(--surface);color:var(--text-1)}.filetree .tree-toggle[aria-pressed=true]{color:var(--accent)}.filetree .tree-body{flex:1;overflow-y:auto;padding:var(--sp-1) 0}.filetree .tree-node{min-width:0}.ft-row{display:flex;align-items:center;gap:var(--sp-1);height:24px;font-size:var(--fs-ui);color:var(--text-2);border-radius:var(--radius-sm);padding-right:var(--sp-2);cursor:pointer}.ft-row:hover{background:var(--surface);color:var(--text-1)}.ft-row.on{background:var(--accent-weak);color:var(--text-1)}.ft-row .ft-indent{width:var(--sp-3);flex:none}.ft-row .caret{flex:none;width:10px;color:var(--text-3);user-select:none}.ft-row .ico{flex:none;font-size:var(--fs-caption)}.ft-row .name{flex:1;min-width:0;color:var(--text-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filetree .tree-node.file>.ft-row .name{font-weight:var(--fw-regular)}.filetree .tree-node.dir>.ft-row .name{font-weight:var(--fw-strong)}.filetree .tree-node.file.modified>.ft-row{box-shadow:inset 2px 0 0 var(--ok)}.filetree .tree-node.file.modified>.ft-row .name{color:var(--ok)}.filetree .at-btn{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.filetree .ft-row:hover .at-btn,.filetree .at-btn:focus-visible{visibility:visible}.filetree .at-btn:hover{color:var(--accent);background:var(--surface-2)}.filetree .tree-loading,.filetree .tree-empty,.filetree .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-empty{flex:1;display:grid;place-items:center;text-align:center}.sb-skels{display:flex;flex-direction:column;gap:calc(var(--sp-1) / 2);padding:var(--sp-1) 0}.sb-skeleton{height:32px;border-radius:var(--radius-sm);background:var(--surface);animation:tree-spin-pulse 1s ease-in-out infinite}.sb-skeleton:nth-child(2){width:78%}.sb-skeleton:nth-child(3){width:56%}.sb .tree-err{color:var(--text-3);padding:1px 8px}.sb .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.sb .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.filetree .tree-spin{display:inline-block;width:7px;height:7px;margin-right:var(--sp-2);border-radius:50%;background:var(--text-3);vertical-align:middle;animation:tree-spin-pulse 1s ease-in-out infinite}@keyframes tree-spin-pulse{0%,to{opacity:.25}50%{opacity:1}}.filetree .tree-err[role=button]{cursor:pointer;width:fit-content;border-radius:var(--radius-sm)}.filetree .tree-err[role=button]:hover{color:var(--text-1);background:var(--surface)}.tabbar{flex:none;height:32px;display:flex;align-items:stretch;background:var(--bg);border-bottom:1px solid var(--hair-1);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.tabbar .tab{display:flex;align-items:center;gap:var(--sp-2);min-width:0;max-width:200px;padding:0 var(--sp-2) 0 var(--sp-3);border-right:1px solid var(--hair-1);color:var(--text-2);cursor:pointer;position:relative;user-select:none}.tabbar .tab:hover{background:var(--surface);color:var(--text-1)}.tabbar .tab .tname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabbar .tab.active{color:var(--text-1);background:var(--bg)}.tabbar .tab:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.tabbar .tab.active:after{opacity:1}.tabbar .tab .tclose{flex:none;visibility:hidden;width:16px;height:16px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-ui);line-height:1;padding:0;cursor:pointer}.tabbar .tab:hover .tclose,.tabbar .tab .tclose:focus-visible{visibility:visible}.tabbar .tab .tclose:hover{color:var(--text-1);background:var(--surface-2)}.tabbar .tab-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.tabbar .tabbar-collapse{flex:none;margin-left:auto;width:26px;border:0;border-left:1px solid var(--hair-1);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:0;cursor:pointer}.tabbar .tabbar-collapse:hover{background:var(--surface);color:var(--text-1)}.fileviewer .breadcrumb{flex:none;height:24px;display:flex;align-items:center;gap:var(--sp-1);padding:0 var(--sp-3);border-bottom:1px solid var(--hair-1);background:var(--bg);color:var(--text-2);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.fileviewer .crumb-sep{color:var(--text-3);user-select:none}.fileviewer .crumb{white-space:nowrap;color:var(--text-2)}.fileviewer .crumb[role=button]{cursor:pointer;border-radius:var(--radius-sm);padding:0 var(--sp-1)}.fileviewer .crumb[role=button]:hover{color:var(--text-1);background:var(--surface)}.fileviewer .crumb.current{color:var(--accent)}.fileviewer .md-toggle{margin-left:auto;display:flex;gap:var(--sp-1)}.fileviewer .mdmode{border:1px solid var(--hair-2);border-radius:var(--radius-sm);background:transparent;color:var(--text-3);font-size:var(--fs-caption);line-height:1;padding:var(--sp-1) var(--sp-2);cursor:pointer}.fileviewer .mdmode:hover{color:var(--text-1);background:var(--surface)}.fileviewer .mdmode[aria-pressed=true]{color:var(--text-1);border-color:var(--hair-2);background:var(--surface-2)}.fileviewer .viewer-md{flex:1;min-height:0;overflow:auto;padding:var(--sp-2) var(--sp-4);font-family:var(--font);font-size:14px}.fileviewer{height:100%;min-width:0;display:flex;flex-direction:column;background:var(--bg);font-family:var(--mono);font-size:var(--fs-ui);overflow:hidden}.ide-cell.ide-center>.fileviewer{flex:1;min-height:0}.fv-head{flex:none;display:flex;align-items:center;gap:var(--sp-2);height:34px;padding-left:var(--sp-3);padding-right:var(--sp-2);border-bottom:1px solid var(--hair-1)}.fv-file{min-width:0;font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fv-close{margin-left:auto;width:26px;height:26px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;color:var(--text-3);background:none;border:0;padding:0;cursor:pointer}.fv-close:hover{background:var(--surface);color:var(--text-1)}.fileviewer .viewer-code{flex:1;overflow:auto;padding:var(--sp-1) 0}.fileviewer .viewer-line{display:flex;align-items:flex-start}.fileviewer .viewer-gutter{flex:none;min-width:3ch;text-align:right;color:var(--text-3);padding:0 var(--sp-2) 0 var(--sp-3);user-select:none}.fileviewer .viewer-src{white-space:pre}.fv-selchip{position:fixed;z-index:var(--z-ctx-menu);padding:1px var(--sp-1);border:0;border-radius:var(--radius-sm);font-family:var(--mono);font-size:var(--fs-caption);color:var(--accent-ink);background:var(--accent);box-shadow:var(--elev-1);cursor:pointer}.fileviewer .viewer-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-3)}.fileviewer .viewer-binary{margin:auto;padding:var(--sp-4) var(--sp-6);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-2);text-align:center}.fileviewer .viewer-truncated{flex:none;padding:var(--sp-1) var(--sp-3);border-top:1px solid var(--hair-1);color:var(--warn);background:rgb(var(--warn-rgb) / .08)}.fileviewer .viewer-dirwrap{flex:1;overflow:auto}.fileviewer .viewer-dir{width:100%;border-collapse:collapse;color:var(--text-2)}.fileviewer .viewer-dir th{text-align:left;font-weight:var(--fw-strong);color:var(--text-3);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1);position:sticky;top:0;background:var(--bg)}.fileviewer .viewer-dir td{padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--hair-1)}.fileviewer .viewer-err{margin:var(--sp-6) auto;padding:var(--sp-3) var(--sp-5);color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-md)}.filetree .tree-filter{flex:none;padding:var(--sp-1) var(--sp-2);border-bottom:1px solid var(--hair-1)}.filetree .tree-filter input{width:100%;box-sizing:border-box;border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-1);font:inherit;padding:var(--sp-1) var(--sp-2)}.filetree .tree-filter input:focus{border-color:var(--accent);outline:none}.filetree .tree-filter input::placeholder{color:var(--text-3)}.search-scrim{position:fixed;inset:0;z-index:var(--z-palette);background:var(--overlay);display:flex;justify-content:center;align-items:flex-start;padding-top:20vh;padding-left:var(--sp-4);padding-right:var(--sp-4)}.search-pop{width:400px;max-width:100%;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;box-shadow:var(--elev-3);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}.search-pop .search-input{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--mono);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3)}.search-pop .search-input::placeholder{color:var(--text-3)}.search-pop .search-results{max-height:320px;overflow-y:auto;padding:var(--sp-1) 0;font-family:var(--mono);font-size:var(--fs-ui)}.search-pop .search-item{padding:var(--sp-1) var(--sp-3);color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.search-pop .search-item:hover{background:var(--surface-2)}.search-pop .search-item.sel{background:var(--accent-weak);color:var(--text-1)}.search-pop .search-item .hit{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .search-empty{padding:var(--sp-2) var(--sp-3);color:var(--text-3)}.search-pop .session-head{padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);color:var(--text-3);font-size:var(--fs-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-pop .session-item{display:block;padding:var(--sp-2);font-size:var(--fs-ui);border-radius:var(--radius-md);font-family:var(--font);margin:0 var(--sp-1) calc(var(--sp-1) / 2)}.search-pop .session-item .session-row1{display:flex;justify-content:space-between;gap:var(--sp-2)}.search-pop .session-item .session-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1);font-weight:var(--fw-strong)}.search-pop .session-item .session-time{color:var(--text-3);flex:none;font-size:var(--fs-caption)}.search-pop .session-item .session-preview{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font);line-height:1.45}.search-pop .session-pg{padding:var(--sp-3) var(--sp-3) var(--sp-1);font-family:var(--mono);font-size:var(--fs-caption);letter-spacing:.4px;color:var(--text-3)}.search-pop .session-results{max-height:min(420px,60vh)}@media (max-width: 440px){.search-pop .session-item .session-preview{display:none}}.search-pop .session-q{border:0;border-bottom:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-ui);padding:var(--sp-2) var(--sp-3);outline:none}.search-pop .session-q:focus{border-bottom-color:var(--accent)}.search-pop .session-q::placeholder{color:var(--text-3)}.search-pop .session-item .session-kind{flex:none;font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) calc(var(--sp-1));border-radius:var(--radius-sm);background:var(--bubble-user-bg);color:var(--bubble-user-ink);font-weight:var(--fw-strong)}.search-pop .session-item .session-kind.ans{background:var(--surface-2);color:var(--text-1)}.search-pop .session-item .session-hit-mark{color:var(--accent);font-weight:var(--fw-strong)}.search-pop .session-item .session-del{flex:none;border:0;background:transparent;color:var(--text-3);padding:1px var(--sp-1);font-size:var(--fs-caption);line-height:1;border-radius:var(--radius-sm);cursor:pointer;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.search-pop .session-item:hover .session-del,.search-pop .session-item.sel .session-del,.search-pop .session-item .session-del:focus-visible{opacity:1}.search-pop .session-item .session-del:hover{color:var(--danger)}.search-pop .session-item .session-confirm-actions{flex:none;display:flex;gap:var(--sp-1);align-items:center}.search-pop .session-item .session-confirm-actions button{border:1px solid var(--hair-1);background:transparent;color:var(--text-1);font-family:var(--font);font-size:var(--fs-caption);line-height:1;padding:calc(var(--sp-1) / 2) var(--sp-2);border-radius:var(--radius-sm);cursor:pointer}.search-pop .session-item .session-del-ok{border-color:rgb(var(--danger-rgb) / .35);color:var(--danger)}.search-pop .session-item .session-del-ok:hover{background:rgb(var(--danger-rgb) / .1)}.search-pop .session-item .session-del-cancel:hover{background:var(--surface-2)}.ide-cell.ide-right,.simple{position:relative}.jump-bottom{position:absolute;right:18px;bottom:132px;z-index:var(--z-jump);width:36px;height:36px;border:0;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-size:16px;line-height:1;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.jump-bottom:hover{filter:brightness(1.08)}.send:active:not(:disabled),.jump-bottom:active,.approval .allow:active:not(:disabled),.approval .deny:active:not(:disabled),button.wudao:active:not(:disabled),.icobtn:active,.tb-changes:active{filter:brightness(.88)}.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}textarea.wudao-input:focus-visible{outline:none;box-shadow:none}.msg-a{animation:msg-ai-fade var(--dur-fast) var(--ease)}@keyframes msg-ai-fade{0%{opacity:.6}to{opacity:1}}@media (pointer: coarse){.ide-toggle,.filetree .at-btn,.tabbar .tab .tclose{width:24px;height:24px}}.provider-toolbar{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-2)}.provider-toolbar .provider-search{flex:1;min-width:12rem}.provider-master{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-3);align-items:start}.provider-master .provider-cards{max-height:30rem;overflow-y:auto;padding-right:var(--sp-1)}.provider-card[aria-current=true]{border-color:var(--accent)}.provider-card button.card-name{background:none;border:none;padding:0;font:inherit;font-weight:var(--fw-strong);color:inherit;text-align:left;cursor:pointer}.provider-card button.card-name:hover:not(:disabled){color:var(--text-1)}.provider-card button.card-name:disabled{cursor:default}.provider-card[data-invalid=true]{opacity:.55}.provider-card .card-id{font-family:var(--mono)}.invalid-reason{color:var(--danger);font-size:var(--fs-ui);overflow-wrap:anywhere}.provider-card[data-draft=true]{border-style:dashed;border-color:var(--hair-2)}.provider-cards .provider-card[data-draft=true]{cursor:default}.provider-card[data-draft=true] .card-head .ctl{margin-left:auto}.dot.draft{background:var(--text-3)}.provider-detail{border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2);position:sticky;top:0}.provider-detail .detail-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-head .meta{color:var(--text-2);font-size:var(--fs-ui)}.provider-detail .detail-field{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.provider-detail .detail-field .detail-field-label{white-space:nowrap}.provider-detail .detail-field .ctl{flex:1;min-width:8rem}.provider-detail .detail-field .card-endpoint{flex:1}.model-manager{display:flex;flex-direction:column;gap:var(--sp-1)}.model-manager-head{display:flex;align-items:baseline;gap:var(--sp-2);font-size:var(--fs-ui);color:var(--text-2)}.model-badge{color:var(--accent);font-size:var(--fs-ui);white-space:nowrap;text-align:center}.model-badge.live{color:var(--text-2)}.detail-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.provider-detail .detail-del{color:var(--danger)}.provider-empty{color:var(--text-2);font-size:var(--fs-ui);padding:var(--sp-2)}.modal-card.pvd{max-width:min(46rem,calc(100vw - var(--sp-8)));width:100%}.pvd-head{display:flex;align-items:center;gap:var(--sp-2)}.pvd-head h3{margin:0;flex:1 1 auto;overflow-wrap:anywhere}.pvd-body{overflow-y:auto;min-height:0;display:flex;flex-direction:column}.pvd-body .provider-detail{border:0;background:transparent;position:static;padding:0}.pvd-body .persona-form{border:0;background:transparent;padding:0}.provider-load-error{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}@media (max-width: 640px){.provider-master{grid-template-columns:1fr}.provider-master .provider-cards{max-height:none}.provider-detail{position:static}}.chip .wire-count{margin-left:var(--sp-1);font-size:var(--fs-caption);color:var(--text-1)}.chip .wire-count.zero{color:var(--text-3)}.provider-detail .detail-field .detail-persona-layer{flex:0 0 9.5rem;min-width:9.5rem}.persona-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--sp-1) var(--sp-2);padding:var(--sp-1) var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);color:var(--text-1);font:inherit;font-size:var(--fs-ui);text-align:left;cursor:pointer}.persona-row:hover{border-color:var(--hair-2)}.persona-row[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.persona-row .persona-name{flex-basis:100%;font-weight:var(--fw-strong)}.persona-row .meta{color:var(--text-2)}.persona-row .persona-id{font-family:var(--mono)}.persona-row .persona-layers{color:var(--text-3)}.persona-row .persona-src{margin-left:auto;border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.settings-section>button.ctl.persona-add{align-self:flex-start;border-style:dashed;color:var(--text-2)}.settings-section>button.ctl.persona-add:hover{border-color:var(--hair-2);color:var(--text-1)}.prefrow.persona-default .pref-label{white-space:nowrap}.prefrow.persona-default .persona-pick{min-width:13rem}.prefrow.persona-default .persona-pick-layer{flex:0 0 9.5rem}.persona-form{display:flex;flex-direction:column;gap:var(--sp-2)}.persona-form .prefrow{align-items:center}.persona-form .prefrow .pref-label{min-width:5.5rem;white-space:nowrap}.persona-form textarea.persona-prompt{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-ui);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical}.persona-form textarea.persona-prompt:focus{border-color:var(--accent)}.persona-form textarea.persona-prompt:disabled{opacity:.5;cursor:default}.persona-wire-tabs{display:flex;gap:calc(var(--sp-1) / 2);flex-wrap:wrap;padding:var(--sp-1);border-radius:var(--radius-md);background:var(--surface-2);width:max-content}.persona-wire-tabs .segctl-opt{font-family:var(--mono)}.persona-layer{display:flex;flex-direction:column;gap:var(--sp-1)}.persona-layer>.pref-label{font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-2);border-bottom:1px solid var(--hair-1);padding-bottom:var(--sp-1)}.persona-form .row.keyrow{display:grid;grid-template-columns:minmax(9rem,14rem) minmax(0,1fr) auto;gap:var(--sp-2);align-items:center}.persona-form .row.keyrow .entry-error{grid-column:1 / -1;font-size:var(--fs-ui)}.persona-form .row.keyrow.error>.ctl{border-color:var(--danger)}.persona-layer>button.ctl{align-self:flex-start;border-style:dashed;color:var(--text-2)}.persona-layer>button.ctl:hover:not(:disabled){border-color:var(--hair-2);color:var(--text-1)}button.ctl.persona-save{border-color:var(--accent);color:var(--accent)}button.ctl.persona-del{border-color:var(--danger);color:var(--danger)}.persona-form>.entry-error{border:1px solid rgb(var(--danger-rgb) / .35);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm{border:1px solid rgb(var(--danger-rgb) / .35);background:rgb(var(--danger-rgb) / .06);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);font-size:var(--fs-ui)}.persona-delete-confirm ul{margin:var(--sp-1) 0;padding-left:var(--sp-5);color:var(--text-2)}.persona-delete-confirm li{margin:1px 0}.persona-delete-confirm .keyrow{margin-top:var(--sp-1)}select.ctl{appearance:none;-webkit-appearance:none;padding-right:calc(var(--sp-2) + var(--sp-4));background-image:conic-gradient(from 135deg at 50% 30%,var(--text-2) 0 90deg,transparent 90deg);background-repeat:no-repeat;background-position:right var(--sp-2) center;background-size:10px 6px;cursor:pointer}select.ctl:disabled{cursor:default}.provider-detail .detail-field{flex-wrap:wrap}.provider-detail .detail-field .ctl{max-width:100%}.provider-detail .detail-field .detail-persona-layer{flex-shrink:1;min-width:0;max-width:100%}.provider-card:not([data-invalid=true]){cursor:pointer}.provider-card[aria-current=true]{box-shadow:inset 2px 0 0 var(--accent)}button.ctl.card-apply{border-color:var(--accent);color:var(--accent)}.provider-card .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-card .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-card .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .detail-field .keyrow{flex:1;min-width:12rem;flex-wrap:wrap}.provider-detail .detail-field .keyrow .ctl{flex:none;min-width:0}.provider-detail .detail-field .keyrow .key-input{flex:1 1 8rem;min-width:0;max-width:100%}.provider-detail{padding:var(--sp-3)}.provider-detail .detail-head{padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.provider-detail .detail-field{display:grid;grid-template-columns:6.5rem minmax(0,1fr);flex-wrap:nowrap}.provider-detail .detail-field.pair{grid-template-columns:6.5rem minmax(0,1fr) 9.5rem}.provider-detail .detail-field .ctl,.provider-detail .detail-field .detail-persona-layer,.provider-detail .detail-field .keyrow{min-width:0}.model-manager{gap:var(--sp-2)}.provider-detail .detail-actions{padding-top:var(--sp-1);border-top:1px solid var(--hair-1)}button.ctl.detail-save{border-color:var(--accent);color:var(--accent)}@media (max-width: 720px){.provider-detail .detail-field,.provider-detail .detail-field.pair{grid-template-columns:minmax(0,1fr)}.provider-detail .detail-field .detail-field-label{color:var(--text-3)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.shimmer{animation:none;color:var(--text-2);background:none}.sweep-line:after{content:none}}.provider-card{padding:var(--sp-3);gap:var(--sp-1);cursor:pointer;transition:border-color var(--dur-fast) var(--ease)}.provider-card:hover{border-color:var(--hair-2)}.provider-card[aria-current=true]{border-color:var(--accent);box-shadow:inset 2px 0 0 var(--accent)}.provider-card .card-head{align-items:center}.provider-card .card-name{font-size:var(--fs-ui)}.provider-card .meta.tag-default{color:var(--accent);font-weight:var(--fw-strong)}.provider-card .key-badge{margin-left:auto}.provider-card .card-status{display:flex;align-items:baseline;gap:var(--sp-2)}.provider-card .card-endpoint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.provider-card .card-actions{display:flex;justify-content:flex-end}.provider-card button.card-apply{padding:1px var(--sp-3);font-size:var(--fs-caption);color:var(--text-2)}.provider-card button.card-apply:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-cards .provider-card[data-draft=true],.provider-card[data-invalid=true]{cursor:default}.provider-detail{padding:var(--sp-3);gap:var(--sp-2)}.provider-detail .detail-head{padding-bottom:var(--sp-2);border-bottom:1px solid var(--hair-1);align-items:center}.provider-detail .detail-head strong{font-size:var(--fs-body)}.provider-detail .detail-group{display:flex;flex-direction:column;gap:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--hair-1)}.provider-detail .detail-group .detail-group-title{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.08em}.provider-detail .detail-group .detail-field-label{min-width:4.5rem;color:var(--text-2)}.provider-detail .detail-field.pair .detail-field-label{min-width:0}.provider-toolbar .ctl:last-child{border-style:dashed;color:var(--text-2)}.provider-toolbar .ctl:last-child:hover{border-color:var(--hair-2);color:var(--text-1)}.provider-detail .detail-head{justify-content:space-between;gap:var(--sp-2)}.provider-detail .detail-head-id{display:flex;align-items:center;gap:var(--sp-2);min-width:0}.provider-detail .detail-head-id strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .detail-head-tags{display:flex;align-items:center;gap:var(--sp-1);flex:none}.provider-detail .detail-head-tags .meta.mono-id{font-family:var(--mono);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .detail-head-tags .meta.tag{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-2);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.provider-detail .model-row-state{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);min-width:0}.provider-detail .test-result{padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);border-left:2px solid var(--text-3)}.provider-detail .test-result.ok{border-left-color:var(--ok)}.provider-detail .test-result.fail{border-left-color:var(--danger)}.provider-detail .test-result.fail.network,.provider-detail .test-result.fail.no-endpoint{border-left-color:var(--warn)}.provider-detail .model-row .model-use{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-use,.provider-detail .model-row:focus-within .model-use,.provider-detail .model-row .model-use:focus-visible{opacity:1}.provider-detail .model-row .model-use{padding:1px var(--sp-2);font-size:var(--fs-caption);color:var(--text-3)}.provider-detail .model-row .model-use:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .detail-unsaved{margin-right:auto;align-self:center;color:var(--warn);font-size:var(--fs-caption)}.provider-detail .detail-actions{justify-content:flex-end}.provider-master{align-items:stretch}.provider-master .provider-cards{max-height:none;overflow-y:visible}.provider-card .card-model-count{color:var(--text-3);font-size:var(--fs-caption)}.provider-detail .detail-read-text{color:var(--text-1);overflow-wrap:anywhere;min-width:0}.provider-detail .detail-field .key-badge{border:1px solid var(--hair-1);border-radius:var(--radius-sm);padding:0 var(--sp-1);font-size:var(--fs-caption);line-height:1.5;color:var(--text-2)}.provider-detail .detail-field .key-badge.on{color:var(--ok);border-color:rgb(var(--ok-rgb) / .35)}.provider-detail .detail-field .key-badge.off{color:var(--text-3);border-style:dashed}.provider-detail .model-row-name{font-family:var(--mono);color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.provider-detail .model-row-ctx{text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-ui)}.provider-detail .model-read-row.live{box-shadow:inset 2px 0 0 var(--accent);background:rgb(var(--accent-rgb) / .06);padding-left:var(--sp-2)}.provider-detail .model-row .model-star{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.provider-detail .model-row .model-star:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.provider-detail .model-row .model-star{opacity:0;transition:opacity var(--dur-fast) var(--ease)}.provider-detail .model-row:hover .model-star,.provider-detail .model-row:focus-within .model-star,.provider-detail .model-row .model-star:focus-visible,.provider-detail .model-row .model-star:disabled{opacity:1}.provider-detail .model-read-row .model-star:disabled{color:var(--accent);border:none;background:none}.provider-detail .model-manager-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.provider-detail .model-config{font-size:var(--fs-ui);padding:var(--sp-1) var(--sp-3)}.provider-detail .model-read-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2);padding:var(--sp-1) 0;border-bottom:1px solid var(--hair-1)}.provider-detail .model-empty{padding:var(--sp-2) 0;font-size:var(--fs-ui);color:var(--text-3)}@media (max-width: 720px){.provider-detail .model-read-row{grid-template-columns:minmax(0,1fr) max-content}.provider-detail .model-read-row .model-row-ctx{grid-column:2}.provider-detail .model-read-row .model-row-state{grid-column:1 / -1;justify-content:flex-start}}.modal-card.mcm{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)));gap:var(--sp-2)}.modal-card.changes-panel,.modal-card.computer-panel,.modal-card.schedules-panel{max-width:620px;width:min(620px,calc(100vw - var(--sp-8)))}.mcm-head{display:flex;align-items:center;gap:var(--sp-2)}.mcm-head h3{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mcm-close{flex:none;color:var(--text-3)}.mcm-close:hover:not(:disabled){color:var(--text-1);border-color:var(--hair-2)}.mcm-add{display:grid;grid-template-columns:minmax(0,1fr) 8rem max-content;align-items:center;column-gap:var(--sp-2)}.mcm-add-name{position:relative;display:flex;align-items:center;gap:var(--sp-1);min-width:0}.mcm-add-name input.mcm-name{flex:1;min-width:0}.mcm-drop-toggle{flex:none;padding-inline:var(--sp-1);white-space:nowrap;color:var(--text-2)}.mcm-refresh{flex:none;width:1.9rem;padding-inline:0;text-align:center;color:var(--text-2)}.mcm-drop-toggle:disabled,.mcm-refresh:disabled{color:var(--text-3)}.mcm-drop-toggle:not(:disabled):hover,.mcm-refresh:not(:disabled):hover{color:var(--text-1);border-color:var(--hair-2)}.mcm-drop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:var(--z-float);max-height:12rem;overflow-y:auto;background:var(--glass-fill);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:0;border-radius:var(--radius-lg);box-shadow:var(--elev-2)}.mcm-opt{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-1) var(--sp-2);text-align:left;background:none;border:none;border-radius:0;cursor:pointer;color:var(--text-1)}.mcm-opt:not(:disabled):hover{background:var(--surface-2)}.mcm-opt:disabled{color:var(--text-3);cursor:default}.mcm-opt-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.mcm-opt-ctx{color:var(--text-2);font-variant-numeric:tabular-nums;font-size:var(--fs-caption)}.mcm-opt-tag{color:var(--text-3);font-size:var(--fs-caption);white-space:nowrap}.mcm-drop-empty{padding:var(--sp-2);color:var(--text-3);font-size:var(--fs-ui)}.mcm-pulling{font-size:var(--fs-caption)}.mcm-pull-error{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);font-size:var(--fs-ui)}.mcm-list-head{font-size:var(--fs-caption);color:var(--text-3);letter-spacing:.04em;padding-bottom:var(--sp-1);border-bottom:1px solid var(--hair-1)}.mcm-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) 0}.mcm-row{display:grid;grid-template-columns:minmax(0,1fr) 8rem 1.9rem;align-items:center;column-gap:var(--sp-2)}.mcm-row input.mcm-name{width:100%;min-width:0;font-family:var(--mono)}.mcm-row input.mcm-ctx,.mcm-add input.mcm-ctx{width:100%;min-width:0;text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums}.mcm-del{width:1.9rem;padding-inline:0;text-align:center;color:var(--text-3)}.mcm-row .mcm-del:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.mcm-empty{padding:var(--sp-3) 0;text-align:center}.mcm-foot{justify-content:flex-end}.recap-banner{margin:var(--sp-3) var(--sp-4) var(--sp-1);padding:var(--sp-3) var(--sp-4);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface);display:flex;flex-direction:column;gap:var(--sp-2);animation:fade var(--dur-med) var(--ease)}.recap-title{font-size:var(--fs-body);font-weight:var(--fw-strong)}.recap-segment{font-size:var(--fs-body);line-height:var(--lh-body)}.recap-label{color:var(--text-2);margin-right:var(--sp-1)}.recap-stats{font-size:var(--fs-caption);color:var(--text-2)}.recap-close{align-self:flex-end;margin-top:var(--sp-1)}.recovery-banner{margin:var(--sp-1) var(--sp-4);padding:var(--sp-1) var(--sp-3);border:1px solid var(--hair-1);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.recovery-title{font-size:var(--fs-caption);color:var(--text-2)}.tb-changes{flex:none;display:inline-flex;align-items:center;height:22px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:transparent;color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;-webkit-app-region:no-drag;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.tb-changes:hover{background:var(--surface);color:var(--text-1)}.changes-panel .chg-head{flex:none;font-size:var(--fs-ui)}.changes-panel .chg-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.chg-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.chg-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.chg-files{display:flex;flex-direction:column;gap:var(--sp-1)}.chg-file{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.chg-file-wrap{display:flex;align-items:center;gap:var(--sp-1)}.chg-file-wrap>.chg-file{flex:1 1 auto;min-width:0}.chg-revert{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-revert:hover{color:var(--text-1);background:var(--hover)}.chg-revert:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.revert-warn{margin-top:var(--sp-2);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-ui);line-height:1.6}.chg-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:var(--fs-ui);color:var(--text-1)}.chg-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-badge[data-op=created]{background:rgb(var(--ok-rgb) / .12);color:var(--text-1)}.chg-cmdgroup{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);border-radius:var(--radius-md);background:var(--surface-2)}.chg-cmdgroup .chg-file-wrap{padding:0 var(--sp-1)}.chg-cmd-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1.4}.chg-cmd-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chg-cmd-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);margin-left:var(--sp-1);border-radius:var(--radius-sm);background:rgb(var(--ok-rgb) / .12);color:var(--text-1);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.chg-cmd-undo{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer;user-select:none}.chg-cmd-undo:hover{color:var(--text-1);background:var(--hover)}.chg-cmd-undo:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.chg-cmd-undo[aria-disabled=true]{opacity:.5;cursor:not-allowed}.chg-cmd-undo[aria-disabled=true]:hover{color:var(--text-2);background:var(--surface)}.chg-exp{align-self:flex-start;display:inline-flex;align-items:center;gap:var(--sp-1);padding:0;border:0;background:none;font-size:var(--fs-caption);color:var(--text-2);cursor:pointer}.chg-exp:hover{color:var(--text-1)}.chg-detail{margin:0;max-height:220px;overflow-y:auto;background:var(--surface-2);color:var(--text-2);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);font-family:var(--mono);font-size:var(--fs-ui);line-height:var(--lh-ui);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}.dtx-add{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.dtx-del{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.dtx-hunk{color:var(--text-3)}.dtx-file{color:var(--text-2);background:var(--surface);border-radius:var(--radius-sm);padding:0 var(--sp-1);margin:0 calc(var(--sp-1) * -1)}.chg-cnt-plus{color:var(--ok)}.chg-cnt-minus{color:var(--danger)}button.chg-file{border:0;background:none;padding:0;font:inherit;text-align:left;color:inherit;cursor:pointer}button.chg-file:hover .chg-path{text-decoration:underline dotted}.computer-panel .cap-head{flex:none;font-size:var(--fs-ui)}.computer-panel .cap-runs{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.cap-run{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.cap-run-h{flex:none;color:var(--text-2);font-size:var(--fs-ui);font-weight:var(--fw-strong)}.cap-acts{display:flex;flex-direction:column;gap:var(--sp-1)}.cap-act{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--sp-1);font-size:var(--fs-ui);color:var(--text-1)}.cap-act[data-err=true]{color:var(--danger)}.cap-verb{color:var(--text-2)}.cap-act[data-err=true] .cap-verb{color:var(--danger)}.cap-text{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.cap-badge{flex:none;display:inline-flex;align-items:center;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.cap-dur{flex:none;color:var(--text-2);font-size:var(--fs-caption)}.cap-preview{flex:1 0 100%;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-family:var(--mono);font-size:var(--fs-caption)}.fork-act{flex:none;align-self:center;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;opacity:0;transition:opacity var(--dur-fast) var(--ease);cursor:pointer}.entry:hover .fork-act,.fork-act:focus-visible{opacity:1}.fork-act:hover{border-color:var(--hair-2);color:var(--text-1)}.fork-badge{flex:none;align-self:center;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:rgb(var(--accent-rgb) / .14);color:var(--accent);font-size:var(--fs-caption);line-height:1}.armed-branch{display:flex;align-items:center;gap:var(--sp-2);margin:var(--sp-2) var(--sp-3);padding:var(--sp-2) var(--sp-3);max-width:100%;overflow-wrap:anywhere;flex-wrap:wrap;border:1px solid rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .07)}.armed-text{flex:1 1 auto;min-width:0;font-size:var(--fs-caption);color:var(--text-1);line-height:1.5}.branch-bar{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-1) var(--sp-3) 0}.branch-chip{align-self:flex-start;height:20px;padding:0 var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-2);font-size:var(--fs-caption);line-height:1;white-space:nowrap;cursor:pointer}.branch-chip:hover{border-color:var(--hair-2);color:var(--text-1)}.branch-chip[aria-expanded=true]{border-color:var(--accent);color:var(--accent)}.branch-panel{display:flex;flex-direction:column;border:1px solid var(--hair-1);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.branch-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--hair-1);font-size:var(--fs-caption)}.branch-row:last-of-type{border-bottom:none}.branch-row.cur{background:rgb(var(--accent-rgb) / .07)}.branch-row .row-n{flex:none;color:var(--text-2);font-family:var(--mono)}.branch-row .row-main{flex:1;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.branch-row .row-count{flex:none;color:var(--text-2)}.branch-row .row-cur{flex:none;color:var(--accent)}.branch-note{padding:var(--sp-2) var(--sp-3);color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1)}.branch-note[data-variant=warn]{color:var(--warn)}.branch-note[data-variant=ok]{color:var(--ok)}.memory-review-card{display:flex;flex-direction:column;gap:var(--sp-1);margin:var(--sp-1) var(--sp-3) 0;padding:var(--sp-2) var(--sp-3);border:1px solid rgb(var(--accent-rgb) / .3);border-left:3px solid var(--accent);border-radius:var(--radius-md);background:var(--surface)}.memory-review-head{display:flex;align-items:center;gap:var(--sp-2)}.memory-review-title{flex:1;font-size:var(--fs-caption);color:var(--text-1);font-weight:var(--fw-strong)}.memory-review-card .hint{margin:0}.mem-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;font-size:var(--fs-caption)}.mem-badge{flex:none;height:18px;padding:0 var(--sp-2);border:1px solid var(--warn);border-radius:var(--radius-sm);color:var(--warn);font-size:var(--fs-caption);line-height:1;white-space:nowrap}.mem-badge.ok{border-color:var(--ok);color:var(--ok)}.mem-main{flex:1;display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.mem-kind{color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mem-content{color:var(--text-1);overflow-wrap:anywhere}.mem-acts{flex:none;display:flex;gap:var(--sp-1)}.mem-note{color:var(--text-2);font-size:var(--fs-caption);border-top:1px solid var(--hair-1);padding-top:var(--sp-1)}.mem-note[data-variant=warn]{color:var(--warn)}.mem-note[data-variant=ok]{color:var(--ok)}.mem-empty{color:var(--text-2);font-size:var(--fs-caption);padding:var(--sp-1) 0}.memory-manage .mem-row{padding:var(--sp-2) 0;border-bottom:1px solid var(--hair-1)}.memory-manage .mem-row:last-of-type{border-bottom:none}.mem-edit textarea{border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-1);font-family:inherit;font-size:var(--fs-caption);line-height:var(--lh-body);padding:var(--sp-1) var(--sp-2);resize:vertical;min-height:3.2em;width:100%;overflow-wrap:anywhere}.mem-edit textarea:focus{border-color:var(--accent)}.mem-edit textarea:disabled{opacity:.5;cursor:default}.mem-edit .mem-acts{justify-content:flex-end;padding-top:var(--sp-1)}.tb-changes.tb-sched{white-space:nowrap}.schedules-panel .sch-head{flex:none;font-size:var(--fs-ui)}.schedules-panel .sch-rows{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-2)}.sch-row{display:flex;flex-direction:column;gap:var(--sp-2);border:1px solid var(--hair-1);border-radius:var(--radius-md);padding:var(--sp-3)}.sch-row[data-state=breaker]{border-color:rgb(var(--danger-rgb) / .4)}.sch-main{display:flex;align-items:baseline;gap:var(--sp-2)}.sch-prompt{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;font-size:var(--fs-ui);color:var(--text-1)}.sch-badge{flex:none;font-size:var(--fs-caption);border-radius:var(--radius-sm);padding:1px var(--sp-2);color:var(--text-2);background:var(--surface-2)}.sch-badge[data-state=active]{color:var(--ok);background:rgb(var(--ok-rgb) / .1)}.sch-badge[data-state=breaker]{color:var(--danger);background:rgb(var(--danger-rgb) / .1)}.sch-meta{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--sp-2);row-gap:var(--sp-1);font-size:var(--fs-caption);color:var(--text-2)}.sch-trig{color:var(--text-1)}.sch-last{color:var(--text-3)}.sch-last[data-ok=true]{color:var(--ok)}.sch-row[data-state=breaker] .sch-last{color:var(--danger)}.sch-session{color:var(--accent);background:rgb(var(--accent-rgb) / .08);border-radius:var(--radius-sm);padding:0 var(--sp-1)}.sch-acts{display:flex;align-items:center;gap:var(--sp-1)}.sch-act{font-size:var(--fs-caption);color:var(--text-2);border:1px solid var(--hair-1);border-radius:var(--radius-sm);background:none;padding:1px var(--sp-2);cursor:pointer}.sch-act:hover{background:var(--surface);color:var(--text-1);border-color:var(--hair-2)}.sch-act.sch-del:hover{color:var(--danger);border-color:rgb(var(--danger-rgb) / .4)}.chip.sideqa.on{color:var(--accent-ink);background:rgb(var(--accent-rgb) / .85);border-color:rgb(var(--accent-rgb) / .9)}.sideqa-lane{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-2) 0}.sideqa{border:1px dashed rgb(var(--accent-rgb) / .45);border-radius:var(--radius-md);background:rgb(var(--accent-rgb) / .05);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-caption);line-height:var(--lh-body)}.sideqa-tag{font-weight:var(--fw-strong);color:var(--accent);font-size:var(--fs-caption);letter-spacing:.04em;margin-bottom:var(--sp-1)}.sideqa-q{color:var(--text-2);font-weight:var(--fw-strong);margin-bottom:var(--sp-1)}.sideqa-a{overflow-wrap:anywhere;white-space:pre-wrap}.sideqa-foot{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-2)}.sideqa-rounds{color:var(--text-3);opacity:.7}.sideqa-promote{height:24px;padding:0 var(--sp-3);border-radius:var(--radius-sm);font-family:var(--font);font-weight:var(--fw-strong);font-size:var(--fs-caption);color:var(--accent);background:rgb(var(--accent-rgb) / .1);border:1px solid rgb(var(--accent-rgb) / .35);cursor:pointer}.sideqa-promote:hover{background:rgb(var(--accent-rgb) / .18)}