pi-kot 0.1.38 → 0.1.39

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.
Files changed (114) hide show
  1. package/README.md +68 -104
  2. package/dist/client/assets/index-B959AkDe.css +1 -0
  3. package/dist/client/assets/index-BH5vWV2p.js +192 -0
  4. package/dist/client/assets/index-BH5vWV2p.js.map +1 -0
  5. package/dist/client/assets/{vendor-icons-B8pSAnO8.js → vendor-icons-xTgSApeH.js} +2 -2
  6. package/dist/client/assets/vendor-icons-xTgSApeH.js.map +1 -0
  7. package/dist/client/assets/{vendor-markdown-BHwes4Q7.js → vendor-markdown-DUXj0nma.js} +2 -2
  8. package/dist/client/assets/{vendor-markdown-BHwes4Q7.js.map → vendor-markdown-DUXj0nma.js.map} +1 -1
  9. package/dist/client/assets/{vendor-prism-ChBCet0U.js → vendor-prism-tzddbd4Y.js} +2 -2
  10. package/dist/client/assets/{vendor-prism-ChBCet0U.js.map → vendor-prism-tzddbd4Y.js.map} +1 -1
  11. package/dist/client/index.html +5 -5
  12. package/dist/server/ask-user-question/plan-review-registry.d.ts +49 -0
  13. package/dist/server/ask-user-question/plan-review-registry.d.ts.map +1 -0
  14. package/dist/server/ask-user-question/plan-review-registry.js +179 -0
  15. package/dist/server/ask-user-question/plan-review-registry.js.map +1 -0
  16. package/dist/server/ask-user-question/plannotator-registry.d.ts +49 -0
  17. package/dist/server/ask-user-question/plannotator-registry.d.ts.map +1 -0
  18. package/dist/server/ask-user-question/plannotator-registry.js +179 -0
  19. package/dist/server/ask-user-question/plannotator-registry.js.map +1 -0
  20. package/dist/server/ask-user-question/plannotator-submit-plan-tool.d.ts +6 -0
  21. package/dist/server/ask-user-question/plannotator-submit-plan-tool.d.ts.map +1 -0
  22. package/dist/server/ask-user-question/plannotator-submit-plan-tool.js +124 -0
  23. package/dist/server/ask-user-question/plannotator-submit-plan-tool.js.map +1 -0
  24. package/dist/server/ask-user-question/plannotator-submit-plan.test.d.ts +2 -0
  25. package/dist/server/ask-user-question/plannotator-submit-plan.test.d.ts.map +1 -0
  26. package/dist/server/ask-user-question/plannotator-submit-plan.test.js +62 -0
  27. package/dist/server/ask-user-question/plannotator-submit-plan.test.js.map +1 -0
  28. package/dist/server/ask-user-question/submit-plan-tool.d.ts +4 -0
  29. package/dist/server/ask-user-question/submit-plan-tool.d.ts.map +1 -0
  30. package/dist/server/ask-user-question/submit-plan-tool.js +120 -0
  31. package/dist/server/ask-user-question/submit-plan-tool.js.map +1 -0
  32. package/dist/server/ask-user-question/submit-plan.test.d.ts +2 -0
  33. package/dist/server/ask-user-question/submit-plan.test.d.ts.map +1 -0
  34. package/dist/server/ask-user-question/submit-plan.test.js +62 -0
  35. package/dist/server/ask-user-question/submit-plan.test.js.map +1 -0
  36. package/dist/server/event-stream.d.ts +8 -0
  37. package/dist/server/event-stream.d.ts.map +1 -1
  38. package/dist/server/event-stream.js +81 -0
  39. package/dist/server/event-stream.js.map +1 -1
  40. package/dist/server/extension-manager.d.ts.map +1 -1
  41. package/dist/server/extension-manager.js +0 -10
  42. package/dist/server/extension-manager.js.map +1 -1
  43. package/dist/server/extension-ui-bridge.d.ts +6 -0
  44. package/dist/server/extension-ui-bridge.d.ts.map +1 -1
  45. package/dist/server/extension-ui-bridge.js +65 -4
  46. package/dist/server/extension-ui-bridge.js.map +1 -1
  47. package/dist/server/extension-ui-bridge.test.d.ts +2 -0
  48. package/dist/server/extension-ui-bridge.test.d.ts.map +1 -0
  49. package/dist/server/extension-ui-bridge.test.js +40 -0
  50. package/dist/server/extension-ui-bridge.test.js.map +1 -0
  51. package/dist/server/index.d.ts.map +1 -1
  52. package/dist/server/index.js +17 -0
  53. package/dist/server/index.js.map +1 -1
  54. package/dist/server/path-refs.d.ts +1 -0
  55. package/dist/server/path-refs.d.ts.map +1 -1
  56. package/dist/server/path-refs.js +29 -2
  57. package/dist/server/path-refs.js.map +1 -1
  58. package/dist/server/path-refs.test.js +37 -0
  59. package/dist/server/path-refs.test.js.map +1 -1
  60. package/dist/server/plan-mode-extension.d.ts +10 -0
  61. package/dist/server/plan-mode-extension.d.ts.map +1 -0
  62. package/dist/server/plan-mode-extension.js +80 -0
  63. package/dist/server/plan-mode-extension.js.map +1 -0
  64. package/dist/server/plan-mode-extension.test.d.ts +2 -0
  65. package/dist/server/plan-mode-extension.test.d.ts.map +1 -0
  66. package/dist/server/plan-mode-extension.test.js +99 -0
  67. package/dist/server/plan-mode-extension.test.js.map +1 -0
  68. package/dist/server/routes/artifacts.d.ts +10 -0
  69. package/dist/server/routes/artifacts.d.ts.map +1 -1
  70. package/dist/server/routes/artifacts.js +102 -73
  71. package/dist/server/routes/artifacts.js.map +1 -1
  72. package/dist/server/routes/artifacts.test.d.ts +2 -0
  73. package/dist/server/routes/artifacts.test.d.ts.map +1 -0
  74. package/dist/server/routes/artifacts.test.js +144 -0
  75. package/dist/server/routes/artifacts.test.js.map +1 -0
  76. package/dist/server/routes/auth.d.ts.map +1 -1
  77. package/dist/server/routes/auth.js +17 -4
  78. package/dist/server/routes/auth.js.map +1 -1
  79. package/dist/server/routes/plan-review.d.ts +3 -0
  80. package/dist/server/routes/plan-review.d.ts.map +1 -0
  81. package/dist/server/routes/plan-review.js +149 -0
  82. package/dist/server/routes/plan-review.js.map +1 -0
  83. package/dist/server/routes/plan-review.test.d.ts +2 -0
  84. package/dist/server/routes/plan-review.test.d.ts.map +1 -0
  85. package/dist/server/routes/plan-review.test.js +68 -0
  86. package/dist/server/routes/plan-review.test.js.map +1 -0
  87. package/dist/server/routes/skills.d.ts.map +1 -1
  88. package/dist/server/routes/skills.js +52 -3
  89. package/dist/server/routes/skills.js.map +1 -1
  90. package/dist/server/session-store.d.ts +2 -0
  91. package/dist/server/session-store.d.ts.map +1 -1
  92. package/dist/server/session-store.js +21 -1
  93. package/dist/server/session-store.js.map +1 -1
  94. package/dist/server/skill-policy.d.ts +10 -3
  95. package/dist/server/skill-policy.d.ts.map +1 -1
  96. package/dist/server/skill-policy.js +31 -6
  97. package/dist/server/skill-policy.js.map +1 -1
  98. package/dist/server/skill-policy.test.d.ts +2 -0
  99. package/dist/server/skill-policy.test.d.ts.map +1 -0
  100. package/dist/server/skill-policy.test.js +102 -0
  101. package/dist/server/skill-policy.test.js.map +1 -0
  102. package/dist/server/ui-settings-store.d.ts +0 -2
  103. package/dist/server/ui-settings-store.d.ts.map +1 -1
  104. package/dist/server/ui-settings-store.js +1 -5
  105. package/dist/server/ui-settings-store.js.map +1 -1
  106. package/package.json +4 -4
  107. package/dist/client/assets/index-DczdsIBb.css +0 -1
  108. package/dist/client/assets/index-DsAokEBF.js +0 -191
  109. package/dist/client/assets/index-DsAokEBF.js.map +0 -1
  110. package/dist/client/assets/vendor-icons-B8pSAnO8.js.map +0 -1
  111. package/dist/server/file-watcher.d.ts +0 -16
  112. package/dist/server/file-watcher.d.ts.map +0 -1
  113. package/dist/server/file-watcher.js +0 -84
  114. package/dist/server/file-watcher.js.map +0 -1
package/README.md CHANGED
@@ -24,11 +24,13 @@ This project was built out of **love and curiosity**.
24
24
 
25
25
  | Feature | Description |
26
26
  | --- | --- |
27
- | **💬 Chat** | Full agent conversation with streaming, markdown rendering, code blocks with syntax highlighting, and diff views — no intermediate adapter, SDK types consumed directly |
27
+ | **💬 Chat** | Full agent conversation with streaming, markdown rendering, code blocks with syntax highlighting, diff views, and KaTeX math — no intermediate adapter, SDK types consumed directly |
28
+ | **🗂️ Trail / Tool Grouping** | Consecutive tool calls collapse into a single **Trail** card. In-between agent reasoning appears as collapsible **Justification** steps with a chain-of-thought view that follows the agent live |
29
+ | **🌐 Internationalization** | Full multi-language support (**English** & **简体中文 / Simplified Chinese**), auto-detected from browser locale or configurable in Settings |
28
30
  | **🖥️ 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 |
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 |
31
+ | **📁 File Explorer** | Browse, read, edit, and manage files in your project workspace with auto-refresh on agent edits, folder drag-and-drop uploads, drag-to-move, and ZIP downloads |
30
32
  | **🔧 MCP Support** | Add, configure, and toggle MCP servers with a full settings UI |
31
- | **💾 Persistent UI Prefs** | Theme, sticky header, token usage toggle, and image compression — saved **server-side** in `~/.pi/agent/ui-settings.json`. Survives browser cache clears and device switches |
33
+ | **💾 Persistent UI Prefs** | Theme, language, sticky header, token usage toggle, image compression, trail view — saved **server-side** in `~/.pi/agent/ui-settings.json`. Survives browser cache clears and device switches |
32
34
  | **🧩 Orchestration** | Multi-agent workflows — supervise sub-agents, delegate tasks, inspect results |
33
35
  | **🔐 Auth** | Password-based login, API key support, JWT sessions |
34
36
  | **📱 Mobile-friendly** | PWA-ready, adaptive layout, touch gestures, virtual keyboard support |
@@ -37,6 +39,8 @@ This project was built out of **love and curiosity**.
37
39
  | **🔌 Tunnel** | Built-in tunnel helper UI for exposing local pi-kot traffic via supported providers, with install checks, diagnostics, and one-click start/stop |
38
40
  | **📦 Extensions** | Discover and install pi extensions from the UI — some features only appear after installing the right extension |
39
41
  | **🎨 Artifacts** | Agent-created HTML, SVG, Mermaid diagrams, and other files render inline in chat via sandboxed previews |
42
+ | **📎 Turn File Chips** | Files modified/created during each turn are summarized in clickable chips below the assistant message with diff previews |
43
+ | **✈️ Fly-to-Top Anchor** | Smooth prompt anchoring that flies your message to the top upon submit, keeping streaming responses comfortably in focus |
40
44
 
41
45
  ---
42
46
 
@@ -100,6 +104,57 @@ All flags also work as environment variables (`PORT`, `HOST`, `UI_PASSWORD`, `AP
100
104
 
101
105
  ---
102
106
 
107
+ ## Trail — Grouped Tool Display & Chain-of-Thought
108
+
109
+ When the agent executes consecutive tool calls or intersperses text between actions, pi-kot structures them into a clean **Trail**:
110
+
111
+ - **Auto (Justify)**: Collapses reasoning steps into preview rows. The newest step automatically stays expanded while the agent is live so you can follow its train of thought in real-time.
112
+ - **Expand All**: Expands all tools, justifications, and thinking blocks.
113
+ - **Consecutive Tool Grouping**: Identical consecutive actions (like reading multiple files) are automatically bundled (e.g. `8 × Read`) to avoid visual noise while remaining interactive.
114
+
115
+ ---
116
+
117
+ ## 📋 Native Plan Mode & Review Panel
118
+
119
+ pi-kot includes a 100% native, lightweight Plan Mode built directly into the agent lifecycle — no third-party extensions required:
120
+
121
+ - **Zero Token Overhead When Inactive**: Inactive turns consume **0 extra tokens**.
122
+ - **Dynamic In-Process Guardrails**: When toggled on, an in-process interceptor restricts the agent to exploring the codebase and drafting markdown plans (e.g. `PLAN.md`). Modifying code files is safely blocked until user approval.
123
+ - **Side Panel Review**: The agent pauses and submits its plan via `submit_plan`. Review the proposal in a side panel with rendered markdown, edit directly, approve with implementation notes, or request revisions.
124
+ - **Seamless Approval Flow**: Approving automatically transitions out of plan mode, allowing the agent to proceed with code modifications without any extra manual steps.
125
+ - **Toggle Anywhere**: Enable or exit Plan Mode anytime via the clipboard icon in the chat input, the banner above the prompt box, or the `/plan` slash command.
126
+
127
+ ---
128
+
129
+ ## Slash Commands
130
+
131
+ Type `/` in the chat input to access built-in and extension commands. Slash commands support arguments:
132
+
133
+ ```
134
+ /vision config provider openai
135
+ /vision show
136
+ /vision on
137
+ /compact
138
+ /compact with summary
139
+ /reload
140
+ /abort
141
+ ```
142
+
143
+ The dropdown stays visible while typing arguments, and arguments are forwarded directly to the target extension or command handler.
144
+
145
+ ---
146
+
147
+ ## 🌐 Internationalization (i18n)
148
+
149
+ pi-kot supports multiple languages out of the box:
150
+
151
+ - **English** (`en`)
152
+ - **简体中文** (`zh-CN` / Simplified Chinese)
153
+
154
+ Language is automatically detected from your browser settings and can be changed in **Settings → Appearance → Language**.
155
+
156
+ ---
157
+
103
158
  ## Terminal Touch Gestures
104
159
 
105
160
  pi-kot's terminal supports mobile touch gestures inspired by Termius:
@@ -121,17 +176,16 @@ Some features only appear **after** installing the corresponding extension. Head
121
176
  | --- | --- | --- |
122
177
  | **pi-web-access** 🌐 | `npm:pi-web-access` | Web search, content extraction, API interaction tools for the agent |
123
178
  | **pi-playwright** 🎭 | `npm:pi-playwright` | Browser automation — the agent can interact with real web UI |
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 |
179
+ | **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 and slash commands (`/vision config`, `/vision show`, etc.) |
125
180
  | **pi-rewind** ⏪ | `npm:@ayulab/pi-rewind` | **Session revert** — checkpoint, rewind, and branch from any prior state |
126
- | **pi-plan-mode** 📋 | `npm:@narumitw/pi-plan-mode` | **Plan mode** — codex-like structured planning. Blocks mutating tools, adds `plan_mode_question` for structured user questions |
127
181
  | **context-mode** 🧠 | `npm:context-mode` | **Context window savings** — sandboxed code execution, FTS5 knowledge base, BM25 search, and session continuity across compaction |
128
182
 
129
183
  > 💡 **Tip**: Some UI elements only appear **after** the extension is installed. For example:
130
184
  >
131
- > - **Vision model selector** in Extensions tab → appears only after `pi-vision-tool` is installed
185
+ > - **Vision model selector & slash commands** → appears only after `pi-vision-tool` is installed
132
186
  > - **Rewind button** on chat messages → appears only after `pi-rewind` is installed
133
- > - **Plan mode tool safety** → appears only after `pi-plan-mode` is installed
134
187
  > - **Context stats/doctor commands** → appears only after `context-mode` is installed
188
+ > *(Note: **Plan mode & review side panel** is built-in natively out-of-the-box — no extension install required!)*
135
189
  > If something mentioned in this README doesn't show up, check the Extensions tab first.
136
190
 
137
191
  ---
@@ -242,7 +296,7 @@ If both are unset, auth is **disabled** and the UI opens freely.
242
296
 
243
297
  Browse and manage files in your project workspace.
244
298
 
245
- - **Open**: Click a file to read it
299
+ - **Open**: Click a file to read it; auto-refreshes when modified by the agent
246
300
  - **Edit**: Modify content directly in the editor (CodeMirror)
247
301
  - **New file/folder**: Right-click in the tree
248
302
  - **Delete**: Right-click a file
@@ -251,8 +305,6 @@ Browse and manage files in your project workspace.
251
305
  - **Download folder as ZIP**: Right-click a folder in the explorer and choose the download action
252
306
  - **Clone project**: Use the clone dialog to pull a repo into the workspace, with optional custom destination path
253
307
 
254
- The file explorer also shows files the agent has created or modified during the session.
255
-
256
308
  ---
257
309
 
258
310
  ## Git Panel
@@ -301,8 +353,8 @@ pi-kot can render agent-created content inline in chat — HTML pages, SVG image
301
353
 
302
354
  ### How it works
303
355
 
304
- 1. The agent writes files to `.pi/artifacts/` in your project directory
305
- 2. Files are served via `/api/v1/artifacts/<filename>`
356
+ 1. The agent writes files to `.pi/artifacts/` in your project directory (subfolders supported)
357
+ 2. Files are served via `/api/v1/artifacts/<path>`
306
358
  3. The chat renderer detects HTML/SVG/JSON/Markdown content and shows a live preview
307
359
 
308
360
  ### Supported formats
@@ -316,34 +368,6 @@ pi-kot can render agent-created content inline in chat — HTML pages, SVG image
316
368
  | **JSON** | ` ```json` or valid JSON tool output | Syntax highlighted |
317
369
  | **Image** | `data:image/...` or ` ```image` | `<img>` tag |
318
370
 
319
- ### Agent context injection
320
-
321
- pi-kot automatically injects a **web UI context** into every session, telling the agent:
322
-
323
- - It's running in a browser (not a terminal)
324
- - To write user-visible files to `.pi/artifacts/` in the current directory
325
- - To use `/api/v1/artifacts/<filename>` links for previews
326
- - To use Mermaid instead of ASCII art for diagrams
327
-
328
- This means the agent will automatically produce web-compatible output when creating diagrams, reports, or interactive content.
329
-
330
- ### Example
331
-
332
- Ask the agent:
333
- > "Create a futuristic button with hover effects"
334
-
335
- The agent will:
336
-
337
- 1. Write the HTML to `.pi/artifacts/button.html`
338
- 2. Output: `[Live Preview](/api/v1/artifacts/button.html)`
339
- 3. You see the rendered button inline in chat
340
-
341
- ### API route
342
-
343
- | Method | Path | Purpose |
344
- |---|---|---|
345
- | `GET` | `/api/v1/artifacts/:filename` | Serve an artifact file (no auth required) |
346
-
347
371
  ---
348
372
 
349
373
  ## Settings
@@ -352,75 +376,14 @@ Access settings via the **⚙** icon in the header.
352
376
 
353
377
  | Tab | What you can configure |
354
378
  | --- | --- |
355
- | **Appearance** | Theme picker, sticky user header, show token usage, image compression — all **persisted server-side** |
379
+ | **Appearance** | Theme picker, language (English / 简体中文), sticky user header, show token usage, image compression, trail default view — all **persisted server-side** |
356
380
  | **Providers** | View configured providers, add/remove API keys, add custom providers, raw models.json editor |
357
- | **Agent** | Default provider, default model, thinking level, model scope (hide unused models), orchestrator model |
381
+ | **Agent** | Default provider, default model, thinking level, model scope (hide unused models with **bulk select toggles**), orchestrator model |
358
382
  | **General** | Server & SDK versions, update check, reload page |
359
383
  | **Extensions ⚗️** | Install/manage pi extensions — **install the recommended ones to unlock features** |
360
384
  | **Skills** | Enable/disable agent skills |
361
385
  | **Tunnel 🚇** | Tunnel provider install check, diagnostics, start/stop tunnel, copy public URL |
362
386
 
363
- ### Image compression
364
-
365
- You can toggle automatic client-side image compression before sending images to the model. When enabled, images are downscaled to a max dimension and compressed to JPEG to reduce token usage.
366
-
367
- ---
368
-
369
- ## Troubleshooting
370
-
371
- ### "Connection lost" in terminal
372
-
373
- The terminal reconnects automatically with exponential backoff. If it doesn't reconnect:
374
-
375
- 1. Check that the server is still running
376
- 2. Refresh the page — tabs are restored from sessionStorage
377
- 3. If the server restarted, PTY sessions are lost — close and reopen tabs
378
-
379
- ### Login form keeps showing
380
-
381
- Your token expired or the server password changed. Sign out and log in again (or use **Clear stored token** on the login form).
382
-
383
- ### Terminal feels laggy on mobile
384
-
385
- - Tap responsiveness uses native touch events with minimal delay
386
- - Arrow keys and input travel over WebSocket to the server — if the server is far away, you'll feel it. Try a local server for snappier response
387
- - Try the **CTRL toggle** (quick-keys bar) instead of long-press for Ctrl+letter combinations
388
-
389
- ### Touch gestures not working
390
-
391
- - Make sure you're touching the terminal area, not the tab bar or quick-keys bar
392
- - For long-press + drag: **hold still for 150ms first**, then drag — don't swipe immediately
393
- - If text gets selected, the browser's default behavior is interfering — tap once to focus the terminal first
394
-
395
- ### Keyboard not appearing on mobile
396
-
397
- Tap anywhere on the terminal area to focus it. The quick-keys bar should appear, and the system keyboard should open.
398
-
399
- ---
400
-
401
- ## Project Structure
402
-
403
- ```
404
- pi-kot/
405
- ├── packages/
406
- │ ├── client/ # React SPA (Vite, xterm.js, Zustand)
407
- │ │ └── src/
408
- │ │ ├── components/ # UI components (ChatView, TerminalPanel, SlidePanel, ...)
409
- │ │ ├── stores/ # Zustand stores (session, layout, terminal, MCP, preferences)
410
- │ │ ├── hooks/ # Custom hooks (touch swipe, extensions, ...)
411
- │ │ └── lib/ # Utilities (API client, SSE, theme, tool-registry, ...)
412
- │ │ # Note: no normalize.ts — SDK types consumed directly
413
- │ └── server/ # Fastify server (REST, SSE, WebSocket, PTY)
414
- │ └── src/
415
- │ ├── routes/ # API routes (sessions, terminal, git, files, projects, extensions, tunnel, ...)
416
- │ ├── mcp/ # MCP server registry & manager
417
- │ ├── orchestration/ # Multi-agent orchestration
418
- │ ├── ask-user-question/ # Web-compatible tool wrappers (e.g. plan_mode_question)
419
- │ ├── tunnel/ # Tunnel providers, registry, service, install/doctor helpers
420
- │ └── ... # Config, auth, PTY manager, extension manager, etc.
421
- ├── CHANGELOG.md # Release notes & SDK upgrade history
422
- ```
423
-
424
387
  ---
425
388
 
426
389
  ## Tech Stack
@@ -429,9 +392,10 @@ pi-kot/
429
392
  | --- | --- |
430
393
  | **UI** | React, TypeScript, Vite, xterm.js, CodeMirror, Zustand |
431
394
  | **Server** | Fastify, ws (WebSocket), node-pty |
432
- | **SDK** | `@earendil-works/pi-coding-agent` (currently 0.84.2) |
395
+ | **SDK** | `@earendil-works/pi-coding-agent` (currently 0.87.1) |
433
396
  | **Auth** | JWT, scrypt password hashing |
434
397
  | **State** | Zustand (client), JSONL session files (server) |
398
+ | **i18n** | Lightweight custom registry supporting English & 简体中文 |
435
399
 
436
400
  ---
437
401
 
@@ -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;-ms-overflow-style:none;scrollbar-gutter:stable;flex-direction:column;flex:1;gap:6px;width:100%;max-width:800px;min-height:0;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{min-width:0;max-width:100%;margin-bottom:4px;overflow:hidden}.assistant-msg-model{max-width:100%;color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;text-transform:uppercase;letter-spacing:.04em;vertical-align:middle;font-size:13px;font-weight:600;display:inline-block;overflow:hidden}@media (width<=640px){.assistant-msg-model{font-size:11px}}.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;container-type:inline-size}.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;scrollbar-width:none;-ms-overflow-style:none;scrollbar-gutter:stable;flex:1;min-height:0;padding:4px 16px 2px;overflow-y:auto}.chat-scroll::-webkit-scrollbar{display:none}.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}@keyframes chat-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.chat-shimmer{background:linear-gradient(110deg, var(--text-dim) 40%, var(--text-primary) 50%, var(--text-dim) 60%);color:#0000;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:1.6s linear infinite chat-shimmer}@media (prefers-reduced-motion:reduce){.chat-shimmer{color:var(--text-dim);background:0 0;-webkit-background-clip:initial;background-clip:initial;animation:none}}.plan-review-panel{box-sizing:border-box}@media (width<=640px){.plan-review-panel{z-index:125!important;border-left:none!important;flex-basis:100%!important;width:100%!important;max-width:100vw!important;height:calc(100dvh - 50px)!important;padding-top:0!important;position:fixed!important;inset:50px 0 0!important}.plan-review-panel .fv-resize-handle{display:none!important}.plan-review-header{padding:8px 12px!important}.plan-review-header-title{max-width:140px!important}.plan-review-body{padding:12px 14px!important}.plan-review-footer{flex-wrap:wrap!important;gap:8px!important;padding:10px 12px!important}.plan-review-footer-group{flex-wrap:wrap!important;gap:6px!important;width:100%!important}.plan-review-footer-btn{white-space:nowrap!important;flex:auto!important;justify-content:center!important}.chat-input-plan-banner{height:22px!important;min-height:22px!important;padding:2px 8px!important;font-size:10px!important}.chat-input-plan-banner .plan-banner-desc{display:none!important}}.chat-input-plan-banner{box-sizing:border-box;-webkit-user-select:none;user-select:none}