codex-telegram 0.5.9__tar.gz → 0.6.0__tar.gz

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 (100) hide show
  1. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/PKG-INFO +1 -1
  2. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/TELEGRAM.md +19 -2
  3. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/WEB.md +44 -12
  4. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram/__init__.py +1 -1
  5. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/PKG-INFO +1 -1
  6. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/SOURCES.txt +2 -2
  7. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/config.py +37 -0
  8. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/routes.py +11 -1
  9. codex_telegram-0.6.0/web/static/dist/assets/index-Cb6qZVCI.css +1 -0
  10. codex_telegram-0.6.0/web/static/dist/assets/index-wjzNlOuf.js +256 -0
  11. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/static/dist/index.html +2 -2
  12. codex_telegram-0.5.9/web/static/dist/assets/index-DIOICBNe.js +0 -251
  13. codex_telegram-0.5.9/web/static/dist/assets/index-DW1AcoLg.css +0 -1
  14. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/LICENSE +0 -0
  15. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/MANIFEST.in +0 -0
  16. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/README.md +0 -0
  17. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/app_runtime/__init__.py +0 -0
  18. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/app_runtime/bootstrap.py +0 -0
  19. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/app_runtime/telegram_app.py +0 -0
  20. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/app_runtime/web_server.py +0 -0
  21. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/__init__.py +0 -0
  22. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/callbacks.py +0 -0
  23. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/features_ui.py +0 -0
  24. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/handlers.py +0 -0
  25. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/keyboard.py +0 -0
  26. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/projects_ui.py +0 -0
  27. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/skills_ui.py +0 -0
  28. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/bot/thread_ui.py +0 -0
  29. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/__init__.py +0 -0
  30. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/approval_flow.py +0 -0
  31. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/approval_guardian.py +0 -0
  32. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/client.py +0 -0
  33. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/client_pool.py +0 -0
  34. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/collaboration_mode.py +0 -0
  35. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/__init__.py +0 -0
  36. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/common.py +0 -0
  37. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/context.py +0 -0
  38. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/contracts.py +0 -0
  39. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/core.py +0 -0
  40. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/projects.py +0 -0
  41. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/review.py +0 -0
  42. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/system.py +0 -0
  43. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/command_router/threads.py +0 -0
  44. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/commands.py +0 -0
  45. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/event_forwarding.py +0 -0
  46. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/events.py +0 -0
  47. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex/protocol.py +0 -0
  48. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram/cli.py +0 -0
  49. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/dependency_links.txt +0 -0
  50. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/entry_points.txt +0 -0
  51. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/requires.txt +0 -0
  52. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/codex_telegram.egg-info/top_level.txt +0 -0
  53. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/conf.toml.example +0 -0
  54. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/main.py +0 -0
  55. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/models/__init__.py +0 -0
  56. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/models/state.py +0 -0
  57. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/models/telegram_bridge.py +0 -0
  58. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/models/thread.py +0 -0
  59. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/models/user.py +0 -0
  60. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/pyproject.toml +0 -0
  61. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/setup.cfg +0 -0
  62. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_approval_guardian.py +0 -0
  63. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_approval_policy.py +0 -0
  64. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_bootstrap_update_check.py +0 -0
  65. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_callbacks_results.py +0 -0
  66. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_cli_entrypoint.py +0 -0
  67. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_codex_client.py +0 -0
  68. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_codex_client_pool.py +0 -0
  69. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_command_router.py +0 -0
  70. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_guardian_config.py +0 -0
  71. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_handlers_results.py +0 -0
  72. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_keyboard.py +0 -0
  73. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_main_approval_flow.py +0 -0
  74. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_normalize.py +0 -0
  75. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_pypi_check.py +0 -0
  76. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_single_instance.py +0 -0
  77. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_telegram_bot_config.py +0 -0
  78. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_thread_history.py +0 -0
  79. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_web_runtime.py +0 -0
  80. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/tests/test_web_server_local_command.py +0 -0
  81. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/__init__.py +0 -0
  82. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/approval_policy.py +0 -0
  83. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/local_command.py +0 -0
  84. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/logger.py +0 -0
  85. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/normalize.py +0 -0
  86. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/pypi_check.py +0 -0
  87. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/single_instance.py +0 -0
  88. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/utils/web_config.py +0 -0
  89. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/__init__.py +0 -0
  90. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/dependencies.py +0 -0
  91. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/runtime.py +0 -0
  92. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/server.py +0 -0
  93. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/static/dist/assets/codex-telegram-icon-black.svg +0 -0
  94. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/static/dist/assets/codex-telegram-icon-ivory.svg +0 -0
  95. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/static/dist/assets/codex-telegram-login-image.png +0 -0
  96. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/static/dist/favicon.ico +0 -0
  97. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/telegram_sync.py +0 -0
  98. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/telegram_thread_selection.py +0 -0
  99. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/thread_history.py +0 -0
  100. {codex_telegram-0.5.9 → codex_telegram-0.6.0}/web/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-telegram
3
- Version: 0.5.9
3
+ Version: 0.6.0
4
4
  Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
5
5
  Author: heungtae
6
6
  License: Apache License
@@ -24,14 +24,17 @@ Execute Codex commands using slash commands in any chat with the bot:
24
24
  | `/compact <id>` | thread/compact/start | Compact conversation history |
25
25
  | `/rollback <n>` | thread/rollback | Roll back last N turns |
26
26
  | `/interrupt` | turn/interrupt | Interrupt running turn |
27
- | `/review` | review/start | Start code review |
27
+ | `/review [uncommittedChanges\|baseBranch\|commit\|custom]` | review/start | Start code review |
28
28
  | `/exec <cmd>` | command/exec | Run command |
29
29
  | `/models` | model/list | List available models |
30
30
  | `/features` | experimentalFeature/list + command/exec | Show beta features |
31
31
  | `/guardian` | local config | Show guardian summary |
32
32
  | `/modes` | collaborationMode/list | List collaboration modes |
33
33
  | `/collab` | collaborationMode/list | List collaboration modes |
34
- | `/skills` | skills/list | List skills |
34
+ | `/mode [toggle\|plan\|build]` | - | Show or set collaboration mode |
35
+ | `/plan` | - | Switch collaboration mode to plan |
36
+ | `/build` | - | Switch collaboration mode to build (default) |
37
+ | `/skills [cwd]` | skills/list | List skills |
35
38
  | `/apps` | app/list | List apps |
36
39
  | `/mcp` | mcpServerStatus/list | List MCP servers |
37
40
  | `/config` | config/read | Read configuration |
@@ -58,6 +61,7 @@ Configure which events to receive via `telegram.forwarding.app_server_event_allo
58
61
  - Archive old threads to keep your list clean
59
62
  - Compact conversation history to save context
60
63
  - Rollback turns to undo mistakes
64
+ - Start code reviews with `/review [uncommittedChanges|baseBranch|commit|custom]`
61
65
 
62
66
  ### Project Switching
63
67
 
@@ -68,6 +72,19 @@ Manage multiple projects:
68
72
  3. Use `/project <name>` to switch
69
73
  4. Each project maintains separate thread history
70
74
 
75
+ ### Collaboration Mode
76
+
77
+ Control how Codex approaches tasks:
78
+
79
+ | Command | Description |
80
+ |---------|-------------|
81
+ | `/mode` | Show current mode or set to `toggle`, `plan`, or `build` |
82
+ | `/plan` | Switch to plan mode (analyze, don't execute) |
83
+ | `/build` | Switch to build mode (execute changes, default) |
84
+ | `/modes` / `/collab` | List available collaboration modes |
85
+
86
+ Modes are session-local and persist per user. The current mode is shown in the welcome message and when switching projects.
87
+
71
88
  ## Configuration
72
89
 
73
90
  ### Basic Setup
@@ -47,6 +47,7 @@ The Web UI receives live updates via SSE for:
47
47
  | `approval_required` | Guardian/approval needed |
48
48
  | `file_change` | File modifications with diffs |
49
49
  | `app_event` | Tool execution events |
50
+ | `user_message` | User message sent |
50
51
 
51
52
  ### Authentication
52
53
 
@@ -96,29 +97,39 @@ Guardian provides automated safety checks before approval decisions:
96
97
 
97
98
  | Shortcut | Action |
98
99
  |----------|--------|
99
- | `Ctrl/Cmd + Enter` | Send message |
100
+ | `Ctrl/Cmd + Enter` | Send message (or Shift+Enter for newline) |
100
101
  | `Tab` | Toggle Build/Plan mode |
102
+ | `Escape` | Close modals / cancel project picker |
101
103
 
102
- #### Alt Key Shortcuts
104
+ #### Alt Key Shortcuts (when not in input)
103
105
 
104
106
  | Shortcut | Action |
105
107
  |----------|--------|
106
- | `Alt + N` | New chat |
107
- | `Alt + T` | New thread tab |
108
- | `Alt + W` | Close current thread |
109
- | `Alt + P` | Open project picker |
110
- | `Alt + [` | Previous thread |
111
- | `Alt + ]` | Next thread |
112
- | `Alt + 1-9` | Switch to thread 1-9 |
113
- | `Alt + V` | Toggle workspace panel |
108
+ | `Alt + N` | New chat (focus composer, start thread) |
109
+ | `Alt + T` | New thread tab (start thread) |
110
+ | `Alt + W` | Close current thread tab |
111
+ | `Alt + P` | Open project picker modal |
112
+ | `Alt + [` | Previous thread in project |
113
+ | `Alt + ]` | Next thread in project |
114
+ | `Alt + 1-9` | Switch to thread 1-9 in current project |
115
+ | `Alt + V` | Toggle workspace panel (compact layout) |
114
116
 
115
- #### Mode
117
+ #### Ctrl/Cmd Key Shortcuts (when not in input)
116
118
 
117
119
  | Shortcut | Action |
118
120
  |----------|--------|
119
121
  | `Ctrl/Cmd + B` | Switch to Build mode |
120
122
  | `Ctrl/Cmd + Shift + P` | Switch to Plan mode |
121
123
 
124
+ #### Project Picker Modal
125
+
126
+ | Shortcut | Action |
127
+ |----------|--------|
128
+ | `Up/Down` | Navigate projects |
129
+ | `Enter` | Select project |
130
+ | `Esc` / `Backspace` | Close modal |
131
+ | `Type` | Filter projects by name/key |
132
+
122
133
  ## API Endpoints
123
134
 
124
135
  ### Authentication
@@ -154,6 +165,7 @@ Guardian provides automated safety checks before approval decisions:
154
165
  | POST | `/api/projects` | Add project |
155
166
  | POST | `/api/projects/select` | Switch project |
156
167
  | POST | `/api/projects/open-thread` | Open thread in project |
168
+ | POST | `/api/projects/open-explorer` | Open project folder in OS file explorer |
157
169
 
158
170
  ### Workspace
159
171
 
@@ -172,7 +184,8 @@ Guardian provides automated safety checks before approval decisions:
172
184
  | GET | `/api/features` | List features |
173
185
  | POST | `/api/features/{key}` | Toggle feature |
174
186
  | GET | `/api/models` | List models |
175
- | GET | `/api/modes` | List modes |
187
+ | GET | `/api/modes` | List collaboration modes |
188
+ | GET | `/api/collab` | List collaboration modes (alias) |
176
189
  | GET | `/api/skills` | List skills |
177
190
  | GET | `/api/apps` | List apps |
178
191
  | GET | `/api/mcp` | List MCP servers |
@@ -181,6 +194,25 @@ Guardian provides automated safety checks before approval decisions:
181
194
  | GET | `/api/config` | Get config |
182
195
  | POST | `/api/approvals/{id}` | Submit approval |
183
196
 
197
+ ### Approvals
198
+
199
+ | Method | Endpoint | Description |
200
+ |--------|----------|-------------|
201
+ | GET | `/api/approvals` | List pending approval requests |
202
+ | POST | `/api/approvals/{request_id}` | Submit approval decision (approve|session|deny) |
203
+
204
+ ### Session
205
+
206
+ | Method | Endpoint | Description |
207
+ |--------|----------|-------------|
208
+ | GET | `/api/session/summary` | Get current session state (active thread, workspace, project, mode, agents) |
209
+
210
+ ### Commands
211
+
212
+ | Method | Endpoint | Description |
213
+ |--------|----------|-------------|
214
+ | POST | `/api/command` | Execute any slash command |
215
+
184
216
  ### Events
185
217
 
186
218
  | Method | Endpoint | Description |
@@ -1,3 +1,3 @@
1
1
  """codex-telegram package."""
2
2
 
3
- __version__ = "0.5.9"
3
+ __version__ = "0.6.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-telegram
3
- Version: 0.5.9
3
+ Version: 0.6.0
4
4
  Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
5
5
  Author: heungtae
6
6
  License: Apache License
@@ -92,5 +92,5 @@ web/static/dist/index.html
92
92
  web/static/dist/assets/codex-telegram-icon-black.svg
93
93
  web/static/dist/assets/codex-telegram-icon-ivory.svg
94
94
  web/static/dist/assets/codex-telegram-login-image.png
95
- web/static/dist/assets/index-DIOICBNe.js
96
- web/static/dist/assets/index-DW1AcoLg.css
95
+ web/static/dist/assets/index-Cb6qZVCI.css
96
+ web/static/dist/assets/index-wjzNlOuf.js
@@ -712,3 +712,40 @@ def save_project_profile(key: str, name: str, path: str) -> None:
712
712
  )
713
713
 
714
714
  config_path.write_text(updated, encoding="utf-8")
715
+
716
+
717
+ def remove_project_profile(key: str) -> None:
718
+ _ensure_config_exists()
719
+ config_path = _get_config_path()
720
+ raw = config_path.read_text(encoding="utf-8")
721
+ parsed = tomllib.loads(raw) if raw.strip() else {}
722
+
723
+ projects = parsed.get("projects")
724
+ if not isinstance(projects, dict) or key not in projects:
725
+ raise ValueError(f"Project key '{key}' not found.")
726
+
727
+ if parsed.get("project") == key:
728
+ raise ValueError(f"Cannot remove the active project '{key}'. Switch to another project first.")
729
+
730
+ lines = raw.splitlines(keepends=True)
731
+ result: list[str] = []
732
+ i = 0
733
+ while i < len(lines):
734
+ line = lines[i]
735
+ stripped = line.strip()
736
+ if stripped == f"[projects.{key}]":
737
+ i += 1
738
+ while i < len(lines):
739
+ next_line = lines[i]
740
+ next_stripped = next_line.strip()
741
+ if next_stripped.startswith("[") and not next_stripped.startswith("[projects."):
742
+ break
743
+ if next_stripped.startswith("[projects.") and next_stripped != f"[projects.{key}]":
744
+ break
745
+ i += 1
746
+ continue
747
+ result.append(line)
748
+ i += 1
749
+
750
+ updated = "".join(result).rstrip() + "\n"
751
+ config_path.write_text(updated, encoding="utf-8")
@@ -16,7 +16,7 @@ from codex_telegram import __version__
16
16
  from codex.collaboration_mode import codex_mode_name
17
17
  from models import state
18
18
  from models.user import user_manager
19
- from utils.config import get, get_web_password, reload, save_project_profile
19
+ from utils.config import get, get_web_password, reload, remove_project_profile, save_project_profile
20
20
  from utils.local_command import resolve_command_cwd
21
21
  from utils.normalize import clamp_int, parse_bool
22
22
  from web.dependencies import (
@@ -698,6 +698,16 @@ def register_project_routes(app: FastAPI) -> None:
698
698
  raise HTTPException(status_code=400, detail=str(exc)) from exc
699
699
  return await route_command("/projects", ["--list"], session.user_id)
700
700
 
701
+ @app.delete("/api/projects/{project_key}")
702
+ async def remove_project(project_key: str, request: Request) -> dict[str, Any]:
703
+ session = await session_from_request(request)
704
+ try:
705
+ remove_project_profile(project_key)
706
+ reload()
707
+ except ValueError as exc:
708
+ raise HTTPException(status_code=400, detail=str(exc)) from exc
709
+ return await route_command("/projects", ["--list"], session.user_id)
710
+
701
711
  @app.post("/api/projects/select")
702
712
  async def select_project(payload: dict[str, Any], request: Request) -> dict[str, Any]:
703
713
  session = await session_from_request(request)
@@ -0,0 +1 @@
1
+ @charset "UTF-8";@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap";:root{--bg: #fdfcfc;--bg-soft: #f8f7f7;--panel: #fdfcfc;--panel-soft: #f1eeee;--border: rgba(15, 0, 0, .12);--border-strong: #646262;--text: #201d1d;--muted: #646262;--brand: #201d1d;--brand-strong: #0f0000;--accent: #007aff;--accent-hover: #0056b3;--danger: #ff3b30;--warning: #ff9f0a;--success: #30a14e;--icon-btn-active-color: #9a9898;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--radius-sm: 4px;--radius-md: 4px;--radius-lg: 4px;--radius-card: 8px;--radius-modal: 12px;--radius-pill: 10px;--radius-xl: 14px;--shadow-sm: none;--shadow-md: none;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-body: 13px;--font-size-md: 14px;--layer-modal: 1200;color-scheme:light}:root[data-theme=dark]{--bg: #201d1d;--bg-soft: #292525;--panel: #201d1d;--panel-soft: #302c2c;--border: rgba(253, 252, 252, .16);--border-strong: #9a9898;--text: #fdfcfc;--muted: #b7b3b3;--brand: #fdfcfc;--brand-strong: #f1eeee;--accent: #5fa8ff;--accent-hover: #8bc0ff;--danger: #ff6961;--warning: #ffb340;--success: #4bd66f;--icon-btn-active-color: #7e7b7b;color-scheme:dark}*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;color:var(--text);background:var(--bg);font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,SFMono-Regular,Consolas,monospace;font-size:14px;line-height:1.5;height:100vh;overflow:hidden}button,input,textarea,select{font-family:inherit;color:inherit}button,input,textarea,select{border-radius:var(--radius-sm)}button:focus-visible,textarea:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input:focus,input:focus-visible{outline:none}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}.app{display:flex;height:100vh;overflow:hidden}.sidebar{width:300px;border-right:1px solid var(--border);background:linear-gradient(180deg,#181f2cf5,#121823f5);padding:0 2px 0 16px;overflow:hidden;flex:0 0 auto;display:flex;flex-direction:column;min-height:0;box-shadow:inset -1px 0 #ffffff0a;position:relative;z-index:4}.sidebar-content{display:flex;flex:1;min-height:0;flex-direction:column;overflow-y:auto;padding-top:0;padding-bottom:16px}.sidebar.collapsed{padding:12px 8px;overflow:hidden}.sidebar-resizer{width:2px;cursor:col-resize;background:transparent;border-right:none}.sidebar-resizer-collapsed{width:0;pointer-events:none}.sidebar-resizer:hover,.sidebar-resizer.active{background:transparent}.brand{font-size:19px;font-weight:800;margin-bottom:14px;letter-spacing:.4px;text-transform:uppercase;color:#9ed7ff;font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,monospace;display:flex;align-items:center;gap:8px}.sidebar-brand-logo{width:48px;height:48px;flex:0 0 auto;object-fit:contain}.sidebar-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px;container-type:inline-size;position:sticky;top:0;z-index:2;background:var(--panel);padding-top:16px}@container (max-width: 230px){.sidebar-header-row .brand span{display:none}}.sidebar-header-row .brand{margin-bottom:0;flex:1;min-width:0;overflow:hidden}.sidebar-header-row .brand span{white-space:nowrap;min-width:0;overflow:hidden;flex-shrink:1}.sidebar-top-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}.menu{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.menu button{padding:10px 12px;border:1px solid var(--border);background:var(--panel);border-radius:0;text-align:left;cursor:pointer}.panel{background:linear-gradient(180deg,#19202df5,#141b26fa);border:1px solid var(--border);border-radius:0;padding:12px;margin-bottom:12px;box-shadow:var(--shadow-sm)}.sidebar-content>.panel:last-child{margin-bottom:0}.panel h3{margin:0 0 10px;font-size:var(--font-size-body);letter-spacing:.4px;text-transform:uppercase;color:var(--muted)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.panel-head h3{margin:0}.panel-note{margin-bottom:10px;font-size:var(--font-size-sm);line-height:1.5;color:var(--muted)}.ui-empty-state{color:var(--muted)}.ui-empty-state-notice{line-height:1.5}.thread-list{max-height:230px;overflow-y:auto;overflow-x:hidden}.threads-panel{flex:1;display:flex;flex-direction:column;min-height:0}.threads-panel .thread-list{flex:1;max-height:none;min-height:0}.sidebar-footer{flex-shrink:0;padding-top:12px;padding-bottom:16px;display:flex;align-items:center;gap:8px}.sidebar.collapsed .sidebar-footer{padding-top:0;margin-top:auto}.sidebar.collapsed .sidebar-settings-btn{min-width:0}.sidebar-collapsed-header{display:flex;align-items:center;justify-content:center;width:100%;height:36px;margin-bottom:8px}.sidebar-expand-btn{min-width:0}.sidebar-toggle-btn{display:inline-flex;align-items:center;justify-content:center;min-height:36px;min-width:36px;padding:0 6px;border:0;background:transparent;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm)}.sidebar-toggle-btn:hover{background:var(--panel-soft);border-radius:var(--radius-card);padding:0 4px}.sidebar-toggle-btn svg{width:16px;height:16px;flex-shrink:0;fill:none;stroke:currentColor}.sidebar-top-actions .ui-icon-button{border:0;background:transparent}.sidebar-top-actions .ui-icon-button:hover:not(:disabled){border:0}.sidebar-top-actions .ui-icon-button:focus-visible{outline:none}.sidebar-top-actions .notify-toggle:hover,.sidebar-top-actions .theme-toggle:hover{background:var(--panel-soft);border-radius:var(--radius-card)}.sidebar-top-actions .sidebar-toggle-btn:hover{background:var(--panel-soft);border-radius:var(--radius-card);padding:0 4px}.sidebar-top-actions .notify-toggle.on{background:transparent;border-color:transparent}.sidebar-settings-btn{flex:1;min-height:36px;display:inline-flex;align-items:center;gap:8px;padding:0 8px;border:0;background:transparent;color:var(--muted);font:inherit;font-size:var(--font-size-body);text-align:left;cursor:pointer;border-radius:var(--radius-sm);transition:color .14s ease,background .14s ease}.sidebar-settings-btn:hover{color:var(--text);background:var(--bg-soft)}.sidebar.collapsed .sidebar-settings-btn:hover{border-radius:var(--radius-card)}.sidebar-settings-btn.active{color:var(--text);background:var(--panel-soft)}.sidebar-settings-btn svg{width:16px;height:16px;flex-shrink:0}.sidebar.collapsed .sidebar-settings-btn{flex:0 0 auto;padding:0;min-width:28px;justify-content:center}.sidebar-settings-popover{position:fixed;z-index:1210;padding:12px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-pill);box-shadow:0 4px 24px #0000002e,0 1px 6px #0000001f;overflow:visible}.thread-item{width:100%;max-width:100%;min-width:0;text-align:left;border:0;background:transparent;border-radius:0;padding:9px 10px;margin-bottom:0;cursor:pointer;position:relative;overflow:hidden}.thread-item:hover{background:var(--bg-soft)}.thread-item:disabled{opacity:.55;cursor:not-allowed}.thread-item.active{background:#15223199;box-shadow:inset 0 -3px 0 0 var(--accent)}.project-list{display:flex;flex-direction:column;gap:6px}.project-item{margin-bottom:0}.thread-title{font-weight:600;font-size:var(--font-size-body);margin-bottom:2px;overflow-wrap:anywhere}.project-item .thread-title{display:flex;align-items:center;gap:6px}.thread-sub{font-size:var(--font-size-xs);color:var(--muted);word-break:break-all;overflow-wrap:anywhere}.project-pill,.panel-toggle{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:0;font-size:var(--font-size-xs);line-height:1}.project-pill{padding:3px 7px;background:#2563eb1a;color:var(--accent)}.panel-toggle{min-height:28px;padding:10px;background:#122030eb;color:var(--text);cursor:pointer;transition:transform .12s ease,background .16s ease,border-color .16s ease}.projects-section{position:sticky;top:64px;z-index:1;background:var(--panel);margin-bottom:12px}.projects-section>.panel-head{padding-right:4px;border-radius:var(--radius-sm);transition:background-color .1s}.projects-section>.panel-head:hover{background:var(--bg-soft)}.projects-toggle{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;padding:0 0 0 6px;margin-left:0;color:inherit}.projects-toggle-label{padding-right:6px;font-size:var(--font-size-body);font-weight:600;color:var(--muted)}.projects-toggle-chevron{flex-shrink:0;display:inline-flex;color:var(--muted)}.projects-toggle-chevron svg{width:14px;height:14px}.projects-busy-note{font-size:var(--font-size-xs);color:var(--muted);margin-left:6px}.project-flat-list{display:flex;flex-direction:column;gap:2px}.project-context-menu{position:fixed;min-width:192px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:0 4px 16px #0000002e;padding:4px 0;z-index:1300}.project-context-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 14px;border:0;border-radius:0;background:transparent;color:var(--text);font-size:var(--font-size-body);text-align:left;cursor:pointer;justify-content:flex-start}.ui-icon-button.project-context-menu-item{border:0;background:transparent;color:var(--text)}.ui-icon-button.project-context-menu-item:hover:not(:disabled){background:var(--bg-soft);border:0}.ui-icon-button.project-context-menu-item:focus-visible{outline:none}.project-context-menu-item svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;color:var(--muted)}.project-context-menu-item span{flex:1;text-align:left}.projects-dropdown{display:inline-flex;align-items:center}.projects-dropdown-toggle{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;padding:6px 10px;margin-left:4px;color:var(--muted);font-size:var(--font-size-body);font-weight:600;border-radius:var(--radius-sm)}.projects-dropdown-toggle:hover{background:var(--bg-soft);color:var(--text)}.projects-dropdown-label{padding-right:4px}.projects-dropdown-toggle svg{width:14px;height:14px}.projects-dropdown-menu{min-width:160px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:0 4px 16px #0000002e;padding:4px 0;margin-top:4px}.projects-dropdown-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 14px;border:0;border-radius:0;background:transparent;color:var(--text);font-size:var(--font-size-body);text-align:left;cursor:pointer}.projects-dropdown-item:hover{background:var(--bg-soft)}.projects-dropdown-item svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;color:var(--muted)}.modal-field{margin-bottom:16px}.modal-field label{display:block;font-size:var(--font-size-sm);font-weight:600;color:var(--text);margin-bottom:6px}.add-project-input{width:100%}.modal-hint{display:block;font-size:var(--font-size-xs);color:var(--muted);margin-top:4px}.modal-error{color:var(--danger);font-size:var(--font-size-sm);margin-bottom:12px;padding:8px 12px;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:var(--radius-sm)}.project-flat-item{display:flex;align-items:center;gap:2px;padding-right:4px;border-radius:var(--radius-sm)}.project-flat-item:hover{background:var(--bg-soft)}.project-name-group{flex:1;min-width:0;display:flex;align-items:center;gap:4px;position:relative}.project-badge-d{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;background:var(--accent);color:#fff;font-size:10px;font-weight:700;line-height:1}.project-base-name{flex:1;min-width:0;overflow:hidden;display:flex;align-items:center;gap:6px;padding:7px 6px;background:transparent;border:0;color:var(--text);font-size:var(--font-size-body);cursor:pointer;text-align:left;border-radius:var(--radius-sm)}.project-base-name:disabled{opacity:.55;cursor:not-allowed}.project-name-spacer{flex:1;align-self:stretch;border:0;background:transparent;padding:0;cursor:pointer;min-width:0}.project-base-name svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;color:var(--muted)}.project-name-text{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-action-btn{flex-shrink:0;width:26px;height:26px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm);opacity:0;pointer-events:none;transition:opacity .1s}.project-flat-item:hover .project-action-btn,.project-session-header:hover .project-action-btn,.project-action-btn:focus-visible,.projects-section>.panel-head:hover .projects-header-dropdown .project-action-btn,.projects-header-dropdown .project-action-btn[aria-expanded=true]{opacity:1;pointer-events:auto}.ui-icon-button.project-action-btn{border:0}.ui-icon-button.project-action-btn:hover:not(:disabled){background:transparent;border:0}.ui-icon-button.project-action-btn:focus-visible{outline:none}.project-action-btn:disabled{opacity:.4;cursor:not-allowed}.project-action-btn svg{width:16px;height:16px;fill:none;stroke:currentColor}.project-flat-item{margin-bottom:2px}.project-session-row{display:flex;flex-direction:column;border-left:3px solid transparent;margin-bottom:2px;border-radius:var(--radius-sm)}.project-session-row.active{color:var(--text)}.project-session-row.state-running .project-session-name svg{color:var(--accent)}.project-session-row.state-running .project-session-title{color:var(--accent)}.project-session-header:hover{background:var(--bg-soft);border-radius:var(--radius-sm)}.project-session-row.state-unread{font-weight:600}.project-session-row.state-unread .project-session-name svg{color:var(--success)}.project-session-row.state-unread .project-session-title{color:var(--success)}.project-session-row.state-failed .project-session-name svg{color:var(--danger)}.project-session-row.state-failed .project-session-title{color:var(--danger)}.project-session-row.state-cancelled .project-session-name svg{color:var(--muted)}.project-session-row.state-cancelled .project-session-title{color:var(--muted)}.project-session-header{display:flex;align-items:center;min-height:34px;gap:2px;padding-right:4px}.project-session-name{flex:1;min-width:0;overflow:hidden;display:flex;align-items:center;gap:6px;text-align:left;background:transparent;border:0;padding:7px 30px 7px 4px;cursor:pointer;color:var(--text);font-size:var(--font-size-body)}.project-session-name svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;color:var(--muted)}.project-session-name:disabled{opacity:.55;cursor:not-allowed}.project-session-toggle{position:absolute;right:0;top:0;bottom:0;width:26px;background:transparent;border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--muted);z-index:1}.project-session-toggle svg{width:14px;height:14px}.project-thread-list{padding-left:12px;padding-bottom:4px}.panel-toggle:hover:not(:disabled){background:#182c43f5;border-color:#3f556f;transform:translateY(-1px)}.panel-toggle.active{background:#14635c57;border-color:#2ec4b670;color:#bff6ef}.meta-line{font-size:var(--font-size-sm);color:var(--muted);margin-top:6px}.meta-value{font-size:var(--font-size-sm);word-break:break-all}.agent-item{display:flex;justify-content:space-between;border:1px solid var(--border);border-radius:0;padding:7px 8px;font-size:var(--font-size-sm);width:100%;align-items:center;gap:8px}.agent-item.on{background:#14635c57;border-color:#2ec4b670;color:#bff6ef}.agent-item.off{background:#0b1420db;color:var(--muted)}.agent-item.clickable{cursor:pointer;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}.agent-item.clickable:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 20px #02081452;border-color:#3f556f}.agent-item.static{cursor:default}.agent-item:disabled{opacity:.7}.agent-list{display:flex;flex-direction:column;gap:6px}.agent-row{display:flex;gap:6px;align-items:stretch}.agent-settings-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:#122030eb;color:var(--text);border-radius:0;width:36px;min-width:36px;padding:0;cursor:pointer;font-size:var(--font-size-sm)}.agent-settings-icon{width:14px;height:14px;fill:none;stroke:currentColor;flex:0 0 auto}.agent-settings-btn svg{width:14px;height:14px;fill:none;stroke:currentColor;flex:0 0 auto}.agent-settings-btn:hover:not(:disabled){background:#182c43f5;border-color:#3f556f}.agent-settings-btn:disabled{opacity:.65;cursor:not-allowed}.agent-error{margin-top:10px;color:var(--danger);font-size:var(--font-size-sm)}.agent-settings-card{margin-top:12px;padding-top:12px;border-top:1px solid #2a3b50}.agent-settings-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;font-size:var(--font-size-body)}.agent-status-chip{display:inline-flex;align-items:center;border-radius:0;padding:4px 8px;font-size:var(--font-size-xs);border:1px solid var(--border)}.agent-status-chip.on{background:#14635c57;border-color:#2ec4b670;color:#bff6ef}.agent-status-chip.off{background:#0b1420db;color:var(--muted)}.agent-settings-form{display:flex;flex-direction:column;gap:10px}.ui-form-field{display:flex;flex-direction:column;gap:6px}.ui-form-field-label{font-size:var(--font-size-sm);color:var(--muted)}.agent-field-textarea{min-height:240px;resize:vertical;border:1px solid var(--border);border-radius:0;padding:10px 12px;background:#0e1724;color:var(--text);font:12px/1.5 ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.ui-form-field-help{font-size:var(--font-size-xs);color:var(--muted)}.agent-settings-actions{display:flex;justify-content:flex-end;gap:8px}.agent-settings-action{width:36px;min-width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--muted);border-radius:0;cursor:pointer;transition:color .16s ease}.agent-settings-action svg{width:16px;height:16px;fill:none;stroke:currentColor}.agent-settings-action-primary{color:var(--brand)}.agent-settings-action:hover:not(:disabled){border-radius:var(--radius-card);background:var(--panel-soft)}.agent-settings-action:active:not(:disabled){color:var(--icon-btn-active-color);background:transparent}.agent-settings-action:disabled{opacity:.65;cursor:not-allowed}.agent-settings-empty{font-size:var(--font-size-sm);color:var(--muted)}.agent-settings-summary{border:1px solid var(--border);border-radius:0;background:#0e1724eb;padding:10px 12px}.agent-settings-summary-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text)}.agent-settings-summary-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;font-size:var(--font-size-xs);color:var(--muted)}.agent-settings-summary-list{display:flex;flex-direction:column;gap:6px;margin-top:8px}.agent-settings-summary-item{display:flex;justify-content:space-between;gap:12px;font-size:var(--font-size-sm);color:var(--muted)}.agent-settings-summary-footer{display:flex;justify-content:flex-end;margin-top:10px}.agent-settings-inline-btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:#122030eb;color:var(--text);border-radius:0;padding:7px 12px;cursor:pointer;font-size:var(--font-size-sm);transition:transform .12s ease,background .16s ease,border-color .16s ease}.agent-settings-inline-btn svg{width:14px;height:14px;fill:none;stroke:currentColor;flex:0 0 auto}.agent-settings-inline-btn:hover:not(:disabled){background:#182c43f5;border-color:#3f556f;transform:translateY(-1px)}.agent-settings-inline-btn.active{background:#14635c57;border-color:#2ec4b670;color:#bff6ef}.agent-settings-inline-btn:disabled{opacity:.65;cursor:not-allowed}.setting-toggle{flex-shrink:0;width:36px;height:20px;border-radius:var(--radius-pill);border:0;background:var(--border-strong, #3f556f);cursor:pointer;position:relative;padding:0;transition:background .2s ease}.setting-toggle:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s ease;box-shadow:0 1px 3px #0000004d}.setting-toggle.on{background:#2563eb}.setting-toggle.on:after{transform:translate(16px)}.setting-toggle:disabled{opacity:.5;cursor:not-allowed}.guardian-section{padding:2px 0 12px;border-bottom:1px solid var(--border)}.guardian-section .panel-head{margin-bottom:8px}.guardian-toggle{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;padding:0 0 0 6px;color:inherit;flex:1;min-width:0}.guardian-toggle-label{font-size:var(--font-size-body);font-weight:600;color:var(--text);padding-right:6px}.guardian-toggle-chevron{flex-shrink:0;display:inline-flex;color:var(--muted)}.guardian-toggle-chevron svg{width:14px;height:14px}.guardian-settings-body{padding:4px 0 0 6px;display:flex;flex-direction:column;gap:10px}.setting-dropdown{position:relative}.setting-dropdown-trigger{width:100%;display:flex;align-items:center;gap:8px;min-height:36px;padding:8px 14px;border:1px solid transparent;background:var(--bg-soft);color:var(--text);font:inherit;font-size:var(--font-size-body);text-align:left;cursor:pointer;border-radius:var(--radius-xl);transition:border-color .14s ease,background .14s ease,box-shadow .14s ease}.setting-dropdown-trigger:hover:not(:disabled){border-color:var(--border-strong)}.setting-dropdown-trigger.open{border-color:var(--border-strong);box-shadow:0 0 0 2px color-mix(in srgb,var(--border-strong) 16%,transparent)}.setting-dropdown-trigger:disabled{opacity:.55;cursor:not-allowed}.setting-dropdown-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.setting-dropdown-chevron{flex-shrink:0;display:inline-flex;color:var(--muted)}.setting-dropdown-chevron svg{width:14px;height:14px}.setting-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:300;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:0 12px 30px #00000038;overflow:hidden;padding:5px}.setting-dropdown-item{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:38px;padding:9px 12px;border:0;background:transparent;color:var(--text);font:inherit;font-size:var(--font-size-body);text-align:left;cursor:pointer;border-radius:var(--radius-pill);transition:background .1s}.setting-dropdown-item:hover,.setting-dropdown-item:focus-visible{background:var(--bg-soft);outline:none}.setting-dropdown-item.selected{color:var(--text)}.setting-dropdown-check{color:var(--text);font-size:15px;font-weight:600;flex-shrink:0;line-height:1}.setting-dropdown-check svg{width:14px;height:14px}.sidebar-settings-popover{overflow:visible}.sidebar-agents-panel{min-width:280px;display:flex;flex-direction:column;gap:10px}.enabled-agents-list{padding-bottom:12px;border-bottom:1px solid var(--border)}.running-subagents-section{padding:2px 0 12px 6px;border-bottom:1px solid var(--border)}.running-subagents-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.running-subagents-toggle{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:0;border:0;background:transparent;color:var(--text);cursor:pointer;font:inherit}.running-subagents-title{font-size:var(--font-size-body);font-weight:600}.running-subagents-chevron{flex:0 0 auto;display:inline-flex;color:var(--muted)}.running-subagents-chevron svg{width:14px;height:14px}.running-subagents-count{flex:0 0 auto;color:var(--muted);font-size:var(--font-size-xs)}.running-subagents-list{display:flex;flex-direction:column;gap:2px;margin-top:8px}.running-subagent-item{min-height:38px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;background:transparent}.running-subagent-identity{min-width:0;display:flex;flex-direction:column;gap:2px}.running-subagent-name{overflow:hidden;color:var(--text);font-size:var(--font-size-sm);text-overflow:ellipsis;white-space:nowrap}.running-subagent-role{overflow:hidden;color:var(--muted);font-size:var(--font-size-xs);text-overflow:ellipsis;white-space:nowrap}.running-subagent-status{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:var(--font-size-xs)}.running-subagent-status-dot{width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:var(--success)}.guardian-rules-section{padding:2px 0 0 6px}.guardian-rules-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.guardian-rules-head h3{margin:0;color:var(--text);font-size:var(--font-size-body);font-weight:600;letter-spacing:0;text-transform:none}.guardian-rules-status{color:var(--muted);font-size:var(--font-size-xs)}.guardian-rules-actions{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:10px;color:var(--muted);font-size:var(--font-size-xs)}.guardian-rules-actions span{display:inline-flex;align-items:center;gap:4px}.guardian-rules-actions strong{color:var(--text);font-weight:600}.guardian-rules-empty{margin:10px 0 0;color:var(--muted);font-size:var(--font-size-sm)}.workspace-right-sidebar{flex:0 0 auto;display:flex;flex-direction:column;height:100%;border-left:1px solid var(--border);background:var(--panel);overflow:hidden}.workspace-right-sidebar.closed{width:44px;align-items:center;padding-top:12px}.workspace-panel-closed-header{display:flex;align-items:center;justify-content:center;width:100%;height:36px;margin-bottom:8px}.workspace-right-sidebar .workspace-panel{border:none;box-shadow:none}.workspace-right-sidebar .workspace-panel.desktop{margin-top:0;height:100%}.workspace-right-resizer{width:12px;flex:0 0 12px;margin:0 -6px;position:relative;z-index:5;cursor:col-resize;touch-action:none;background:transparent;border-left:1px solid transparent}.workspace-right-resizer:hover,.workspace-right-resizer.active{background:var(--panel-soft);border-left-color:var(--border-strong)}.app.workspace-expanded .main,.app.workspace-expanded .workspace-right-resizer{display:none}.app.workspace-expanded .workspace-right-sidebar{flex:1 1 auto}.app.workspace-expanded .workspace-right-sidebar .workspace-panel{flex:1 1 auto;width:auto;min-width:0;max-width:none}.app.workspace-expanded .workspace-right-sidebar .workspace-panel.desktop{height:100%}.guardian-rules-footer{margin-top:12px}.guardian-rules-configure{width:100%;min-height:36px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius-pill);background:transparent;color:var(--text);cursor:pointer;font:inherit;font-size:var(--font-size-sm);transition:background .14s ease,border-color .14s ease}.guardian-rules-configure:hover:not(:disabled),.guardian-rules-configure.active{background:var(--bg-soft);border-color:var(--border-strong)}.guardian-rules-configure:disabled{opacity:.55;cursor:not-allowed}.guardian-rules-configure svg{width:14px;height:14px}.main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;padding:14px;position:relative}.workspace-layout{flex:1;min-width:0;min-height:0;display:flex;gap:14px;align-items:stretch}.center-pane{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}.workspace-panel{width:520px;min-width:340px;max-width:900px;min-height:0;border:1px solid var(--border);border-radius:0;background:linear-gradient(180deg,#0d1623f5,#0a121efa);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;overflow:hidden;flex:0 0 auto}.workspace-panel-shell{position:relative;flex:0 0 auto;height:100%;min-height:0;display:flex;align-self:stretch}.workspace-panel-rail{width:40px;height:40px;flex:0 0 40px;align-self:flex-start;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:0;background:var(--panel);box-shadow:var(--shadow-sm)}.workspace-panel-rail-toggle{width:40px;height:40px;border:0;background:transparent;color:var(--text);cursor:pointer}.workspace-panel-rail-toggle svg{width:18px;height:18px}.chat-header{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px 0 14px;border-bottom:1px solid var(--border);background:var(--panel)}.chat-header-title{min-width:0;margin:0;color:var(--text);font-size:var(--font-size-md);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:context-menu}.chat-header-add,.session-tab-close,.session-tab-add{flex:0 0 auto;border-color:transparent;background:transparent;color:var(--muted)}.chat-header-add:hover:not(:disabled),.session-tab-close:hover:not(:disabled),.session-tab-add:hover:not(:disabled){border-color:var(--border);background:var(--bg-soft);color:var(--text)}.project-session-title{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app,.main,.workspace-layout,.center-pane{background:var(--bg)}.sidebar{background:var(--panel);border-color:var(--border);box-shadow:none}.brand{color:var(--text);font-size:16px;font-weight:700;letter-spacing:0;display:flex;align-items:center;gap:8px}.panel,.agent-settings-card,.agent-settings-summary{background:transparent;border-color:var(--border);border-radius:0;box-shadow:none}.panel h3,.panel-head h3,.agent-settings-summary-title{font-size:var(--font-size-body);letter-spacing:0;text-transform:uppercase}.thread-item,.project-item,.agent-item,.project-pill,.panel-toggle,.agent-settings-btn,.agent-settings-inline-btn,.notify-toggle,.theme-toggle{background:transparent;border-color:var(--border);border-radius:var(--radius-sm);box-shadow:none;color:var(--text)}.thread-item:hover,.project-item:hover,.agent-item.clickable:hover:not(:disabled),.panel-toggle:hover:not(:disabled),.agent-settings-btn:hover:not(:disabled),.agent-settings-inline-btn:hover:not(:disabled){background:var(--bg-soft);border-color:var(--border-strong);transform:none}.notify-toggle:hover,.theme-toggle:hover{background:var(--bg-soft);border-color:var(--border-strong);border-radius:var(--radius-card);transform:none}.thread-item.active,.panel-toggle.active,.agent-settings-inline-btn.active,.notify-toggle.on{background:var(--panel-soft);border-color:var(--text);color:var(--text)}.agent-item.on,.agent-status-chip.on{background:color-mix(in srgb,var(--success) 12%,transparent);border-color:var(--success);color:var(--text)}.agent-item.off,.agent-status-chip.off{background:transparent;border-color:var(--border);color:var(--muted)}.threads-section{margin-bottom:12px}.threads-toggle{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;padding:0 0 0 6px;color:inherit}.threads-toggle-label{font-size:var(--font-size-body);font-weight:600;color:var(--muted);padding-right:6px}.threads-toggle-chevron{flex-shrink:0;display:inline-flex;color:var(--muted)}.threads-toggle-chevron svg{width:14px;height:14px}.threads-list{display:flex;flex-direction:column;gap:4px;padding-top:6px}.thread-tab-item{min-width:0;min-height:34px;display:flex;align-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:var(--font-size-body);margin-bottom:2px}.telegram-thread-badge{width:16px;height:16px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;background:var(--accent);color:#fff;font-size:10px;font-weight:700;line-height:1}.thread-tab-item:hover{background:var(--bg-soft)}.thread-tab-item.active{background:var(--bg-soft);color:var(--text)}.thread-tab-item.state-running .session-tab-title{color:var(--accent)}.thread-tab-item.state-completed .session-tab-title{color:var(--success)}.thread-tab-item.state-failed .session-tab-title{color:var(--danger)}.thread-tab-item.state-cancelled .session-tab-title{color:var(--warning)}.thread-tab-item.unread{font-weight:600}.session-tab-main{flex:1;min-width:0;align-self:stretch;display:flex;align-items:center;gap:6px;border:0;padding:7px 6px;background:transparent;color:inherit;text-align:left;cursor:pointer}.session-tab-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-tab-dot{width:7px;height:7px;flex:0 0 auto;background:var(--success)}.thread-tab-item.state-failed .session-tab-dot{background:var(--danger)}.thread-tab-item.state-cancelled .session-tab-dot{background:var(--warning)}.session-tab-close{width:26px;height:26px;margin-right:3px;opacity:0;pointer-events:none;transition:opacity .1s}.thread-tab-item:hover .session-tab-close{opacity:1;pointer-events:auto}.ui-icon-button.session-tab-close{border:0}.ui-icon-button.session-tab-close:hover:not(:disabled){background:transparent;border:0}.ui-icon-button.session-tab-close:focus-visible{outline:none}.session-tab-add{width:100%;min-height:32px}.threads-compose-btn{flex-shrink:0;width:26px;height:26px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm);opacity:0;pointer-events:none;transition:opacity .1s}.threads-section .panel-head:hover .threads-compose-btn{opacity:1;pointer-events:auto}.ui-icon-button.threads-compose-btn{border:0}.ui-icon-button.threads-compose-btn:hover:not(:disabled){background:transparent;border:0}.ui-icon-button.threads-compose-btn:focus-visible{outline:none}.threads-compose-btn:disabled{opacity:.4;cursor:not-allowed}.threads-compose-btn svg{width:16px;height:16px;fill:none;stroke:currentColor}.notify-toggle{height:34px;border:1px solid var(--border);border-radius:0;background:var(--panel-soft);color:var(--text);display:inline-flex;align-items:center;gap:8px;padding:0 10px;cursor:pointer}.notify-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor}.notify-toggle.on{border-color:var(--success)}.notify-toggle.mobile{width:36px;min-width:36px;padding:0;justify-content:center}.notify-toggle.mobile span{display:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:color-mix(in srgb,var(--text) 36%,transparent);display:flex;align-items:center;justify-content:center;z-index:1200;padding:16px;-webkit-backdrop-filter:none;backdrop-filter:none}.modal-card{width:fit-content;min-width:min(420px,100vw - 32px);max-width:min(680px,100vw - 32px);background:var(--panel);border:1px solid var(--border-strong);border-radius:20px;box-shadow:none;padding:16px;color:var(--text)}.ui-modal-backdrop{z-index:var(--layer-modal);background:color-mix(in srgb,var(--text) 36%,transparent);-webkit-backdrop-filter:none;backdrop-filter:none}.ui-modal-card{background:var(--panel);border:1px solid var(--border-strong);border-radius:20px;box-shadow:none;color:var(--text)}.ui-button{border-radius:var(--radius-sm);padding:12px 14px;cursor:pointer;box-shadow:none;font-family:inherit;transition:background .16s ease,border-color .16s ease,color .16s ease}.ui-button:disabled{cursor:not-allowed;opacity:.58}.ui-button-primary{border:1px solid var(--brand);background:var(--brand);color:var(--bg)}.ui-button-primary:hover:not(:disabled){background:var(--brand-strong);border-color:var(--brand-strong)}.ui-button-secondary,.ui-button-ghost{border:1px solid var(--border);background:transparent;color:var(--text)}.ui-button-secondary:hover:not(:disabled),.ui-button-ghost:hover:not(:disabled){background:var(--bg-soft);border-color:var(--border-strong)}.ui-input,.ui-textarea,.ui-select,.project-picker-input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-soft);color:var(--text);font-size:var(--font-size-md);outline:none;box-shadow:none}.ui-textarea{resize:vertical}.ui-textarea:focus,.ui-select:focus{background:var(--panel);border-color:var(--text);box-shadow:none}.ui-input:focus,.project-picker-input:focus{background:var(--panel);box-shadow:none}.ui-input:disabled,.ui-textarea:disabled,.ui-select:disabled{opacity:.65;cursor:not-allowed}.ui-badge,.project-picker-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);padding:2px 6px;font-size:10px;line-height:1.2;font-family:inherit}.ui-badge-neutral{background:var(--panel-soft);color:var(--muted)}.ui-badge-accent{background:var(--text);color:var(--bg)}.ui-icon-button{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;font-family:inherit;transition:background .16s ease,color .16s ease,opacity .16s ease}.ui-icon-button:disabled{cursor:not-allowed;opacity:.5}.ui-icon-button:hover:not(:disabled){background:var(--panel-soft)}.ui-icon-button:active:not(:disabled){color:var(--icon-btn-active-color);background:transparent}.ui-icon-button.is-active{color:var(--text)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px}.modal-header-title{font-weight:700;font-size:16px;color:var(--brand)}.modal-close-btn{background:transparent;border:none;cursor:pointer;color:var(--muted);font-size:20px;line-height:1;padding:0 4px}.modal-close-btn:hover{color:var(--text)}.modal-divider{height:1px;background:var(--border);margin:0 20px}.modal-body{padding:20px}.modal-title{font-weight:700;color:var(--text);margin-bottom:8px}.modal-desc{color:var(--muted);margin-bottom:14px}.modal-actions{display:flex;gap:12px;flex-wrap:nowrap}.modal-actions .ui-button{flex:0 0 auto;white-space:nowrap;height:44px;border-radius:var(--radius-modal)}.project-picker-modal{width:min(480px,100vw - 32px);padding:0;max-height:70vh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border-strong);border-radius:20px;box-shadow:none;color:var(--text)}.project-picker-search{padding:12px;border-bottom:1px solid var(--border)}.project-picker-list{overflow-y:auto;max-height:400px}.project-picker-empty{padding:24px;text-align:center;color:var(--muted)}.project-picker-item{width:100%;display:flex;align-items:center;gap:8px;padding:10px 12px;background:transparent;border:none;border-radius:0;cursor:pointer;text-align:left;transition:background .1s}.project-picker-item:hover,.project-picker-item.selected{background:var(--bg-soft);color:var(--text)}.project-picker-name{font-weight:500;flex:1}.project-picker-key{font-size:var(--font-size-sm);color:var(--muted)}.project-picker-footer{padding:8px 12px;border-top:1px solid var(--border);display:flex;gap:16px;font-size:var(--font-size-sm);color:var(--muted)}.open-in-telegram-modal{width:min(420px,100vw - 32px);padding:16px;display:flex;flex-direction:column;gap:12px}.open-in-telegram-existing{display:flex;flex-direction:column;gap:4px;min-width:0;padding:10px 12px;background:var(--bg-soft);color:var(--muted);font-size:var(--font-size-sm);margin-bottom:14px}.open-in-telegram-existing-label{font-weight:600}.open-in-telegram-existing-value{display:flex;align-items:baseline;gap:6px;min-height:0;color:var(--text)}.open-in-telegram-existing-id{flex:0 0 auto;color:var(--muted);font-family:ui-monospace,monospace}.open-in-telegram-existing-title,.open-in-telegram-target{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.open-in-telegram-target{color:var(--text);font-size:var(--font-size-body);font-weight:600;margin-bottom:14px}.open-in-telegram-error{color:var(--danger);font-size:var(--font-size-sm);line-height:1.5;margin-bottom:14px}.open-in-telegram-actions{justify-content:flex-end}.shortcut-modal{width:min(600px,100vw - 32px);max-height:80vh;display:flex;flex-direction:column;padding:0;background:var(--panel);border:1px solid var(--border-strong);border-radius:20px;box-shadow:none;color:var(--text)}.shortcut-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.shortcut-modal-header h2{margin:0;font-size:18px;font-weight:600}.shortcut-modal-close{background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:24px;cursor:pointer;color:var(--text);padding:0 4px;line-height:1;font-family:inherit}.shortcut-modal-close:hover{background:var(--bg-soft);border-color:var(--border-strong)}.shortcut-modal-content{overflow-y:auto;padding:16px 20px;display:grid;grid-template-columns:1fr 1fr;gap:20px}.shortcut-section h3{margin:0 0 10px;font-size:var(--font-size-body);font-weight:600;color:var(--brand);text-transform:uppercase;letter-spacing:.05em}.shortcut-list{display:flex;flex-direction:column;gap:6px}.shortcut-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0;background:transparent;border-radius:0}.shortcut-desc{font-size:var(--font-size-md);color:var(--text)}.shortcut-modal-footer{padding:12px 20px;border-top:1px solid var(--border);font-size:var(--font-size-sm);color:var(--muted);text-align:center}kbd{display:inline-block;padding:3px 7px;font-size:var(--font-size-sm);font-family:inherit;color:var(--text);background:var(--panel-soft);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:none;margin:0 2px}.workspace-panel-resizer{width:6px;position:absolute;top:0;bottom:0;left:-6px;cursor:col-resize;background:transparent;border-left:1px solid transparent;z-index:1}.workspace-panel-resizer:hover,.workspace-panel-resizer.active{background:linear-gradient(180deg,#253346eb,#1b2739f5);border-left-color:#3b516b}.workspace-panel-head{padding:14px 14px 10px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(36,53,72,.92)}.workspace-panel-title{font-size:var(--font-size-sm);font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#8eb5de}.workspace-panel-subtitle{margin-top:4px;font-size:var(--font-size-body);color:var(--text);word-break:break-word}.workspace-refresh{width:36px;height:36px;border-radius:0;border:1px solid var(--border);background:#0c1420db;color:var(--text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.workspace-refresh svg{width:16px;height:16px;fill:none;stroke:currentColor}.workspace-refresh:hover{background:#132134f0;border-color:#516a8acc}.workspace-tree{flex:1;min-height:0;overflow:auto;padding:8px 8px 14px}.workspace-tree-node{min-width:max-content}.workspace-tree-item{width:max-content;min-width:100%;border:0;background:transparent;border-radius:0;display:flex;align-items:center;gap:6px;min-height:23px;padding:1px 8px;color:var(--text);cursor:pointer;text-align:left}.workspace-tree-item:hover{background:#182538e0}.workspace-tree-item.selected{background:#1c385cc7}.workspace-tree-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center}.workspace-tree-icon.caret{width:14px;color:#8ea2c0}.workspace-tree-icon.glyph{width:16px;color:#9bb2d1}.workspace-tree-icon svg{width:16px;height:16px;fill:none;stroke:currentColor}.workspace-tree-label{flex:0 0 auto;min-width:0;overflow:visible;text-overflow:clip;white-space:nowrap;font-size:var(--font-size-body)}.workspace-tree-label-compact{font-weight:600;letter-spacing:-.01em}.workspace-panel.desktop{margin-top:12px;height:calc(100% - 12px)}.workspace-sidebar-topbar{min-height:48px;display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel)}.workspace-file-tabs{flex:1;min-width:0;display:flex;align-items:center}.workspace-file-tab{max-width:100%;min-height:34px;display:inline-flex;align-items:center;gap:8px;padding:0 12px;border:1px solid transparent;border-radius:var(--radius-modal);background:transparent;color:var(--muted);font-size:var(--font-size-body);white-space:nowrap}.workspace-file-tab.active{border-color:var(--border);background:var(--bg-soft);color:var(--text)}.workspace-file-tab-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;color:currentColor}.workspace-file-tab-icon svg{width:16px;height:16px;fill:none;stroke:currentColor}.workspace-file-tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-panel-collapse{flex:0 0 auto;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-card);background:transparent;color:var(--muted);cursor:pointer}.workspace-panel-collapse:hover{background:var(--panel-soft)}.workspace-panel-collapse svg{width:16px;height:16px}.workspace-sidebar-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;background:var(--panel)}.workspace-structure-panel{flex:0 1 auto;min-width:140px;min-height:0;display:flex;flex-direction:column;background:var(--panel)}.workspace-structure-resizer{flex:0 0 8px;border-left:1px solid var(--border);background:var(--panel);cursor:col-resize;touch-action:none}.workspace-structure-resizer:hover,.workspace-structure-resizer.active,.workspace-structure-resizer:focus-visible{background:var(--panel-soft);border-left-color:var(--border-strong)}.workspace-preview-pane{flex:1 1 auto;min-width:140px}.workspace-structure-head{min-height:56px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 10px 8px;border-bottom:1px solid var(--border)}.workspace-structure-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:var(--font-size-body);font-weight:600}.workspace-structure-subtitle{margin-top:2px;color:var(--muted);font-size:var(--font-size-xs)}.workspace-unified-head{min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel)}.workspace-unified-head-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:var(--font-size-sm)}.workspace-unified-head-actions{flex:0 0 auto;display:flex;align-items:center;gap:6px;margin-left:auto}.workspace-unified-action{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;transition:color .16s ease}.workspace-unified-action svg{width:16px;height:16px;fill:none;stroke:currentColor}.workspace-unified-expand svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.workspace-unified-action:hover{background:var(--panel-soft);border-radius:var(--radius-card)}.workspace-unified-action:active:not(:disabled){color:var(--icon-btn-active-color);background:transparent}.workspace-unified-action.active{color:var(--text)}.workspace-file-viewer{display:flex;flex-direction:column;overflow:hidden;background:var(--panel)}.workspace-tree-badge{flex:0 0 auto;min-width:24px;padding:2px 6px;border-radius:0;background:#202d3fdb;font-size:var(--font-size-xs);font-weight:700;text-align:center}.workspace-tree-item.status-m .workspace-tree-label,.workspace-tree-item.status-m .workspace-tree-badge{color:#b86a00}.workspace-tree-item.status-a .workspace-tree-label,.workspace-tree-item.status-a .workspace-tree-badge{color:#0a7a51}.workspace-tree-item.status-r .workspace-tree-label,.workspace-tree-item.status-r .workspace-tree-badge{color:#1864b8}.workspace-tree-item.status-d .workspace-tree-label,.workspace-tree-item.status-d .workspace-tree-badge,.workspace-tree-item.deleted .workspace-tree-label,.workspace-tree-item.deleted .workspace-tree-badge{color:#b42318}.workspace-tree-item.status-untracked .workspace-tree-label,.workspace-tree-item.status-untracked .workspace-tree-badge{color:#7a4cb3}.workspace-tree-group{margin-bottom:12px;padding-bottom:6px;border-bottom:1px solid rgba(36,53,72,.9)}.workspace-tree-group-label{padding:4px 8px 8px;font-size:var(--font-size-xs);font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.workspace-panel-state{padding:10px 8px;color:var(--muted);font-size:var(--font-size-sm);line-height:1.5}.workspace-preview-shell{margin-top:12px;min-height:0;flex:0 0 auto;display:flex;flex-direction:column}.workspace-preview-panel{min-height:0;height:100%;max-height:none;border:1px solid rgba(68,101,140,.82);border-radius:0;background:linear-gradient(180deg,#0d1623f5,#0a121efa);box-shadow:var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column}.workspace-preview-backdrop{z-index:1250}.workspace-preview-modal{position:relative;width:min(860px,100vw - 32px);height:min(560px,100vh - 32px);max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);padding:0;overflow:hidden;-webkit-user-select:text;user-select:text}.workspace-preview-modal.resizing{-webkit-user-select:none;user-select:none}.workspace-preview-panel.diff-mode{max-height:none}.workspace-preview-inline{flex:1;min-width:0;min-height:0;width:100%;height:100%;border:0;border-radius:0;box-shadow:none}.workspace-preview-head{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;padding:12px 14px;border-bottom:1px solid rgba(36,53,72,.92)}.workspace-preview-copy{min-width:0}.workspace-preview-title{font-size:var(--font-size-sm);font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#8eb5de}.workspace-preview-path{margin-top:4px;font-size:var(--font-size-body);color:var(--text);word-break:break-word}.workspace-preview-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}.workspace-preview-action{width:36px;height:36px;padding:0;display:inline-flex;align-items:center;justify-content:center}.workspace-preview-action svg{width:16px;height:16px;fill:none;stroke:currentColor}.workspace-preview-close{border:1px solid var(--border);background:#0c1420db;color:var(--text);border-radius:0;cursor:pointer}.workspace-preview-close:hover{background:#132134f0;border-color:#516a8acc}.workspace-preview-empty,.workspace-preview-note{padding:14px;color:var(--muted);font-size:var(--font-size-sm)}.workspace-file-viewer>.workspace-preview-empty{flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.workspace-preview-body{flex:1 1 auto;min-width:0;min-height:0;overflow:auto;padding-right:12px;padding-bottom:12px}.workspace-preview-resizer{position:absolute;z-index:3}.workspace-preview-resizer-width{top:48px;right:-1px;width:12px;bottom:12px;cursor:ew-resize}.workspace-preview-resizer-height{left:12px;right:12px;bottom:-1px;height:12px;cursor:ns-resize}.workspace-preview-resizer-width:hover,.workspace-preview-resizer-width:active,.workspace-preview-resizer-height:hover,.workspace-preview-resizer-height:active{background:linear-gradient(180deg,#253346fa,#1b2739fa)}.workspace-preview-resizer-width:before{content:"";position:absolute;left:50%;top:50%;width:4px;height:88px;transform:translate(-50%,-50%);border-radius:999px;background:linear-gradient(180deg,transparent 0%,rgba(142,181,222,.95) 18%,rgba(189,219,255,.98) 50%,rgba(142,181,222,.95) 82%,transparent 100%);box-shadow:0 0 0 1px #060c1647,0 0 12px #8db5de29}.workspace-preview-resizer-height:before{content:"";position:absolute;left:50%;top:50%;width:88px;max-width:calc(100% - 24px);height:4px;transform:translate(-50%,-50%);border-radius:999px;background:linear-gradient(90deg,transparent 0%,rgba(142,181,222,.95) 18%,rgba(189,219,255,.98) 50%,rgba(142,181,222,.95) 82%,transparent 100%);box-shadow:0 0 0 1px #060c1647,0 0 12px #8db5de29}.workspace-preview-resizer-width:after,.workspace-preview-resizer-height:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:999px;border:1px solid rgba(8,15,24,.18);box-shadow:0 0 0 1px #ffffff14,inset 0 0 0 1px #ffffff0d}.workspace-preview-resizer-width:after{width:10px;height:28px}.workspace-preview-resizer-height:after{width:28px;height:10px}.workspace-file-code{margin:0;border:0;border-radius:0;width:max-content;min-width:100%;min-height:100%;overflow:visible}.composer-workspace-toggle{border:1px solid var(--border);background:#0c1420db;color:var(--text)}.composer-workspace-toggle:hover{border-color:#516a8acc;background:#132134f0;transform:translateY(-1px)}.composer-workspace-toggle.active{background:#2ec4b629;border-color:#2ec4b657;color:#9be8df}.composer-workspace-toggle svg{width:20px;height:20px}.agent-floating-settings{z-index:1215}.agent-floating-settings-card{width:520px;min-width:360px;max-width:min(720px,100vw - 80px);min-height:280px;max-height:calc(100vh - 120px);border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--bg-soft);color:var(--text);box-shadow:var(--shadow-md);padding:14px;overflow:auto;resize:both}.agent-floating-settings .agent-field-textarea{min-height:360px;background:var(--panel-soft);color:var(--text)}.agent-floating-settings-close{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--muted);border-radius:0;padding:4px 6px;cursor:pointer}.agent-floating-settings-close svg{width:16px;height:16px;fill:none;stroke:currentColor}.agent-floating-settings-close:hover:not(:disabled){background:var(--panel-soft);border-radius:var(--radius-card)}.agent-floating-settings-close:active:not(:disabled){color:var(--icon-btn-active-color)}.agent-floating-settings-close:disabled{opacity:.65;cursor:not-allowed}.agent-floating-settings-note{font-size:var(--font-size-xs);color:var(--muted);border-top:1px solid var(--border);padding-top:10px}.topbar-leading{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.topbar{background:#141b26eb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:10px 14px;display:flex;justify-content:flex-start;align-items:center;border:1px solid var(--border);border-radius:0;box-shadow:var(--shadow-sm)}.topbar-brand{display:inline-flex;align-items:center;min-height:34px;padding:0 2px;font-size:var(--font-size-body);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#9ed7ff;font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,monospace}.menu-toggle,.theme-toggle{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);background:#0c1420db;color:var(--text);border-radius:0;min-height:34px;padding:0 10px;cursor:pointer;line-height:1;font-size:var(--font-size-body);font-weight:500;white-space:nowrap;transition:transform .12s ease,background .16s ease,border-color .16s ease}.theme-toggle{background:transparent;border-radius:var(--radius-card)}.menu-toggle svg,.theme-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;flex:0 0 auto}.notify-toggle.icon-only,.theme-toggle.icon-only,.menu-toggle.icon-only{width:34px;min-width:34px;height:34px;padding:0;justify-content:center}.notify-toggle.icon-only span,.theme-toggle.icon-only span,.menu-toggle.icon-only span,.mobile-main-actions{display:none}.menu-toggle:hover{background:#132134f0;border-color:#516a8acc;transform:translateY(-1px)}.topbar-actions{display:flex;align-items:center;gap:10px}.sidebar-backdrop{display:none}.theme-toggle:hover{background:var(--bg-soft);border-color:var(--border-strong);transform:translateY(-1px)}.workspace-panel,.workspace-preview-panel,.workspace-preview-modal{background:var(--panel);border-color:var(--border);border-radius:0;box-shadow:none}.workspace-panel-head,.workspace-preview-head{background:var(--panel);border-color:var(--border)}.workspace-panel-title,.workspace-preview-title{color:var(--text);font-size:var(--font-size-body);letter-spacing:0;text-transform:none}.workspace-panel-title:before{content:none}.workspace-panel-head{min-height:48px;padding:10px 12px}.workspace-panel-subtitle{margin-top:2px;font-size:var(--font-size-xs)}.workspace-filter-wrap{padding:10px 10px 6px}.workspace-filter-input{width:100%;min-height:36px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-modal);background:var(--panel);color:var(--text);font:inherit;font-size:var(--font-size-body)}.workspace-filter-input::placeholder{color:var(--muted)}.workspace-filter-input:focus{outline:none;border-color:var(--border-strong);background:var(--panel)}.workspace-tree{background:var(--panel);padding-top:6px}.workspace-tree-item{border-radius:0;color:var(--text)}.workspace-tree-item:hover{background:var(--bg-soft)}.workspace-tree-item.selected{background:var(--panel-soft);box-shadow:inset 2px 0 0 var(--text)}.workspace-tree-icon,.workspace-tree-badge,.workspace-panel-subtitle,.workspace-preview-path,.workspace-tree-icon.caret,.workspace-tree-icon.glyph{color:var(--muted)}.workspace-tree-badge{background:var(--panel-soft)}.workspace-tree-group{border-color:var(--border)}.workspace-refresh,.workspace-preview-action{background:transparent;border-color:transparent;border-radius:var(--radius-sm);color:var(--muted)}.workspace-refresh:hover,.workspace-preview-action:hover{background:var(--panel-soft);border-color:transparent}.workspace-preview-body,.file-change-code{background:var(--bg-soft);border-color:var(--border);box-shadow:none}.file-change-code{border:none}.file-change-code-row{border-color:var(--border)}.workspace-panel-resizer:hover,.workspace-panel-resizer.active,.workspace-preview-resizer-width:hover,.workspace-preview-resizer-width:active,.workspace-preview-resizer-height:hover,.workspace-preview-resizer-height:active{background:var(--panel-soft);border-color:var(--border-strong)}.menu-toggle{background:transparent;border-color:var(--border);border-radius:var(--radius-sm);color:var(--text)}.menu-toggle:hover{background:var(--bg-soft);border-color:var(--border-strong);transform:none}.chat{flex:1;overflow:auto;padding:24px 18px 14px;min-height:0;margin:12px 0;border:0;border-radius:0;background:repeating-linear-gradient(0deg,rgba(255,255,255,.02) 0,rgba(255,255,255,.02) 1px,transparent 1px,transparent 24px),linear-gradient(180deg,#101621b8,#0d121c94);box-shadow:none}.approval-stack{position:sticky;top:0;z-index:3;display:flex;flex-direction:column;gap:10px;margin-bottom:14px;padding-bottom:6px}.msg-row{display:flex;width:100%;margin-bottom:10px}.msg-row.user{justify-content:flex-end}.msg-row.assistant{justify-content:flex-start}.msg-row.system{justify-content:center}.msg-row.file-panel{display:block}.msg{position:relative;width:min(78%,760px);max-width:min(78%,760px);padding:10px 14px 11px;border-radius:0;white-space:pre-wrap;box-shadow:0 6px 16px #0208144d;border:1px solid var(--border)}.msg:before{display:none}.msg-body{font-size:var(--font-size-md);line-height:1.5}.msg-meta{margin-top:8px;font-size:var(--font-size-xs);line-height:1.4;opacity:.72;word-break:break-all}.msg-label{margin-bottom:8px;font-size:var(--font-size-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.72}.msg.assistant.subagent{background:#222c3cf5;border-color:#3a4658;color:#d4deed}.msg.assistant.kind-plan{background:linear-gradient(180deg,#4e3f14e6,#423611f0);border-color:#e1bc5c80;color:#ffe9b8}.msg.assistant.kind-plan .msg-label{color:#f4c66c}.msg.system{width:min(72%,560px);max-width:min(72%,560px);text-align:center;color:var(--muted);background:#1b2434e6;border:1px solid var(--border);border-radius:0;padding:9px 14px;box-shadow:none}.msg.system:before{display:none}.msg.system .msg-body{font-size:var(--font-size-sm)}.msg.system .msg-meta{margin-top:6px;font-size:10px}.msg.system.kind-plan_checklist{width:min(72%,640px);max-width:min(72%,640px);text-align:left;border-radius:0;padding:12px 14px;background:#1a2638eb;border-color:#8ab1d673;color:#b8d1ee}.msg.system.kind-plan_checklist .msg-body{font-size:var(--font-size-sm);line-height:1.6}.msg.system.kind-plan_checklist .msg-label{color:#426b96;opacity:.92}.file-change-panel{width:100%;border:1px solid var(--border);border-radius:0;background:linear-gradient(180deg,#161e2cf5,#121925fa);box-shadow:0 10px 22px #02081447;overflow:hidden}.file-change-panel-scroll{max-height:calc(14.5em + 84px);overflow:auto}.file-change-entry{padding:14px 16px 16px;border-top:1px solid rgba(125,156,196,.18)}.file-change-entry:first-child{border-top:0}.file-change-summary{white-space:pre-wrap;font-size:var(--font-size-body);line-height:1.55;color:#b9cde8}.file-change-label{margin-bottom:8px;font-size:var(--font-size-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#7fa5d4}.file-change-files{margin-top:10px;font-size:var(--font-size-sm);line-height:1.5;color:#9eb6d4;white-space:pre-wrap}.event-panel-details{margin-top:10px;font-size:var(--font-size-sm);color:#9eb6d4}.event-panel-details summary{cursor:pointer;-webkit-user-select:none;user-select:none}.file-change-entry.kind-reasoning{background:linear-gradient(180deg,#4a4122c7,#3d361dd1)}.file-change-entry.kind-web_search{background:linear-gradient(180deg,#18365cc7,#142d4ed1)}.file-change-entry.kind-image_generation{background:linear-gradient(180deg,#124a46c7,#0f3c38d1)}.file-change-code{margin:12px 0 0;border-radius:0;border:none;background:#0d1726;color:#dce9fb;font-size:var(--font-size-sm);line-height:1.45;overflow:auto;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}.file-change-code-row{display:grid;grid-template-columns:56px 56px minmax(0,1fr);align-items:start}.file-change-code-row:first-child{border-radius:0}.file-change-code-row:last-child{border-radius:0}.file-change-code-row.type-add{background:#e6ffec}.file-change-code-row.type-del{background:#ffebe9}.file-change-code-row.type-hunk,.file-change-code-row.type-meta{background:#dff0ff}.file-change-code-line,.file-change-code-text{display:block;padding:6px 10px}.file-change-code-line{color:#7e97b4;text-align:right;-webkit-user-select:none;user-select:none;border-right:1px solid rgba(125,156,196,.18)}.file-change-code-text{white-space:pre;overflow-x:auto}.chat{background:var(--bg);border:0;border-radius:0;box-shadow:none}.msg{max-width:min(860px,92%);background:transparent;border:none;border-radius:var(--radius-card);box-shadow:none;color:var(--text)}.msg:before{color:var(--muted);font-weight:700}.msg.user{width:auto;background:#e4e1e1;border:none;color:var(--text)}.msg.user:before{content:"[you]"}.msg.assistant{background:#e4e1e1;border:none}.msg.assistant:before{content:"[codex]"}.msg.assistant.subagent:before{content:"[agent]"}.msg.assistant.kind-plan,.msg.system.kind-plan_checklist{background:var(--bg-soft);border-color:var(--border-strong)}.msg.system{background:var(--bg-soft);border:none;border-radius:var(--radius-pill);color:var(--muted)}.msg.system:before{content:"[system]"}.msg-label,.file-change-label{color:var(--text);font-family:inherit;letter-spacing:0;text-transform:uppercase}.msg-meta,.file-change-files{color:var(--muted)}.file-change-panel,.file-change-entry,.event-panel-details{background:var(--panel);border-color:var(--border);border-radius:0;box-shadow:none}.file-change-entry.kind-reasoning,.file-change-entry.kind-web_search,.file-change-entry.kind-image_generation{background:var(--bg-soft)}.file-change-code{background:var(--text);border-color:var(--text);color:var(--bg)}.file-change-code-line{color:var(--muted);border-color:color-mix(in srgb,var(--bg) 18%,transparent)}.msg.assistant .msg-body{white-space:normal}.msg.assistant .msg-body>*:first-child{margin-top:0}.msg.assistant .msg-body>*:last-child{margin-bottom:0}.msg.assistant .msg-body p{margin:0 0 .6em}.msg.assistant .msg-body h1,.msg.assistant .msg-body h2,.msg.assistant .msg-body h3{margin:.9em 0 .4em;font-weight:700;line-height:1.3}.msg.assistant .msg-body h1{font-size:1.2em}.msg.assistant .msg-body h2{font-size:1.1em}.msg.assistant .msg-body h3{font-size:1em}.msg.assistant .msg-body ul,.msg.assistant .msg-body ol{margin:.3em 0 .6em;padding-left:1.4em}.msg.assistant .msg-body li{margin-bottom:.2em}.msg.assistant .msg-body strong{font-weight:700}.msg.assistant .msg-body em{font-style:italic}.msg.assistant .msg-body a{color:var(--accent, #4fc3f7);text-decoration:underline}.msg.assistant .msg-body blockquote{margin:.5em 0;padding:.3em 0 .3em .8em;border-left:3px solid var(--border-strong, #4a5568);color:var(--muted)}.msg.assistant .msg-body code{font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.88em;padding:1px 5px;border-radius:3px;background:color-mix(in srgb,currentColor 10%,transparent)}.msg.assistant .msg-body pre{margin:.5em 0 .8em;border-radius:4px;border:1px solid var(--border);background:var(--text);overflow:auto}.msg.assistant .msg-body pre code{display:block;padding:10px 12px;background:transparent;color:var(--bg);font-size:var(--font-size-sm);line-height:1.5;white-space:pre}.msg.assistant .msg-body table{border-collapse:collapse;margin:.5em 0 .8em;font-size:var(--font-size-body)}.msg.assistant .msg-body table th,.msg.assistant .msg-body table td{padding:5px 10px;border:1px solid var(--border)}.msg.assistant .msg-body table th{font-weight:700}:root[data-theme=dark] .msg.user{background:var(--panel-soft)}:root[data-theme=dark] .msg.assistant{background:var(--panel-soft)}.composer{position:relative;background:#0a111cd1;padding:10px;box-shadow:var(--shadow-sm)}.composer-inner{max-width:820px;margin:0 auto;border:1px solid var(--border);border-radius:var(--radius-modal);display:flex;gap:8px;align-items:flex-start}.input-wrap{position:relative;flex:1}.composer-left-group{display:flex;align-items:center;gap:4px;flex:0 0 auto}.composer-input-shell{display:flex;align-items:stretch;border:1px solid var(--border);border-radius:var(--radius-pill);background:#0e1724;transition:border-color .16s ease,box-shadow .16s ease}.composer-input-shell:focus-within{border-color:#5d81b2;box-shadow:0 0 0 3px #7bb4ff2e}.composer-plan-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;font-size:var(--font-size-xs);font-weight:700;letter-spacing:.5px;border-radius:6px;border:none;cursor:pointer;background:none;color:var(--muted);transition:color .14s ease,background .14s ease,border-radius .14s ease;white-space:nowrap;line-height:1.4}.composer-plan-chip:hover:not(:disabled){border:none;background:var(--panel-soft);border-radius:999px;color:var(--text)}.composer-plan-chip:disabled{opacity:.55;cursor:not-allowed}.composer textarea{width:100%;min-height:36px;max-height:180px;resize:none;overflow:auto;border:0;border-radius:0;padding:8px 10px;background:transparent;color:var(--text)}.composer textarea:focus{outline:none}.composer-action{width:40px;min-width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;transition:transform .12s ease,box-shadow .16s ease,background .16s ease,border-color .16s ease;flex:0 0 auto}.composer-action svg{width:16px;height:16px;fill:none;stroke:currentColor}.composer-send{border:none;background:var(--brand);color:#fff}.composer-send:hover{background:var(--brand-strong);transform:translateY(-1px)}.composer-stop{border:1px solid rgba(255,139,128,.35);background:#73252838;color:var(--danger)}.composer-stop:hover{background:#8b2c3052;border-color:#ff8b8080;transform:translateY(-1px)}.composer-new-chat{border:none;background:transparent;color:var(--muted)}.composer-new-chat:hover:not(:disabled){border:none;background:transparent;color:var(--text);transform:none}.composer-new-chat svg{width:18px;height:18px}.slash-panel{position:absolute;left:0;right:0;bottom:calc(100% + 8px);max-height:230px;overflow:auto;border:1px solid var(--border);background:#0e1724;border-radius:0;box-shadow:var(--shadow-md);padding:6px;z-index:20}.slash-item{width:100%;text-align:left;border:1px solid transparent;background:transparent;border-radius:0;padding:8px 10px;cursor:pointer}.slash-item:hover,.slash-item.active{background:#1c786c2e;border-color:#36c7bb47}.activity-indicator{max-width:820px;margin:0 auto 12px;padding:0 6px;font-size:var(--font-size-sm);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.composer-activity-indicator{position:absolute;left:12px;right:12px;bottom:calc(100% + 8px);z-index:4;margin:0 auto;padding:8px 12px;border:1px solid rgba(43,63,84,.95);border-radius:0;background:#0a111cf0;box-shadow:0 14px 28px #0208124d;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none}.composer{background:var(--bg);padding:10px 0 12px;box-shadow:none}.composer-inner{background:var(--bg-soft);border-radius:var(--radius-modal);box-shadow:none;flex-direction:column;align-items:stretch;gap:0}.composer-input-shell{background:transparent;border:none;border-radius:var(--radius-modal) var(--radius-modal) 0 0;box-shadow:none;padding:10px 12px 4px}.composer-input-shell:focus-within{background:transparent;border:none;box-shadow:none}.composer-bottom-bar{display:flex;align-items:center;justify-content:space-between;padding:4px 8px 8px;border-radius:0 0 var(--radius-modal) var(--radius-modal)}.composer-right-group{display:flex;align-items:center}.composer textarea{background:transparent;color:var(--text);font-family:inherit}.composer textarea::placeholder{color:var(--muted)}.composer-action,.composer-workspace-toggle{background:transparent;border-color:var(--border);border-radius:var(--radius-sm);box-shadow:none;color:var(--text)}.composer-action:hover,.composer-workspace-toggle:hover{background:var(--panel-soft);border-color:var(--border-strong);transform:none}.composer-workspace-toggle.active{background:var(--panel-soft);border-color:var(--text);color:var(--text)}.composer-new-chat{border:none;background:transparent;color:var(--muted);box-shadow:none}.composer-new-chat:hover:not(:disabled){border:none;background:var(--panel-soft);color:var(--text);transform:none;border-radius:50%}.composer-action.composer-send{background:var(--text);border:none;border-radius:50%;color:var(--bg);width:36px;min-width:36px;height:36px}.composer-action.composer-send svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}.composer-action.composer-send:hover{background:var(--muted);border:none;color:var(--bg);transform:none}.composer-stop{background:transparent;border-color:var(--danger);color:var(--danger)}.slash-panel{background:var(--panel);border-color:var(--border-strong);border-radius:var(--radius-sm);box-shadow:none}.slash-item{border-radius:0}.slash-item:hover,.slash-item.active{background:var(--bg-soft)}.activity-indicator,.composer-activity-indicator{color:var(--muted)}.composer-activity-indicator{background:var(--panel);border-color:var(--border);border-radius:var(--radius-sm);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}.login{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));min-height:100vh}.login-form-panel,.login-visual-panel{display:flex;align-items:center;justify-content:center}.login-form-panel{min-width:0;padding:24px;background:#fbfaf9}.login-visual-panel{min-width:0;overflow:hidden;background:#faf8f4}.login-visual-image{width:80%;height:80%;object-fit:contain;object-position:center}.login-card{width:min(480px,92vw);background:linear-gradient(180deg,#121c2af5,#0a121ef5);border:1px solid var(--border);border-radius:0;padding:20px;box-shadow:var(--shadow-md)}.login-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:16px}.login-copy h2{margin:0 0 8px}.login-copy p{margin:0;color:var(--muted)}.login-copy p:not(.login-tagline){font-size:var(--font-size-sm)}.login-tagline{font-size:var(--font-size-md);font-weight:600;color:var(--text);margin-bottom:4px!important}.login-card input{width:100%;margin-bottom:10px;border:1px solid var(--border);border-radius:0;padding:10px;background:#0e1724;color:var(--text)}.login-card input::placeholder{color:var(--muted)}.login-actions{display:flex;justify-content:flex-end}.login-error{color:var(--danger)}.approval{border:1px solid rgba(228,174,69,.4);background:#38280ee0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:0;padding:10px;box-shadow:0 10px 24px #0e090247}.approval-title{font-size:var(--font-size-body);font-weight:700;margin-bottom:6px}.approval-actions{display:flex;gap:8px;margin-top:8px}.login{background:var(--bg)}.login-card{background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius-card);box-shadow:none}.login-copy h2{display:flex;align-items:center;gap:8px;font-size:20px;letter-spacing:0}.login-brand-icon{width:48px;height:48px;flex:0 0 auto;object-fit:contain}.login-card input{background:var(--bg-soft);border-color:var(--border);border-radius:var(--radius-sm);color:var(--text)}.login-card input:focus{background:var(--panel)}.login-actions .primary{background:var(--text);border-color:var(--text);border-radius:var(--radius-sm);box-shadow:none;color:var(--bg)}.login-actions .primary:hover{background:var(--brand-strong);box-shadow:none;transform:none}.approval-actions .secondary{background:transparent;border-color:var(--border);border-radius:var(--radius-sm);box-shadow:none;color:var(--text)}.approval-actions .danger{background:transparent;border-color:var(--danger);border-radius:var(--radius-sm);box-shadow:none;color:var(--danger)}.approval{background:var(--panel);border:1px solid var(--warning);border-radius:var(--radius-sm);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}.approval-title:before{content:"[!] ";color:var(--warning)}:root[data-theme=dark] body,:root[data-theme=dark] .app,:root[data-theme=dark] .main,:root[data-theme=dark] .center-pane,:root[data-theme=dark] .workspace-layout,:root[data-theme=dark] .chat{background:var(--bg)}:root[data-theme=dark] .sidebar,:root[data-theme=dark] .panel,:root[data-theme=dark] .chat-header,:root[data-theme=dark] .login-card,:root[data-theme=dark] .modal-card,:root[data-theme=dark] .ui-modal-card,:root[data-theme=dark] .workspace-panel,:root[data-theme=dark] .workspace-preview-modal,:root[data-theme=dark] .approval,:root[data-theme=dark] .file-change-panel,:root[data-theme=dark] .file-change-entry{background:var(--panel);border-color:var(--border);color:var(--text)}:root[data-theme=dark] .workspace-preview-panel{background:var(--bg-soft);border-color:var(--border);color:var(--text)}:root[data-theme=dark] .composer{background:var(--bg);border-color:var(--border);color:var(--text)}:root[data-theme=dark] .msg.user,:root[data-theme=dark] .msg.assistant{background:#4f4b4b;border-color:var(--border);color:var(--text)}:root[data-theme=dark] .thread-item:hover,:root[data-theme=dark] .project-item:hover,:root[data-theme=dark] .agent-item.clickable:hover:not(:disabled),:root[data-theme=dark] .workspace-tree-item:hover,:root[data-theme=dark] .slash-item:hover,:root[data-theme=dark] .slash-item.active,:root[data-theme=dark] .project-picker-item:hover,:root[data-theme=dark] .project-picker-item.selected{background:var(--bg-soft)}:root[data-theme=dark] .thread-item.active,:root[data-theme=dark] .thread-tab-item.active,:root[data-theme=dark] .workspace-tree-item.selected,:root[data-theme=dark] .composer-mode.mode-plan,:root[data-theme=dark] .composer-workspace-toggle.active,:root[data-theme=dark] .msg.user{background:var(--panel-soft);border-color:var(--border-strong);color:var(--text)}:root[data-theme=dark] .ui-input,:root[data-theme=dark] .ui-textarea,:root[data-theme=dark] .ui-select,:root[data-theme=dark] .project-picker-input,:root[data-theme=dark] .login-card input,:root[data-theme=dark] .slash-panel{background:var(--bg-soft);border-color:var(--border);color:var(--text)}:root[data-theme=dark] .composer-inner{background:var(--bg-soft)}:root[data-theme=dark] .composer-input-shell,:root[data-theme=dark] .composer-bottom-bar,:root[data-theme=dark] .composer .ui-textarea,:root[data-theme=dark] .composer textarea{background:transparent}:root[data-theme=dark] .ui-textarea:focus,:root[data-theme=dark] .ui-select:focus,:root[data-theme=dark] .composer-input-shell:focus-within{background:#292525;border-color:transparent}:root[data-theme=dark] .agent-floating-settings .ui-textarea:focus{outline:none;border-color:var(--border);background:var(--panel-soft);box-shadow:none}:root[data-theme=dark] .ui-input:focus,:root[data-theme=dark] .project-picker-input:focus,:root[data-theme=dark] .login-card input:focus{background:var(--panel)}:root[data-theme=dark] .primary,:root[data-theme=dark] .ui-button-primary{background:var(--text);border-color:var(--text);color:var(--bg)}:root[data-theme=dark] .secondary,:root[data-theme=dark] .ui-button-secondary,:root[data-theme=dark] .ui-button-ghost,:root[data-theme=dark] .composer-action,:root[data-theme=dark] .composer-new-chat{background:transparent;border-color:var(--border);color:var(--text)}:root[data-theme=dark] .workspace-refresh,:root[data-theme=dark] .workspace-preview-action{background:transparent;border-color:transparent;color:var(--muted)}:root[data-theme=dark] .ui-icon-button,:root[data-theme=dark] .theme-toggle,:root[data-theme=dark] .notify-toggle{background:transparent;color:var(--muted)}:root[data-theme=dark] .ui-icon-button:hover:not(:disabled),:root[data-theme=dark] .notify-toggle:hover:not(:disabled),:root[data-theme=dark] .theme-toggle:hover:not(:disabled),:root[data-theme=dark] .workspace-refresh:hover:not(:disabled),:root[data-theme=dark] .workspace-preview-action:hover:not(:disabled){background:var(--panel-soft)}:root[data-theme=dark] .ui-icon-button.project-action-btn:hover:not(:disabled),:root[data-theme=dark] .ui-icon-button.session-tab-close:hover:not(:disabled),:root[data-theme=dark] .ui-icon-button.threads-compose-btn:hover:not(:disabled){background:transparent}:root[data-theme=dark] .ui-icon-button:active:not(:disabled),:root[data-theme=dark] .notify-toggle:active:not(:disabled),:root[data-theme=dark] .theme-toggle:active:not(:disabled),:root[data-theme=dark] .workspace-refresh:active:not(:disabled),:root[data-theme=dark] .workspace-preview-action:active:not(:disabled){color:var(--icon-btn-active-color);background:transparent}:root[data-theme=dark] .ui-icon-button.is-active{color:var(--text)}:root[data-theme=dark] .composer-action.composer-send{background:var(--text);border-color:transparent;color:var(--bg)}:root[data-theme=dark] .composer-action.composer-send:hover{background:var(--muted);border-color:transparent;color:var(--bg)}:root[data-theme=dark] .composer-new-chat:hover:not(:disabled){background:#3a3636;border-radius:50%}:root[data-theme=dark] .file-change-code{background:#0d1117;border:none;color:var(--text)}:root[data-theme=dark] .file-change-code-row.type-add{background:#2ea04326}:root[data-theme=dark] .file-change-code-row.type-del{background:#f8514926}:root[data-theme=dark] .file-change-code-row.type-hunk,:root[data-theme=dark] .file-change-code-row.type-meta{background:#4f8cc926}:root[data-theme=dark] .login-form-panel{background:#201d1d}:root[data-theme=dark] .login-visual-panel{background:#27221e}:root[data-theme=light] body,:root[data-theme=light] .app,:root[data-theme=light] .main,:root[data-theme=light] .center-pane,:root[data-theme=light] .workspace-layout,:root[data-theme=light] .chat{background:var(--bg)}:root[data-theme=light] .sidebar,:root[data-theme=light] .panel,:root[data-theme=light] .chat-header,:root[data-theme=light] .composer,:root[data-theme=light] .login-card,:root[data-theme=light] .modal-card,:root[data-theme=light] .ui-modal-card,:root[data-theme=light] .workspace-panel,:root[data-theme=light] .workspace-preview-modal,:root[data-theme=light] .approval,:root[data-theme=light] .file-change-panel,:root[data-theme=light] .file-change-entry{background:var(--panel);border-color:var(--border);color:var(--text)}:root[data-theme=light] .workspace-preview-panel{background:var(--bg-soft);border-color:var(--border);color:var(--text)}:root[data-theme=light] .msg.assistant{background:#f4f1f1;border-color:var(--border);color:var(--text)}:root[data-theme=light] .file-change-code{background:#fff;border:none;color:var(--text)}:root[data-theme=light] .agent-floating-settings .ui-textarea:focus{outline:none;border-color:var(--border);background:var(--panel-soft);box-shadow:none}:root[data-theme=light] .workspace-preview-body .file-change-code{background:var(--panel-soft)}:root[data-theme=light] .ui-icon-button,:root[data-theme=light] .theme-toggle,:root[data-theme=light] .notify-toggle{color:var(--muted)}:root[data-theme=light] .agent-settings-action-primary{color:var(--muted)}:root[data-theme=light] .composer-action.composer-send{color:var(--bg)}:root[data-theme=light] .composer-action.composer-send:hover{background:var(--muted);color:var(--bg)}@media (max-width: 1200px){.workspace-layout{flex-direction:column}.workspace-panel{width:100%;max-width:none;min-width:0;max-height:280px}.workspace-panel-resizer{display:none}.workspace-panel-shell{width:100%}.workspace-panel.desktop{display:none}.workspace-panel.compact{margin-top:12px}}@media (max-width: 900px){.app{position:relative}.sidebar{position:fixed;top:0;left:0;width:min(84vw,360px);height:100vh;max-width:100%;border-right:1px solid var(--border);border-bottom:0;transform:translate(-100%);transition:transform .22s ease;box-shadow:none}.sidebar.open{transform:translate(0)}.sidebar.collapsed{padding:16px;overflow:auto}.sidebar-footer{padding-bottom:4px}.sidebar-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3;display:block;border:0;padding:0;background:transparent;pointer-events:none;transition:background .22s ease}.sidebar-backdrop.open{background:color-mix(in srgb,var(--text) 36%,transparent);pointer-events:auto}.sidebar-resizer{display:none}.chat{padding:20px 10px 14px}.topbar{gap:10px;flex-wrap:wrap}.mobile-main-actions{display:flex;align-items:center;margin-bottom:8px}.chat-header{min-height:42px}.topbar-leading,.topbar-actions{width:100%}.topbar-leading{justify-content:flex-start}.main{padding:10px}.workspace-layout{gap:10px}.workspace-panel{max-height:240px}.agent-floating-settings{position:static;width:100%;margin-top:12px}.agent-floating-settings-card{width:100%;min-width:0;max-width:100%;max-height:none;resize:vertical}.topbar-actions{justify-content:flex-start}.login{grid-template-columns:1fr}.login-form-panel{min-height:100vh}.login-visual-panel,.theme-toggle span{display:none}.msg{width:92%;max-width:92%}.msg.system{width:94%;max-width:94%}.composer-mode{min-width:74px;padding:7px 8px}}.toast-notification{position:fixed;top:16px;right:16px;display:flex;align-items:flex-start;gap:10px;background:#f5f1f1;border:1px solid rgba(0,0,0,.1);border-radius:var(--radius-card);padding:12px 14px;min-width:260px;max-width:340px;z-index:9999;animation:toastSlideIn .25s ease-out,toastSlideOut .25s ease-in 4.75s forwards}:root[data-theme=dark] .toast-notification{background:#302c2c;border-color:#ffffff14}.toast-icon{flex-shrink:0;margin-top:1px;display:flex}.ui-toast-success .toast-icon{color:var(--success)}.ui-toast-error .toast-icon{color:var(--danger)}.ui-toast-warning .toast-icon{color:var(--warning)}.ui-toast-info .toast-icon{color:var(--accent)}.toast-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.toast-message{color:#201d1d;font-size:var(--font-size-body);font-weight:500}.toast-user-prompt{font-size:var(--font-size-xs);color:#201d1d8c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toast-close{flex-shrink:0;background:none;border:none;padding:0;cursor:pointer;color:#201d1d73;display:flex;align-items:center;margin-top:1px}.toast-close:hover{color:#201d1d}:root[data-theme=dark] .toast-message{color:#fdfcfc}:root[data-theme=dark] .toast-user-prompt{color:#fdfcfc8c}:root[data-theme=dark] .toast-close{color:#fdfcfc73}:root[data-theme=dark] .toast-close:hover{color:#fdfcfc}@keyframes toastSlideIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toastSlideOut{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}