pi-kot 0.1.36 → 0.1.38
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/README.md +19 -17
- package/dist/client/assets/index-DczdsIBb.css +1 -0
- package/dist/client/assets/index-DsAokEBF.js +191 -0
- package/dist/client/assets/index-DsAokEBF.js.map +1 -0
- package/dist/client/assets/{vendor-icons-BxCzfNOa.js → vendor-icons-B8pSAnO8.js} +2 -2
- package/dist/client/assets/vendor-icons-B8pSAnO8.js.map +1 -0
- package/dist/client/assets/{vendor-markdown-DEQqhGsz.js → vendor-markdown-BHwes4Q7.js} +2 -2
- package/dist/client/assets/{vendor-markdown-DEQqhGsz.js.map → vendor-markdown-BHwes4Q7.js.map} +1 -1
- package/dist/client/assets/{vendor-prism-BWl-A5ct.js → vendor-prism-ChBCet0U.js} +2 -2
- package/dist/client/assets/{vendor-prism-BWl-A5ct.js.map → vendor-prism-ChBCet0U.js.map} +1 -1
- package/dist/client/index.html +5 -5
- package/dist/server/file-watcher.d.ts +16 -0
- package/dist/server/file-watcher.d.ts.map +1 -0
- package/dist/server/file-watcher.js +84 -0
- package/dist/server/file-watcher.js.map +1 -0
- package/dist/server/path-refs.d.ts.map +1 -1
- package/dist/server/path-refs.js +129 -8
- package/dist/server/path-refs.js.map +1 -1
- package/dist/server/path-refs.test.d.ts +2 -0
- package/dist/server/path-refs.test.d.ts.map +1 -0
- package/dist/server/path-refs.test.js +71 -0
- package/dist/server/path-refs.test.js.map +1 -0
- package/dist/server/routes/files.d.ts.map +1 -1
- package/dist/server/routes/files.js +18 -4
- package/dist/server/routes/files.js.map +1 -1
- package/dist/server/routes/sessions.d.ts.map +1 -1
- package/dist/server/routes/sessions.js +23 -7
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/turn-diff-builder.d.ts +2 -2
- package/dist/server/turn-diff-builder.d.ts.map +1 -1
- package/dist/server/turn-diff-builder.js +10 -5
- package/dist/server/turn-diff-builder.js.map +1 -1
- package/dist/server/ui-settings-store.d.ts +14 -0
- package/dist/server/ui-settings-store.d.ts.map +1 -1
- package/dist/server/ui-settings-store.js +31 -2
- package/dist/server/ui-settings-store.js.map +1 -1
- package/package.json +4 -3
- package/dist/client/assets/index-BqY_I247.js +0 -186
- package/dist/client/assets/index-BqY_I247.js.map +0 -1
- package/dist/client/assets/index-qW5wTo3v.css +0 -1
- package/dist/client/assets/vendor-icons-BxCzfNOa.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
<img width="2560" height="1440" alt="New Project" src="https://github.com/user-attachments/assets/fa6a4dd8-c61e-43e4-ba36-4b5bf2640745" />
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
> A browser-based UI wrapper for the [pi coding agent](https://pi.dev)
|
|
7
6
|
|
|
8
7
|
pi-kot wraps the `@earendil-works/pi-coding-agent` SDK in an HTTP bridge with a React-based web UI. It exposes the agent's capabilities through REST, SSE, and WebSocket, giving you a fully interactive chat-and-terminal environment in your browser — no desktop app required.
|
|
@@ -24,7 +23,7 @@ This project was built out of **love and curiosity**.
|
|
|
24
23
|
## Features
|
|
25
24
|
|
|
26
25
|
| Feature | Description |
|
|
27
|
-
|
|
26
|
+
| --- | --- |
|
|
28
27
|
| **💬 Chat** | Full agent conversation with streaming, markdown rendering, code blocks with syntax highlighting, and diff views — no intermediate adapter, SDK types consumed directly |
|
|
29
28
|
| **🖥️ Terminal** | Multi-tab xterm.js terminal with persistent PTY sessions, **touch gestures** (long-press+drag arrows, double-tap Tab, 3-finger paste), and a mobile quick-keys bar |
|
|
30
29
|
| **📁 File Explorer** | Browse, read, edit, and manage files in your project workspace with folder drag-and-drop uploads, drag-to-move, and ZIP downloads |
|
|
@@ -50,6 +49,7 @@ npx pi-kot --password pikot
|
|
|
50
49
|
```
|
|
51
50
|
|
|
52
51
|
help
|
|
52
|
+
|
|
53
53
|
```bash
|
|
54
54
|
npx pi-kot --help
|
|
55
55
|
```
|
|
@@ -57,7 +57,7 @@ npx pi-kot --help
|
|
|
57
57
|
Available options:
|
|
58
58
|
|
|
59
59
|
| Flag | Description | Default |
|
|
60
|
-
|
|
60
|
+
| --- | --- | --- |
|
|
61
61
|
| `--port <n>` | Port to listen on | `3333` |
|
|
62
62
|
| `--host <h>` | Host/interface to bind to | `0.0.0.0` |
|
|
63
63
|
| `--password <pw>` | Enable UI password auth | — |
|
|
@@ -105,7 +105,7 @@ All flags also work as environment variables (`PORT`, `HOST`, `UI_PASSWORD`, `AP
|
|
|
105
105
|
pi-kot's terminal supports mobile touch gestures inspired by Termius:
|
|
106
106
|
|
|
107
107
|
| Gesture | Action | Details |
|
|
108
|
-
|
|
108
|
+
| --- | --- | --- |
|
|
109
109
|
| **Long-press 150ms + drag** | Arrow keys (↑↓←→) | Continuous with 3 speed gears — drag further for faster |
|
|
110
110
|
| **Double-tap** | Tab key | Two quick taps within 300ms |
|
|
111
111
|
| **3-finger tap** | Paste | Reads from system clipboard |
|
|
@@ -118,7 +118,7 @@ pi-kot's terminal supports mobile touch gestures inspired by Termius:
|
|
|
118
118
|
Some features only appear **after** installing the corresponding extension. Head to the **Extensions tab** (⚙ → Extensions) and install the 💎 **Recommended for pi-kot** extensions:
|
|
119
119
|
|
|
120
120
|
| Extension | Package | Unlocks |
|
|
121
|
-
|
|
121
|
+
| --- | --- | --- |
|
|
122
122
|
| **pi-web-access** 🌐 | `npm:pi-web-access` | Web search, content extraction, API interaction tools for the agent |
|
|
123
123
|
| **pi-playwright** 🎭 | `npm:pi-playwright` | Browser automation — the agent can interact with real web UI |
|
|
124
124
|
| **pi-vision-tool** 👁️ | `npm:pi-vision-tool` | **Vision agent selection** — non-vision models can delegate `describe_image` to a vision-capable model; full vision settings exposed in Extensions tab |
|
|
@@ -127,6 +127,7 @@ Some features only appear **after** installing the corresponding extension. Head
|
|
|
127
127
|
| **context-mode** 🧠 | `npm:context-mode` | **Context window savings** — sandboxed code execution, FTS5 knowledge base, BM25 search, and session continuity across compaction |
|
|
128
128
|
|
|
129
129
|
> 💡 **Tip**: Some UI elements only appear **after** the extension is installed. For example:
|
|
130
|
+
>
|
|
130
131
|
> - **Vision model selector** in Extensions tab → appears only after `pi-vision-tool` is installed
|
|
131
132
|
> - **Rewind button** on chat messages → appears only after `pi-rewind` is installed
|
|
132
133
|
> - **Plan mode tool safety** → appears only after `pi-plan-mode` is installed
|
|
@@ -157,7 +158,7 @@ pi-kot includes a built-in tunnel helper for exposing your local instance to the
|
|
|
157
158
|
The server exposes tunnel controls under `/api/v1/tunnel`:
|
|
158
159
|
|
|
159
160
|
| Method | Path | Purpose |
|
|
160
|
-
|
|
161
|
+
| --- | --- | --- |
|
|
161
162
|
| `GET` | `/api/v1/tunnel/check` | Check whether ngrok is installed and return version/platform info |
|
|
162
163
|
| `GET` | `/api/v1/tunnel/doctor` | Run diagnostics for binary, auth token, and network checks |
|
|
163
164
|
| `GET` | `/api/v1/tunnel/status` | Return whether a tunnel is active, its public URL, mode, provider, and local port |
|
|
@@ -173,7 +174,7 @@ All options can be set as environment variables **or** CLI flags (with `npx pi-k
|
|
|
173
174
|
### Network
|
|
174
175
|
|
|
175
176
|
| Variable | Flag | Default | Description |
|
|
176
|
-
|
|
177
|
+
| --- | --- | --- | --- |
|
|
177
178
|
| `PORT` | `--port` | `3333` | HTTP listen port |
|
|
178
179
|
| `HOST` | `--host` | `0.0.0.0` | Bind address (`127.0.0.1` for loopback-only) |
|
|
179
180
|
| `TRUST_PROXY` | — | `false` | Trust `X-Forwarded-*` headers when behind a reverse proxy |
|
|
@@ -182,7 +183,7 @@ All options can be set as environment variables **or** CLI flags (with `npx pi-k
|
|
|
182
183
|
### Authentication
|
|
183
184
|
|
|
184
185
|
| Variable | Flag | Default | Description |
|
|
185
|
-
|
|
186
|
+
| --- | --- | --- | --- |
|
|
186
187
|
| `UI_PASSWORD` | `--password` | — | Enable password auth; browser shows a login form |
|
|
187
188
|
| `API_KEY` | `--api-key` | — | Static API key for scripts/CI; also accepted as password in the login form |
|
|
188
189
|
|
|
@@ -191,7 +192,7 @@ If both are unset, auth is **disabled** and the UI opens freely.
|
|
|
191
192
|
### Storage paths
|
|
192
193
|
|
|
193
194
|
| Variable | Flag | Default | Description |
|
|
194
|
-
|
|
195
|
+
| --- | --- | --- | --- |
|
|
195
196
|
| `WORKSPACE_PATH` | `--workspace` | `~/.pi-kot/workspace/default` | Default project workspace directory |
|
|
196
197
|
| `SESSION_DIR` | — | `~/.pi-kot/sessions` | Session data directory |
|
|
197
198
|
| `FORGE_DATA_DIR` | — | `~/.pi-kot` | Base config/data directory (MCP config, tool/skill overrides) |
|
|
@@ -200,7 +201,7 @@ If both are unset, auth is **disabled** and the UI opens freely.
|
|
|
200
201
|
### Data files (under `FORGE_DATA_DIR` by default)
|
|
201
202
|
|
|
202
203
|
| Variable | Default | Description |
|
|
203
|
-
|
|
204
|
+
| --- | --- | --- |
|
|
204
205
|
| `MCP_CONFIG_FILE` | `$FORGE_DATA_DIR/mcp.json` | MCP server configurations |
|
|
205
206
|
| `MCP_STDIO_TRUST_FILE` | `$FORGE_DATA_DIR/mcp-stdio-trust.json` | Trusted stdio MCP servers |
|
|
206
207
|
| `TOOL_OVERRIDES_FILE` | `$FORGE_DATA_DIR/tool-overrides.json` | Per-project tool enable/disable overrides |
|
|
@@ -209,7 +210,7 @@ If both are unset, auth is **disabled** and the UI opens freely.
|
|
|
209
210
|
### Logging & Environment
|
|
210
211
|
|
|
211
212
|
| Variable | Flag | Default | Description |
|
|
212
|
-
|
|
213
|
+
| --- | --- | --- | --- |
|
|
213
214
|
| `LOG_LEVEL` | `--log-level` | `info` | Server log level: `info`, `debug`, `warn`, `error` |
|
|
214
215
|
| `PIKOT_MODE` | — | — | Set to `dev` to use `-dev`-suffixed data dirs (`~/.pi-kot-dev/`) so dev data doesn't mix with production |
|
|
215
216
|
| `NODE_ENV` | — | `production` | Set automatically by the server; `test` disables request logging |
|
|
@@ -218,14 +219,14 @@ If both are unset, auth is **disabled** and the UI opens freely.
|
|
|
218
219
|
### Static client serving
|
|
219
220
|
|
|
220
221
|
| Variable | Default | Description |
|
|
221
|
-
|
|
222
|
+
| --- | --- | --- |
|
|
222
223
|
| `SERVE_CLIENT` | `true` | Serve the built Vite client from `CLIENT_DIST_PATH`; set `false` to run API-only (e.g. behind a separate reverse proxy serving the client) |
|
|
223
224
|
| `CLIENT_DIST_PATH` | `packages/client/dist` (in-repo) or `dist/client` (npm install) | Path to the built client dist directory; auto-detected |
|
|
224
225
|
|
|
225
226
|
### Orchestration & UI
|
|
226
227
|
|
|
227
228
|
| Variable | Default | Description |
|
|
228
|
-
|
|
229
|
+
| --- | --- | --- |
|
|
229
230
|
| `ORCHESTRATION_ENABLED` | `true` | Enable supervisor/worker orchestration |
|
|
230
231
|
| `MINIMAL_UI` | `false` | Hide optional UI panels (terminal, git, changes). Useful for locked-down deployments |
|
|
231
232
|
|
|
@@ -307,7 +308,7 @@ pi-kot can render agent-created content inline in chat — HTML pages, SVG image
|
|
|
307
308
|
### Supported formats
|
|
308
309
|
|
|
309
310
|
| Format | Detection | Preview |
|
|
310
|
-
|
|
311
|
+
| --- | --- | --- |
|
|
311
312
|
| **HTML** | `<!DOCTYPE html>`, `<html>`, or ` ```html` | Sandboxed iframe |
|
|
312
313
|
| **SVG** | `<svg>` or ` ```svg` | Sandboxed iframe |
|
|
313
314
|
| **Mermaid** | ` ```mermaid` | Rendered diagram |
|
|
@@ -332,6 +333,7 @@ Ask the agent:
|
|
|
332
333
|
> "Create a futuristic button with hover effects"
|
|
333
334
|
|
|
334
335
|
The agent will:
|
|
336
|
+
|
|
335
337
|
1. Write the HTML to `.pi/artifacts/button.html`
|
|
336
338
|
2. Output: `[Live Preview](/api/v1/artifacts/button.html)`
|
|
337
339
|
3. You see the rendered button inline in chat
|
|
@@ -349,7 +351,7 @@ The agent will:
|
|
|
349
351
|
Access settings via the **⚙** icon in the header.
|
|
350
352
|
|
|
351
353
|
| Tab | What you can configure |
|
|
352
|
-
|
|
354
|
+
| --- | --- |
|
|
353
355
|
| **Appearance** | Theme picker, sticky user header, show token usage, image compression — all **persisted server-side** |
|
|
354
356
|
| **Providers** | View configured providers, add/remove API keys, add custom providers, raw models.json editor |
|
|
355
357
|
| **Agent** | Default provider, default model, thinking level, model scope (hide unused models), orchestrator model |
|
|
@@ -424,10 +426,10 @@ pi-kot/
|
|
|
424
426
|
## Tech Stack
|
|
425
427
|
|
|
426
428
|
| Layer | Technology |
|
|
427
|
-
|
|
429
|
+
| --- | --- |
|
|
428
430
|
| **UI** | React, TypeScript, Vite, xterm.js, CodeMirror, Zustand |
|
|
429
431
|
| **Server** | Fastify, ws (WebSocket), node-pty |
|
|
430
|
-
| **SDK** | `@earendil-works/pi-coding-agent` (currently 0.
|
|
432
|
+
| **SDK** | `@earendil-works/pi-coding-agent` (currently 0.84.2) |
|
|
431
433
|
| **Auth** | JWT, scrypt password hashing |
|
|
432
434
|
| **State** | Zustand (client), JSONL session files (server) |
|
|
433
435
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--diff-background-color:initial;--diff-text-color:initial;--diff-font-family:Consolas,Courier,monospace;--diff-selection-background-color:#b3d7ff;--diff-selection-text-color:var(--diff-text-color);--diff-gutter-insert-background-color:#d6fedb;--diff-gutter-insert-text-color:var(--diff-text-color);--diff-gutter-delete-background-color:#fadde0;--diff-gutter-delete-text-color:var(--diff-text-color);--diff-gutter-selected-background-color:#fffce0;--diff-gutter-selected-text-color:var(--diff-text-color);--diff-code-insert-background-color:#eaffee;--diff-code-insert-text-color:var(--diff-text-color);--diff-code-delete-background-color:#fdeff0;--diff-code-delete-text-color:var(--diff-text-color);--diff-code-insert-edit-background-color:#c0dc91;--diff-code-insert-edit-text-color:var(--diff-text-color);--diff-code-delete-edit-background-color:#f39ea2;--diff-code-delete-edit-text-color:var(--diff-text-color);--diff-code-selected-background-color:#fffce0;--diff-code-selected-text-color:var(--diff-text-color);--diff-omit-gutter-line-color:#cb2a1d}.diff{background-color:var(--diff-background-color);border-collapse:collapse;color:var(--diff-text-color);table-layout:fixed;width:100%}.diff::selection{background-color:#b3d7ff;background-color:var(--diff-selection-background-color);color:var(--diff-selection-text-color)}.diff td{vertical-align:top;padding-top:0;padding-bottom:0}.diff-line{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);line-height:1.5}.diff-gutter>a{color:inherit;display:block}.diff-gutter{cursor:pointer;text-align:right;-webkit-user-select:none;user-select:none;padding:0 1ch}.diff-gutter-insert{background-color:#d6fedb;background-color:var(--diff-gutter-insert-background-color);color:var(--diff-gutter-insert-text-color)}.diff-gutter-delete{background-color:#fadde0;background-color:var(--diff-gutter-delete-background-color);color:var(--diff-gutter-delete-text-color)}.diff-gutter-omit{cursor:default}.diff-gutter-selected{background-color:#fffce0;background-color:var(--diff-gutter-selected-background-color);color:var(--diff-gutter-selected-text-color)}.diff-code{word-wrap:break-word;white-space:pre-wrap;word-break:break-all;padding:0 0 0 .5em}.diff-code-edit{color:inherit}.diff-code-insert{background-color:#eaffee;background-color:var(--diff-code-insert-background-color);color:var(--diff-code-insert-text-color)}.diff-code-insert .diff-code-edit{background-color:#c0dc91;background-color:var(--diff-code-insert-edit-background-color);color:var(--diff-code-insert-edit-text-color)}.diff-code-delete{background-color:#fdeff0;background-color:var(--diff-code-delete-background-color);color:var(--diff-code-delete-text-color)}.diff-code-delete .diff-code-edit{background-color:#f39ea2;background-color:var(--diff-code-delete-edit-background-color);color:var(--diff-code-delete-edit-text-color)}.diff-code-selected{background-color:#fffce0;background-color:var(--diff-code-selected-background-color);color:var(--diff-code-selected-text-color)}.diff-widget-content{vertical-align:top}.diff-gutter-col{width:7ch}.diff-gutter-omit{height:0}.diff-gutter-omit:before{background-color:#cb2a1d;background-color:var(--diff-omit-gutter-line-color);content:" ";white-space:pre;width:2px;height:100%;margin-left:4.6ch;display:block;overflow:hidden}.diff-decoration{-webkit-user-select:none;user-select:none;line-height:1.5}.diff-decoration-content{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);padding:0}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--radius-xs:4px;--radius-sm:6px;--radius-md:10px;--radius:16px;--radius-lg:24px;--radius-pill:100px;--font-mono:"Noto Sans Mono", "SF Mono", "Menlo", "Monaco", "Consolas", monospace;--sidebar-width:260px;--ease:cubic-bezier(.4, 0, .2, 1);--spring:cubic-bezier(.34, 1.56, .64, 1);--duration:.2s;--blur:24px;--blur-heavy:48px;--success:#34d399;--error:#f87171;--warning:#fbbf24;--flap-tile:#1c1e22;--flap-text:#ffffffe6;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#0a0a0a;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--header-bg:#1e1e1ed9;--sidebar-bg:#121212f2;--bg-frosted:#0c0c0ce6;--text-primary:#fafafa;--text-secondary:#a1a1aa;--text-dim:#71717a;--text-ghost:#52525b;--border:#ffffff0f;--border-hover:#ffffff1a;--border-bright:#ffffff24;--input-bg:#ffffff0a;--input-border:#ffffff14;--scrollbar-thumb:#ffffff1a;--scrollbar-thumb-hover:#ffffff24;--tool-bg:#ffffff08;--tool-border:#ffffff0f}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#0a0a0a;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--header-bg:#1e1e1ed9;--sidebar-bg:#121212f2;--bg-frosted:#0c0c0ce6;--text-primary:#fafafa;--text-secondary:#a1a1aa;--text-dim:#71717a;--text-ghost:#52525b;--border:#ffffff0f;--border-hover:#ffffff1a;--border-bright:#ffffff24;--input-bg:#ffffff0a;--input-border:#ffffff14;--scrollbar-thumb:#ffffff1a;--scrollbar-thumb-hover:#ffffff24;--tool-bg:#ffffff08;--tool-border:#ffffff0f}:root[data-theme=dusk]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#212121;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--header-bg:#37373cbf;--sidebar-bg:#282826f2;--bg-frosted:#212121d9;--text-primary:#f4f4f5;--text-secondary:#a1a1aa;--text-dim:#71717a;--text-ghost:#52525b;--border:#ffffff0f;--border-hover:#ffffff1a;--border-bright:#ffffff24;--input-bg:#ffffff0a;--input-border:#ffffff14;--scrollbar-thumb:#ffffff1a;--scrollbar-thumb-hover:#ffffff24;--tool-bg:#ffffff08;--tool-border:#ffffff0f}:root[data-theme=dark-warm]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-solid:#171515;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d;--header-bg:#2a2826c7;--sidebar-bg:#1c1b1af2;--bg-frosted:#171515d1;--text-primary:#f5f5f4;--text-secondary:#a8a29e;--text-dim:#78716c;--text-ghost:#57534e;--border:#343331cc;--border-hover:#403e3ce6;--border-bright:#cecdc31f;--input-bg:#00000040;--input-border:#cecdc30f;--scrollbar-thumb:#cecdc314;--scrollbar-thumb-hover:#cecdc324;--tool-bg:#4385be1a;--tool-border:#4385be33;--success:#a0af54}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#fff;--bg-glass:#00000008;--bg-glass-hover:#0000000f;--bg-glass-active:#00000017;--bg-glass-strong:#0000000a;--header-bg:#f5f5f5d9;--sidebar-bg:#f8f8f8f2;--bg-frosted:#fcfcfce6;--text-primary:#09090b;--text-secondary:#71717a;--text-dim:#a1a1aa;--text-ghost:#e4e4e7;--border:#00000014;--border-hover:#00000024;--border-bright:#0003;--input-bg:#00000008;--input-border:#0000001a;--scrollbar-thumb:#0000001f;--scrollbar-thumb-hover:#0000002e;--tool-bg:#00000008;--flap-tile:#dfe2e6;--flap-text:#0f0f12d9;--tool-border:#00000014}:root[data-theme=light-warm]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-solid:#fffdf4;--bg-glass:#00000008;--bg-glass-hover:#0000000f;--bg-glass-active:#00000017;--bg-glass-strong:#0000000a;--header-bg:#f2f0e8b8;--sidebar-bg:#f6f5eef2;--bg-frosted:#fffdf4d1;--text-primary:#0c0a09;--text-secondary:#78716c;--text-dim:#a8a29e;--text-ghost:#e7e5e4;--border:#dad8cecc;--border-hover:#cecdc3e6;--border-bright:#100f0f1f;--input-bg:#00000008;--input-border:#100f0f14;--scrollbar-thumb:#100f0f1a;--scrollbar-thumb-hover:#100f0f29;--tool-bg:#205ea612;--flap-tile:#dbdde0;--flap-text:#14120ed9;--tool-border:#205ea624;--success:#879a39}:root{--accent:#2563eb}:root[data-accent=slate]{--accent:#64748b}:root[data-accent=blue]{--accent:#2563eb}:root[data-accent=violet]{--accent:#7c3aed}:root[data-accent=emerald]{--accent:#059669}:root[data-accent=amber]{--accent:#d97706}:root[data-accent=rose]{--accent:#e11d48}:root[data-accent=teal]{--accent:#0d9488}:root[data-accent=orange]{--accent:#ea580c}:root[data-accent=flexoki]{--accent:#da702c}:root{--accent-text:color-mix(in srgb, var(--accent) 80%, white);--accent-subtle:color-mix(in srgb, var(--accent) 8%, transparent);--accent-glow:color-mix(in srgb, var(--accent) 15%, transparent);--input-focus-border:var(--accent);--user-bubble:color-mix(in srgb, var(--accent) 12%, transparent);--user-bubble-text:var(--text-primary);--user-bubble-border:color-mix(in srgb, var(--accent) 18%, transparent);--tool-accent:color-mix(in srgb, var(--accent) 50%, var(--text-dim));--tool-accent-text:color-mix(in srgb, var(--accent) 65%, var(--text-secondary))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.md-root img,.markdown-preview img,.markdown-body img{border-radius:4px;max-width:100%;height:auto;box-shadow:0 1px 4px #0000001a}.pi-diff-block{--diff-background-color:transparent;--diff-text-color:#e5e5e5;--diff-font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--diff-selection-background-color:#525252;--diff-gutter-insert-background-color:#14532d;--diff-gutter-insert-text-color:#86efac;--diff-gutter-delete-background-color:#7f1d1d;--diff-gutter-delete-text-color:#fca5a5;--diff-code-insert-background-color:#052e16;--diff-code-insert-text-color:#bbf7d0;--diff-code-insert-edit-background-color:#166534;--diff-code-insert-edit-text-color:#dcfce7;--diff-code-delete-background-color:#450a0a;--diff-code-delete-text-color:#fecaca;--diff-code-delete-edit-background-color:#991b1b;--diff-code-delete-edit-text-color:#fee2e2;--diff-omit-gutter-line-color:#404040;--diff-gutter-bg:#0a0a0a;max-width:100%;overflow-x:auto}.pi-diff-block .diff{color:var(--diff-text-color);table-layout:auto;background:0 0;width:max-content;min-width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.pi-diff-block .diff-code{white-space:pre;word-break:normal;overflow-wrap:normal;width:100%}.pi-diff-split .diff{table-layout:fixed;width:100%;min-width:0}.pi-diff-split .diff-code{white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;width:100%}.pi-diff-split .diff-gutter{background:0 0;position:static}.pi-diff-block .diff-gutter,.pi-diff-block .diff-line{background:0 0}.pi-diff-block .diff-gutter{color:#737373;z-index:1;background:var(--diff-gutter-bg);white-space:nowrap;font-variant-numeric:tabular-nums;position:sticky;left:0}.pi-diff-block .diff-decoration{color:#a3a3a3;background:#171717}[data-theme=light] .pi-diff-block{--diff-text-color:#0a0a0a;--diff-selection-background-color:#cbd5e1;--diff-gutter-insert-background-color:#bbf7d0;--diff-gutter-insert-text-color:#14532d;--diff-gutter-delete-background-color:#fecaca;--diff-gutter-delete-text-color:#7f1d1d;--diff-code-insert-background-color:#dcfce7;--diff-code-insert-text-color:#14532d;--diff-code-insert-edit-background-color:#86efac;--diff-code-insert-edit-text-color:#052e16;--diff-code-delete-background-color:#fee2e2;--diff-code-delete-text-color:#7f1d1d;--diff-code-delete-edit-background-color:#fca5a5;--diff-code-delete-edit-text-color:#450a0a;--diff-omit-gutter-line-color:#cbd5e1;--diff-gutter-bg:#fff}[data-theme=light-warm] .pi-diff-block{--diff-gutter-bg:#fffdf4;--diff-text-color:#0a0a0a}[data-theme=light] .pi-diff-block .diff{color:#0a0a0a}[data-theme=light] .pi-diff-block .diff-gutter{color:#525252;background:#fff}[data-theme=light] .pi-diff-block .diff-decoration{color:#525252;background:#f3f4f6}.chat-edit-diff-wrap{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-solid);overflow:hidden}.chat-edit-diff-summary,.chat-edit-diff-filename{color:var(--text-secondary)}.chat-edit-diff-toggle-btn{color:var(--text-dim);transition:background var(--duration) var(--ease), color var(--duration) var(--ease)}.chat-edit-diff-toggle-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff0f;--bg-glass-active:#ffffff17;--bg-glass-strong:#ffffff0d}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-glass:#00000008;--bg-glass-hover:#0000000f;--bg-glass-active:#00000017;--bg-glass-strong:#0000000a}body{font-feature-settings:"cv02", "cv03", "cv04", "cv11";background:var(--bg-solid);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:16px;line-height:1.6}strong{letter-spacing:-.01em;font-weight:600}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes msgIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes connection-pulse{0%,to{opacity:.5;transform:scale(.9)}50%{opacity:1;transform:scale(1.2)}}.app-layout{height:100dvh;display:flex;overflow:hidden}.sidebar-backdrop{z-index:99;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn .2s var(--ease);background:#00000073;display:none;position:fixed;inset:0}@media (width<=600px){.sidebar-backdrop{display:block}}.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:var(--sidebar-bg);-webkit-backdrop-filter:blur(var(--blur-heavy)) saturate(1.5);backdrop-filter:blur(var(--blur-heavy)) saturate(1.5);border-right:1px solid var(--border);z-index:100;flex-direction:column;display:flex;overflow:hidden}@media (width>=601px){.sidebar{transition:width var(--duration) var(--ease), min-width var(--duration) var(--ease), border-color var(--duration) var(--ease);will-change:width;position:relative;top:auto;bottom:auto;left:auto}.sidebar.collapsed{border-right-color:#0000;width:0;min-width:0}}@media (width<=600px){.sidebar{will-change:transform;transform:translateX(calc(var(--sidebar-width) * -1));transition:transform .3s cubic-bezier(.16,1,.3,1);position:fixed;top:50px;bottom:0;left:0}.sidebar:not(.collapsed){transform:translate(0)}.sidebar.collapsed{transform:translateX(calc(var(--sidebar-width) * -1))}.session-item{border-radius:var(--radius-xs);padding:8px 12px;font-size:13px}.project-sublist .session-item{padding:6px 10px;font-size:12px}.project-row{padding:6px 8px;font-size:13px}.sidebar-header{padding:12px 12px 8px;font-size:14px}.new-session-mini{padding:6px 10px;font-size:12px}}.sidebar-header{color:var(--accent-text);letter-spacing:-.02em;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 12px 6px;font-size:14px;font-weight:700;display:flex}@media (width>=601px){.sidebar-header{border-bottom:1px solid var(--border);height:50px;padding:0 12px}}.sidebar-add-project{border:1px solid var(--border);width:26px;height:26px;color:var(--text-dim);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease);background:0 0;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.sidebar-add-project:hover{color:var(--text-primary);background:var(--bg-glass-hover);border-color:var(--border-hover)}.project-list{flex:1;padding:0 8px 4px;overflow-y:auto}.project-group{margin-bottom:2px}.project-row{z-index:2;border-radius:var(--radius);cursor:pointer;color:var(--text-primary);background:var(--sidebar-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:all var(--duration) var(--ease);-webkit-user-select:none;user-select:none;outline:none;align-items:center;gap:4px;padding:4px 6px;font-size:13px;font-weight:500;display:flex;position:sticky;top:0}.project-row:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.project-row.active{background:var(--accent-subtle);color:var(--accent-text);box-shadow:inset 3px 0 0 var(--accent);border-radius:0 var(--radius) var(--radius) 0}.project-row.drag-over{outline:2px solid var(--accent);outline-offset:-2px}.mobile-reorder-btn{display:none!important}.project-drag-handle{opacity:0;transition:opacity var(--duration) var(--ease);display:flex}.project-row:hover .project-drag-handle{opacity:1}@media (width<=600px){.mobile-reorder-btn{display:flex!important}.project-drag-handle{display:none!important}}.project-icon{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.project-icon-folder{display:block}.project-row:hover .project-icon-folder{display:none}.project-icon-arrow{opacity:.6;display:none}.project-row:hover .project-icon-arrow{display:block}.project-name{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;overflow:hidden}.project-session-count{color:var(--text-dim);background:var(--bg-glass-strong);transition:opacity var(--duration) var(--ease);border-radius:10px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:600;line-height:1.4}.project-row:hover .project-session-count{opacity:0}.project-sublist{flex:unset;padding:0 0 2px 24px}.project-sublist .session-item{border-radius:var(--radius-xs);cursor:pointer;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;transition:all var(--duration) var(--ease);margin-bottom:0;padding:5px 12px;font-size:12px;overflow:hidden}.project-sublist .session-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.project-sublist .session-item.active{background:var(--accent-subtle);color:var(--accent-text);box-shadow:inset 2px 0 0 var(--accent);font-weight:600}.session-name{text-overflow:ellipsis;overflow:hidden}.session-rename-input{border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--input-bg);width:100%;color:var(--text-primary);box-sizing:border-box;outline:none;padding:2px 6px;font-family:inherit;font-size:12px}.session-rename-input:focus{border-color:var(--input-focus-border)}.session-item{align-items:baseline;gap:4px;display:flex;position:relative}.session-archive-btn{opacity:.2;color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);min-width:20px;min-height:20px;transition:opacity var(--duration) var(--ease), color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;margin-left:auto;padding:2px 4px;font-size:12px;line-height:1}.session-archive-btn:hover{opacity:1;color:var(--error);background:var(--bg-glass-hover)}.session-item:hover .session-archive-btn{opacity:.6}.session-item:hover .session-archive-btn:hover{opacity:1}.session-fav-btn{opacity:.3;color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);min-width:20px;min-height:20px;transition:opacity var(--duration) var(--ease), color var(--duration) var(--ease), transform var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;padding:2px 4px;font-size:12px;line-height:1}.session-fav-btn.favorited{opacity:1;color:var(--warning,#fbbf24)}.session-fav-btn:hover{opacity:1;transform:scale(1.2)}.session-fav-btn.favorited:hover{color:var(--warning,#fbbf24)}.session-item:hover .session-fav-btn:not(.favorited){opacity:.7}.session-item:hover .session-fav-btn:not(.favorited):hover{opacity:1;color:var(--warning,#fbbf24)}.favorites-section-header{text-transform:uppercase;letter-spacing:.08em;color:var(--warning,#fbbf24);opacity:.7;align-items:center;margin-top:2px;padding:2px 10px 1px;font-size:9px;font-weight:700;display:flex}.favorites-section-divider{background:var(--border);opacity:.3;height:1px;margin:1px 10px 2px}.session-item.archived{opacity:.55;transition:opacity var(--duration) var(--ease);font-style:italic}.session-item.archived:hover{opacity:.85}.session-restore-btn{color:var(--accent);cursor:pointer;border-radius:var(--radius-xs);background:0 0;border:none;padding:2px 4px;font-size:14px;line-height:1;display:none;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.session-item.archived:hover .session-restore-btn{display:inline-block}.archived-toggle{border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);transition:all var(--duration) var(--ease);-webkit-user-select:none;user-select:none;align-items:center;margin:6px 8px 2px;padding:3px 8px;font-size:10px;font-weight:600;display:flex}.archived-toggle:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.archived-list{border-bottom:1px solid var(--border);margin-bottom:2px;padding-bottom:4px}.archived-status{color:var(--text-dim);padding:3px 8px 3px 24px;font-size:10px}.new-session-mini{border-radius:var(--radius-sm);border:1px dashed var(--border);width:calc(100% - 8px);color:var(--text-tertiary);cursor:pointer;transition:all var(--duration) var(--ease);text-align:left;background:0 0;margin:4px 4px 0;padding:5px 10px;font-family:inherit;font-size:11px;font-weight:500;display:block}.new-session-mini:hover{background:var(--bg-glass-hover);border-color:var(--accent);color:var(--accent-text)}.project-actions-left{align-items:center;gap:2px;margin-left:auto;display:flex}.project-actions-right{align-items:center;display:flex}.project-actions-right .project-action-btn{opacity:0;pointer-events:none}.project-row:hover .project-actions-right .project-action-btn{opacity:1;pointer-events:auto}.project-action-btn{border-radius:var(--radius-xs);width:24px;height:24px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--duration) var(--ease), color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.project-row:hover .project-action-btn,.project-row.active .project-action-btn{opacity:1;pointer-events:auto}.project-action-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover)}@media (width<=600px){.project-row.active .project-action-btn{opacity:1;pointer-events:auto}.project-action-btn{width:28px;height:28px}}.new-session-row{border-radius:var(--radius-sm);border:1px dashed var(--border);color:var(--text-tertiary);cursor:pointer;text-align:left;width:100%;transition:all var(--duration) var(--ease);background:0 0;align-items:center;gap:6px;margin:4px 0;padding:4px 10px;font-family:inherit;font-size:11px;font-weight:500;display:flex}.new-session-row:hover{background:var(--accent-subtle);color:var(--accent-text);border-color:var(--accent)}@media (width<=600px){.new-session-row{padding:12px 14px;font-size:13px}}.sidebar-actions{display:none}.sidebar-footer{border-top:1px solid var(--border);flex-shrink:0;padding:4px 6px 6px}.sidebar-nav-items{flex-direction:column;gap:1px;display:flex}.sidebar-nav-btn{border-radius:var(--radius-sm);width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;transition:background var(--duration) var(--ease), color var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-family:inherit;font-size:12px;font-weight:500;display:flex}.sidebar-nav-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.sidebar-nav-btn-muted{color:var(--text-dim)}.sidebar-nav-btn-muted:hover{color:var(--text-secondary)}.sidebar-nav-icon{opacity:.7;flex-shrink:0}.prompt-popup-overlay{z-index:1000;background:#00000080;justify-content:center;align-items:center;padding:16px;animation:.15s fadeIn;display:flex;position:fixed;inset:0}.prompt-popup{background:var(--bg-frosted);width:600px;max-width:94vw;height:560px;max-height:85vh;-webkit-backdrop-filter:blur(var(--blur-heavy));border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;animation:.2s cubic-bezier(.16,1,.3,1) fadeIn;display:flex;overflow:hidden;box-shadow:0 16px 48px #00000059}.prompt-popup-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:14px 16px;display:flex}.prompt-popup-title{color:var(--text-primary);letter-spacing:-.02em;font-size:14px;font-weight:700}.prompt-popup-project{color:var(--accent-text);font-size:13px;font-weight:500}.prompt-popup-close{width:26px;height:26px;color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.prompt-popup-close:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.prompt-popup-body{flex-direction:column;flex:1;display:flex;overflow:hidden}.add-project-settings-panel{flex-direction:column;width:560px;max-width:92vw;max-height:80vh;display:flex}.add-project-dialog-body{flex-direction:column;flex:1;gap:8px;padding:12px 16px 4px;display:flex;overflow-y:auto}.add-project-dialog-bar{gap:4px;margin-bottom:4px;display:flex}.add-project-dialog-tab{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex:1;justify-content:center;align-items:center;gap:6px;padding:6px 10px;font-family:inherit;font-size:12px;font-weight:500;display:flex}.add-project-dialog-tab.active{background:var(--accent-subtle);border-color:var(--accent-subtle);color:var(--accent-text);font-weight:600}.add-project-dialog-tab:hover:not(.active){background:var(--bg-glass-hover);color:var(--text-primary)}.add-project-dialog-clone-row{align-items:center;gap:8px;display:flex}.add-project-dialog-clone-row .add-project-dialog-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);font-size:12px;font-family:var(--font-mono);transition:border-color var(--duration) var(--ease);outline:none;flex:1;padding:7px 10px 7px 6px}.add-project-dialog-clone-row .add-project-dialog-input:focus{border-color:var(--accent)}.add-project-dialog-clone-row .add-project-dialog-icon{color:var(--text-dim);pointer-events:none;flex-shrink:0;margin-left:10px;position:absolute}.add-project-dialog-path-row{align-items:center;gap:8px;display:flex}.add-project-dialog-icon{color:var(--text-dim);flex-shrink:0}.add-project-dialog-path-row .add-project-dialog-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);font-size:12px;font-family:var(--font-mono);transition:border-color var(--duration) var(--ease);outline:none;flex:1;padding:7px 10px}.add-project-dialog-path-row .add-project-dialog-input:focus{border-color:var(--accent)}.add-project-dialog-btn{border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-text);cursor:pointer;white-space:nowrap;transition:opacity var(--duration) var(--ease);border:none;flex-shrink:0;padding:7px 14px;font-family:inherit;font-size:12px;font-weight:600}.add-project-dialog-btn:hover:not(:disabled){opacity:.85}.add-project-dialog-btn:disabled{opacity:.4;cursor:not-allowed}.add-project-dialog-tools{align-items:center;gap:4px;display:flex}.add-project-dialog-tool{border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:4px;padding:4px 8px;font-family:inherit;font-size:11px;display:flex}.add-project-dialog-tool:hover:not(:disabled){background:var(--bg-glass-hover);color:var(--text-primary)}.add-project-dialog-tool:disabled{opacity:.3;cursor:not-allowed}.add-project-dialog-path-display{text-align:right;color:var(--text-dim);font-size:10px;font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.add-project-dialog-error{border-radius:var(--radius-sm);background:var(--bg-glass);border:1px solid var(--danger,#e53e3e);color:var(--danger,#e53e3e);padding:6px 10px;font-size:11px}.add-project-dialog-list{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);max-height:280px;overflow-y:auto}.add-project-dialog-empty{text-align:center;color:var(--text-dim);padding:24px 12px;font-size:12px}.add-project-dialog-entries{flex-direction:column;display:flex}.add-project-dialog-entry{cursor:pointer;transition:background var(--duration) var(--ease);align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:flex}.add-project-dialog-entry.highlighted{background:var(--bg-glass-active)}.add-project-dialog-entry:hover{background:var(--bg-glass-hover)}.add-project-dialog-entry-arrow{color:var(--text-dim);flex-shrink:0;width:14px}.add-project-dialog-entry-folder{color:var(--accent);flex-shrink:0}.add-project-dialog-entry-name{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);flex:1;overflow:hidden}.add-project-dialog-entry-add{width:22px;height:22px;color:var(--text-dim);cursor:pointer;opacity:0;transition:all var(--duration) var(--ease);background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.add-project-dialog-entry:hover .add-project-dialog-entry-add{opacity:1}.add-project-dialog-entry-add:hover{background:var(--accent);color:var(--accent-text)}.add-project-dialog-footer{color:var(--text-dim);text-align:center;border-top:1px solid var(--border);padding:6px 16px;font-size:10px}.add-project-dialog-clone-dest{align-items:center;padding:4px 16px 0;display:flex}.add-project-dialog-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;display:flex}.add-project-dialog-toggle input{display:none}.add-project-dialog-toggle-track{background:var(--bg-glass-hover);border:1px solid var(--text-dim);border-radius:10px;flex-shrink:0;width:36px;height:20px;transition:background .2s;position:relative}.add-project-dialog-toggle:hover .add-project-dialog-toggle-track{border-color:var(--text-secondary)}.add-project-dialog-toggle input:checked+.add-project-dialog-toggle-track{background:var(--accent);border-color:var(--accent)}.add-project-dialog-toggle-knob{background:var(--text-secondary);border-radius:50%;width:14px;height:14px;transition:transform .2s;position:absolute;top:2px;left:2px}.add-project-dialog-toggle input:checked+.add-project-dialog-toggle-track .add-project-dialog-toggle-knob{background:#fff;transform:translate(16px)}.add-project-dialog-toggle-label{color:var(--text-secondary);white-space:nowrap;font-size:12px;font-weight:500}.add-project-form{flex-direction:column;gap:6px;display:flex}.add-project-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);width:100%;color:var(--text-primary);transition:border-color var(--duration) var(--ease);box-sizing:border-box;outline:none;padding:7px 10px;font-family:inherit;font-size:12px}.add-project-input:focus{border-color:var(--accent)}.add-project-input::placeholder{color:var(--text-dim)}.add-provider-steps{border-bottom:1px solid var(--border);background:var(--bg-glass);align-items:center;gap:0;padding:8px 16px;display:flex}.add-provider-step{color:var(--text-dim);align-items:center;gap:6px;font-size:11px;display:flex}.add-provider-step.active .add-provider-step-num,.add-provider-step.done .add-provider-step-num{background:var(--accent-text);color:#fff}.add-provider-step.active .add-provider-step-label{color:var(--text-primary);font-weight:600}.add-provider-step.done .add-provider-step-label{color:var(--accent-text)}.add-provider-step-num{background:var(--border);width:18px;height:18px;color:var(--text-dim);border-radius:50%;justify-content:center;align-items:center;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.add-provider-step-arrow{color:var(--border);margin:0 4px}.add-provider-body{flex:1;padding:12px 16px;overflow-y:auto}.add-provider-form{flex-direction:column;gap:14px;display:flex}.add-provider-field{flex-direction:column;gap:4px;display:flex}.add-provider-label{color:var(--text-secondary);font-size:12px;font-weight:600}.add-provider-hint{color:var(--text-dim);margin:2px 0 0;font-size:10px}.add-provider-input-row{align-items:center;display:flex;position:relative}.add-provider-input-icon{color:var(--text-dim);pointer-events:none;flex-shrink:0;position:absolute;left:10px}.add-provider-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);width:100%;color:var(--text-primary);transition:border-color var(--duration) var(--ease);outline:none;padding:7px 10px 7px 32px;font-family:inherit;font-size:12px}.add-provider-input:focus{border-color:var(--accent)}.add-provider-input::placeholder{color:var(--text-dim)}.add-provider-field .add-provider-input-row .add-provider-input:first-child:not(:has(~.add-provider-input-icon)){padding-left:10px}.add-provider-field .add-provider-input-row .add-provider-input{padding-left:10px}.add-provider-select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);width:100%;color:var(--text-primary);cursor:pointer;outline:none;padding:7px 10px;font-family:inherit;font-size:12px}.add-provider-select:focus{border-color:var(--accent)}.add-provider-toggle-btn{color:var(--text-dim);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;padding:4px 8px;font-size:10px;position:absolute;right:4px}.add-provider-toggle-btn:hover{color:var(--text-primary);background:var(--hover-bg)}.add-provider-error-row{border-radius:var(--radius-sm);color:#ef4444;background:#ef44441f;border:1px solid #ef444440;align-items:flex-start;gap:8px;padding:8px 10px;font-size:12px;display:flex}.add-provider-success-banner{border-radius:var(--radius-sm);color:var(--text-primary);background:#22c55e1f;border:1px solid #22c55e40;align-items:center;gap:8px;margin-bottom:12px;padding:8px 12px;font-size:12px;display:flex}.add-provider-success-banner strong{color:var(--accent-text)}.add-provider-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.add-provider-btn{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);white-space:nowrap;background:0 0;align-items:center;gap:6px;padding:7px 14px;font-size:12px;display:inline-flex}.add-provider-btn:hover{background:var(--hover-bg);color:var(--text-primary)}.add-provider-btn-primary{border-radius:var(--radius-sm);background:var(--accent-text);color:#fff;cursor:pointer;transition:all var(--duration) var(--ease);white-space:nowrap;border:none;align-items:center;gap:6px;padding:7px 14px;font-size:12px;font-weight:600;display:inline-flex}.add-provider-btn-primary:hover:not(:disabled){opacity:.9}.add-provider-btn-primary:disabled{opacity:.4;cursor:not-allowed}.add-provider-testing{color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:48px 0;font-size:13px;display:flex}.add-provider-model-review{flex-direction:column;gap:4px;display:flex}.add-provider-model-toolbar{align-items:center;gap:12px;padding:4px 0;display:flex}.add-provider-checkbox-label{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:flex}.add-provider-checkbox{width:14px;height:14px;accent-color:var(--accent-text);cursor:pointer}.add-provider-model-list{flex-direction:column;gap:6px;max-height:260px;padding:4px 0;display:flex;overflow-y:auto}.add-provider-model-card{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-glass);padding:8px 10px}.add-provider-model-card.dimmed{opacity:.4}.add-provider-model-header{align-items:center;display:flex}.add-provider-model-id{font-family:var(--font-mono,monospace);color:var(--text-primary);font-size:12px}.add-provider-model-fields{border-top:1px solid var(--border);flex-wrap:wrap;gap:8px;margin-top:8px;padding-top:8px;display:flex}.add-provider-model-field{flex-direction:column;flex:1;gap:2px;min-width:100px;display:flex}.add-provider-model-field label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:600}.add-provider-small-input,.add-provider-small-select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);font-size:11px;font-family:var(--font-mono,monospace);outline:none;padding:4px 6px}.add-provider-small-input:focus,.add-provider-small-select:focus{border-color:var(--accent)}.add-provider-toggle-label{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text-secondary);align-items:center;gap:4px;font-size:11px;display:inline-flex}.add-provider-empty-models{text-align:center;color:var(--text-secondary);flex-direction:column;gap:12px;padding:24px 12px;font-size:12px;display:flex}.add-provider-manual-model{align-items:center;gap:8px;max-width:400px;margin:0 auto;display:flex}.add-provider-manual-model .add-provider-input{padding-left:10px}.add-provider-saved{text-align:center;color:var(--text-primary);flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:48px 0;font-size:14px;display:flex}.add-provider-saved h3{margin:0;font-size:18px;font-weight:700}.add-provider-saved p{color:var(--text-secondary);margin:0;font-size:13px}.path-suggestions{z-index:100;background:var(--header-bg);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border:1px solid var(--border);border-radius:var(--radius-sm);max-height:240px;margin-bottom:4px;padding:4px 0;position:absolute;bottom:100%;left:0;right:0;overflow-y:auto}.path-suggestion-item{cursor:pointer;font-size:12px;font-family:var(--font-mono);color:var(--text-secondary);padding:6px 10px;transition:background .1s,color .1s}.path-suggestion-item:hover,.path-suggestion-item.highlighted{background:var(--bg-glass-active);color:var(--text-primary)}.add-project-actions{gap:6px;display:flex}.add-project-btn{border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-text);cursor:pointer;transition:opacity var(--duration) var(--ease);border:none;flex:1;padding:6px 10px;font-family:inherit;font-size:12px;font-weight:600}.add-project-btn:hover{opacity:.85}.add-project-cancel{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;padding:6px 10px;font-family:inherit;font-size:12px}.add-project-cancel:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.clone-mode-toggle{gap:2px;margin-bottom:6px;display:flex}.clone-mode-btn{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex:1;padding:5px 8px;font-family:inherit;font-size:11px;font-weight:500}.clone-mode-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.clone-mode-btn.active{background:var(--accent-subtle);border-color:var(--accent);color:var(--accent-text);font-weight:600}.clone-progress{border-radius:var(--radius-sm);max-height:120px;font-size:10px;line-height:1.5;font-family:var(--font-mono);background:#0003;padding:6px 8px;overflow-y:auto}.clone-progress-line{white-space:nowrap;text-overflow:ellipsis;color:var(--text-dim);overflow:hidden}.new-session-btn{border-radius:var(--radius-md);border:1px dashed var(--border-hover);background:var(--bg-glass);width:100%;color:var(--accent-text);cursor:pointer;transition:all var(--duration) var(--ease);padding:10px;font-family:inherit;font-size:13px;font-weight:600}.new-session-btn:hover{background:var(--bg-glass-hover);border-color:var(--accent)}.new-session-btn:active{transform:scale(.98)}.session-list{flex:1;padding:2px 8px;overflow-y:auto}.session-item{border-radius:var(--radius-xs);cursor:pointer;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;transition:all var(--duration) var(--ease);margin-bottom:1px;padding:5px 10px;font-size:12px;overflow:hidden}.session-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.session-item.active{background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.main-area{flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.header{background:var(--header-bg);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border-bottom:1px solid var(--border);z-index:200;will-change:transform;justify-content:space-between;align-items:center;height:50px;padding:8px 16px;display:flex;position:absolute;top:0;left:0;right:0}.header-left,.header-right{align-items:center;gap:10px;display:flex}@media (width<=600px){.desktop-only{display:none!important}.mobile-only{display:flex!important}.header-left>span{text-overflow:ellipsis;white-space:nowrap;max-width:100px;overflow:hidden}}.mobile-only{display:none}.mobile-overflow-btn{color:var(--text-dim);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;justify-content:center;align-items:center;padding:3px 8px;font-size:20px;line-height:1}.mobile-overflow-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.header-overflow{align-items:center;gap:10px;display:flex}.mobile-overlay{z-index:300;animation:fadeIn .15s var(--ease);background:#00000059;position:fixed;inset:0}.mobile-overflow-menu{z-index:301;background:var(--bg-glass);-webkit-backdrop-filter:blur(40px)saturate(1.5);backdrop-filter:blur(40px)saturate(1.5);border:1px solid var(--border);border-radius:var(--radius);min-width:180px;animation:fadeIn .1s var(--ease);flex-direction:column;gap:2px;padding:6px;display:flex;position:absolute;top:50px;right:8px}.overflow-item-btn{width:100%;color:var(--text-primary);cursor:pointer;border-radius:var(--radius-sm);text-align:left;transition:background var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:8px;padding:10px 12px;font-family:inherit;font-size:13px;font-weight:500;display:flex}.overflow-item-btn:hover{background:var(--bg-glass-hover)}.overflow-item-btn svg{flex-shrink:0;width:16px;height:16px}.ctx-pill{border-radius:var(--radius-pill);background:var(--bg-glass);border:1px solid var(--border);height:32px;color:var(--text-dim);font-variant-numeric:tabular-nums;cursor:pointer;transition:all var(--duration) var(--ease);flex-shrink:0;align-items:center;gap:4px;padding:0 10px;font-size:10px;font-weight:600;line-height:1;display:flex}.ctx-pill:hover{background:var(--bg-glass-hover);color:var(--text-primary);border-color:var(--accent)}.ctx-pill-dot{background:var(--accent);border-radius:50%;flex-shrink:0;width:5px;height:5px}.ctx-modal-track{background:var(--bg-glass);border-radius:4px;height:8px;overflow:hidden}.ctx-modal-fill{border-radius:4px;min-width:2px;height:100%;transition:width .3s}.ctx-modal-labels{color:var(--text-dim);justify-content:space-between;font-size:11px;display:flex}.mcp-error{color:var(--error);border-radius:var(--radius-sm);background:#f871711a;border:1px solid #f8717133;margin-bottom:8px;padding:8px 12px;font-size:12px}.mcp-toggle{-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:flex}.mcp-toggle-track{background:var(--bg-glass);border:1px solid var(--border);width:32px;height:18px;transition:all var(--duration) var(--ease);border-radius:9px;display:inline-block;position:relative}.mcp-toggle-track[data-enabled=true]{background:var(--accent);border-color:var(--accent)}.mcp-toggle-thumb{background:var(--text-primary);width:14px;height:14px;transition:transform var(--duration) var(--ease);border-radius:50%;position:absolute;top:1px;left:1px}.mcp-toggle-track[data-enabled=true] .mcp-toggle-thumb{transform:translate(14px)}.mcp-add-btn{background:var(--bg-glass);border:1px solid var(--border);width:24px;height:24px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);border-radius:50%;justify-content:center;align-items:center;font-size:14px;line-height:1;display:flex}.mcp-add-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary);border-color:var(--border-hover)}.mcp-server-list{border-top:1px solid var(--border)}.mcp-server-item{border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--duration) var(--ease);padding:8px 12px}.mcp-server-item:last-child{border-bottom:none}.mcp-server-item:hover{background:var(--bg-glass-hover)}.mcp-server-header{align-items:center;gap:6px;display:flex}.mcp-server-state-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.mcp-server-badge{text-transform:uppercase;letter-spacing:.3px;border-radius:var(--radius-pill);background:var(--bg-glass);color:var(--text-dim);border:1px solid var(--border);padding:1px 5px;font-size:9px;font-weight:700;line-height:1.4}.mcp-server-tools{color:var(--text-dim);flex-shrink:0;margin-left:auto;font-size:10px}.mcp-server-meta{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.mcp-tools-list{border-top:1px solid var(--border);padding:6px 0}.mcp-tools-header{text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);padding:0 0 4px;font-size:9px;font-weight:700}.mcp-tool-row{justify-content:space-between;align-items:center;gap:8px;padding:3px 0;display:flex}.mcp-tool-info{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.mcp-tool-name{color:var(--text-primary);font-size:12px;font-weight:600;font-family:var(--font-mono)}.mcp-tool-fqn{color:var(--text-dim);font-size:10px;font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mcp-tool-desc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.mcp-server-chevron{color:var(--text-dim);flex-shrink:0;width:12px;font-size:10px}.mcp-server-name{color:var(--text-primary);font-size:13px;font-weight:600}.mcp-server-details{padding-top:8px}.mcp-server-actions{align-items:center;gap:6px;display:flex}.mcp-action-btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);padding:4px 10px;font-size:11px}.mcp-action-btn:hover:not(:disabled){background:var(--bg-glass-hover);color:var(--text-primary);border-color:var(--border-hover)}.mcp-action-btn:disabled{opacity:.5;cursor:default}.mcp-action-btn-primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.mcp-action-btn-primary:hover:not(:disabled){opacity:.9}.mcp-action-btn-danger:hover:not(:disabled){color:var(--error);border-color:var(--error)}.mcp-form{border-top:1px solid var(--border);flex-direction:column;gap:8px;padding:8px 12px;display:flex}.mcp-form-section-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);padding-top:4px;font-size:10px;font-weight:700}.mcp-form-row{flex-direction:column;gap:3px;display:flex}.mcp-form-row-inline{flex-direction:row;align-items:center;gap:4px;display:flex}.mcp-form-label{color:var(--text-secondary);font-size:11px;font-weight:600}.mcp-form-input,.mcp-form-select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--input-bg);width:100%;color:var(--text-primary);box-sizing:border-box;outline:none;padding:6px 8px;font-size:12px}.mcp-form-input-half{flex:1;width:auto;min-width:0}.mcp-form-input:focus,.mcp-form-select:focus{border-color:var(--border-bright)}.mcp-form-error{color:var(--error);font-size:11px}.mcp-form-actions{justify-content:flex-end;gap:6px;padding-top:4px;display:flex}.mcp-tool-row-cascade{align-items:center;gap:6px;width:100%;display:flex}.mcp-tristate{border:1px solid var(--border);border-radius:4px;display:inline-flex;overflow:hidden}.mcp-tristate-btn{border:none;border-right:1px solid var(--border);cursor:pointer;color:var(--text-secondary);background:0 0;padding:2px 8px;font-size:10px;transition:background .1s,color .1s}.mcp-tristate-btn:last-child{border-right:none}.mcp-tristate-btn:disabled{cursor:default;opacity:.6}.mcp-tristate-btn-active{color:#fff;font-weight:600}.mcp-add-override-btn{padding:2px 6px;font-size:10px}.mcp-override-form{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.mcp-override-select{max-width:160px;padding:2px 4px;font-size:10px}.sidebar-toggle{color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);transition:all var(--duration) var(--ease);background:0 0;border:none;justify-content:center;align-items:center;padding:6px;font-size:16px;line-height:1;display:flex}.sidebar-toggle:hover{color:var(--text-secondary);background:var(--bg-glass-hover)}.sidebar-toggle:active{opacity:.7}.model-dropdown{position:relative}.model-dropdown-btn{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-md);font-size:12px;font-family:var(--font-mono);color:var(--text-primary);cursor:pointer;transition:all var(--duration) var(--ease);align-items:center;gap:6px;min-width:0;max-width:180px;padding:4px 10px;display:flex}.model-dropdown-btn:hover{background:var(--bg-glass-hover);border-color:var(--border-hover)}.model-dropdown-chevron{opacity:.5;transition:transform var(--duration) var(--ease);flex-shrink:0}.model-dropdown-btn[aria-expanded=true] .model-dropdown-chevron{transform:rotate(180deg)}.model-dropdown-menu{background:var(--bg-solid);border:1px solid var(--border-hover);border-radius:var(--radius-md);z-index:1001;min-width:260px;max-width:calc(100vw - 32px);max-height:360px;animation:dropdownIn .15s var(--ease);padding:4px;position:absolute;top:calc(100% + 4px);right:0;overflow-y:auto}@media (width<=600px){.model-dropdown-menu{border-radius:var(--radius-lg)!important;z-index:600!important;width:auto!important;max-height:60vh!important;position:fixed!important;inset:auto 8px 8px!important}.model-dropdown-btn{padding:10px 12px!important}}@keyframes dropdownIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.model-dropdown-search{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-md);width:100%;color:var(--text-primary);font-size:12px;font-family:var(--font-mono);box-sizing:border-box;outline:none;margin-bottom:4px;padding:8px 12px}.model-dropdown-search:focus{border-color:var(--accent)}.model-dropdown-search::placeholder{color:var(--text-dim)}.model-dropdown-item{border-radius:var(--radius-md);width:100%;font-size:12px;font-family:var(--font-mono);color:var(--text-primary);cursor:pointer;text-align:left;transition:background var(--duration) var(--ease);background:0 0;border:none;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.model-dropdown-item:hover{background:var(--bg-glass-hover)}.model-dropdown-active{background:var(--accent-subtle)!important;color:var(--accent-text)!important}.model-dropdown-item-main{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.model-dropdown-provider{color:var(--text-dim);font-size:11px}.model-dropdown-name{word-break:break-word;flex:1;min-width:0;line-height:1.4}.model-dropdown-item-ctx{color:var(--text-dim);margin-left:8px;font-size:10px}.model-dropdown-empty{text-align:center;color:var(--text-dim);padding:16px;font-family:inherit;font-size:11px}.model-dropdown-list{max-height:288px;padding:4px 0;overflow-y:auto}.model-dropdown-footer{border-top:1px solid var(--border);color:var(--text-dim);font-size:10px;font-family:var(--font-mono);padding:6px 12px}.model-dropdown-warn{color:var(--warning);font-size:10px}.messages-container{scroll-behavior:smooth;scrollbar-width:none;flex-direction:column;flex:1;gap:6px;width:100%;max-width:800px;margin:0 auto;padding:60px 24px 24px;display:flex;overflow-y:auto}.messages-container::-webkit-scrollbar{display:none}.messages-container>*{width:100%}@media (width<=640px){.messages-container{padding:8px 0 1px}}.message-row{align-items:flex-start;gap:8px;width:100%;display:flex}.message-row--entering{animation:msgIn .25s var(--ease)}.message-row.user{flex-direction:row-reverse;align-self:flex-end}.message-row.assistant{align-self:flex-start}.message-row.assistant+.message-row.assistant{margin-top:-12px}.message-bubble{word-wrap:break-word;overflow-wrap:break-word;min-width:0;font-size:16px;line-height:1.3}.message-bubble.user{border-radius:var(--radius-lg);background:var(--user-bubble);color:var(--user-bubble-text);border:1px solid var(--user-bubble-border,var(--border));-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);white-space:pre-wrap;border-bottom-right-radius:6px;max-width:80%;padding:10px 16px;font-weight:500}.message-bubble.assistant{min-width:0;color:var(--text-primary);background:0 0;border:none;flex:1;padding:4px 0}.message-bubble.assistant .md-p{margin-bottom:8px}.message-bubble.assistant .md-p:last-child{margin-bottom:0}.message-bubble.assistant .md-strong{letter-spacing:-.01em;color:var(--text-primary);font-weight:600}.message-bubble.assistant .md-em{color:var(--text-secondary);font-style:italic}.message-bubble.assistant .md-link{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.message-bubble.assistant .md-link:hover{border-color:var(--accent-text)}.message-bubble.assistant .md-ul,.message-bubble.assistant .md-ol{margin:6px 0;padding-left:20px}.message-bubble.assistant .md-li{margin-bottom:3px}.message-bubble.assistant .md-h1,.message-bubble.assistant .md-h2,.message-bubble.assistant .md-h3{color:var(--text-primary);letter-spacing:-.02em;margin:14px 0 6px}.message-bubble.assistant .md-h1{font-size:18px;font-weight:700}.message-bubble.assistant .md-h2{font-size:16px;font-weight:600}.message-bubble.assistant .md-h3{font-size:14px;font-weight:600}.message-bubble.assistant .md-hr{border:none;border-top:1px solid var(--border);margin:12px 0}.message-bubble.assistant .md-blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);margin:8px 0;padding-left:12px;font-style:italic}.message-bubble.assistant .table-wrapper{margin:8px 0}.message-bubble.assistant .md-table{font-size:14px}.assistant-msg-footer{justify-content:flex-start;align-items:center;gap:8px;margin-top:2px;margin-bottom:8px;padding:0;display:flex}.assistant-msg-footer.user{justify-content:flex-end}.assistant-msg-model-header{margin-bottom:4px}.assistant-msg-model{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;text-transform:uppercase;letter-spacing:.04em;font-size:13px;font-weight:600;overflow:hidden}.copy-msg-btn{color:var(--text-dim);border-radius:var(--radius-xs);cursor:pointer;transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:4px;padding:4px 10px;font-family:inherit;font-size:12px;font-weight:500;line-height:1.5;display:inline-flex}.copy-msg-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.copy-msg-btn:active{color:var(--accent-text)}.rewind-btn{margin-left:2px}.tool-result{border-radius:var(--radius);background:var(--tool-bg);border:1px solid var(--tool-border);font-size:13px;font-family:var(--font-mono);line-height:1.4;animation:.25s ease-out toolFadeIn;overflow:hidden}.tool-result summary{cursor:pointer;color:var(--tool-accent-text);-webkit-user-select:none;user-select:none;transition:background var(--duration) var(--ease);padding:8px 12px;font-weight:600}.tool-result summary:hover{background:var(--bg-glass-hover)}.tool-result .tool-result-content{white-space:pre-wrap;word-break:break-word;color:var(--tool-accent-text);padding:0 12px 8px}.markdown-content p{margin-bottom:2px}.markdown-content p:last-child{margin-bottom:0}.markdown-content strong{font-weight:600}.markdown-content em{color:var(--text-secondary);font-style:italic}.markdown-content a{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.markdown-content a:hover{border-color:var(--accent-text)}.markdown-content ul,.markdown-content ol{margin:2px 0;padding-left:16px}.markdown-content li{margin-bottom:0}.markdown-content li>p{margin:0}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4{color:var(--text-primary);letter-spacing:-.02em;margin:6px 0 2px}.markdown-content h1{font-size:15px;font-weight:700}.markdown-content h2{font-size:14px;font-weight:600}.markdown-content h3{font-size:13px;font-weight:600}.markdown-content hr{border:none;border-top:1px solid var(--border);margin:4px 0}.markdown-content blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);margin:2px 0;padding-left:8px;font-style:italic}.markdown-content .table-wrapper{border-radius:var(--radius-md);border:1px solid var(--border);margin:6px 0;overflow-x:auto}.markdown-content table{border-collapse:collapse;width:100%;font-size:12px}.markdown-content th{background:var(--bg-glass-strong);text-transform:uppercase;letter-spacing:.03em;color:var(--text-secondary);border-bottom:1px solid var(--border-hover);white-space:nowrap;padding:6px 10px;font-size:11px;font-weight:600}.markdown-content td{border-bottom:1px solid var(--border);color:var(--text-primary);padding:5px 10px}.markdown-content tr:last-child td{border-bottom:none}.markdown-content code{background:var(--bg-glass-strong);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--accent-text);padding:1px 5px;font-size:.88em}.markdown-content pre:not(.code-block){border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);background:#00000040;margin:4px 0;padding:8px;font-size:12px;line-height:1.4;overflow-x:auto}.markdown-content pre code{font-size:inherit;color:var(--text-primary);background:0 0;border:none;padding:0}.pi-thinking-dots span{font-size:14px;line-height:1;animation:1.4s infinite thinkingDot}.pi-thinking-dots span:nth-child(2){animation-delay:.2s}.pi-thinking-dots span:nth-child(3){animation-delay:.4s}@keyframes thinkingDot{0%,80%,to{opacity:0}40%{opacity:1}}.code-group:hover .code-copy-btn{opacity:1!important}.compaction-notice{border-radius:var(--radius-sm);background:color-mix(in srgb, var(--warning,#fbbf24) 8%, transparent);border:1px solid color-mix(in srgb, var(--warning,#fbbf24) 20%, transparent);animation:msgIn .25s var(--ease);align-items:center;gap:10px;max-width:480px;padding:8px 14px;font-size:13px;line-height:1.4;display:flex}.compaction-notice-icon{flex-shrink:0;font-size:16px}.compaction-notice-body{flex:1;min-width:0}.compaction-notice-title{color:var(--text-primary);font-size:13px;font-weight:600}.compaction-notice-desc{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.compaction-notice-timer{color:var(--text-dim);font-size:10px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;margin-top:1px}.compaction-notice-dots span{color:var(--text-dim);font-size:20px;line-height:1;animation:1.4s infinite thinkingDot}.compaction-notice-dots span:nth-child(2){animation-delay:.2s}.compaction-notice-dots span:nth-child(3){animation-delay:.4s}.message-row.system .compaction-notice{margin:0}.compaction-notice--done{background:color-mix(in srgb, var(--accent) 6%, transparent)!important;border-color:color-mix(in srgb, var(--accent) 25%, transparent)!important}.compaction-notice-header{align-items:center;gap:6px;width:100%;display:flex}.compaction-notice-stats{color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;align-items:center;gap:8px;margin-top:4px;display:flex}.compaction-notice-desc--error{margin-top:4px;color:var(--error,#f87171)!important;white-space:normal!important}.error-banner{border-radius:var(--radius);color:var(--error);cursor:pointer;background:#f871711a;border:1px solid #f8717133;padding:8px 12px;font-size:13px}.welcome{text-align:center;color:var(--text-dim);animation:fadeIn .5s var(--ease);padding:40px 20px}.welcome-icon{opacity:.4;margin-bottom:8px;font-size:32px}.welcome-text{color:var(--text-secondary);margin-bottom:4px;font-size:15px}.welcome-hint{color:var(--text-dim);font-size:13px}.welcome-flap{margin-bottom:18px}.split-flap-text{align-items:center;gap:var(--split-flap-gap,6px);color:var(--split-flap-text-color,var(--flap-text));font-family:var(--font-mono);font-size:var(--split-flap-font-size,52px);letter-spacing:.035em;white-space:pre;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;font-weight:760;line-height:1;display:inline-flex}.split-flap-text__tile{border-radius:var(--split-flap-radius,8px);background:radial-gradient(circle at 50% 0%, #ffffff29, transparent 44%), linear-gradient(180deg, color-mix(in srgb, var(--split-flap-tile-color,var(--flap-tile)) 82%, white), var(--split-flap-tile-color,var(--flap-tile)));perspective:520px;width:.78em;height:1.08em;transform-style:preserve-3d;isolation:isolate;position:relative;overflow:hidden;box-shadow:inset 0 .035em .08em #ffffff14,inset 0 -.05em .1em #00000061,0 .16em .38em #00000047}.split-flap-text__tile:before{content:"";z-index:8;pointer-events:none;background:linear-gradient(90deg,#0000,#ffffff2e 18%,#000000a3 50%,#ffffff24 82%,#0000);width:100%;height:1px;position:absolute;top:calc(50% - .5px);left:0;box-shadow:0 -1px #ffffff14,0 1px #00000080}.split-flap-text__tile:after{content:"";z-index:9;border-radius:inherit;pointer-events:none;border:1px solid #ffffff14;position:absolute;inset:0;box-shadow:inset 0 0 0 1px #0003}.split-flap-text__half,.split-flap-text__flap{background:linear-gradient(180deg, #ffffff12, transparent 34%), var(--split-flap-tile-color,var(--flap-tile));backface-visibility:hidden;width:100%;height:50%;position:absolute;left:0;overflow:hidden}.split-flap-text__half--top,.split-flap-text__flap--front{top:0}.split-flap-text__half--bottom,.split-flap-text__flap--back{background:linear-gradient(0deg, #ffffff0f, transparent 38%), color-mix(in srgb, var(--split-flap-tile-color,var(--flap-tile)) 92%, #000);bottom:0}.split-flap-text__char{width:100%;height:200%;color:var(--split-flap-text-color,var(--flap-text));text-shadow:0 .025em #ffffff29,0 .09em .16em #0000006b;justify-content:center;align-items:center;display:flex;position:absolute;left:0}.split-flap-text__half--top .split-flap-text__char,.split-flap-text__flap--front .split-flap-text__char{top:0}.split-flap-text__half--bottom .split-flap-text__char,.split-flap-text__flap--back .split-flap-text__char{bottom:0}.split-flap-text__flap{z-index:6;will-change:transform, filter;transform-style:preserve-3d}.split-flap-text__flap--front{transform-origin:bottom;animation:split-flap-front var(--split-flap-flip-duration,.12s) cubic-bezier(.23, 1, .32, 1) both}.split-flap-text__flap--back{transform-origin:top;animation:split-flap-back var(--split-flap-flip-duration,.12s) cubic-bezier(.23, 1, .32, 1) both;transform:rotateX(90deg)}@keyframes split-flap-front{0%{filter:brightness(1.08);transform:rotateX(0)}to{filter:brightness(.52);transform:rotateX(-90deg)}}@keyframes split-flap-back{0%,45%{filter:brightness(.58);transform:rotateX(90deg)}to{filter:brightness();transform:rotateX(0)}}@media (prefers-reduced-motion:reduce){.split-flap-text__flap{animation:none!important}}.msg-ref-chip{vertical-align:middle;color:inherit;background:var(--chip-bg,color-mix(in srgb, currentColor 10%, transparent));border:1px solid color-mix(in srgb, currentColor 18%, transparent);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;margin:0 2px;padding:1px 8px;font-size:12px;line-height:1.5;display:inline-flex}.msg-ref-name{color:inherit;font-family:var(--font-mono,ui-monospace, monospace)}.msg-ref-range{color:var(--accent-text,#4dabf7);font-family:var(--font-mono,ui-monospace, monospace)}.msg-ref-ok{border-color:color-mix(in srgb, currentColor 25%, transparent)}.msg-ref-missing{border-color:color-mix(in srgb, var(--danger,#ff5c5c) 55%, transparent);color:var(--danger,#ff5c5c);background:color-mix(in srgb, var(--danger,#ff5c5c) 8%, transparent)}.msg-ref-reason{opacity:.85;font-size:11px;font-style:italic}.ti-chips{color:var(--text-primary);flex-wrap:wrap;gap:6px;display:flex}.ti-chip{color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);border:1px solid color-mix(in srgb, currentColor 18%, transparent);border-radius:999px;align-items:center;gap:6px;max-width:100%;padding:3px 8px;font-size:12px;line-height:1.4;display:inline-flex}.ti-chip-name{text-overflow:ellipsis;white-space:nowrap;max-width:260px;font-family:var(--font-mono,ui-monospace, monospace);overflow:hidden}.ti-chip-range{color:var(--accent-text,#4dabf7);font-family:var(--font-mono,ui-monospace, monospace)}.ti-chip-checking{opacity:.65}.ti-chip-ok{border-color:var(--border-bright)}.ti-chip-missing{color:var(--danger,#ff5c5c);border-color:#ff5c5c8c}.ti-chip-missing .ti-chip-name{color:var(--danger,#ff5c5c)}.ti-chip-x{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;padding:0;display:inline-flex}.ti-chip-x:hover{color:var(--text-primary);background:var(--bg-raised,#80808026)}.ti-area{background:var(--bg-solid);width:100%;padding:0 16px 14px}.ti-container{background:var(--input-bg);border:1px solid var(--border-hover);border-radius:var(--radius-lg);max-width:800px;transition:border-color var(--duration) var(--ease);flex-direction:column;gap:8px;margin:0 auto;padding:12px 16px 10px;display:flex;position:relative}.ti-container:focus-within{border-color:var(--border-bright)}.ti-input{width:100%;color:var(--text-primary);resize:none;scrollbar-width:none;background:0 0;border:none;outline:none;max-height:160px;padding:0;font-family:inherit;font-size:14px;line-height:1.5;overflow-y:auto}.ti-input::-webkit-scrollbar{display:none}.ti-input::placeholder{color:var(--text-dim)}.ti-input:disabled{opacity:.4;cursor:not-allowed}.ti-toolbar{justify-content:space-between;align-items:center;display:flex}.ti-toolbar-left{align-items:center;gap:4px;display:flex}.ti-toolbar-btn{background:var(--bg-glass);border:1px solid var(--border);width:32px;height:32px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.ti-toolbar-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover);border-color:var(--border-hover)}.ti-toolbar-right{align-items:center;gap:4px;display:flex}.ti-toolbar-right .model-dropdown-btn{border-radius:var(--radius-pill);min-width:0;max-width:140px;height:32px;padding:0 10px}.ti-toolbar-right .model-dropdown-btn .model-dropdown-chevron{display:none}.ti-toolbar-right .model-dropdown-btn:hover{background:var(--bg-glass-hover);border-color:var(--border-hover)}.ti-thinking-btn{border-radius:var(--radius-pill);background:var(--bg-glass);border:1px solid var(--border);height:26px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);white-space:nowrap;flex-shrink:0;align-items:center;gap:4px;padding:0 8px;font-size:11px;display:flex}.ti-thinking-btn:hover{color:var(--text-primary);background:var(--bg-glass-hover);border-color:var(--border-hover)}.ti-thinking-label{text-transform:capitalize}.ti-toolbar-right .model-dropdown-menu{animation:dropdownUp .15s var(--ease);top:auto;bottom:calc(100% + 6px)}@keyframes dropdownUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.ti-send-btn{background:var(--text-primary);cursor:pointer;width:32px;height:32px;transition:all var(--duration) var(--ease);-webkit-user-select:none;user-select:none;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex;position:relative}.ti-send-btn.ti-send-btn-stop{background:var(--accent,#e06c75)}.ti-send-btn.ti-send-btn-stop:hover:not(:disabled){filter:brightness(1.15)}@media (width<=600px){.ti-send-btn{width:44px!important;min-width:44px!important;height:44px!important}}.ti-send-btn:hover:not(:disabled){opacity:.85;transform:scale(1.05)}.ti-send-btn:active:not(:disabled){transform:scale(.9)}.ti-send-btn.pulsing{animation:1.4s ease-in-out infinite sendPulse}.ti-send-btn.ti-send-btn-followup-ready{background:var(--accent-subtle,#a78bfa26);border:1.5px solid var(--accent-text,#a78bfa)}.ti-send-btn.ti-send-btn-followup-ready .ti-send-icon{color:var(--accent-text,#a78bfa)}@keyframes sendPulse{0%,to{opacity:.3}50%{opacity:.8}}.ti-send-icon{color:var(--bg-solid);justify-content:center;align-items:center;display:flex}.ti-slash-suggestions{background:var(--bg-solid);border:1px solid var(--border);border-radius:var(--radius-md);z-index:100;margin-bottom:4px;position:absolute;bottom:100%;left:0;right:0;overflow:hidden}.ti-slash-item{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;transition:background var(--duration) var(--ease);background:0 0;border:none;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 12px;font-size:12px;display:flex}.ti-slash-item:hover{background:var(--surface-2)}.ti-slash-item:disabled{opacity:.5;cursor:default}.ti-slash-name{font-weight:600;font-family:var(--font-mono);color:var(--accent)}.ti-slash-desc{color:var(--text-dim);font-size:11px}.steer-tag{letter-spacing:.3px;text-transform:uppercase;color:var(--accent-text);background:var(--accent-subtle);vertical-align:middle;border-radius:3px;margin-right:6px;padding:1px 5px;font-size:10px;font-weight:600;line-height:1.4;display:inline-block}.queued-msgs{border-radius:var(--radius-md);background:var(--bg-frosted);border:1px solid var(--border);flex-direction:column;gap:4px;margin:4px 0 8px;padding:8px 16px;display:flex}.queued-msg-item{color:var(--text-primary);align-items:center;gap:8px;padding:3px 0;font-size:12px;line-height:1.4;display:flex}.queued-badge{text-transform:uppercase;letter-spacing:.3px;border-radius:3px;flex-shrink:0;padding:1px 5px;font-size:10px;font-weight:600;line-height:1.4}.queued-badge.steer{color:var(--accent-text);background:var(--accent-subtle)}.queued-badge.followUp{color:var(--text-dim);background:var(--bg-glass)}.queued-msg-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.settings-btn{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);cursor:pointer;transition:all var(--duration) var(--ease);animation:fadeIn .2s var(--ease);outline:none;padding:8px 16px;font-family:inherit;font-size:12px}.settings-btn:hover{background:var(--bg-glass-hover)}.centered{background:var(--bg-solid);height:100vh;color:var(--text-secondary);justify-content:center;align-items:center;font-family:system-ui,sans-serif;display:flex}.login-form{background:var(--bg-frosted);border-radius:var(--radius-lg);border:1px solid var(--border-hover);width:320px;max-width:90vw;-webkit-backdrop-filter:blur(var(--blur-heavy));backdrop-filter:blur(var(--blur-heavy));flex-direction:column;gap:12px;padding:32px;display:flex}.login-title{color:var(--text-primary);margin:0 0 4px;font-size:20px;font-weight:600}.login-input{border-radius:var(--radius-md);border:1px solid var(--input-border);background:var(--input-bg);color:var(--text-primary);transition:all var(--duration) var(--ease);outline:none;padding:10px 12px;font-family:inherit;font-size:14px}.login-input:focus{border-color:var(--input-focus-border)}.login-input-error{border-color:var(--accent-red,#e06c75)!important}.login-error{color:var(--accent-red,#e06c75);margin:-4px 0 0;font-size:12px;line-height:1.4}.login-btn{border-radius:var(--radius-md);background:var(--accent);color:var(--bg-solid);cursor:pointer;transition:all var(--duration) var(--ease);border:none;padding:10px;font-family:inherit;font-size:14px;font-weight:600}.login-btn:hover{opacity:.9}.login-btn:active{transform:scale(.97)}.tool-badge{border-radius:var(--radius-sm);background:var(--tool-bg);color:var(--tool-accent-text);font-size:12px;font-family:var(--font-mono);margin-bottom:6px;padding:2px 8px;font-weight:600;animation:.2s ease-out toolFadeIn;display:inline-block}.theme-select{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);cursor:pointer;outline:none;padding:6px 10px;font-family:inherit;font-size:12px}.theme-select:focus{border-color:var(--accent)}.settings-overlay{z-index:500;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#00000080;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.settings-panel{background:var(--bg-frosted);-webkit-backdrop-filter:blur(40px)saturate(1.6);backdrop-filter:blur(40px)saturate(1.6);border:1px solid var(--border-hover);border-radius:var(--radius-lg);width:100%;max-width:760px;max-height:80vh;animation:sheetIn .25s var(--ease);flex-direction:column;display:flex;overflow:hidden}@keyframes sheetIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}@media (width<=600px){.settings-overlay{align-items:flex-end;padding:0}.settings-panel{animation:sheetUp .25s var(--ease);border-radius:var(--radius-lg) var(--radius-lg) 0 0!important;max-width:100%!important;max-height:90vh!important}@keyframes sheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.settings-header{padding:14px 16px}.settings-body{padding:12px}.settings-tab{padding:10px 14px;font-size:14px}.settings-close{width:40px;height:40px;font-size:16px}}.settings-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.settings-tabs{flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}.settings-tab{white-space:nowrap;border-radius:var(--radius-sm);color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;padding:6px 12px;font-family:inherit;font-size:13px}.settings-tab:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.settings-tab-active{background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.settings-close{border-radius:var(--radius-md);border:1px solid var(--border);width:32px;height:32px;color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.settings-close:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.settings-error{color:var(--error);background:#f871711a;border-bottom:1px solid #f8717133;padding:8px 16px;font-size:12px}.settings-body{flex:1;padding:16px;overflow-y:auto}.settings-fields{flex-direction:column;gap:16px;display:flex}.settings-field{flex-direction:column;gap:4px;display:flex}.settings-label{color:var(--text-primary);font-size:12px;font-weight:600}.settings-hint{color:var(--text-dim);font-size:11px;line-height:1.5}.settings-field-row{align-items:center;gap:8px;display:flex}.settings-input,.settings-select,.settings-textarea{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-primary);transition:border-color var(--duration) var(--ease);outline:none;flex:1;padding:8px 10px;font-family:inherit;font-size:13px}.settings-input:focus,.settings-select:focus,.settings-textarea:focus{border-color:var(--accent)}.settings-divider{border:none;border-top:1px solid var(--border);margin:16px 0}.settings-section-title{color:var(--accent-text);text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;font-size:12px;font-weight:700}.settings-textarea{font-family:var(--font-mono);resize:vertical;font-size:11px;line-height:1.5}.settings-btn{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--duration) var(--ease);white-space:nowrap;background:0 0;flex-shrink:0;padding:6px 14px;font-family:inherit;font-size:12px}.settings-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.settings-btn-primary{background:var(--accent-subtle);border-color:var(--accent);color:var(--accent-text)}.settings-btn-primary:hover{background:var(--accent-glow)}.settings-btn-primary:disabled{opacity:.5;cursor:not-allowed}.settings-btn-danger{color:var(--error);border-color:#f8717140}.settings-btn-danger:hover{background:#f871711a}.settings-btn-delete{border-radius:var(--radius-sm);color:var(--error);cursor:pointer;white-space:nowrap;background:#f871710f;border:1px solid #f8717133;align-items:center;gap:4px;padding:4px 10px;font-size:11px;line-height:1.4;transition:all .15s;display:inline-flex}.settings-btn-delete:hover:not(:disabled){color:#fca5a5;background:#f8717124;border-color:#f8717166}.settings-btn-delete:disabled{opacity:.35;cursor:not-allowed}.settings-card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-glass);overflow:hidden}.settings-card-header{justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.settings-card-left{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.settings-card-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.settings-card-edit{align-items:center;gap:8px;padding:0 12px 10px;display:flex}.settings-badge{text-transform:uppercase;letter-spacing:.5px;border-radius:var(--radius-pill);padding:2px 8px;font-size:10px;font-weight:600}.settings-badge-on{color:var(--success);background:#34d39926;border:1px solid #34d39940}.settings-badge-off{background:var(--bg-glass);color:var(--text-dim);border:1px solid var(--border)}.settings-badge-custom{border-radius:var(--radius-pill);color:var(--warning);letter-spacing:.3px;background:#fbbf241a;border:1px solid #fbbf2433;align-items:center;padding:1px 7px;font-size:10px;font-weight:600;line-height:1.5;display:inline-flex}.settings-details{border-top:1px solid var(--border)}.settings-summary{color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 12px;font-size:11px}.settings-summary:hover{color:var(--text-secondary)}.settings-model-list{flex-direction:column;gap:2px;margin:0;padding:0 12px 8px 24px;list-style:none;display:flex}.settings-model-item{font-size:11px;font-family:var(--font-mono);justify-content:space-between;display:flex}.settings-raw-json{margin-top:8px}.settings-json-area{flex-direction:column;gap:8px;margin-top:8px;display:flex}.settings-json-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.settings-theme-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.settings-theme-swatch{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-glass);color:var(--text-secondary);text-align:left;cursor:pointer;transition:all var(--duration) var(--ease);justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;font-family:inherit;font-size:13px;display:flex}.settings-theme-swatch:hover{background:var(--bg-glass-hover);border-color:var(--accent)}.settings-theme-active{border-color:var(--accent);background:var(--accent-subtle);color:var(--accent-text);font-weight:600}.settings-theme-variant{color:var(--text-dim);text-transform:capitalize;font-size:10px}.space-y-3>*+*{margin-top:12px}.space-y-2>*+*{margin-top:8px}.space-y-4>*+*{margin-top:16px}.text-green{color:var(--success)}.text-dim{color:var(--text-dim)}.font-mono{font-family:var(--font-mono)}.text-xs{font-size:11px}.text-sm{font-size:14px}.text-11{font-size:11px}.italic{font-style:italic}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chat-scroll{overflow-anchor:auto;scroll-behavior:auto;flex:1;padding:4px 16px 2px;overflow-y:auto}.chat-message-list{flex-direction:column;gap:0;width:100%;max-width:760px;margin:0 auto;display:flex}.assistant-blocks{flex-direction:column;gap:8px;display:flex}.msg-enter{transform-origin:100% 100%;animation:.6s cubic-bezier(.22,1,.36,1) both msg-rise-in}@keyframes msg-rise-in{0%{opacity:0;filter:blur(2px);transform:translateY(28px)scale(.96)}to{opacity:1;filter:blur();transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.msg-enter{animation:none}}.streaming-row{opacity:.92}.streaming-bubble{flex-direction:column;gap:8px;display:flex}.streaming-text{width:100%;min-width:0}.thinking-bubble{align-items:center;gap:8px;padding:6px 0;display:flex}.thinking-running{align-items:center;gap:6px;display:inline-flex}.thinking-code{background:var(--bg-glass);border-radius:var(--radius-sm);font-family:var(--font-mono);padding:1px 6px;font-size:11px}.inline-code{background:var(--bg-glass-strong);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--accent-text);padding:1px 5px;font-size:.88em}.code-block-wrap{border-radius:var(--radius);border:1px solid var(--border);margin:8px 0;position:relative;overflow:hidden}.code-block-header{background:var(--bg-glass-strong);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.code-block-lang{color:var(--text-dim);font-size:11px;font-family:var(--font-mono);text-transform:lowercase}.code-copy-btn{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;padding:2px 8px;font-family:inherit;font-size:11px;position:absolute;top:8px;right:8px}.code-copy-btn:hover{background:var(--bg-glass-hover);color:var(--text-secondary);border-color:var(--border-hover)}.code-block{font-family:var(--font-mono);background:var(--bg-elevated);margin:0;padding:12px 48px 12px 12px;font-size:12px;line-height:1.55;overflow-x:auto}.code-line{white-space:pre;display:block}.md-h1{margin:10px 0 4px;font-size:15px;font-weight:700}.md-h2{margin:8px 0 3px;font-size:14px;font-weight:600}.md-h3{margin:6px 0 2px;font-size:13px;font-weight:600}.md-h4{margin:4px 0 2px;font-size:12px;font-weight:600}.md-p{margin:4px 0;line-height:1.5}.md-ul,.md-ol{margin:4px 0 8px;padding-left:18px}.md-li{margin:2px 0;line-height:1.45}.md-blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);background:var(--bg-glass);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:6px 0;padding:4px 10px;font-style:italic}.md-hr{border:none;border-top:1px solid var(--border);margin:8px 0}.md-link{color:var(--accent-text);border-bottom:1px solid var(--accent-subtle);text-decoration:none}.md-link:hover{border-color:var(--accent-text)}.table-wrapper{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-solid);margin:8px 0;overflow-x:auto}.md-table{border-collapse:collapse;width:100%;font-size:12px}.md-th{background:var(--bg-glass-strong);text-transform:uppercase;letter-spacing:.03em;color:var(--text-secondary);border-bottom:1px solid var(--border-hover);white-space:nowrap;padding:6px 10px;font-size:11px;font-weight:600}.md-td{border-bottom:1px solid var(--border);padding:4px 10px}@keyframes toolPulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes toolNodeIn{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}.tool-timeline{flex-direction:column;margin:4px 0;animation:.2s ease-out toolNodeIn;display:flex}.tool-timeline-track{flex-direction:column;padding-left:20px;display:flex;position:relative}.tool-timeline-track:before{content:"";background:var(--border);width:1px;position:absolute;top:0;bottom:0;left:7px}.tool-timeline-header{cursor:pointer;border-radius:var(--radius-sm);transition:background .15s var(--ease);-webkit-user-select:none;user-select:none;align-items:center;gap:7px;padding:4px 6px 4px 0;list-style:none;display:flex}.tool-timeline-header:hover{background:var(--bg-glass-hover)}.tool-timeline-header::-webkit-details-marker{display:none}.tool-timeline-chevron{color:var(--text-dim);width:10px;transition:transform .15s var(--ease);flex-shrink:0;font-size:9px}.tool-timeline-batch-label{font-family:var(--font-mono);color:var(--text-dim);font-size:11px;font-weight:600}.tool-timeline-batch-preview{font-family:var(--font-mono);color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:10px;overflow:hidden}.tool-timeline-badge{border-radius:var(--radius-pill);letter-spacing:.4px;text-transform:uppercase;color:var(--accent);background:var(--bg-glass);padding:1px 5px;font-size:9px;font-weight:600}.tool-timeline-badge.error{color:var(--error);background:#f871711a}.tool-timeline-node{align-items:flex-start;gap:8px;padding:3px 0;animation:.18s ease-out toolNodeIn;display:flex;position:relative}.tool-timeline-icon{background:var(--bg-glass);border:1px solid var(--border);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;margin-top:1px;font-size:11px;line-height:1;display:flex}.tool-timeline-icon.running{border-color:var(--accent);animation:1.4s ease-in-out infinite toolPulse}.tool-timeline-icon.error{border-color:var(--error)}.tool-timeline-icon.success{border-color:var(--success)}.tool-timeline-icon.just-completed{animation:.5s ease-out toolComplete}@keyframes toolComplete{0%{box-shadow:0 0 0 2px var(--success);transform:scale(1.3)}to{box-shadow:none;transform:scale(1)}}@keyframes toolCompleteError{0%{box-shadow:0 0 0 2px var(--error);transform:scale(1.3)}to{box-shadow:none;transform:scale(1)}}.tool-timeline-icon.just-completed.error{animation-name:toolCompleteError}.tool-running-standalone{background:var(--bg-glass);border:1px solid var(--accent);border-radius:var(--radius);transform-origin:top;padding:4px 10px;animation:.2s ease-out toolNodeIn;overflow:hidden}.tool-running-standalone .tool-timeline-node.running{animation:none}.tool-running-standalone.exiting{pointer-events:none;animation:.32s cubic-bezier(.4,0,.2,1) forwards toolStandaloneOut}@keyframes toolStandaloneOut{0%{opacity:1;max-height:200px;transform:translateY(0)scaleY(1)}40%{opacity:.6;max-height:80px;transform:translateY(-6px)scaleY(.9)}to{opacity:0;max-height:0;padding-top:0;padding-bottom:0;transform:translateY(-12px)scaleY(0)}}.tool-timeline-node.running{border-radius:var(--radius-sm);background:linear-gradient(90deg,#3b82f60f 0%,#0000 60%);margin:0 -4px;padding:3px 4px}.tool-timeline-batch-count{font-family:var(--font-mono);color:var(--text-dim);white-space:nowrap;flex-shrink:0;font-size:10px}.tool-timeline-batch-count .done{color:var(--success)}.tool-timeline-batch-count .pending{color:var(--accent);animation:1.4s ease-in-out infinite toolPulse}@media (prefers-reduced-motion:reduce){.tool-timeline-icon.running{animation:none}.tool-timeline-icon.just-completed{animation:none;transform:none}.tool-timeline-batch-count .pending{animation:none}}.tool-timeline-content{min-width:0;font-family:var(--font-mono);flex:1;font-size:12px;line-height:1.4}.tool-timeline-row{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.tool-timeline-row.clickable{cursor:pointer;border-radius:4px;margin-left:-6px;padding:2px 6px;transition:background .15s}.tool-timeline-row.clickable:hover{background:var(--bg-glass-hover)}.tool-timeline-name{color:var(--text-secondary);font-size:12px;font-weight:600}.tool-timeline-arg{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px;overflow:hidden}.tool-timeline-running{color:var(--accent);font-size:10px;animation:1.4s ease-in-out infinite toolPulse}.tool-timeline-output-preview{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin-top:1px;font-size:11px;overflow:hidden}.tool-timeline-chevron-toggle{color:var(--text-dim);margin-left:auto;font-size:14px;line-height:1;transition:transform .15s}.tool-timeline-chevron-toggle.open{transform:rotate(90deg)}.tool-timeline-details{flex-direction:column;gap:4px;margin-top:5px;display:flex}.tool-timeline-section-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);margin-bottom:2px;font-size:9px}.tool-timeline-code{white-space:pre-wrap;word-break:break-word;color:var(--text-secondary);background:var(--bg-glass);border-radius:var(--radius-sm);border:1px solid var(--border);scroll-behavior:smooth;max-height:80px;padding:6px 8px;font-size:11px;overflow-y:auto}.trail-group{flex-direction:column;margin:4px 0;animation:.2s ease-out toolNodeIn;display:flex}.trail-header{align-items:center;gap:8px;display:flex}.trail-toggle{cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:2px 0;font-family:inherit;display:flex}.trail-toggle:hover .trail-toggle-label{color:var(--text-secondary)}.trail-toggle-icon{color:var(--text-dim);z-index:1;justify-content:center;align-items:center;width:15px;display:inline-flex;position:relative}.trail-toggle-label{font-family:var(--font-mono);color:var(--text-dim);font-size:11px;font-weight:600}.trail-toggle-view{color:var(--text-dim);opacity:.75;font-size:10px;font-family:var(--font-mono)}.trail-running-label{color:var(--accent);font-size:10px;font-family:var(--font-mono);animation:1.4s ease-in-out infinite toolPulse}.trail-show-all{appearance:none;cursor:pointer;color:var(--accent);text-underline-offset:2px;background:0 0;border:none;outline:none;padding:2px 0;font-family:inherit;font-size:10px;text-decoration:underline}.trail-show-all:hover{color:var(--accent-strong,var(--accent-text))}.trail-body{margin-top:2px}.trail-body-full.streaming{min-height:40px}.trail-list{border-left:2px solid var(--border);flex-direction:column;gap:1px;padding-left:10px;display:flex}.trail-body-justify .trail-list{border-left:none;gap:0;padding-left:0}.trail-justification{flex-direction:column;display:flex}.trail-justification-header{cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;min-width:0;color:var(--text-secondary);transition:color .15s var(--ease);background:0 0;border:none;outline:none;align-items:center;gap:8px;padding:6px 0;display:flex}.trail-justification-header:hover{color:var(--text-primary)}.trail-justification-title-wrapper{flex:1;align-items:center;gap:8px;display:flex;overflow:hidden}.trail-justification-icon-box{z-index:1;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex;position:relative}.trail-justification-icon-box svg{width:10px;height:10px;fill:var(--bg-solid);stroke:var(--accent)}.trail-justification-label{color:var(--text-primary);flex-shrink:0;font-family:inherit;font-size:13px;font-weight:500}.trail-justification-preview{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden}.trail-justification-chevron{width:16px;height:16px;color:var(--text-dim);transition:transform .2s var(--ease);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.trail-justification-chevron svg{width:16px;height:16px}.trail-justification.expanded .trail-justification-chevron{transform:rotate(180deg)}.trail-justification-body{color:var(--text-secondary);padding-bottom:6px;padding-left:23px;font-size:13px;line-height:1.6}.trail-justification-body .md-p{margin:0 0 6px}.trail-justification-body .md-p:last-child{margin-bottom:0}.trail-full-prose{color:var(--text-secondary);padding-top:2px;padding-bottom:6px;padding-left:23px;font-size:13px;line-height:1.6}.trail-full-prose .md-p{margin:0 0 6px}.trail-full-prose .md-p:last-child{margin-bottom:0}.trail-chunk{flex-direction:column;display:flex}.trail-chunk-body{opacity:0;visibility:hidden;transition:grid-template-rows .28s var(--ease), opacity .2s var(--ease), visibility 0s .28s;grid-template-rows:0fr;display:grid}.trail-chunk.open .trail-chunk-body{opacity:1;visibility:visible;transition:grid-template-rows .28s var(--ease), opacity .2s var(--ease), visibility 0s 0s;grid-template-rows:1fr}.trail-chunk-content{min-height:0;padding-bottom:4px;padding-left:23px;overflow:hidden}.trail-chunk-content .trail-full-prose{padding-left:0}.trail-chunk{position:relative}.trail-chunk:before{content:"";background:var(--border);z-index:0;width:1px;position:absolute;top:0;bottom:0;left:7px}.trail-chunk:first-child:before{top:14px}.trail-chunk.connects-to-header:before{top:-11px}.trail-chunk:last-child:not(.open):before{height:14px;bottom:auto}.trail-chunk:first-child:last-child:not(.open):before{display:none}.trail-chunk.open .trail-chunk-content>*{animation:trailContentIn .26s var(--ease) both}@keyframes trailContentIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.trail-chunk.open .trail-justification-dot{animation:trail-dot-pop .32s var(--ease)}@keyframes trailDotPop{0%{opacity:.7;transform:scale(1)}45%{opacity:1;transform:scale(2)}to{opacity:.7;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.trail-chunk-body,.trail-chunk.open .trail-chunk-body{transition:none}.trail-chunk.open .trail-chunk-content>*,.trail-chunk.open .trail-justification-dot{animation:none}}.trail-thinking-header{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:4px 0;display:flex}.trail-thinking-label{font-family:var(--font-mono);color:var(--text-dim);font-size:10px;font-weight:600}.trail-thinking-body{color:var(--text-dim);white-space:pre-wrap;padding-bottom:6px;padding-left:23px;font-size:12px}.trail-earlier{appearance:none;cursor:pointer;color:var(--text-dim);background:0 0;border:none;outline:none;align-items:center;gap:6px;padding:4px 0;font-family:inherit;font-size:10px;display:flex}.trail-earlier:hover{color:var(--text-secondary)}.thinking-block{border:1px solid var(--border);border-radius:6px;margin:6px 0;overflow:hidden}.thinking-block summary{cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;color:var(--text-secondary);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:6px 10px;font-size:12px;list-style:none;transition:background .15s;display:flex}.thinking-block summary::-webkit-details-marker{display:none}.thinking-block summary:hover{background:var(--bg-glass-hover)}.thinking-block[open] .thinking-block-chevron{transform:rotate(90deg)}.thinking-block-chevron{color:var(--text-dim);text-align:center;flex-shrink:0;width:12px;font-size:8px;transition:transform .15s}.thinking-block-label{font-weight:500}.thinking-block-content{white-space:pre-wrap;word-break:break-word;color:var(--text-dim);border-top:1px solid var(--border);background:var(--bg-glass);padding:8px 10px;font-size:13px;font-style:italic;line-height:1.65}.tool-badge{color:var(--accent);background:var(--bg-glass);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.5px;padding:1px 5px;font-size:9px}.tool-badge-error{color:var(--error);background:#f871711a}.session-children{border-left:1px solid var(--border-color);margin-top:1px;margin-bottom:1px;margin-left:6px;padding-left:12px}.session-worker-item{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-secondary);transition:background-color var(--duration) var(--ease), color var(--duration) var(--ease);align-items:center;gap:8px;padding:6px 10px 6px 28px;font-size:13px;display:flex;position:relative}.session-worker-item:hover{background:var(--hover-bg)}.session-worker-item.active{background:var(--active-bg);color:var(--accent-text)}.session-worker-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.session-worker-dot.active{animation:1.5s ease-in-out infinite pulsate-dot}.session-worker-dot.idle{background:#56b6c2}.session-worker-dot.streaming{background:#98c379}@keyframes pulsate-dot{0%,to{opacity:.4}50%{opacity:.9}}.session-worker-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.scope-picker-section{flex-direction:column;max-height:280px;display:flex;overflow:hidden}.scope-model-list{flex-direction:column;flex:1;gap:1px;padding-right:4px;display:flex;overflow-y:auto}.search-match-row:hover{background:var(--accent-subtle);color:var(--text-primary)!important}.file-explorer-resize-handle:hover{background:var(--accent-bg);opacity:.4}.file-tree-row{border-radius:var(--radius-xs);transition:background .1s}.file-tree-row:hover{background:var(--accent-subtle)}.file-tree-row-active{background:var(--accent-bg);opacity:.85}.context-menu-item:hover{background:var(--accent-subtle);color:var(--text-primary)!important}.context-menu-item:active{background:var(--accent-bg)}.file-row-actions{transition:opacity .1s;opacity:0!important}.file-tree-row:hover .file-row-actions{opacity:.7!important}.file-tree-row:hover .file-row-actions button:hover{opacity:1!important}.viewer-resize-handle:hover,.viewer-resize-handle:active{opacity:.35;background:var(--accent-bg)!important}.viewer-tab-close:hover{background:var(--bg-glass);opacity:1!important}.main-content-row,.chat-column{scrollbar-width:thin}@media (width<=600px){.file-explorer-panel{border-left:none!important;border-top:1px solid var(--border)!important;width:100%!important;min-width:0!important;max-width:100%!important;top:50px!important}.file-explorer-resize-handle{display:none!important}.fe-tab-bar button{padding:12px 16px!important;font-size:14px!important}}.fe-tab-btn{color:var(--text-dim);cursor:pointer;transition:color var(--duration) var(--ease), border-color var(--duration) var(--ease), background var(--duration) var(--ease);border-radius:var(--radius-xs) var(--radius-xs) 0 0;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:5px;padding:8px 10px;font-family:inherit;font-size:12px;font-weight:500;display:inline-flex}.fe-tab-btn:hover{color:var(--text-secondary);background:var(--bg-glass-hover)}.fe-tab-btn.active{color:var(--accent-text);border-bottom-color:var(--accent);background:0 0}.fe-tab-label{display:none}@media (width>=400px){.fe-tab-label{display:inline}}.fe-tab-close{width:26px;height:26px;color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.fe-tab-close:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.fe-toolbar-btn{width:26px;height:26px;color:var(--text-dim);cursor:pointer;border-radius:var(--radius-xs);transition:color var(--duration) var(--ease), background var(--duration) var(--ease);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.fe-toolbar-btn:hover:not(:disabled){color:var(--text-primary);background:var(--bg-glass-hover)}.fe-toolbar-btn:disabled{opacity:.35;cursor:default}.git-remote-group{border:1px solid var(--border);border-radius:var(--radius-sm);display:flex;overflow:hidden}.git-remote-group-btn{border:none;border-right:1px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:background var(--duration) var(--ease), color var(--duration) var(--ease);background:0 0;flex:1;justify-content:center;align-items:center;padding:7px 6px;font-family:inherit;font-size:12px;font-weight:500;display:inline-flex}.git-remote-group-btn:last-child{border-right:none}.git-remote-group-btn:hover:not(:disabled){background:var(--bg-glass-hover);color:var(--text-primary)}.git-remote-group-btn:disabled{opacity:.4;cursor:default}.git-action-btn{cursor:pointer;border-radius:var(--radius-sm);transition:background var(--duration) var(--ease), color var(--duration) var(--ease);background:0 0;border:none;justify-content:center;align-items:center;font-family:inherit;line-height:1;display:inline-flex}.git-file-action-btn{color:var(--accent-text);background:var(--accent-subtle);border:1px solid var(--border-bright);border-radius:var(--radius-sm);min-width:52px;padding:5px 10px;font-size:12px;font-weight:600}.git-file-action-btn:hover{background:var(--bg-glass-active)}.git-revert-btn{color:var(--text-dim);min-width:32px;padding:5px 8px;font-size:12px}.git-revert-btn:hover{color:var(--error);background:#f871711f}.git-revert-btn.pending{color:var(--error);background:#f871711f;font-weight:600}.git-group-action-btn{color:var(--accent-text);border:1px solid var(--border-bright);border-radius:var(--radius-sm);background:0 0;padding:4px 10px;font-size:11px;font-weight:600}.git-group-action-btn:hover{background:var(--accent-subtle)}.git-section-toggle{letter-spacing:.04em;text-transform:uppercase;width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;transition:background var(--duration) var(--ease), color var(--duration) var(--ease);background:0 0;border:none;justify-content:space-between;align-items:center;padding:11px 14px;font-size:12px;font-weight:700;display:flex}.git-section-toggle:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.git-section-chevron{opacity:.6;transition:transform .2s var(--ease);font-size:14px}.git-section-chevron.open{transform:rotate(180deg)}.git-refresh-btn{color:var(--text-dim);border-radius:var(--radius-sm);padding:6px 8px;font-size:15px}.git-refresh-btn:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.git-commit-btn{border-radius:var(--radius-sm);border:1px solid var(--border);transition:all var(--duration) var(--ease);padding:8px 18px;font-size:13px;font-weight:600}.git-commit-btn.ready{background:var(--accent-bg);color:var(--accent-text);border-color:var(--accent-text)}.git-commit-btn.disabled{color:var(--text-dim);cursor:default;background:0 0}.git-try-btn{border:1px solid var(--border-bright);border-radius:var(--radius-sm);color:var(--accent-text);cursor:pointer;white-space:nowrap;transition:background var(--duration) var(--ease);background:0 0;padding:3px 9px;font-size:11px}.git-try-btn:hover:not(:disabled){background:var(--accent-subtle)}.git-try-btn:disabled{opacity:.4;cursor:default}.git-file-row{border-bottom:1px solid var(--border);align-items:center;gap:6px;padding:7px 12px;font-size:12px;display:flex}@media (width<=600px){.git-file-row{gap:8px;padding:9px 12px}.git-file-action-btn{min-width:60px;padding:6px 12px;font-size:13px}.git-revert-btn{min-width:36px;padding:6px 10px;font-size:13px}.git-remote-group-btn{padding:12px 6px;font-size:14px}.git-section-toggle{padding:13px 14px;font-size:13px}.git-commit-btn{padding:10px 20px;font-size:14px}}.session-search-input{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-glass);width:100%;color:var(--text-primary);box-sizing:border-box;transition:border-color var(--duration) var(--ease);appearance:none;outline:none;padding:6px 10px;font-family:inherit;font-size:12px}.session-search-input:focus{border-color:var(--border-bright);background:var(--bg-glass-hover)}.session-search-input::placeholder{color:var(--text-dim)}.session-search-input::-webkit-search-cancel-button{appearance:none;background:var(--text-dim);cursor:pointer;width:12px;height:12px;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 1l10 10M11 1L1 11' stroke='currentColor' stroke-width='2'/%3E%3C/svg%3E") 50% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 1l10 10M11 1L1 11' stroke='currentColor' stroke-width='2'/%3E%3C/svg%3E") 50% no-repeat}.session-show-more-btn{text-align:left;width:100%;color:var(--accent-text);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--duration) var(--ease), color var(--duration) var(--ease);opacity:.75;background:0 0;border:none;padding:6px 12px;font-family:inherit;font-size:11px;font-weight:600;display:block}.session-show-more-btn:hover{background:var(--bg-glass-hover);opacity:1}@media (width<=600px){.session-search-input{padding:6px 10px;font-size:13px}.session-show-more-btn{padding:8px 12px;font-size:12px}}.ti-image-preview-row{flex-wrap:wrap;gap:6px;padding:6px 12px 0;display:flex}.ti-image-preview-item{border-radius:var(--radius-sm);border:1px solid var(--border);width:64px;height:64px;animation:fadeIn .15s var(--ease);flex-shrink:0;position:relative;overflow:hidden}.ti-image-thumb{object-fit:cover;width:100%;height:100%;display:block}.ti-image-remove{color:#fff;cursor:pointer;opacity:0;width:18px;height:18px;transition:opacity .12s var(--ease);background:#0000008c;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:2px;right:2px}.ti-image-preview-item:hover .ti-image-remove{opacity:1}.user-images-row{flex-wrap:wrap;gap:6px;margin-bottom:6px;display:flex}.user-image-thumb{border-radius:var(--radius-sm);border:1px solid var(--border);object-fit:contain;background:var(--bg-elevated);max-width:100%;max-height:200px}.ti-toolbar-btn:disabled{opacity:.35;cursor:default}.sidebar-mobile-actions{flex-direction:column;gap:4px;margin-top:16px;padding-top:8px;display:flex}.sidebar-divider{background:var(--border);height:1px;margin:4px 0}.toast-overlay{z-index:500;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#00000080;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.toast-card{background:var(--bg-frosted);-webkit-backdrop-filter:blur(40px)saturate(1.6);backdrop-filter:blur(40px)saturate(1.6);border:1px solid var(--border-hover);border-radius:var(--radius-lg);flex-direction:column;width:100%;max-width:640px;max-height:70vh;display:flex;overflow:hidden}.toast-card-enter{animation:sheetIn .25s var(--ease)}.toast-card-exit{animation:sheetOut .2s var(--ease) forwards}@keyframes sheetOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.94)}}.toast-card-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.toast-card-title{color:var(--text-primary);align-items:center;font-size:13px;font-weight:600;display:flex}.toast-card-close{border-radius:var(--radius-md);border:1px solid var(--border);width:32px;height:32px;color:var(--text-dim);cursor:pointer;transition:all var(--duration) var(--ease);background:0 0;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.toast-card-close:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.toast-card-body{flex:1;padding:16px;overflow-y:auto}.toast-card-content{font-family:var(--font-mono);color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;margin:0;font-size:12px;line-height:1.6}@media (width<=600px){.toast-overlay{align-items:flex-end;padding:0}.toast-card{border-radius:var(--radius-lg) var(--radius-lg) 0 0!important;max-width:100%!important;max-height:90vh!important}.toast-card-enter{animation:sheetUp .25s var(--ease)}.toast-card-exit{animation:sheetDown .2s var(--ease) forwards}@keyframes sheetDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.toast-card-header{padding:14px 16px}.toast-card-body{padding:12px}.toast-card-close{width:40px;height:40px;font-size:16px}}.sidebar-mobile-action-btn{width:100%;color:var(--text-primary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--duration) var(--ease);background:0 0;border:none;align-items:center;gap:8px;padding:12px 14px;font-family:inherit;font-size:14px;font-weight:500;display:flex}.sidebar-mobile-action-btn:hover{background:var(--bg-glass-hover)}.sidebar-mobile-action-btn.sign-out{color:var(--text-secondary)}.modal-overlay{z-index:50;background:#0000008c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal-dialog{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-solid);width:100%;max-width:28rem}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.modal-title{color:var(--text-primary);font-size:13px;font-weight:600}.modal-close-btn{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;transition:all .15s;display:flex}.modal-close-btn:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.modal-body{padding:12px 14px}.confirm-message{color:var(--text-secondary);margin:0;font-size:12px;line-height:1.5}.confirm-footer{justify-content:flex-end;gap:8px;padding-top:8px;display:flex}.confirm-btn-cancel{border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;background:0 0;align-items:center;padding:6px 14px;font-size:12px;transition:all .15s;display:inline-flex}.confirm-btn-cancel:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.confirm-btn-primary{border-radius:var(--radius-sm);background:var(--accent-text);color:var(--bg-solid);cursor:pointer;border:none;align-items:center;padding:6px 14px;font-size:12px;font-weight:600;transition:all .15s;display:inline-flex}.confirm-btn-primary:hover{opacity:.9}.confirm-btn-danger{border-radius:var(--radius-sm);background:var(--error);color:#fff;cursor:pointer;border:none;align-items:center;padding:6px 14px;font-size:12px;font-weight:600;transition:all .15s;display:inline-flex}.confirm-btn-danger:hover{background:#ef4444}.prompt-form{flex-direction:column;gap:10px;display:flex}.prompt-label{display:block}.prompt-label-text{color:var(--text-secondary);margin-bottom:6px;font-size:11px;display:block}.prompt-input{border-radius:var(--radius-sm);border:1px solid var(--input-border);background:var(--input-bg);width:100%;color:var(--text-primary);outline:none;padding:8px 10px;font-family:inherit;font-size:13px;transition:border-color .15s}.prompt-input:focus{border-color:var(--input-focus-border)}.repl-sandbox{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-glass);margin:4px 0;overflow:hidden}.repl-sandbox-header{background:var(--bg-glass-strong);border-bottom:1px solid var(--border);color:var(--text-primary);align-items:center;gap:6px;padding:8px 10px;font-size:12px;font-weight:600;display:flex}.repl-sandbox-icon{font-size:13px;line-height:1}.repl-sandbox-title{flex:1}.repl-sandbox-toggle{color:var(--accent-text);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;gap:4px;padding:4px 10px;font-size:11px;font-weight:500;display:inline-flex}.repl-sandbox-toggle:hover{opacity:.8}.repl-sandbox-code-block{background:var(--bg-solid);border-top:1px solid var(--border);max-height:300px;color:var(--text-primary);margin:0;padding:8px 12px;font-size:12px;line-height:1.5;overflow:auto}.repl-sandbox-output{border-top:1px solid var(--border);padding:6px 10px}.repl-sandbox-output.error{background:rgba(var(--error-rgb,220, 50, 50), .05)}.repl-sandbox-output-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-tertiary);margin-bottom:4px;font-size:10px;font-weight:600}.repl-sandbox-output-text{white-space:pre-wrap;word-break:break-word;max-height:200px;color:var(--text-secondary);margin:0;font-size:12px;line-height:1.4;overflow-y:auto}.repl-sandbox-run-btn{color:#fff;background:var(--accent-bg,#4f6af5);cursor:pointer;border:none;justify-content:center;align-items:center;gap:4px;width:100%;padding:6px 10px;font-size:12px;font-weight:500;transition:opacity .15s;display:flex}.repl-sandbox-run-btn:hover:not(:disabled){opacity:.85}.repl-sandbox-run-btn:disabled{opacity:.6;cursor:not-allowed}.repl-sandbox-console{background:var(--bg-solid);border-radius:4px;max-height:200px;font-size:12px;line-height:1.4;overflow-y:auto}.repl-sandbox-console-line{border-bottom:1px solid var(--border);gap:6px;padding:2px 8px;display:flex}.repl-sandbox-console-line:last-child{border-bottom:none}.repl-sandbox-console-line.error{background:rgba(var(--error-rgb,220, 50, 50), .08)}.repl-sandbox-console-line.warn{background:rgba(var(--warn-rgb,220, 180, 50), .08)}.repl-sandbox-console-method{color:var(--text-tertiary);text-transform:uppercase;flex-shrink:0;min-width:36px;font-size:10px;font-weight:600}.repl-sandbox-console-text{color:var(--text-primary);word-break:break-word}.repl-sandbox-return{background:var(--bg-solid);border-radius:4px;gap:6px;margin-top:4px;padding:4px 8px;display:flex}.repl-sandbox-return-value{white-space:pre-wrap;word-break:break-word;color:var(--text-primary);margin:0;font-size:12px}.repl-sandbox-error-block{background:rgba(var(--error-rgb,220, 50, 50), .08);border:1px solid rgba(var(--error-rgb,220, 50, 50), .2);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;border-radius:4px;margin:4px 8px 8px;padding:8px;font-size:12px;line-height:1.4;overflow-x:auto}
|