handmux 0.20.3 → 0.22.0

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 (41) hide show
  1. package/README.md +10 -10
  2. package/README.zh-CN.md +10 -10
  3. package/package.json +7 -5
  4. package/public/assets/index-CRAlQZDz.css +32 -0
  5. package/public/assets/index-CzlitgRX.js +335 -0
  6. package/public/index.html +2 -2
  7. package/src/browser/bootstrap.js +68 -0
  8. package/src/browser/cookieProfiles.js +403 -0
  9. package/src/browser/coordinator.js +47 -0
  10. package/src/browser/hammerheadCompat.js +86 -0
  11. package/src/browser/hammerheadRedirectCompat.js +38 -0
  12. package/src/browser/manager.js +530 -0
  13. package/src/browser/originLabel.js +17 -0
  14. package/src/browser/profilePersistence.js +241 -0
  15. package/src/browser/protocol.js +1 -0
  16. package/src/browser/publicProxy.js +153 -0
  17. package/src/browser/routes.js +145 -0
  18. package/src/browser/sessionStore.js +78 -0
  19. package/src/browser/targetPolicy.js +137 -0
  20. package/src/browser/worker.js +32 -0
  21. package/src/browser/workerClient.js +253 -0
  22. package/src/browser/workerServer.js +98 -0
  23. package/src/cli/i18n/en.js +6 -11
  24. package/src/cli/i18n/zh.js +6 -11
  25. package/src/cli/options.js +3 -4
  26. package/src/cli/setupModel.js +3 -3
  27. package/src/cli/setupWizard.js +5 -9
  28. package/src/cli/supervisor.js +8 -3
  29. package/src/httpApi.js +10 -2
  30. package/src/previewServer.js +123 -151
  31. package/src/previews.js +54 -56
  32. package/src/push.js +16 -7
  33. package/src/routes/previews.js +9 -16
  34. package/src/routes/push.js +5 -4
  35. package/src/routes/system.js +7 -2
  36. package/src/routes/terminal.js +12 -0
  37. package/src/server.js +24 -14
  38. package/src/workspace/checkpointer.js +6 -2
  39. package/public/assets/index-C8Bg8Ecf.css +0 -32
  40. package/public/assets/index-CYZJ6vVb.js +0 -335
  41. package/src/internalPreviewGateway.js +0 -487
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  <a href="https://www.npmjs.com/package/handmux"><img src="https://img.shields.io/npm/v/handmux?color=cb3837&logo=npm" alt="npm"></a>
9
9
  <a href="https://github.com/handmux/handmux/actions/workflows/test.yml"><img src="https://github.com/handmux/handmux/actions/workflows/test.yml/badge.svg" alt="CI"></a>
10
10
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue" alt="license: AGPL-3.0"></a>
11
- <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%E2%89%A518-339933?logo=node.js&logoColor=white" alt="node"></a>
11
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%E2%89%A520-339933?logo=node.js&logoColor=white" alt="node"></a>
12
12
  </p>
13
13
 
14
14
  > **One phone, a whole mobile vibe-coding cockpit.** Built on tmux — one command on your computer, scan a QR, and your live session, Claude Code, Codex, git, previews and docs are all in your hand, creativity ready wherever you are.
@@ -27,7 +27,7 @@ handmux is more than a terminal on your phone. It puts the *same* live **tmux**
27
27
 
28
28
  ## Quick start · about a minute
29
29
 
30
- Your computer needs tmux and Node ≥ 18; the phone just needs a browser. Pick one:
30
+ Your computer needs tmux and Node ≥ 20; the phone just needs a browser. Pick one:
31
31
 
32
32
  **Homebrew — macOS (recommended)** · installs Node + tmux for you:
33
33
 
@@ -68,20 +68,20 @@ handmux start --tunnel cloudflare # instant public URL (cloudflared auto-insta
68
68
  ## Features
69
69
 
70
70
  - **Claude Code / Codex, deeply** — an inbox status ledger, thumb-approve permissions & plans, and stable host-wide usage bars shared by every connected device.
71
- - **Chat view (experimental)** — read and drive a Claude session as a chat instead of a terminal: bubbles with Markdown, tool cards with colored diffs, question cards you answer with a tap, warm colour tones. Experimental — may be unstable: enable it in Settings 启用对话视图 / Enable chat view, then switch views from the window bar.
72
- - **Real-time terminal + desktop physical keyboard input** — terminal output streams as it happens on both phone and desktop. Scrolling up immediately browses recent tmux history without losing your place, pauses the stream when needed, and loads older history as you continue; returning to the bottom resynchronizes the live screen. When the source pane is shorter than the browser, spare rows show recent history above a faint dashed live boundary instead of empty space. Leaving the page pauses delivery; after 10 seconds away, returning starts from a fresh current screen instead of replaying stale output. **Live pushing** uses WebSocket, automatically falls back to **snapshot pulling** on a poor connection, and returns after 30 stable seconds. One top-right tag combines the actual mode and current latency; click it to see connection quality, the configured mode, fallback reason and retry countdown. Settings can keep this browser on snapshot pulling at an active interval from 0.8 to 2 seconds. On desktop, type into the current pane immediately without tapping “Show keyboard”; terminal-page keys keep working even after focus lands on the Window toolbar. `Shift+Enter` or the draft field opens draft mode with shortcuts, upload, history, voice and multiline editing intact. `Enter` sends and stays in draft mode, `Shift+Enter` inserts a newline, and IME Enter only confirms composition; press `Esc` or click the terminal to return to direct input. When a dialog, sheet, or menu is open, `Esc` closes only the top layer, one layer per press. Settings subpages stay stacked above Settings, so Back or `Esc` returns there before the main screen. Drag to select text, then copy/paste with `Cmd+C` / `Cmd+V` on macOS or `Ctrl+Shift+C` / `Ctrl+V` (or `Ctrl+Shift+V`) on Windows/Linux; `Ctrl+C` remains the terminal interrupt. Settings → Keyboard mode can auto-detect or force Mobile/Desktop for this browser only. Browser-reserved shortcuts such as `Cmd+W/T/L/R`, `F5`, and `F12` stay with the browser.
73
- - **Command & chat modes** — one bottom bar, two modes: type straight into the terminal, or talk to the agent in natural language. Both default quick bars include `Ctrl+C`. `handmux shortcuts` configures shared key/text items; each phone's ⚙ editor shows the effective quick-bar order, interleaves shared and local items, and can remove a shared item from that device only with immediate undo. Adding a phone-local item confirms success and returns directly to the list. Server changes apply live and phones reload them on foreground—no restart or polling required.
71
+ - **Chat view (experimental)** — turn a Claude session into a mobile conversation with Markdown bubbles, colored tool diffs, and tap-to-answer cards; enable it in Settings and switch back to the terminal at any time.
72
+ - **Real-time terminal + desktop keyboard** — stream the same tmux pane on phone and desktop with scrollback, weak-network fallback, direct physical-keyboard input, and native copy/paste.
73
+ - **Command & chat modes** — switch between direct terminal input and natural-language agent chat, with a customizable quick bar that stays in sync across devices.
74
74
  - **Client reload after updates** — once the server update has finished, use Settings → Reload app to load the new client without quitting and reopening the home-screen app.
75
75
  - **Script push** — notify your phone from any script or CI step with `handmux push`; target all devices, a named session, or a specific device.
76
- - **Workspace recovery** — handmux silently keeps the metadata needed to rebuild your latest tmux workspace. After a computer or tmux-server restart, restore it beside any new sessions from the phone or with `handmux restore`; existing sessions are never replaced.
76
+ - **Workspace recovery** — handmux keeps the metadata needed to restore your latest tmux workspace after a computer or tmux-server restart, without replacing existing sessions.
77
77
  - **Git viewer** — changes / commit history / any branch / full-screen colored diff, multi-repo tabs, read-only, never touches your tree.
78
- - **Site preview** a static folder, or a running HTTP/HTTPS service by port (routing / APIs / live-reload intact), in a phone or desktop viewport. Set its bare preview domain once in `handmux setup`.
78
+ - **Web Preview for URLs and static folders** preview URLs by phone or computer proxy, or open an isolated static folder, with phone/desktop layouts and zoom; it embeds pages rather than replacing a full browser.
79
79
  - **Docs** — tap a path in the terminal to open it; Markdown rendered, font zoom, sentence-by-sentence read-aloud.
80
80
  - **Mobile select & copy** — long-press to select in the terminal, drag iOS-style handles to fine-tune, copy the selection / a whole line / a whole paragraph.
81
81
  - **Files both ways** — multi-select upload from the chat box, download, share in, copy any absolute path.
82
82
  - **Ideas — catch every one** — a thought the moment it strikes: a per-window idea/to-do list, jot one by voice and drop it straight into the prompt.
83
83
  - **Built for flaky networks** — backoff reconnect, connection-lost banner, offline page, polling that pauses in the background; a reflow-safe cursor.
84
- - **Zero-install PWA** — runs in the browser; add to home screen for full-screen. Multilingual — English, 简体 / 繁體中文, 日本語, 한국어.
84
+ - **Zero-install PWA** — runs full-screen from your home screen, with English, 简体 / 繁體中文, 日本語, and 한국어.
85
85
 
86
86
  ## Workspace recovery
87
87
 
@@ -140,13 +140,13 @@ No tunnel by default — the phone connects **straight to your own computer**, n
140
140
  - **Yes** (cloud box / public IP / forwarded port) — no tunnel needed, connect directly; fastest and most private.
141
141
  - **No** — open a tunnel. Each runs on **your own free third-party account** — handmux just wires it up and operates no relay of its own: `cloudflare` (zero-config, up in seconds, but its public edge can be slow or unreliable in some regions) · `cloudflare-named` (your own domain, steadier) · `natapp` / `cpolar` (domestic providers that stay reachable inside mainland China) · `ssh` self-hosted (through your own server).
142
142
 
143
- > Tunnel config, server-side reverse proxy, autostart, voice/push credentials, and port previews → see the **[docs](https://handmux.com/docs)**.
143
+ > Tunnel config, Web Preview, autostart, and voice/push credentials → see the **[docs](https://handmux.com/docs)**.
144
144
 
145
145
  Once autostart is installed, `handmux start` / `stop` / `restart` coordinate with that same launchd/systemd service (including after an upgrade). A lifecycle lock prevents concurrent launches; `status` shows the running version and warns with PIDs if stale/duplicate supervisors exist, while `stop` reaps every copy.
146
146
 
147
147
  ## Requirements
148
148
 
149
- Your computer needs **Node ≥ 18** and **tmux ≥ 3.0**; the phone just needs a browser. On **Windows**, run it inside **WSL2** (a real Linux kernel + real tmux) — see the [docs](https://handmux.com/docs#windows).
149
+ Your computer needs **Node ≥ 20** and **tmux ≥ 3.0**; the phone just needs a browser. On **Windows**, run it inside **WSL2** (a real Linux kernel + real tmux) — see the [docs](https://handmux.com/docs#windows).
150
150
 
151
151
  ## Feedback & community
152
152
 
package/README.zh-CN.md CHANGED
@@ -8,7 +8,7 @@
8
8
  <a href="https://www.npmjs.com/package/handmux"><img src="https://img.shields.io/npm/v/handmux?color=cb3837&logo=npm" alt="npm"></a>
9
9
  <a href="https://github.com/handmux/handmux/actions/workflows/test.yml"><img src="https://github.com/handmux/handmux/actions/workflows/test.yml/badge.svg" alt="CI"></a>
10
10
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue" alt="license: AGPL-3.0"></a>
11
- <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%E2%89%A518-339933?logo=node.js&logoColor=white" alt="node"></a>
11
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%E2%89%A520-339933?logo=node.js&logoColor=white" alt="node"></a>
12
12
  </p>
13
13
 
14
14
  > **一部手机,一整套移动 Vibe Coding 驾驶舱。** 基于 tmux——电脑上一行命令、手机扫码,你正跑着的会话、Claude Code、Codex、git、预览、文档全到手里,创造力随时随地都在你手上。
@@ -27,7 +27,7 @@ handmux 不只是把终端搬上手机。它把你电脑上**正跑着的 tmux
27
27
 
28
28
  ## 快速上手 · 约一分钟
29
29
 
30
- **电脑上**需要 tmux 和 Node ≥ 18(手机只要个浏览器)。二选一:
30
+ **电脑上**需要 tmux 和 Node ≥ 20(手机只要个浏览器)。二选一:
31
31
 
32
32
  **Homebrew —— macOS 首选** · 顺带帮你装好 Node + tmux:
33
33
 
@@ -68,20 +68,20 @@ handmux start --tunnel cloudflare # 即时公网地址(自动装 cloudflared)
68
68
  ## 功能一览
69
69
 
70
70
  - **Claude Code / Codex 深度**——收件箱状态台账、拇指批授权批计划,以及所有设备共享的本机最新 agent 用量。
71
- - **对话视图(实验性)**——把 Claude 会话当成聊天来看、来驱动,而不是终端:气泡 + Markdown 正文、带彩色 diff 的工具卡、点按即答的问题卡、暖色配色。实验性功能,可能不稳定:在设置里开启「启用对话视图(实验性功能)」后,从窗口栏切换视图。
72
- - **实时终端 + 电脑物理键盘直输**——手机和电脑上的终端输出都会实时出现;首次向上滑动即可查看最近的 tmux 历史,继续向上会加载更早内容,回到底部再重新同步,不会丢位置。远端 pane 比浏览器矮时,多出的区域会展示最近历史,并用一条很浅的破折线标出实时画面的起点,不再留出大片空白。离开页面会立即暂停传输;超过 10 秒后回来会直接抓取最新画面,不再补画旧输出。「实时推送」使用 WebSocket,网络较差时自动临时回退到「快照拉取」,持续稳定 30 秒后自动切回;右上角用一个标签合并显示当前模式和延迟,点击后可查看连接状态、设置模式、降级原因和恢复倒计时。也可在设置里固定使用「快照拉取」,并选择 0.8–2 秒的活跃刷新频率。电脑浏览器打开同一个 Handmux URL,无需点「展开键盘」即可直接输入当前 tmux pane;即使焦点落在 Window 工具栏,终端页面上的按键仍会继续发送给当前 pane。按 `Shift+Enter` 或点击草稿框进入草稿模式,快捷用语、上传、历史、语音和多行自动增高全部保留。`Enter` 发送后仍停留在草稿模式,`Shift+Enter` 换行,输入法合成中的 Enter 只确认候选词,按 `Esc` 或点击终端回到直通模式;有弹窗、浮窗或菜单时,`Esc` 每次只关闭最上层,连续按键可逐层返回。设置中的二级页面会保留设置父层,返回或 `Esc` 会先回到设置,再回到主屏。终端文字可直接用鼠标拖选,macOS 按 `Cmd+C` / `Cmd+V`、Windows / Linux 按 `Ctrl+Shift+C` / `Ctrl+V`(或 `Ctrl+Shift+V`)复制粘贴,`Ctrl+C` 仍是终端中断。设置里的「键盘模式」可选自动识别、手机或电脑,选择只影响当前浏览器;`Cmd+W/T/L/R`、`F5`、`F12` 等浏览器保留按键不发送到终端。
73
- - **命令 / 聊天双模式**——底部一栏两种模式:直接敲进终端,或用自然语言发给 agent;两种默认快捷栏都有 `Ctrl+C`。`handmux shortcuts` 配置所有设备共享的按键 / 文字项;每台手机的 ⚙ 编辑器按快捷栏实际顺序统一显示共享与本机项,可自由混排,也可只从本机移除共享项并即时撤销。本机新增成功后会明确提示并直接返回列表。服务端修改立即生效,手机回到前台自动读取,无需重启或轮询。
71
+ - **对话视图(实验性)**——用 Markdown 气泡、彩色工具 diff 和点按回答卡片把 Claude 会话变成移动端对话,可在设置中开启并随时切回终端。
72
+ - **实时终端 + 电脑键盘**——在手机和电脑上实时操控同一个 tmux pane,支持历史滚动、弱网回退、物理键盘直输和原生复制粘贴。
73
+ - **命令 / 聊天双模式**——在终端直输与自然语言对话间切换,并用跨设备同步的快捷栏快速操作。
74
74
  - **更新后重新加载客户端**——服务端更新完成后,在设置里点「重新加载应用」即可载入新版客户端,无需退出主屏应用再重新打开。
75
75
  - **脚本推送**——用 `handmux push` 从脚本或 CI 步骤推消息到手机,可指定全部设备、某个会话或某台设备。
76
- - **工作区恢复**——handmux 静默保存重建最新 tmux 工作区所需的元数据。电脑或 tmux server 重启后,可从手机或 `handmux restore` 把旧工作区恢复到新会话旁边,绝不替换现有会话。
76
+ - **工作区恢复**——handmux 静默保存必要元数据,在电脑或 tmux server 重启后恢复最新工作区,绝不替换现有会话。
77
77
  - **Git 查看器**——改动 / 提交历史 / 任意分支 / 全屏彩色 diff,多仓库分页,只读不动工作区。
78
- - **站点预览**——挑目录预览静态站,或按端口预览正跑的 HTTP/HTTPS 服务(路由 / 接口 / HMR 全保留);动态预览域名在 `handmux setup` 里一次配好即可。
78
+ - **网页预览器**——用手机直连或电脑代理预览网址,也可隔离打开静态目录,支持手机 / 电脑视图和缩放;它只嵌入网页,不替代完整浏览器。
79
79
  - **文档**——终端里点路径即开;Markdown 排版、字号缩放、逐句高亮朗读。
80
80
  - **选中 · 拷贝**——终端里长按选中,拖 iOS 式手柄精调,一键拷贝选区 / 整行 / 整段。
81
81
  - **文件双向传**——聊天框多选上传、下载、系统分享进来、复制绝对路径。
82
82
  - **想法 · 随想随记**——不错过任何点子:每窗口一份想法清单,灵感一冒就记(能语音速记),一点填进输入框。
83
83
  - **专治弱网**——退避重连、掉线横幅、离线兜底页、后台暂停轮询;光标不乱跳。
84
- - **零安装 PWA**——浏览器直接跑,可加主屏全屏运行;多语言(English、简体 / 繁體中文、日本語、한국어)。
84
+ - **零安装 PWA**——添加到主屏即可全屏运行,支持 English、简体 / 繁體中文、日本語和 한국어。
85
85
 
86
86
  ## 工作区恢复
87
87
 
@@ -140,13 +140,13 @@ handmux push <title> <body> [选项]
140
140
  - **有**(云主机 / 公网 IP / 已端口转发)—— 不用隧道,直接连,最快也最私密。
141
141
  - **没有** —— 开一条隧道。每条都跑在**你自己的免费第三方账号**上,handmux 只负责接通、自身不设中转:`cloudflare`(零配置秒通,但公共边缘在国内常不稳)· `cloudflare-named`(你的域名,更稳)· `natapp` / `cpolar`(国内厂商,大陆境内可达)· `ssh` 自建(接你自己的服务器)。
142
142
 
143
- > 隧道配置、服务端反向代理、开机自启、语音 / 推送凭证、端口预览等细节 → 见 **[文档](https://handmux.com/docs)**。
143
+ > 隧道配置、网页预览器、开机自启、语音 / 推送凭证等细节 → 见 **[文档](https://handmux.com/docs)**。
144
144
 
145
145
  安装开机自启后,`handmux start` / `stop` / `restart` 会始终与同一个 launchd/systemd 服务协同(升级后也一样)。生命周期锁会阻止并发启动;`status` 显示实际运行版本,并列出未登记/重复 supervisor 的 PID;`stop` 会回收全部副本。
146
146
 
147
147
  ## 环境要求
148
148
 
149
- 电脑需 **Node ≥ 18** 与 **tmux ≥ 3.0**;手机只要浏览器。**Windows** 请装进 **WSL2**(真 Linux 内核 + 真 tmux)——见 [文档](https://handmux.com/docs#windows)。
149
+ 电脑需 **Node ≥ 20** 与 **tmux ≥ 3.0**;手机只要浏览器。**Windows** 请装进 **WSL2**(真 Linux 内核 + 真 tmux)——见 [文档](https://handmux.com/docs#windows)。
150
150
 
151
151
  ## 反馈与交流
152
152
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handmux",
3
- "version": "0.20.3",
3
+ "version": "0.22.0",
4
4
  "description": "A mobile vibe-coding cockpit — built on tmux: drive your live session, Claude Code / Codex — anything a terminal can run — from your phone.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",
@@ -22,7 +22,7 @@
22
22
  "pwa"
23
23
  ],
24
24
  "engines": {
25
- "node": ">=18"
25
+ "node": ">=20"
26
26
  },
27
27
  "bin": {
28
28
  "handmux": "bin/handmux.js"
@@ -41,6 +41,7 @@
41
41
  "bundle": "node scripts/bundle-web.mjs",
42
42
  "prepack": "node scripts/bundle-web.mjs",
43
43
  "test": "vitest run",
44
+ "test:workspace-host": "HANDMUX_WORKSPACE_HOST=1 vitest run test/workspaceHost.test.js",
44
45
  "test:workspace-docker": "HANDMUX_WORKSPACE_DOCKER=1 vitest run test/workspaceDocker.test.js"
45
46
  },
46
47
  "dependencies": {
@@ -48,6 +49,7 @@
48
49
  "busboy": "^1.6.0",
49
50
  "compression": "^1.8.1",
50
51
  "express": "^4.19.2",
52
+ "testcafe-hammerhead": "31.7.8",
51
53
  "tunlite": "^0.10.0",
52
54
  "web-push": "^3.6.7",
53
55
  "ws": "^8.21.0"
@@ -60,13 +62,13 @@
60
62
  "vitest": "^2.0.0"
61
63
  },
62
64
  "whatsNew": [
65
+ {"version":"0.22.0","date":"2026-08-03","zh":"全屏设置 · 窗口与分屏管理更清晰","en":"Full-screen Settings · clearer window and pane management"},
66
+ {"version":"0.21.0","date":"2026-08-03","zh":"网页预览:手机直连、电脑代理与静态目录","en":"Web preview: direct, computer proxy, and static folders"},
63
67
  {"version":"0.20.3","date":"2026-08-01","zh":"实时终端显示更稳定流畅","en":"More stable, smoother live terminals"},
64
68
  {"version":"0.20.2","date":"2026-07-27","zh":"实时终端长时间运行更流畅","en":"Smoother long-running live terminals"},
65
69
  {"version":"0.20.1","date":"2026-07-26","zh":"聊天发送修复 · 电脑键盘不中断","en":"Reliable chat sending · uninterrupted desktop input"},
66
70
  {"version":"0.20.0","date":"2026-07-26","zh":"终端实时推送 · 弱网自动回退","en":"Live terminal pushing · automatic network fallback"},
67
71
  {"version":"0.19.0","date":"2026-07-25","zh":"电脑物理键盘直输 · Window 切换更流畅","en":"Desktop keyboard input · faster window switching"},
68
- {"version":"0.18.0","date":"2026-07-22","zh":"Tmux 工作区恢复 · 快捷栏自由定制","en":"Tmux workspace recovery · customizable shortcuts"},
69
- {"version":"0.17.8","date":"2026-07-20","zh":"分屏地图显示尺寸 · iPhone 交互修复","en":"Pane dimensions in the map · iPhone interaction fixes"},
70
- {"version":"0.17.7","date":"2026-07-20","zh":"单实例启动兜底 · WSL 状态命令修复","en":"Single-instance startup guard · WSL status fix"}
72
+ {"version":"0.18.0","date":"2026-07-22","zh":"Tmux 工作区恢复 · 快捷栏自由定制","en":"Tmux workspace recovery · customizable shortcuts"}
71
73
  ]
72
74
  }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
+ * https://github.com/chjj/term.js
5
+ * @license MIT
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ *
25
+ * Originally forked from (with the author's permission):
26
+ * Fabrice Bellard's javascript vt100 for jslinux:
27
+ * http://bellard.org/jslinux/
28
+ * Copyright (c) 2011 Fabrice Bellard
29
+ * The original design remains. The terminal itself
30
+ * has been extended to include xterm CSI codes, among
31
+ * other features.
32
+ */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}*{box-sizing:border-box}:root{--blue: #0a84ff;--blue-press: #0a6fd8;--blue-rgb: 10,132,255;--green: #34c759;--green-rgb: 52,199,89;--red: #ff453a;--scroll-thumb: rgba(151,162,178,.34);--scroll-thumb-hover: rgba(174,190,211,.58);--scroll-thumb-active: rgba(80,145,230,.82)}@font-face{font-family:JetBrainsMono Nerd Font;src:url(/fonts/JetBrainsMonoNerdFontMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:TW Unifont;src:url(/fonts/TWUnifont.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+2190-21FF,U+2300-23FF,U+2400-243F,U+2500-257F,U+2580-259F,U+25A0-25FF,U+2600-26FF,U+2700-27BF,U+2800-28FF,U+2B00-2BFF}html,body,#root{height:100%;margin:0;overscroll-behavior:none}body{font-family:-apple-system,system-ui,sans-serif;background:#1a1b1e;color:#e6e6e6}.app{display:flex;flex-direction:column;height:100%;overflow:hidden}.topbar{display:flex;align-items:center;gap:6px;padding:4px 8px;background:#2a2b2e}.hamburger{font-size:20px;background:none;border:none;color:#e6e6e6;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;padding:0;margin-left:-4px;touch-action:manipulation}.session-name{font-weight:600;margin-right:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fontbtn{min-width:36px;padding:4px 10px;border:none;border-radius:8px;background:#33353a;color:#e6e6e6;font-size:14px;touch-action:manipulation}.fontbtn[aria-pressed=true]{background:#2a4060;color:#7ab4f5}a.settings-linkbtn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;box-sizing:border-box}.topbar-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;background:none;color:#e6e6e6;touch-action:manipulation}.topbar-icon:active{color:var(--blue)}.topbar-icon svg{width:21px;height:21px;display:block}.settings-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:19}.settings-card{position:fixed;z-index:20;left:50%;top:50%;transform:translate(-50%,-50%);width:calc(100% - 48px);max-width:360px;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);display:flex;flex-direction:column;background:#232427;border-radius:12px;padding:16px;box-shadow:0 10px 40px #00000080}.settings-head{flex:none;display:flex;align-items:center;margin-bottom:12px}.settings-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;margin:0 -16px;padding:0 16px}.settings-heading{min-width:0;margin-right:auto;display:flex;flex-direction:column;align-items:flex-start;gap:3px}.settings-title{font-size:16px;font-weight:600;margin-right:auto}.settings-heading .settings-title{margin-right:0}.settings-subtitle{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ebebf585;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:13px;line-height:1.2;font-variant-numeric:tabular-nums}.settings-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:50%;background:#78788029;color:#ebebf58c;font-size:15px;line-height:1;touch-action:manipulation}.settings-close:active{background:#7878804d;color:#fff}.settings-close svg{width:14px;height:14px;display:block}.settings-section{padding:10px 0;border-top:1px solid #33353a}.settings-label{font-size:12px;color:#888;letter-spacing:1px;margin-bottom:8px}.settings-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.settings-toggle{display:flex;align-items:center;justify-content:space-between;gap:12px}.settings-toggle .settings-label{margin-bottom:0}.settings-page{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;flex-direction:column;min-width:0;background:#1a1b1e;color:#f2f2f7}.settings-page-head{position:relative;flex:none;min-height:calc(44px + env(safe-area-inset-top,0px));display:grid;grid-template-columns:52px minmax(0,1fr) 52px;align-items:end;padding-top:env(safe-area-inset-top,0px);background:#232427eb;border-bottom:.5px solid rgba(84,84,88,.55);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.settings-page-head h1{align-self:center;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;font-size:17px;line-height:44px;font-weight:600;letter-spacing:-.2px}.settings-page-back{align-self:stretch;min-width:44px;min-height:44px;padding:0 12px 2px 8px;display:inline-flex;align-items:center;justify-content:flex-start;border:none;background:transparent;color:#ebebf585;font:32px/1 -apple-system,system-ui,sans-serif;touch-action:manipulation}.settings-page-back:active{color:#ebebf5d1}.settings-page-head-spacer{width:52px;height:44px}.settings-page-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}.settings-page-content{width:min(100%,640px);min-height:100%;margin:0 auto;padding:14px 16px calc(28px + env(safe-area-inset-bottom,0px))}.settings-page-content.detail{padding-top:20px}.settings-page-group{margin:0 0 22px}.settings-page-group>h2{margin:0;padding:0 16px 7px;color:#ebebf585;font-size:12px;line-height:1.2;font-weight:500;letter-spacing:.25px;text-transform:none}.settings-page-list,.settings-detail-card{overflow:hidden;background:#232427;border-radius:13px;box-shadow:inset 0 0 0 .5px #ffffff09}.settings-page-row{position:relative;width:100%;min-height:52px;margin:0;padding:9px 14px 9px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px;border:none;background:transparent;color:#f2f2f7;font:15.5px/1.3 -apple-system,system-ui,sans-serif;text-align:left;text-decoration:none;touch-action:manipulation}.settings-page-row+.settings-page-row:before{content:"";position:absolute;left:16px;right:0;top:0;height:.5px;background:#54545894}button.settings-page-row:active:not(:disabled),a.settings-page-row:active{background:#78788029}button.settings-page-row:disabled,.settings-page-row.disabled{color:#ebebf54d}.settings-page-row-label{flex:1;min-width:0}.settings-page-row-trailing{flex:none;display:inline-flex;align-items:center;justify-content:flex-end;gap:7px}.settings-page-row-value{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ebebf575;font-size:14.5px;font-variant-numeric:tabular-nums}.settings-page-chevron{color:#ebebf538;font-size:23px;line-height:1;margin-top:-1px}.settings-page-external{color:#ebebf559;font-size:17px;line-height:1}.settings-page-dot{width:7px;height:7px;border-radius:50%;background:var(--red)}.settings-page-switch{cursor:pointer}.settings-page-switch.disabled{cursor:default}.settings-page-footer,.settings-detail-note{margin:7px 16px 0;color:#ebebf56b;font-size:12.5px;line-height:1.45}.settings-detail-note{margin-top:9px}.settings-page-inline-action{min-height:40px;margin:5px -8px -5px;padding:0 8px;border:none;background:transparent;color:var(--blue);font:inherit;font-weight:600;touch-action:manipulation}.settings-page-inline-action:disabled{opacity:.5}.settings-page-alert{margin-bottom:20px;padding:11px 13px;display:grid;gap:4px;border-radius:13px;background:#ff453a1c;color:#ff9b94;box-shadow:inset 0 0 0 .5px #ff453a40}.settings-page-alert strong{font-size:14px}.settings-page-alert span{color:#c9a09d;font-size:12.5px;line-height:1.45}.settings-choice-list{margin:0}.settings-choice-row{min-height:52px}.settings-choice-row[aria-pressed=true]{color:var(--blue)}.settings-choice-check{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.settings-choice-check svg{width:18px;height:18px}.settings-detail-card{padding:16px}.settings-font-card{display:grid;gap:15px}.settings-font-value{text-align:center;color:#f2f2f7;font-size:26px;font-weight:600;font-variant-numeric:tabular-nums}.settings-font-controls{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:8px}.settings-font-controls button{min-height:44px;padding:0 10px;border:none;border-radius:10px;background:#33353a;color:#f2f2f7;font-size:15px;touch-action:manipulation}.settings-font-controls button:active{background:#414348}.settings-font-controls button.selected{background:#2a4060;color:#7ab4f5}.settings-font-card p{margin:-3px 0 0;color:#ebebf56b;font-size:12.5px;text-align:center}.settings-detail-group{margin-top:24px}.settings-detail-group .settings-choice-list{border-radius:13px}.settings-page .settings-update{margin-top:14px}.settings-page-text-action{color:var(--blue)}.settings-page .push-script-content{width:100%}.settings-page .push-script-intro{margin:0 0 12px;color:var(--muted, #8a8a8e);font-size:13px;line-height:1.5}.settings-confirm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:grid;place-items:center;padding:20px;background:#00000094;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.settings-confirm{width:min(300px,100%);overflow:hidden;padding:18px 18px 0;border-radius:16px;background:#27272afa;text-align:center;box-shadow:0 18px 54px #00000094,inset 0 0 0 .5px #ffffff14}.settings-confirm h2{margin:0 0 7px;color:#f2f2f7;font-size:17px;font-weight:600}.settings-confirm p{margin:0;color:#ebebf59e;font-size:13px;line-height:1.45}.settings-confirm-actions{display:flex;margin:17px -18px 0;border-top:.5px solid rgba(84,84,88,.7)}.settings-confirm-actions button{flex:1;min-height:48px;padding:0 10px;border:none;background:transparent;color:#d8d8dc;font:15px/1.2 -apple-system,system-ui,sans-serif;touch-action:manipulation}.settings-confirm-actions button+button{border-left:.5px solid rgba(84,84,88,.7)}.settings-confirm-actions button:active{background:#7878802e}.settings-confirm-actions button.danger{color:var(--red);font-weight:600}@media (min-width: 700px){.settings-page-content{padding-left:20px;padding-right:20px}}@media (prefers-reduced-motion: reduce){.settings-page *{scroll-behavior:auto!important}}.a2hs-banner{position:fixed;z-index:60;left:8px;right:8px;top:calc(env(safe-area-inset-top,0px) + 8px);display:flex;align-items:center;gap:10px;padding:9px 10px 9px 12px;background:#1e2026eb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.09);border-radius:14px;box-shadow:0 8px 26px #00000061;animation:a2hs-in .28s ease}@keyframes a2hs-in{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.a2hs-banner{animation:none}}.a2hs-banner-icon{flex:none;font-size:19px;line-height:1;color:#7aa2f0}.a2hs-banner-txt{flex:1;min-width:0;display:grid;gap:2px}.a2hs-banner-title{font-size:13.5px;font-weight:600;color:#f2f3f5}.a2hs-banner-sub{font-size:12px;line-height:1.4;color:#b9bcc4}.a2hs-banner-cta{flex:none;padding:7px 13px;border:none;border-radius:9px;background:#2f6ad9;color:#fff;font-size:13px;font-weight:600;touch-action:manipulation}.a2hs-banner-cta:active{filter:brightness(1.12)}.a2hs-banner-x{flex:none;width:30px;height:30px;padding:0;border:none;background:transparent;color:#9aa0aa;font-size:15px;touch-action:manipulation}.a2hs-banner-x:active{color:#f2f3f5}.lang-drop{position:relative;display:inline-block}.lang-drop-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1}.lang-trigger{display:flex;align-items:center;gap:8px;padding:5px 10px;background:#33353a;border:none;border-radius:8px;color:#e6e6e6;font-size:14px;touch-action:manipulation;cursor:pointer}.lang-chevron{font-size:11px;color:#888}.lang-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:100%;background:#2a2c30;border-radius:8px;box-shadow:0 4px 20px #00000080;z-index:2;overflow:hidden}.lang-option{display:block;width:100%;padding:9px 14px;border:none;background:none;color:#e6e6e6;font-size:14px;text-align:left;touch-action:manipulation;white-space:nowrap}.lang-option:active{background:#33353a}.lang-option.active{color:#7ab4f5}.settings-value{min-width:56px;text-align:center;font-size:14px;color:#e6e6e6}.col-step{min-width:40px;padding:4px 6px;letter-spacing:.3px}.col-fine{color:#aaa}.settings-note{font-size:13px;color:#9aa0a6;flex:1 1 auto;min-width:0}.settings-hint{font-size:12px;color:#7c8088;line-height:1.5;margin-top:8px}.settings-suboption{margin-top:12px}.settings-btns--compact{gap:6px}.settings-btns--compact .fontbtn{min-width:46px}.settings-update{margin-top:10px;padding:8px 10px;border-radius:8px;background:rgba(var(--blue-rgb),.12);border:.5px solid rgba(var(--blue-rgb),.35)}.settings-update-title{font-size:14px;color:var(--blue);font-weight:600}.settings-update-new{list-style:none;margin:6px 0 0;padding:0}.settings-update-new li{font-size:12.5px;color:#d6d9de;line-height:1.5;margin:2px 0}.settings-update-new-ver{color:#9db8ff;font-weight:700;font-variant-numeric:tabular-nums;margin-right:6px}.settings-update-more{margin-top:2px}.settings-update-more summary{min-height:44px;display:flex;align-items:center;gap:5px;width:fit-content;color:#9aa7b8;font-size:12px;cursor:pointer;list-style:none;touch-action:manipulation}.settings-update-more summary::-webkit-details-marker{display:none}.settings-update-more summary:after{content:"›";display:inline-block;font-size:17px;line-height:1;transform:rotate(90deg);transition:transform .16s ease}.settings-update-more[open] summary:after{transform:rotate(-90deg)}@media (prefers-reduced-motion: reduce){.settings-update-more summary:after{transition:none}}.settings-update-more .settings-update-new{margin-top:0;padding-left:8px;border-left:1px solid rgba(var(--blue-rgb),.25)}.settings-update-how{font-size:12px;color:#9aa0a8;line-height:1.5;margin-top:6px}.settings-update-how code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#e6e8ec;background:#78788038;padding:1px 5px;border-radius:5px}@keyframes tw-spin{to{transform:rotate(360deg)}}.spinner{display:inline-block;width:14px;height:14px;flex:none;border:2px solid #4a4d52;border-top-color:#e6e6e6;border-radius:50%;animation:tw-spin .7s linear infinite}.bind-input{width:100%;padding:10px;border-radius:8px;border:1px solid #444;background:#1a1b1e;color:#fff;font-size:14px}.startup-custom{margin-top:6px}.opt+.opt{margin-top:14px}.field{width:100%;box-sizing:border-box;display:flex;align-items:center;gap:8px;padding:10px;border-radius:8px;border:1px solid #444;background:#1a1b1e;color:#fff;font-size:14px;text-align:left;touch-action:manipulation}.field:active{border-color:#555}.cwd-field{justify-content:space-between}.cwd-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;opacity:.9}.cwd-action{flex:none;color:var(--blue);font-size:13px}.cwd-reset{margin-top:6px;background:none;border:none;color:#888;font-size:12px;padding:2px 0;touch-action:manipulation}.dd{position:relative}.dd-trigger{justify-content:space-between}.dd-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dd-caret{flex:none;color:#8a8f98;font-size:12px;transition:transform .15s ease}.dd-caret.open{transform:rotate(180deg)}.dd-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;background:#26282c;border:1px solid #3a3c42;border-radius:8px;padding:4px;box-shadow:0 10px 30px #0000008c;transform-origin:top;animation:dd-pop .12s ease}@keyframes dd-pop{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.dd-option{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:10px;border:none;border-radius:8px;background:none;color:#e6e6e6;font-size:14px;text-align:left;touch-action:manipulation}.dd-option:active{background:#33353a}.dd-option.is-selected{color:var(--green)}.dd-check{flex:none;color:var(--green);font-size:13px}.bind-error{margin-top:8px;color:var(--red);font-size:13px}.bind-hint{margin-top:8px;color:#888;font-size:13px}.bind-actions{margin-top:12px;justify-content:flex-end}.bind-confirm{background:var(--blue);color:#fff}.bind-confirm:disabled{opacity:.6}.windowbar{display:flex;gap:8px;align-items:center;padding:6px 8px;background:#222}.windowbar-scroll{flex:1;min-width:0;display:flex;gap:4px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;touch-action:pan-x}.lens-toggle{flex:none;display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border:1px solid #3a4a63;border-radius:8px;background:#1e2228;color:#cdd6e3;font-size:12.5px;line-height:1;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.lens-toggle:active{background:#262b33}.lens-toggle svg{opacity:.82}.win-tab{display:inline-flex;align-items:center;white-space:nowrap;padding:4px 10px;border:none;border-radius:8px;background:#33353a;color:#bbb;font-size:13px;touch-action:manipulation}.win-tab.active{background:var(--blue);color:#fff}.win-new{border:1px dashed #555;color:#8aa;font-weight:700;background:transparent}.win-panes{margin-left:5px;font-size:11px;color:#889}.win-tab.active .win-panes{color:#d6e4ff}.wt-dd{position:relative;flex:none;display:flex}.wt-trigger,.win-title{display:inline-flex;align-items:center;gap:4px}.wt-sep{margin:0 -1px;color:#cfe0ff;opacity:.4;font-weight:400}.wt-name,.wt-pane{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wt-name{max-width:9ch}.wt-pane{font-weight:600;max-width:11ch}.wt-caret{flex:none;font-size:11px;color:#d6e4ff;transition:transform .15s ease}.wt-caret.open{transform:rotate(180deg)}.wt-menu{position:fixed;top:auto;right:auto;min-width:160px;max-width:240px}.wt-menu .dd-option-label{display:inline-flex;align-items:center;gap:8px;min-width:0}.wt-menu .dd-pane-seq{flex:none;opacity:.55;font-variant-numeric:tabular-nums}.wt-menu .dd-pane-cmd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pane-map{position:fixed;overflow:hidden;z-index:30;background:#181a1ec7;-webkit-backdrop-filter:blur(20px) saturate(1.4);backdrop-filter:blur(20px) saturate(1.4);border:1px solid rgba(255,255,255,.14);border-radius:14px;box-shadow:0 12px 34px #0000008c,inset 0 1px #ffffff0d;transform-origin:top;animation:dd-pop .12s ease}.pane-map-cell{position:absolute;padding:0;border:0;background:none;color:inherit;font:inherit;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.pane-map-cell .pmc-surf{position:absolute;top:3px;right:3px;bottom:3px;left:3px;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;gap:3px;align-items:flex-start;justify-content:flex-start;padding:7px 8px;text-align:left;background:#ffffff0b;border:1px solid rgba(255,255,255,.1);transition:transform .12s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease}.pane-map-cell:active .pmc-surf{transform:scale(.97)}.pane-map-cell .pmc-seq,.pane-map-cell .pmc-cmd{transition:color .18s ease}.pane-map-cell.is-current .pmc-surf{background:var(--blue);border-color:#ffffff40;box-shadow:0 2px 10px #0a84ff66}.pane-map-cell.is-picking .pmc-surf{background:var(--blue);border-color:#fff6;box-shadow:0 0 0 2px #0a84ff80,0 3px 14px #0a84ff8c;animation:pmc-pick .22s ease}.pane-map-cell.is-picking .pmc-seq{color:#fffffff2}.pane-map-cell.is-picking .pmc-cmd{color:#fff}@keyframes pmc-pick{0%{transform:scale(1)}45%{transform:scale(1.09)}to{transform:scale(1)}}.pane-map-cell.is-current.is-releasing .pmc-surf{background:#ffffff0b;border-color:#ffffff1a;box-shadow:none}.pane-map-cell.is-current.is-releasing .pmc-seq{color:#9aa0aa}.pane-map-cell.is-current.is-releasing .pmc-cmd{color:var(--ink, #e6e6e6)}.pane-map-cell .pmc-row{display:flex;align-items:center;gap:5px;width:100%;max-width:100%}.pane-map-cell .pmc-seq{font-size:11px;font-weight:700;line-height:1;letter-spacing:.02em;color:#9aa0aa;font-variant-numeric:tabular-nums}.pane-map-cell.is-current .pmc-seq{color:#ffffffe6}.pane-map-cell .pmc-dims{margin-left:auto;flex:none;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:9.5px;line-height:1;font-variant-numeric:tabular-nums;color:#9aa0aaa8}.pane-map-cell.is-current .pmc-dims,.pane-map-cell.is-picking .pmc-dims{color:#ffffff9e}.pane-map-cell.is-current.is-releasing .pmc-dims{color:#9aa0aaa8}.pane-map-cell .pmc-cmd{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;line-height:1.25;color:var(--ink, #e6e6e6)}.pane-map-cell.is-current .pmc-cmd{color:#fff}.pane-map-cell .pmc-row .agent-mark{width:13px;height:13px;margin:0}.pane-map-cell.is-flat .pmc-surf{flex-direction:row;align-items:center;gap:6px;padding:0 8px}.pane-map-cell.is-narrow .pmc-surf{align-items:center;justify-content:center;padding:4px 2px}.pane-map-cell.is-narrow .pmc-seq{font-size:12px}.pane-map-cell.is-tiny .pmc-surf{align-items:center;justify-content:center;padding:0;gap:0}@media (prefers-reduced-motion: reduce){.pane-map{animation:none}.pane-map-cell .pmc-surf,.pane-map-cell.is-picking .pmc-surf{transition:none;animation:none}}.terminal-wrap{position:relative;flex:1;min-height:0;overflow:hidden}.terminal{height:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:none}.terminal--loading{opacity:0}.terminal .xterm{display:flex;flex-direction:column;justify-content:flex-end;height:100%;width:max-content;min-width:100%}.terminal .xterm-screen{flex:none}.terminal .xterm-viewport{touch-action:none;overscroll-behavior:contain}.terminal .xterm-viewport{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.22) transparent}.terminal .xterm-viewport::-webkit-scrollbar{width:7px;height:7px}.terminal .xterm-viewport::-webkit-scrollbar-thumb{background:#fff3;border-radius:4px}.terminal .xterm-viewport::-webkit-scrollbar-track{background:transparent}.terminal .xterm-helper-textarea{pointer-events:none;opacity:0}.terminal.desktop-input .xterm-helper-textarea{pointer-events:auto}.terminal__live{position:relative;width:100%;min-width:100%;height:100%}.terminal-history-boundary{background:repeating-linear-gradient(to right,rgba(255,255,255,.16) 0 5px,transparent 5px 10px) top / 100% 1px no-repeat;pointer-events:none}.terminal-connection{position:absolute;z-index:7;top:calc(var(--terminal-overlay-top, 1px) + 1px);right:9px;display:flex;align-items:center;gap:4px;color:#ebebf57a;font:500 11.5px/1.35 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;text-shadow:0 1px 2px rgba(0,0,0,.5)}.terminal-connection__tag{box-sizing:border-box;display:inline-flex;align-items:center;height:23px;padding:0 5px;border:1px solid rgba(235,235,245,.12);border-radius:4px;background:#1a1c229e}.terminal-connection__summary.is-live,.terminal-connection__summary.is-snapshot{color:#f0f0f5e0;border-color:#cdd0da2e;background:#696d7861}.terminal-connection__summary{gap:4px;font:inherit;cursor:pointer;pointer-events:auto}.terminal-connection__mode.is-live{color:#64aefff5}.terminal-connection__separator{color:#ebebf557}.terminal-transport-popover{position:absolute;z-index:8;top:calc(var(--terminal-overlay-top, 1px) + 30px);right:9px;width:min(280px,calc(100% - 18px));padding:11px 12px;border:1px solid rgba(235,235,245,.14);border-radius:9px;background:#232428f5;color:#ebebf5db;box-shadow:0 7px 24px #0000006b;font:12px/1.45 -apple-system,system-ui,sans-serif;pointer-events:none}.terminal-transport-popover__title{margin-bottom:8px;color:#fff;font-weight:650}.terminal-transport-popover__row{display:flex;justify-content:space-between;gap:12px;align-items:center;min-height:24px;padding:2px 0;color:#ebebf58c}.terminal-transport-popover__value{font-weight:550}.terminal-transport-popover__value.is-live{color:#64aefff5}.terminal-transport-popover__value.is-snapshot{color:#bec1cadb}.terminal-transport-popover__connection{font-weight:550}.terminal-transport-popover__connection.is-good{color:#64aeffe6}.terminal-transport-popover__connection.is-degraded{color:#f5be53e0}.terminal-transport-popover__connection.is-poor{color:#ff746ce6}.terminal-transport-popover__connection.is-connecting{color:#ebebf585}.terminal-transport-popover p{margin:8px 0 0}.terminal-transport-popover__recovery{color:#64aeffe6}.terminal-connection__latency{color:#ebebf585}.terminal-connection.is-good .terminal-connection__latency{color:#64aeffd6}.terminal-connection.is-degraded .terminal-connection__latency{color:#ffbe5cdb}.terminal-connection.is-poor .terminal-connection__latency{color:#ff7870e6}.new-output{position:absolute;right:12px;bottom:12px;z-index:5;touch-action:manipulation;padding:8px 14px;border:none;border-radius:16px;background:var(--blue);color:#fff;box-shadow:0 2px 8px #0006}.dbg{position:absolute;left:6px;top:6px;z-index:6;font:12px/1.4 monospace;color:#9fe;background:#0009;padding:2px 6px;border-radius:4px;pointer-events:none}.term-banner{position:absolute;left:0;right:0;top:var(--terminal-overlay-top, 1px);z-index:6;box-sizing:border-box;height:25px;font:12px/1.7 -apple-system,system-ui,sans-serif;text-align:center;padding:2px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}.term-banner--hist{background:#e0a800;color:#1a1400}.term-banner--err{background:#d32f2f;color:#fff}.term-banner--sel{background:var(--blue);color:#fff}.sel-handle{position:absolute;z-index:8;width:2px;height:var(--h);background:var(--blue);touch-action:none}.sel-handle:after{content:"";position:absolute;left:50%;width:13px;height:13px;border-radius:50%;background:var(--blue);transform:translate(-50%)}.sel-handle--start:after{top:-11px}.sel-handle--end:after{bottom:-11px}.sel-handle:before{content:"";position:absolute;left:50%;top:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.sel-callout{position:absolute;z-index:9;display:flex;align-items:stretch;width:max-content;border-radius:12px;overflow:hidden;background:#1c1e22eb;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 3px 14px #00000080;border:.5px solid rgba(255,255,255,.12)}.sel-callout button{border:none;background:none;color:#fff;font-size:15px;font-weight:500;padding:9px 16px;touch-action:manipulation;white-space:nowrap;flex:none}.sel-callout button+button{border-left:.5px solid rgba(255,255,255,.14)}.term-pager{position:absolute;z-index:6;right:calc(10px + env(safe-area-inset-right));top:calc(100% - var(--vis-h, 100%) / 2);transform:translateY(-50%);display:flex;flex-direction:column;align-items:stretch;gap:10px}.term-pager-grp{display:flex;flex-direction:column;align-items:stretch;border-radius:21px;overflow:hidden;background:#1c1e2285;-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);border:.5px solid rgba(255,255,255,.14);box-shadow:0 4px 18px #0000004d}.term-pager-btn{width:42px;height:42px;display:flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;color:#ffffffeb;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:background .12s ease}.term-pager-btn:active{background:#ffffff24}.term-pager-btn[aria-pressed=true]{background:#7ab4f54d;color:#cfe4ff}.locate-deco{background:#7ab4f54d;box-shadow:inset 3px 0 #7ab4f5f2}.term-pager-div{height:.5px;background:#ffffff21;margin:0 9px}@media (prefers-reduced-motion: reduce){.term-pager-btn{transition:none}}.input-text{flex:1;min-width:0;padding:7px 6px 7px 11px;border:none;background:transparent;color:#fff;font-family:inherit;font-size:16px;line-height:22px;max-height:156px;resize:none;overflow-y:auto;display:block}.input-text:focus{outline:none}.input-text::placeholder{color:#6b7280}.token-prompt button{padding:8px 14px;border:none;border-radius:8px;background:var(--blue);color:#fff}.drawer{position:fixed;top:0;left:0;width:78%;max-width:320px;height:100%;background:#232427;transform:translate(-100%);transition:transform .2s;z-index:10;padding:12px 12px calc(12px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;overflow:hidden}.drawer.open{transform:translate(0)}.drawer-list{flex:1;min-height:0;overflow-y:auto}.drawer-logout{flex:none;margin-top:8px;padding:10px;border:none;border-radius:8px;background:#2e2a2c;color:var(--red);font-size:14px;touch-action:manipulation}.drawer-logout:active{background:#4a2f33}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:9}.drawer-title{font-size:12px;color:#888;letter-spacing:1px;margin-bottom:8px}.drawer-row{display:flex;align-items:center;gap:6px;border-radius:8px}.drawer-name{flex:1;min-width:0;padding:8px 4px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drawer-session.active{background:var(--blue);color:#fff}.drawer-unbind{flex:none;background:none;border:none;color:#888;font-size:14px;padding:6px 8px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:44px}.drawer-session.active .drawer-unbind{color:#d6e4ff}.drawer-empty{padding:12px 4px;color:#888;font-size:13px}.drawer-bind{width:100%;margin-top:8px;padding:10px;border:none;border-radius:8px;background:#2b3550;color:#cdddff;font-size:14px;touch-action:manipulation}.drawer-bind:active{background:#344168}.workspace-recovery-card{width:100%;min-height:44px;margin-top:12px;padding:12px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;border:.5px solid rgba(var(--blue-rgb),.32);border-radius:12px;background:rgba(var(--blue-rgb),.09);color:#dce9ff;text-align:left;font:inherit;touch-action:manipulation}.workspace-recovery-card:active{background:rgba(var(--blue-rgb),.17)}.workspace-recovery-card strong{font-size:13px;font-weight:600}.workspace-recovery-card>span{color:#929aa6;font-size:11.5px;line-height:1.4}.workspace-recovery-card .workspace-recovery-action{color:var(--blue);font-size:13px;font-weight:600;margin-top:3px}.workspace-recovery-card .workspace-recovery-partial{color:#d7a29e}.workspace-restore-backdrop{z-index:30;background:#0000009e}.workspace-restore-dialog{z-index:31;max-width:380px;top:calc(env(safe-area-inset-top,0px) + 12px);bottom:calc(env(safe-area-inset-bottom,0px) + 12px);margin-block:auto;height:max-content;transform:translate(-50%);max-height:calc(100vh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px) - 24px);max-height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px) - 24px)}.workspace-restore-close{width:44px;height:44px;margin:-7px -7px -7px 0}.workspace-restore-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.workspace-restore-reason{color:#f0f1f3;font-size:15px;font-weight:600}.workspace-restore-time{margin-top:4px;color:#8f949c;font-size:12px;font-variant-numeric:tabular-nums}.workspace-restore-summary{margin-top:14px;color:#d9dce1;font-size:13px;font-variant-numeric:tabular-nums}.workspace-restore-plan{margin-top:6px;color:#aebed3;font-size:13px;font-weight:600}.workspace-restore-note{margin-top:12px;color:#8f949c;font-size:12px;line-height:1.5}.workspace-restore-renames{margin:6px 0 0;padding-left:20px;color:#c8ced8;font-size:12px;line-height:1.55}.workspace-restore-progress,.workspace-restore-success{margin-top:14px;padding:9px 10px;border-radius:8px;background:rgba(var(--blue-rgb),.12);color:#8fc4ff;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}.workspace-restore-progress.partial{background:#ff9f0a1a;color:#e0b066}.workspace-restore-success{background:rgba(var(--green-rgb),.1);color:#7eda98}.workspace-restore-errors{margin:12px 0 0;padding:9px 10px 9px 26px;border-radius:8px;background:#ff453a1a;color:#e3aaa6;font-size:12px;line-height:1.5}div.workspace-restore-errors{padding-left:10px}.workspace-restore-warnings{margin:12px 0 0;padding:9px 10px 9px 26px;border-radius:8px;background:#ff9f0a1a;color:#e0b066;font-size:12px;line-height:1.5}.workspace-restore-actions{flex:none;display:flex;flex-direction:column;gap:4px;margin-top:14px;padding-bottom:env(safe-area-inset-bottom,0px)}.workspace-restore-primary,.workspace-restore-ignore{min-height:44px;border:none;border-radius:9px;font-size:14px;font-weight:600;touch-action:manipulation}.workspace-restore-primary{background:var(--blue);color:#fff}.workspace-restore-primary:active{background:var(--blue-press)}.workspace-restore-primary:disabled,.workspace-restore-ignore:disabled{opacity:.48}.workspace-restore-ignore{background:transparent;color:#d4837e;font-weight:500}.workspace-restore-ignore:active{background:#ff453a14}.settings-protection-warning{margin-top:4px}.settings-protection-title{color:#ff918a;font-size:13px;font-weight:600}.token-prompt{max-width:360px;margin:80px auto;display:flex;flex-direction:column;gap:12px;padding:0 16px}.token-prompt input{padding:10px;border-radius:8px;border:1px solid #444;background:#1a1b1e;color:#fff}.loading{padding:40px;text-align:center;color:#888}.empty-cta{margin:auto;display:flex;flex-direction:column;gap:6px;align-items:center;padding:28px 32px;background:none;border:1px dashed #44464c;border-radius:12px;color:#aab;font-size:15px;touch-action:manipulation}.empty-cta span{font-size:13px;color:var(--blue)}.empty-cta:active{background:#232427}.bottom-dock{display:flex;gap:8px;padding:8px;background:#2a2b2e;align-items:stretch}.dock-left{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.dock-handle{position:relative;display:flex;justify-content:center;align-items:center;width:100%;padding:6px 0 4px;border:none;background:transparent;cursor:grab;-webkit-tap-highlight-color:transparent;touch-action:none;--morph: 0;--drag: 0px;--bar: #6a6f78}.dock-handle:active{cursor:grabbing}.dock-handle.armed{--bar: var(--blue)}.dock-dots{display:flex;align-items:center;justify-content:center;gap:7px;transform:translateY(var(--drag));transition:transform .28s cubic-bezier(.22,.61,.36,1)}.dock-handle.dragging .dock-dots{transition:none}.dock-dot{width:calc(6px + var(--morph) * 15px);height:6px;border-radius:999px;background:color-mix(in srgb,#4a4d54,var(--bar) calc(var(--morph) * 100%));transition:width .15s ease,background .15s ease}.dock-dot.on{background:color-mix(in srgb,var(--blue),var(--bar) calc(var(--morph) * 100%))}.dock-dot[data-page=command]{transform:translate(calc(var(--morph) * 7px))}.dock-dot[data-page=agent]{transform:translate(calc(var(--morph) * -7px))}.dock-handle:active:not(.dragging) .dock-dot{background:#5a5e66}.dock-handle:active:not(.dragging) .dock-dot.on{background:#6a93ff}.dock-mode-label{position:absolute;left:2px;top:50%;transform:translateY(-50%);font-size:10px;line-height:1;color:#8a93a0;white-space:nowrap;pointer-events:none}@media (prefers-reduced-motion: reduce){.dock-dots{transition:none}}.dock-pager{overflow:hidden;min-width:0;contain:paint}.dock-track{display:flex;align-items:flex-start;width:200%;will-change:transform;transform:translateZ(0);transition:transform .3s cubic-bezier(.22,.61,.36,1)}.dock-track.at-chat{transform:translate3d(-50%,0,0)}.dock-track>.dock-page{flex:0 0 50%;width:50%;min-width:0}.bottom-dock.desktop-unified .dock-track{width:100%;transform:none;transition:none}.bottom-dock.desktop-unified .dock-track>.dock-page.chat{flex-basis:100%;width:100%}.dock-page.command{position:relative}.keybar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;min-width:0}.keybar-key{min-width:0;min-height:40px;padding:0 2px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:8px;white-space:nowrap;background:#33353a;color:#e6e6e6;font:14px/1 ui-monospace,SF Mono,Menlo,monospace;touch-action:manipulation;-webkit-user-select:none;user-select:none}.keybar-key:active{background:var(--blue);color:#fff}.keybar-key svg{width:20px;height:20px;display:block}.keybar-mod.armed{background:var(--blue);color:#fff}.keybar-mod.locked{background:var(--blue);color:#fff;box-shadow:inset 0 -3px #ffd24a}.dock-input-row{display:flex;gap:6px;align-items:stretch}.input-wrap{position:relative;flex:1;min-width:0;display:flex;align-items:flex-end;gap:4px;margin-top:6px;padding:5px 6px 5px 5px;border:1px solid #3a3d44;border-radius:20px;background:#202227;box-shadow:0 1px 6px #00000059;transition:border-color .15s,box-shadow .15s}.dock-page.chat{padding-bottom:6px}.input-wrap:focus-within{border-color:var(--green);box-shadow:0 0 0 1px rgba(var(--green-rgb),.4),0 2px 12px #0006}.dock-left.dock-swiping .input-wrap:focus-within{border-color:#3a3d44;box-shadow:0 1px 6px #00000059}.input-wrap.multi>.input-mic,.input-wrap.multi>.input-send{position:absolute;bottom:7px;margin:0;pointer-events:none}.input-wrap.multi>.input-send{right:6px}.input-wrap.multi>.input-mic{right:44px}.input-wrap.multi.crowd>.input-text{padding-bottom:29px}.input-mirror{position:absolute;left:-9999px;top:0;visibility:hidden;pointer-events:none;box-sizing:border-box;padding:7px 6px 7px 11px;border:none;font-family:inherit;font-size:16px;line-height:22px;white-space:pre-wrap;overflow-wrap:break-word}.input-wrap>.input-history,.input-wrap>.input-mic,.input-wrap>.input-send{margin-bottom:2px}.cmd-capture{position:absolute;left:0;bottom:0;width:2px;height:2px;padding:0;margin:0;border:0;opacity:0;background:transparent;color:transparent}.quick-bar{display:flex;align-items:stretch;gap:6px;padding:0 2px 6px}.quick-fixed{flex:none;display:flex;gap:6px;padding-right:7px;border-right:1px solid #33363d}.quick-fix{flex:none;display:inline-flex;align-items:center;gap:5px;border:1px solid #4a4f59;border-radius:9px;background:#383c44;color:#eaedf2;font:inherit;font-size:13.5px;font-weight:600;padding:7px 11px;line-height:1;touch-action:manipulation;-webkit-user-select:none;user-select:none}.quick-fix svg{width:15px;height:15px;display:block;color:#aeb6c2}.quick-fix:active{background:#454a54}.quick-fix:disabled{opacity:.4}.quick-fix-kbd svg{color:#d3dcec}.quick-fix-kbd[aria-pressed=true]{border-color:#3d63a8;background:#2c3849;color:#eaf1ff}.quick-fix-kbd[aria-pressed=true] svg{color:var(--blue)}.quick-scroll{flex:1;min-width:0;display:flex;align-items:stretch;gap:5px;overflow-x:auto;-webkit-overflow-scrolling:touch}.quick-cmd{flex:none;display:inline-flex;align-items:center;white-space:nowrap;border:1px solid;border-radius:12px;color:rgb(var(--rgb));border-color:rgba(var(--rgb),.5);background:rgba(var(--rgb),.13);font:inherit;font-size:13.5px;padding:7px 12px;line-height:1;touch-action:manipulation;-webkit-user-select:none;user-select:none}.quick-cmd:active{background:rgba(var(--rgb),.26);border-color:rgb(var(--rgb))}.quick-cmd-add{--rgb: 150,157,167;border-style:dashed;padding:7px 11px}.quick-cmd-add svg{width:15px;height:15px;display:block}.qc-enter{margin-left:5px;opacity:.7;font-size:12px}.qc-esc{--rgb: 150,157,167}.qc-reply{--rgb: 95,208,138}.qc-cmd{--rgb: 110,168,255}.quick-cmd-plain{--rgb: 150,157,167}.quick-cmd-win{--rgb: 95,208,138}.bottom-dock.desktop-unified{padding:6px 8px}.bottom-dock.desktop-unified .dock-left{gap:0}.desktop-unified .quick-bar{gap:5px;padding:0 0 6px}.desktop-unified .quick-fixed{gap:5px;padding-right:6px}.desktop-unified .quick-fix,.desktop-unified .quick-cmd{border-radius:6px;padding:6px 10px}.desktop-unified .input-wrap{margin-top:0;padding:3px 4px;border-radius:8px;box-shadow:none}.desktop-unified .input-text,.desktop-unified .input-mirror{padding:6px 5px 6px 9px}.desktop-unified .input-wrap.multi>.input-mic,.desktop-unified .input-wrap.multi>.input-send{bottom:5px}.desktop-unified .input-wrap.multi>.input-send{right:4px}.desktop-unified .input-wrap.multi>.input-mic{right:42px}.desktop-unified .input-wrap.multi.crowd>.input-text{padding-bottom:28px}.desktop-unified .input-wrap:focus-within{box-shadow:none}.desktop-unified .dock-page.chat{padding-bottom:0}@media (hover: hover) and (pointer: fine){.desktop-unified .input-text,.desktop-unified .input-mirror{font-size:15px;line-height:21px}.desktop-unified .input-wrap.multi.crowd>.input-text{padding-bottom:27px}}.dock-upload{padding:6px 4px 2px}.dock-upload-label{display:block;color:#9fb6d0;font-size:12px;margin-bottom:4px;font-variant-numeric:tabular-nums}.dock-upload.error .dock-upload-label{color:var(--red)}.dock-upload-track{display:block;height:4px;border-radius:2px;background:#1c2b3a;overflow:hidden}.dock-upload-fill{display:block;height:100%;background:#3a5a7e;transition:width .1s linear}.upload-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:grid;place-items:center;background:#0000009e;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);padding:24px;padding-bottom:calc(24px + env(safe-area-inset-bottom))}.upload-card{width:min(340px,86vw);background:#141b24;border:1px solid #24303d;border-radius:14px;padding:22px 20px 18px;box-shadow:0 24px 70px #0009;text-align:center}.upload-card-label{color:#e6edf3;font-size:14px;margin-bottom:16px;word-break:break-all;font-variant-numeric:tabular-nums}.upload-bar{height:6px;border-radius:3px;background:#1c2b3a;overflow:hidden}.upload-bar-fill{height:100%;background:var(--green);transition:width .12s linear}.upload-card-sub{color:#9fb6d0;font-size:12px;margin-top:10px;font-variant-numeric:tabular-nums}.upload-spinner{width:34px;height:34px;margin:4px auto 0;border-radius:50%;border:3px solid #24303d;border-top-color:var(--green);animation:upload-spin .8s linear infinite}@keyframes upload-spin{to{transform:rotate(360deg)}}.upload-cancel{margin-top:18px;width:100%;height:40px;border:1px solid #33424f;border-radius:10px;background:#1c2530;color:#e6edf3;font-size:14px}.upload-cancel:active{background:#243040}@media (prefers-reduced-motion: reduce){.upload-spinner{animation-duration:1.6s}}.input-send{flex:none;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:var(--blue);color:#fff;padding:0;box-shadow:0 1px 4px rgba(var(--blue-rgb),.45);touch-action:manipulation;-webkit-user-select:none;user-select:none}.input-send:active{background:var(--blue-press)}.input-send.is-empty,.input-send:disabled{background:#00000040;color:#b6c0cc;box-shadow:none}.input-send svg{width:20px;height:20px;display:block}.input-history{flex:none;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:transparent;color:#8a93a0;padding:0;touch-action:manipulation;-webkit-user-select:none;user-select:none}.input-history svg{width:20px;height:20px;display:block}.input-history:active{color:var(--blue)}.input-wrap.recording{background:rgba(var(--green-rgb),.14);border:2px solid var(--green);animation:rec-breathe 1.3s ease-in-out infinite}.input-wrap.recording .input-text{color:#eafff3}@keyframes rec-breathe{0%,to{box-shadow:0 0 5px rgba(var(--green-rgb),.3);border-color:#2fd07e}50%{box-shadow:0 0 16px 4px rgba(var(--green-rgb),.8);border-color:var(--green)}}.input-mic{flex:none;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#00000040;color:#b6c0cc;padding:0;touch-action:manipulation;-webkit-user-select:none;user-select:none}.input-mic.on{color:#fff;background:var(--green)}.input-mic:disabled{opacity:.5}.input-mic svg{width:21px;height:21px;display:block}.cmd-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:21}.cmd-panel{position:fixed;left:0;right:0;bottom:0;z-index:22;max-height:72vh;display:flex;flex-direction:column;background:#232427;border-radius:16px 16px 0 0;box-shadow:0 -8px 30px #00000080}.cmd-panel.history{min-height:40vh}.cmd-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid #33353a}.cmd-title{font-size:16px;font-weight:600;margin-right:auto;display:flex;align-items:center;gap:7px}.idea-head-count{font-size:11px;font-weight:600;color:#a8c4e0;background:#3d5068;border-radius:8px;padding:1px 6px}.cmd-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:50%;background:#78788029;color:#ebebf58c;font-size:15px;line-height:1;touch-action:manipulation}.cmd-close:active{background:#7878804d;color:#fff}.cmd-close svg{width:14px;height:14px;display:block}.cmd-add-open{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:9px;background:var(--blue);color:#fff;padding:0;touch-action:manipulation;box-shadow:0 1px 4px rgba(var(--blue-rgb),.4)}.cmd-add-open:active{background:var(--blue-press)}.cmd-add-open svg{width:18px;height:18px;display:block}.cmd-list{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 0 10px}.cmd-editor .cmd-list{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:0}.cmd-editor .cmd-esection{flex:1 1 0;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column}.cmd-editor .cmd-esection .cmd-section{position:sticky;top:0;z-index:1;background:#1c1c1e}.cmd-editor .cmd-empty{flex:1;display:flex;align-items:center;justify-content:center;font-size:15px}.cmd-panel.cmd-editor{background:#1c1c1e}.cmd-undo-toast{position:absolute;left:50%;bottom:calc(14px + env(safe-area-inset-bottom,0px));z-index:2;transform:translate(-50%);display:flex;align-items:center;gap:12px;max-width:calc(100% - 28px);padding:9px 10px 9px 14px;border-radius:12px;background:#2c2c2ef5;color:#f2f2f7;box-shadow:0 5px 20px #00000061;font-size:13px;animation:exit-toast-in .18s ease}.cmd-added-toast{padding:10px 14px}.cmd-undo{min-width:44px;min-height:44px;padding:0 10px;border:none;background:none;color:#64a8ff;font:inherit;font-weight:600}@media (prefers-reduced-motion: reduce){.cmd-undo-toast{animation:none}}.cmd-editor .cmd-section{padding:12px 16px 6px}.cmd-editor .cmd-section-name{font-size:13px;letter-spacing:.4px}.cmd-editor .cmd-row{padding:0 10px 0 16px}.cmd-editor .cmd-row:not(:last-child){box-shadow:inset 0 -.5px #54545857}.cmd-editor .cmd-config-section{flex:0 0 auto;max-height:34%}.cmd-editor .cmd-config-row{color:#8e949e}.cmd-editor .cmd-config-row .cmd-text{padding-block:10px}.cmd-editor .cmd-text{font-size:14px;padding:12px 0;color:#f2f2f7}.cmd-editor .cmd-enter{font-size:14px}.cmd-editor .cmd-move svg{width:18px;height:18px}.cmd-editor .cmd-del svg{width:16px;height:16px}.cmd-section{display:flex;align-items:baseline;gap:8px;padding:9px 14px 5px}.cmd-section.recent{margin-top:6px;border-top:1px solid #2c2e33;padding-top:12px}.cmd-section-name{font-size:12px;font-weight:700;letter-spacing:1px}.cmd-section.fav .cmd-section-name{color:#ffd27a}.cmd-section.recent .cmd-section-name{color:#9db8ff}.cmd-scope{margin-left:auto;font-size:10px;color:#9a9a9a;background:#2c2e33;padding:2px 8px;border-radius:10px;white-space:nowrap}.cmd-row{display:flex;align-items:center;gap:6px;padding:0 8px 0 14px}.cmd-text{flex:1;min-width:0;padding:9px 0;font:13px/1.3 ui-monospace,SF Mono,Menlo,monospace;color:#e6e6e6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;touch-action:manipulation}button.cmd-text{background:none;border:none;text-align:left}.cmd-text:active{color:#9db8ff}.cmd-star{flex:none;background:none;border:none;color:#667;padding:6px 8px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:44px}.cmd-star svg{width:16px;height:16px;display:block}.cmd-star.on{color:#ffd27a}.cmd-star.on svg{fill:currentColor}.cmd-copy{flex:none;background:none;border:none;color:#8a93a0;padding:6px 8px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:44px}.cmd-copy svg{width:15px;height:15px;display:block}.cmd-copy:active{color:#9db8ff}.cmd-del{flex:none;background:none;border:none;color:#888;padding:6px 8px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}.cmd-del svg{width:14px;height:14px;display:block}.cmd-empty{padding:20px 14px;color:#888;font-size:13px;text-align:center}.cmd-hint{padding:2px 14px 8px;color:#7f8794;font-size:11px}.fav-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.fav-chip{background:#2a3a2e;border:1px solid #3d5a44;color:#9fe0af;border-radius:16px;padding:8px 14px;font-size:14px}.fav-add{display:flex;gap:8px;margin-top:8px}.fav-add-input{flex:1;min-width:0;background:#16171c;border:1px solid #444;border-radius:8px;color:#fff;padding:8px;font-size:16px}.fav-add-btn{border:none;border-radius:8px;background:var(--blue);color:#fff;padding:0 14px}.cmd-panel.cmd-editor{min-height:58vh}.cmd-esection{padding-bottom:6px}.cmd-esection.win{margin-top:4px;border-top:1px solid #2c2e33}.cmd-section.global .cmd-section-name{color:#aab0ba}.cmd-section.win .cmd-section-name{color:#5fd08a}.cmd-fav-text{flex:1}.cmd-enter{margin-left:7px;opacity:.65;font-size:12px}.cmd-move{flex:none;background:none;border:none;color:#8a93a0;padding:6px 5px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}.cmd-move svg{width:16px;height:16px;display:block}.cmd-move.up svg{transform:rotate(180deg)}.cmd-move:active{color:#9db8ff}.cmd-move:disabled{opacity:.28}.cmd-add-backdrop{z-index:23;background:#0009}.cmd-addcard{position:fixed;left:50%;top:50%;z-index:24;width:min(360px,calc(100vw - 32px));display:flex;flex-direction:column;gap:16px;background:#1c1c1e;border-radius:20px;padding:18px 18px 20px;box-shadow:0 24px 60px #000000a8;-webkit-font-smoothing:antialiased}.cmd-addcard-head{display:flex;align-items:center}.cmd-addcard-head .cmd-title{margin-right:auto;font-size:17px;font-weight:700;letter-spacing:.2px}.cmd-modetabs{display:flex;gap:24px;border-bottom:1px solid rgba(84,84,88,.5);padding:0 2px}.cmd-modetab{position:relative;border:none;background:none;padding:2px 0 12px;font:inherit;font-size:17px;font-weight:600;color:#ebebf580;touch-action:manipulation;transition:color .15s}.cmd-modetab.on{color:#fff}.cmd-modetab.on:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2.5px;border-radius:2px;background:var(--blue)}.cmd-seg{display:flex;gap:2px;background:#76768038;border-radius:9px;padding:2px}.cmd-seg-btn{flex:1;border:none;background:transparent;color:#ebebf59e;font:inherit;font-size:14px;font-weight:600;padding:8px 0;border-radius:7px;touch-action:manipulation;transition:color .15s}.cmd-seg-btn.on{background:#48484a;color:#fff;box-shadow:0 1px 3px #00000059,0 0 0 .5px #0003}.cmd-seg-btn.win.on{background:#2f6f4a;color:#d6f5e2}.cmd-seg-btn:active:not(.on){color:#fff}.cmd-seg-btn:disabled{opacity:.38}.cmd-field{display:flex;flex-direction:column;gap:8px}.cmd-field-label{font-size:12px;font-weight:600;color:#ebebf599;padding-left:2px}.cmd-add-error{padding:9px 11px;border-radius:10px;color:#ebebf5c7;background:#76768029;font-size:13px;line-height:1.35}.cmd-add-input{width:100%;box-sizing:border-box;background:#2c2c2e;border:none;border-radius:10px;color:#f2f2f7;padding:12px 13px;font:16px/1.2 ui-monospace,SF Mono,Menlo,monospace;box-shadow:0 0 0 1px transparent;transition:box-shadow .15s}.cmd-add-input::placeholder{color:#ebebf54d}.cmd-add-input:focus{outline:none;box-shadow:0 0 0 2px var(--blue)}.cmd-chord-preview{align-self:flex-start;color:#64d2ff;font-size:13px;font-weight:700;letter-spacing:.3px}.cmd-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:8px;background:#2c2c2e;border-radius:10px;padding:11px 13px;color:#f2f2f7;font-size:15px;touch-action:manipulation}.cmd-switch{position:relative;flex:none;width:51px;height:31px}.cmd-switch input{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;opacity:0;z-index:1}.cmd-switch-track{position:absolute;top:0;right:0;bottom:0;left:0;background:#39393d;border-radius:16px;transition:background .22s ease}.cmd-switch input:checked~.cmd-switch-track{background:var(--green)}.cmd-switch-knob{position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 2px 5px #00000059;transition:transform .22s ease}.cmd-switch input:checked~.cmd-switch-knob{transform:translate(20px)}.cmd-switch input:disabled~.cmd-switch-track,.cmd-switch input:disabled~.cmd-switch-knob{opacity:.45}.settings-hint-btn{margin-top:8px}.settings-hint-err{color:#ff9086}.cmd-submit{border:none;border-radius:13px;background:var(--blue);color:#fff;font:inherit;font-size:17px;font-weight:600;padding:13px 0;margin-top:2px;touch-action:manipulation;transition:background .12s}.cmd-submit:active{background:var(--blue-press)}.cmd-submit:disabled{background:#2c2c2e;color:#ebebf54d}.cmd-dd{position:relative}.cmd-dd-btn{display:flex;align-items:center;justify-content:space-between;width:100%;box-sizing:border-box;background:#2c2c2e;border:none;border-radius:10px;color:#f2f2f7;font:inherit;font-size:16px;padding:12px 13px;box-shadow:0 0 0 2px transparent;transition:box-shadow .15s;touch-action:manipulation}.cmd-dd-btn.open{box-shadow:0 0 0 2px var(--blue)}.cmd-dd-btn svg{width:17px;height:17px;color:#ebebf580;transition:transform .18s}.cmd-dd-btn.open svg{transform:rotate(180deg)}.cmd-dd-ph{color:#ebebf54d}.cmd-dd-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:24}.cmd-dd-menu{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:25;background:#2c2c2e;border-radius:12px;padding:5px;max-height:216px;overflow-y:auto;-webkit-overflow-scrolling:touch;box-shadow:0 14px 36px #0009,0 0 0 .5px #0006}.cmd-dd-opt{display:flex;align-items:center;justify-content:space-between;width:100%;border:none;background:transparent;color:#f2f2f7;font:inherit;font-size:16px;text-align:left;padding:11px 12px;border-radius:8px;touch-action:manipulation}.cmd-dd-opt.on{color:var(--blue);font-weight:600}.cmd-dd-opt:active{background:#3a3a3c}.cmd-dd-opt svg{width:16px;height:16px}.idea-panel{position:fixed;left:0;right:0;bottom:0;z-index:22;min-height:50vh;max-height:80vh;display:flex;flex-direction:column;background:#232427;border-radius:16px 16px 0 0;box-shadow:0 -8px 30px #00000080}.idea-compose{display:flex;align-items:flex-end;gap:8px;padding:10px 14px;border-bottom:1px solid #33353a}.idea-input{flex:1;min-width:0;resize:none;max-height:96px;padding:8px 10px;border:1px solid #3a3c42;border-radius:8px;background:#1b1c1f;color:#e6e6e6;font:14px/1.4 -apple-system,system-ui,sans-serif}.idea-input:focus{outline:none;border-color:var(--blue)}.idea-compose .input-mic{position:static;right:auto;bottom:auto;flex:none}.idea-act{flex:none;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:var(--blue);color:#fff;padding:0;touch-action:manipulation}.idea-act:disabled{background:#00000040;color:#b6c0cc;opacity:.55}.idea-act svg{width:20px;height:20px;display:block}.idea-cancel{flex:none;background:none;border:none;color:#aaa;font-size:13px;padding:9px 4px;touch-action:manipulation}.idea-list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 0 12px}.idea-list:has(.cmd-empty){display:flex;align-items:center;justify-content:center}.idea-row{display:flex;align-items:center;gap:6px;padding:0 8px 0 4px;background:#232427}.idea-row.editing{background:#262a31}.idea-row.dragging{background:#2c2f36;border-radius:8px;box-shadow:0 2px 12px #00000073}.idea-handle{flex:none;background:none;border:none;color:#777;font-size:20px;line-height:1;padding:11px 16px;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.idea-text{flex:1;min-width:0;padding:11px 0;font-size:14px;line-height:1.35;color:#e6e6e6;white-space:pre-wrap;overflow-wrap:anywhere;touch-action:manipulation}.idea-text:active{color:#9db8ff}.idea-send{flex:none;background:#2c2e33;color:#9db8ff;border:none;border-radius:8px;padding:6px 10px;font-size:13px;touch-action:manipulation}.idea-del{flex:none;background:none;border:none;color:#888;font-size:14px;padding:6px 8px;touch-action:manipulation;display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:44px}.changelog-page{z-index:22}.changelog-page-content{padding-top:14px}.changelog-list{padding:4px 16px}.rel{padding:12px 0;border-bottom:1px solid #2c2e33}.rel:last-child{border-bottom:none}.rel-date{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}.rel-ver{font-size:13px;font-weight:700;letter-spacing:.3px;color:#9db8ff;font-variant-numeric:tabular-nums}.rel-day{font-size:11px;font-weight:600;letter-spacing:.5px;color:#6b6f77;font-variant-numeric:tabular-nums}.rel-items{margin:0;padding-left:18px}.rel-items li{font-size:13px;line-height:1.5;color:#e6e6e6;margin:3px 0}.topbar-icon{position:relative}.topbar-dot{position:absolute;top:7px;right:7px;width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 0 2px #1b1c1f}.idea-badge{position:absolute;top:5px;right:4px;min-width:14px;height:14px;border-radius:7px;padding:0 3px;box-sizing:border-box;background:#3d5068;color:#a8c4e0;font-size:9px;font-weight:700;line-height:14px;text-align:center;pointer-events:none}.settings-dot{display:inline-block;width:7px;height:7px;margin-left:6px;border-radius:50%;background:var(--red);vertical-align:middle}.sheet-actions{display:flex;flex-direction:column;gap:8px}.sheet-action{width:100%;padding:12px;border:1px solid #33353a;border-radius:8px;background:#2a2c31;color:#ddd;font-size:15px;text-align:center;display:flex;align-items:center;justify-content:center;gap:8px;touch-action:manipulation}.sheet-action-icon{display:inline-flex}.sheet-action-icon svg{width:18px;height:18px}.sheet-action.danger{color:var(--red)}.sheet-action.armed{background:var(--red);color:#fff;border-color:var(--red)}.sheet-action:disabled{opacity:.4}.sheet-row{display:flex;gap:8px}.sheet-row .sheet-action{flex:1}.sheet-size-control{padding:2px 0 10px;border-bottom:1px solid #33353a}.sheet-size-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}.sheet-size-head .settings-label{margin:0}.sheet-size-value{color:#e6e6e6;font-size:14px;font-variant-numeric:tabular-nums}.sheet-size-buttons{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:6px}.sheet-size-buttons .fontbtn{min-width:0;min-height:44px;padding-inline:6px}.sheet-size-restore{white-space:nowrap}.sheet-size-restore:disabled{opacity:.4}.sheet-cancel{margin-top:4px}.win-tab,.session-name{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.file-sheet{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;flex-direction:column;background:#0b0f14;transform:translateY(100%);transition:transform .28s cubic-bezier(.22,.61,.36,1);pointer-events:none}.file-sheet.open{transform:translateY(0);pointer-events:auto}.file-tabs{display:flex;align-items:stretch;border-bottom:1px solid #1d2630;background:#11161d}.file-tabs-scroll{display:flex;overflow-x:auto;flex:1;-webkit-overflow-scrolling:touch}.file-tab{display:inline-flex;align-items:center;white-space:nowrap;border-right:1px solid #1d2630}.file-tab.active{background:#0b0f14;box-shadow:inset 0 -2px 0 var(--blue)}.file-tab-label{display:inline-flex;align-items:center;gap:5px;padding:10px 8px 10px 12px;background:transparent;border:none;color:#9fb0c0;font-size:13px}.file-tab-label svg{width:15px;height:15px}.file-tab.active .file-tab-label{color:#e6edf3}.file-tab-x{background:transparent;border:none;color:#6b7a89;font-size:11px;padding:0 10px 0 2px}.file-min{flex:0 0 auto;width:44px;display:inline-flex;align-items:center;justify-content:center;background:transparent;color:#9fb0c0;border:none;border-left:1px solid #1d2630}.file-min svg{width:20px;height:20px}.file-body{flex:1;overflow:hidden;display:flex}.browser-sheet{background:#0b0f14}.browser-tabs{position:relative;z-index:2;display:flex;align-items:stretch;flex:0 0 auto;min-height:38px;padding-top:env(safe-area-inset-top);background:#11161d;border-bottom:1px solid #1d2630}.browser-tabs-scroll{display:flex;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.browser-tabs-scroll::-webkit-scrollbar{display:none}.browser-tab-wrap{--browser-tab-accent: var(--blue);display:inline-flex;align-items:stretch;flex:0 0 auto;min-width:52px;max-width:44vw;border-right:1px solid #1d2630;box-shadow:inset 0 2px 0 var(--browser-tab-accent)}.browser-tab-wrap.proxy{--browser-tab-accent: #e8892f}.browser-tab-wrap.static{--browser-tab-accent: var(--green)}.browser-tab-wrap.active{background:#0b0f14;box-shadow:inset 0 2px 0 var(--browser-tab-accent),inset 0 -2px 0 var(--browser-tab-accent)}.browser-history-tab.active{background:#0b0f14;box-shadow:inset 0 -2px 0 var(--blue)}.browser-tab{flex:1 1 auto;min-width:0;min-height:38px;padding:0 10px;display:inline-flex;align-items:center;border:0;background:transparent;color:#9fb0c0;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;touch-action:manipulation}.browser-tab-wrap.active .browser-tab{padding-right:0}.browser-tab svg{width:15px;height:15px;flex:0 0 auto}.browser-tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.browser-address-mode{flex:0 0 auto;padding:2px 4px;border-radius:4px;background:#343a42;color:#aeb9c4;font-size:9px;font-weight:700;line-height:1.1;letter-spacing:.2px}.browser-address-mode.proxy{background:#d9822b2e;color:#f2a450}.browser-address-mode.static{background:rgba(var(--green-rgb),.15);color:#71df91}.browser-tab-wrap.active .browser-tab,.browser-history-tab.active{color:#fff}.browser-history-tab{justify-content:center;padding:0;border-right:1px solid #1d2630}.browser-history-tab,.browser-head-button{flex:0 0 44px;width:44px;min-width:44px}.browser-tab-close,.browser-head-button{min-width:44px;min-height:38px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:#758494;touch-action:manipulation}.browser-tab-close{min-width:32px;width:32px}.browser-tab-close svg,.browser-head-button svg{width:17px;height:17px}.browser-head-button{border-left:1px solid #1d2630}.browser-nav{position:relative;z-index:2;display:flex;align-items:center;gap:4px;flex:0 0 auto;min-height:50px;padding:4px 6px;background:#1a1c20;border-bottom:1px solid #262b32}.browser-nav-button{width:44px;height:44px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:10px;background:transparent;color:#d5dde5;font-size:28px;touch-action:manipulation}.browser-nav-button svg{width:18px;height:18px}.browser-nav-button:disabled{color:#56616c}.browser-address-form{height:38px;min-width:72px;flex:1;display:flex;align-items:center;gap:7px;padding:0 10px;background:#2a2d33;border:1px solid #343942;border-radius:11px}.browser-address-form:focus-within{border-color:var(--blue);box-shadow:0 0 0 2px rgba(var(--blue-rgb),.2)}.browser-address-form svg{width:15px;height:15px;flex:0 0 auto;color:#8694a2}.browser-address{min-width:0;width:100%;border:0;outline:0;background:transparent;color:#f2f5f7;font:13px ui-monospace,SF Mono,Menlo,monospace}.browser-address::placeholder{color:#707b86}.browser-address-folder{width:38px;height:36px;margin-right:-9px;flex:0 0 auto;display:grid;place-items:center;border:0;border-left:1px solid #414852;border-radius:0 10px 10px 0;background:rgba(var(--green-rgb),.08);color:#68d88b;touch-action:manipulation}.browser-address-form .browser-address-folder svg{width:18px;height:18px;color:currentColor}.browser-time-menu{position:absolute;top:48px;right:6px;z-index:5;width:min(230px,calc(100vw - 12px));display:flex;flex-direction:column;gap:2px;padding:6px;background:#23262b;border:1px solid #383d45;border-radius:12px;box-shadow:0 12px 36px #00000085}.browser-mode-menu{position:absolute;top:48px;right:94px;z-index:6;width:min(260px,calc(100vw - 12px));display:flex;flex-direction:column;gap:2px;padding:6px;background:#23262b;border:1px solid #383d45;border-radius:12px;box-shadow:0 12px 36px #00000085}.browser-mode-option{min-height:44px;padding:0 12px;border:0;border-radius:8px;background:transparent;color:#e8edf2;text-align:left;font-size:14px}.browser-mode-option.proxy{color:#f2a450}.browser-mode-option[aria-pressed=true]{background:rgba(var(--blue-rgb),.18)}.browser-mode-option:disabled{color:#666f79}.browser-mode-menu p,.browser-history-mode-menu p{margin:4px 8px 6px;color:#929ba5;font-size:12px;line-height:1.35}.browser-mode-switch.proxy{color:#e8892f}.browser-time-option{min-height:44px;padding:0 12px;border:0;border-radius:8px;background:transparent;color:#e8edf2;text-align:left;font-size:14px}.browser-time-option[aria-pressed=true]{background:rgba(var(--blue-rgb),.18);color:#73b8ff}.browser-options-trigger{display:grid;place-items:center}.browser-options-trigger svg{width:21px;height:21px}.browser-options-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:4;background:transparent}.browser-options-card{position:absolute;top:48px;right:6px;z-index:5;width:min(340px,calc(100vw - 12px));max-height:min(72vh,620px);overflow-y:auto;padding:6px 14px;background:#272a30fa;border:1px solid #454a53;border-radius:16px;box-shadow:0 18px 48px #00000094;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.browser-options-row{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 2px;color:#eef1f4}.browser-options-row>span:first-child{min-width:0}.browser-options-row strong,.browser-options-section>strong,.browser-close-trigger strong,.browser-options-title strong{font-size:14px;font-weight:600}.browser-options-row small,.browser-options-hint{color:#8f9aa6;font-size:11px;line-height:1.35}.browser-options-hint{margin:-3px 10px 8px}.browser-options-section{padding:12px 2px;border-top:1px solid rgba(255,255,255,.1)}.browser-options-card>.browser-options-row{border-top:1px solid rgba(255,255,255,.1)}.browser-current-mode{display:flex;flex-direction:column;gap:8px;border-top:0}.browser-mode-segment{min-height:44px;display:grid;grid-template-columns:1fr 1fr;padding:3px;border-radius:11px;background:#191c20}.browser-mode-segment button{min-height:38px;padding:0 12px;border:0;border-radius:9px;background:transparent;color:#9aa5b1;font-size:14px;font-weight:600}.browser-mode-segment button[aria-pressed=true]{background:#4b515a;color:#fff;box-shadow:0 1px 4px #00000061}.browser-mode-segment button.proxy[aria-pressed=true]{background:#d9822b47;color:#ffc078}.browser-mode-segment button:disabled{opacity:.45}.browser-current-mode .browser-options-hint{margin:0}.browser-view-segment{display:inline-flex;padding:2px;border-radius:9px;background:#191c20}.browser-view-segment button{width:42px;height:34px;display:grid;place-items:center;padding:0;border:0;border-radius:7px;background:transparent;color:#8e99a5}.browser-view-segment button[aria-pressed=true]{background:#4b515a;color:#fff;box-shadow:0 1px 3px #00000059}.browser-view-segment svg{width:17px;height:17px}.browser-close-trigger{width:100%;min-height:44px;display:flex;align-items:center;justify-content:space-between;padding:0;border:0;background:transparent;color:#eef1f4;font-size:14px;text-align:left}.browser-close-trigger span:last-child{color:#9fc6ff;font-size:13px}.browser-time-options{display:grid;grid-template-columns:repeat(2,1fr);gap:4px;padding-bottom:4px}.browser-time-options .browser-time-option{min-height:38px;text-align:center}.browser-profile-options{display:flex;flex-direction:column;gap:2px}.browser-options-title{min-width:0;display:inline-flex;align-items:center;gap:7px;color:#eef1f4}.browser-title-help{flex:none;font-size:14px;font-weight:600}.browser-options-control{flex:none;display:flex;align-items:center}.browser-site-cookie-row{min-height:44px;display:flex;align-items:center;gap:7px}.browser-site-cookie-row .browser-options-danger{width:auto}.browser-profile-persist{min-width:0;padding:2px 0 5px}.browser-options-danger{width:100%;min-height:42px;padding:0;border:0;background:transparent;color:#ff6961;text-align:left;font-size:14px}.browser-options-action{width:100%;min-height:42px;padding:0;border:0;background:transparent;color:#eef1f4;display:flex;align-items:center;text-align:left;text-decoration:none;font-size:14px;font-weight:600}.browser-zoom-row{min-height:44px}.browser-zoom-stepper{flex:none;display:inline-flex;align-items:center;padding:2px;border-radius:11px;background:#191c20}.browser-zoom-stepper button{min-width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;padding:0 8px;border:0;border-radius:9px;background:transparent;color:#eef1f4;font:16px/1 system-ui,sans-serif;touch-action:manipulation}.browser-zoom-stepper button:disabled{color:#555e68}.browser-zoom-stepper .browser-zoom-value{min-width:56px;color:#9fc6ff;font-size:13px;font-variant-numeric:tabular-nums}.browser-content{position:relative;z-index:0;isolation:isolate;contain:paint;flex:1;min-height:0;display:flex;overflow:hidden;background:#fff}.browser-pane{position:absolute;top:0;right:0;bottom:0;left:0;min-width:0;min-height:0;overflow:auto;visibility:hidden;pointer-events:none;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:rgba(90,102,115,.72) transparent}.browser-pane.active{visibility:visible;pointer-events:auto}.browser-pane::-webkit-scrollbar{width:7px;height:7px}.browser-pane::-webkit-scrollbar-track{background:transparent}.browser-pane::-webkit-scrollbar-thumb{border-radius:999px;background:#5a6673b8}.browser-pane::-webkit-scrollbar:horizontal{height:7px}.browser-frame-scaler{width:100%;height:100%;position:relative}.browser-frame{width:100%;height:100%;display:block;border:0;background:#fff}.browser-pane.proxy{box-shadow:inset 0 2px #d9822b}.browser-pane.static{box-shadow:inset 0 2px 0 var(--green)}.browser-page-loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;background:transparent;pointer-events:none}.browser-page-progress{position:absolute;inset:0 0 auto;height:3px;overflow:hidden;background:rgba(var(--blue-rgb),.16)}.browser-page-progress:after{content:"";display:block;width:100%;height:100%;background:var(--blue);transform:scaleX(.08);transform-origin:left;animation:browser-progress 8s cubic-bezier(.1,.7,.2,1) forwards;box-shadow:0 0 7px rgba(var(--blue-rgb),.72)}.browser-pane.proxy .browser-page-progress{background:#d9822b29}.browser-pane.proxy .browser-page-progress:after{background:#d9822b;box-shadow:0 0 7px #d9822bb8}.browser-page-progress.static{background:rgba(var(--green-rgb),.16)}.browser-page-progress.static:after{background:var(--green);box-shadow:0 0 7px rgba(var(--green-rgb),.72)}@keyframes browser-progress{45%{transform:scaleX(.68)}to{transform:scaleX(.9)}}.browser-content.desktop .browser-frame{position:absolute;inset:0 auto auto 0}.browser-history{flex:1;min-width:0;overflow-y:auto;padding:18px 14px calc(18px + env(safe-area-inset-bottom));background:#0b0f14}.browser-history[hidden]{display:none}.browser-history-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.browser-history-head h2{margin:0;font-size:20px}.browser-history-head button{min-height:44px;padding:0 8px;border:0;background:transparent;color:var(--blue);font-size:14px}.browser-static-state button{flex:none;min-height:42px;padding:0 14px;border:0;border-radius:10px;background:rgba(var(--green-rgb),.16);color:#71df91;font-weight:650}.browser-static-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:28px;background:#0b0f14;color:#e8edf2;text-align:center}.browser-static-state span{max-width:100%;overflow-wrap:anywhere;color:#83909d;font:12px ui-monospace,SF Mono,Menlo,monospace}.browser-empty{color:#798796;text-align:center;margin-top:22vh}.browser-history-list{margin-top:10px;border-radius:12px;overflow:visible;background:#151a20}.browser-history-row{position:relative;display:flex;border-bottom:1px solid #252c34}.browser-history-list .browser-history-main{min-width:0;flex:1;min-height:58px;display:flex;flex-direction:column;justify-content:center;gap:3px;padding:9px 12px;border:0;background:transparent;color:#e8edf2;text-align:left}.browser-history-list .browser-history-more{width:44px;min-height:44px;flex:0 0 auto;border:0;background:transparent;color:#aeb9c4;font-size:22px}.browser-history-list strong,.browser-history-url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.browser-history-meta{display:flex;align-items:center;gap:6px;min-width:0}.browser-history-url{color:#788797;font:11px ui-monospace,SF Mono,Menlo,monospace}.browser-history-mode{flex:none;padding:2px 6px;border-radius:999px;color:#9ba7b3;background:#252c34;font:10px/1.2 system-ui,sans-serif}.browser-history-mode.proxy{color:#f2a450;background:#f2a4501f}.browser-history-mode.static{color:#71df91;background:rgba(var(--green-rgb),.12)}.browser-history-mode-menu{position:absolute;right:8px;top:50px;z-index:4;width:min(260px,calc(100vw - 44px));display:flex;flex-direction:column;gap:2px;padding:6px;background:#282c32;border:1px solid #414750;border-radius:12px;box-shadow:0 12px 34px #0000008c}.browser-history-list .browser-history-mode-option{min-height:44px;padding:0 12px;border:0;border-radius:8px;background:transparent;color:#e8edf2;text-align:left;font-size:14px}.browser-history-list .browser-history-mode-option.proxy{color:#f2a450}.browser-history-list .browser-history-mode-option:disabled{color:#666f79}.browser-history-list .browser-history-mode-option.danger{color:#ff6961}.browser-profile-confirm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;display:grid;place-items:center;padding:20px;background:#00000094;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.browser-profile-confirm{width:min(320px,100%);padding:18px;border-radius:16px;background:#25262a;box-shadow:0 16px 50px #0000008c}.browser-profile-confirm h2{margin:0 0 8px;color:#f2f2f7;font-size:19px}.browser-profile-confirm p{margin:0 0 16px;color:#f2f2f7;font-size:14px;line-height:1.45}.browser-profile-confirm ul{margin:0 0 16px;padding-left:20px;color:#b5bac3;font-size:14px;line-height:1.45}.browser-profile-confirm>div{display:flex;justify-content:flex-end;gap:8px}.browser-profile-confirm button{min-width:72px;min-height:44px;border:0;border-radius:10px;background:#78788038;color:#f2f2f7;font:inherit}.browser-profile-confirm button.danger{color:#ff6961}@media (prefers-reduced-motion: reduce){.browser-profile-confirm-backdrop{scroll-behavior:auto}}.browser-error{position:absolute;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:3;width:min(92%,420px);display:flex;align-items:center;gap:10px;padding:10px 12px;background:#23262bf5;border:1px solid #454b54;border-radius:12px;color:#f0f2f4;font-size:13px;box-shadow:0 10px 28px #0006}.browser-error span{flex:1}.browser-error button{min-height:36px;border:0;background:transparent;color:var(--blue);font-weight:600}.browser-consent{display:flex;align-items:center;justify-content:center;padding:22px}.browser-consent-card{width:min(460px,100%);padding:26px 22px;border:1px solid #383b42;border-radius:18px;background:#1c1d21;box-shadow:0 18px 50px #00000073}.browser-consent-card>svg{width:30px;height:30px;color:var(--blue)}.browser-consent-card h2{margin:14px 0 8px;font-size:21px}.browser-consent-card p,.browser-consent-card li{color:#b5bac3;line-height:1.55}.browser-consent-card ul{margin:16px 0 22px;padding-left:20px}.browser-consent-actions{display:flex;justify-content:flex-end;gap:10px}.browser-consent-actions button{border:0;border-radius:10px;padding:10px 14px;color:#d9dce2;background:#303238}.browser-consent-actions .browser-consent-enable{color:#fff;background:var(--blue);font-weight:650}.browser-entry.direct>svg{color:var(--blue)}.browser-entry.proxy>svg{color:#d9b44a}.browser-entry.static>svg{color:var(--green)}@media (max-width: 430px){.browser-nav{gap:1px;padding-inline:3px}.browser-nav-button{width:36px}.browser-tab{padding-inline:10px}}@media (prefers-reduced-motion: reduce){.browser-sheet{transition:none}.browser-page-progress:after{animation:none;transform:scaleX(.72)}}.settings-group{margin:16px -16px 0;padding:7px 16px;background:#1b1c1f;color:#9aa3ad;font-size:11px;font-weight:700;letter-spacing:1.2px;border-top:1px solid #33353a;border-bottom:1px solid #33353a}.settings-head+.settings-group{margin-top:0}.settings-group+.settings-section{border-top:none}.home-pane{flex:1;display:flex;flex-direction:column;min-width:0}.file-seg{display:flex;gap:2px;margin:10px 12px;padding:2px;background:#76768033;border-radius:9px}.file-seg-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px;border:none;border-radius:7px;background:transparent;color:#ebebf599;font-size:14px;font-weight:600;touch-action:manipulation;transition:color .15s}.file-seg-btn.on{background:#48484a;color:#fff;box-shadow:0 1px 3px #00000059,0 0 0 .5px #0003}.file-seg-btn:active:not(.on){color:#cfe0f2}.file-seg-btn svg{width:16px;height:16px}.git-head{align-items:stretch;min-height:42px}.git-back{flex:0 0 auto;width:40px;align-self:stretch;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:#9fb0c0;font-size:26px;line-height:1}.git-drill-head{flex:1;min-width:0;display:flex;align-items:center;gap:4px;overflow:hidden}.git-drill-title{display:inline-flex;align-items:center;gap:7px;min-width:0;color:#e6edf3;font-size:14px}.git-drill-title svg{width:16px;height:16px;color:#6b86a3;flex:0 0 auto}.git-title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-tabs-scroll{display:flex;align-items:stretch;overflow-x:auto;flex:1;-webkit-overflow-scrolling:touch}.git-tab-add{flex:0 0 auto;width:40px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;border-right:1px solid #1d2630;color:#8fb2dc;font-size:20px;line-height:1}.git-tab{flex:0 0 auto;display:inline-flex;align-items:center;white-space:nowrap;border-right:1px solid #1d2630}.git-tab.active{background:#0b0f14;box-shadow:inset 0 -2px 0 var(--blue)}.git-tab-label{display:inline-flex;align-items:center;padding:10px 4px 10px 12px;background:transparent;border:none;color:#9fb0c0;font-size:13px}.git-tab.active .git-tab-label{color:#e6edf3}.git-tab-x{background:transparent;border:none;color:#6b7a89;font-size:11px;padding:0 10px 0 4px;align-self:stretch}.git-branch-bar{display:flex;align-items:center;gap:10px;padding:7px 12px 7px 14px;border-bottom:1px solid #1d2630;background:#0b0f14;font-size:13px}.git-branch-bar-name{flex:1;min-width:0;color:#cfe0f2;font-weight:600;display:flex;align-items:center;gap:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-branch-glyph{color:#8fb2dc}.git-branch-cur-tag{flex:0 0 auto;font-size:11px;font-weight:600;color:var(--green);background:rgba(var(--green-rgb),.12);border:1px solid rgba(var(--green-rgb),.4);border-radius:999px;padding:1px 7px}.git-branch-bar-track{flex:0 0 auto;font-size:12px;font-variant-numeric:tabular-nums;display:flex;gap:5px}.git-branch-dd{position:relative;flex:0 0 auto}.git-branch-trigger{max-width:46vw;display:flex;align-items:center;gap:5px;background:#11161d;border:1px solid #1d2630;border-radius:8px;color:#9fb0c0;font-size:12px;padding:5px 9px}.git-branch-trigger.other{border-color:#2f6fc0;background:#15212f;color:#cfe0f2}.git-branch-trigger-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-branch-caret{flex:0 0 auto;display:inline-flex;color:#6b7a89}.git-branch-caret svg{width:13px;height:13px}.git-dd-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40}.git-dd-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:41;min-width:56vw;max-width:calc(100vw - 24px);max-height:56vh;overflow:auto;-webkit-overflow-scrolling:touch;background:#0e141b;border:1px solid #243040;border-radius:10px;box-shadow:0 10px 28px #00000080;padding:4px}.git-dd-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:none;color:#e6edf3;padding:10px;font-size:13px;border-radius:7px}.git-dd-item:active{background:#15212f}.git-dd-item.viewing{background:#15212f;box-shadow:inset 3px 0 #2f6fc0}.git-dd-item.current .git-row-path{color:#cfe0f2;font-weight:600}.git-section{display:flex;flex-direction:column;min-height:0;border-bottom:1px solid #161d26}.git-section:not(.open){flex:0 0 auto}.git-section.open.git-section--top{flex:0 1 auto;min-height:25%;max-height:50%}.git-section.open.git-section--mid{flex:1 1 0;min-height:96px}.git-section-head{flex:0 0 auto;display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:#0b0f14;border:none;color:#9fb0c0;padding:10px 14px;font-size:13px;font-weight:600}.git-section-head:active{background:#11161d}.git-section-caret{flex:0 0 auto;display:inline-flex;color:#6b7a89;transition:transform .15s;transform:rotate(-90deg)}.git-section.open .git-section-caret{transform:rotate(0)}.git-section-caret svg{width:14px;height:14px}.git-section-title{flex:0 0 auto}.git-section-sub{flex:1;min-width:0;color:#6b7a89;font-weight:400;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-section-count{flex:0 0 auto;margin-left:auto;color:#6b7a89;font-weight:400;font-size:12px;font-variant-numeric:tabular-nums}.git-section-sub+.git-section-count{margin-left:8px}.git-section-body{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.git-more{text-align:center;color:#6b7a89;font-size:12px;padding:12px}.git-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding-bottom:var(--kb-inset, 0px)}.git-scroll{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.git-error{color:var(--red);font-size:13px;padding:14px 16px}.git-loading,.git-empty{color:#6b7a89;font-size:13px;padding:16px}.git-notice{color:#8b97a5;font-size:13px;line-height:1.5;padding:14px 16px}.git-list{display:flex;flex-direction:column}.git-row{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:transparent;border:none;border-bottom:1px solid #161d26;color:#e6edf3;padding:11px 14px;font-size:13px}.git-row:active{background:#11161d}.git-row-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.git-badge{flex:0 0 auto;width:20px;text-align:center;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;color:#9aa3ad}.git-badge-m{color:#d8a13a}.git-badge-a{color:var(--green)}.git-badge-d{color:#f06b6b}.git-badge-r{color:#8fb2dc}.git-badge-q{color:#6b7a89}.git-commit-row{align-items:flex-start}.git-hash{flex:0 0 auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#8fb2dc;font-size:12px;padding-top:1px}.git-commit-main{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.git-commit-meta{color:#6b7a89;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-branch{gap:8px}.git-branch.current .git-row-path{color:#cfe0f2;font-weight:600}.git-branch.viewing{background:#11161d;box-shadow:inset 3px 0 #2f6fc0}.git-branch-dot{flex:0 0 auto;width:12px;text-align:center;color:var(--green);font-size:11px}.git-branch-up{flex:0 0 auto;color:#6b7a89;font-size:11px;font-variant-numeric:tabular-nums}.git-ahead{color:var(--green)}.git-behind{color:#f06b6b}.git-commit-detail{display:flex;flex-direction:column}.git-commit-msg{white-space:pre-wrap;word-break:break-word;margin:0;padding:14px 16px;color:#c9d6e2;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;border-bottom:1px solid #161d26;background:#0e131a}.git-diff-wrap{display:flex;flex-direction:column}.git-diff-zoom{position:sticky;top:0;z-index:2;display:flex;gap:6px;justify-content:flex-end;padding:8px 12px}.git-diff-trunc{position:sticky;top:0;z-index:1;background:#3a2a12;color:#f0c674;font-size:12px;padding:8px 14px;border-bottom:1px solid #5a4318}.git-diff-fname{padding:10px 14px 6px;color:#9fb0c0;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.git-diff{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:inherit;line-height:1.5;white-space:pre;overflow-x:auto;-webkit-overflow-scrolling:touch}.git-diff-line{padding:0 14px;min-width:max-content}.git-diff-hunk{color:#6b86a3;background:#0e131a}.git-diff-add{background:#3fb95029;color:#c7f0cf}.git-diff-del{background:#f06b6b29;color:#f3cccc}.git-diff-ctx{color:#c9d6e2}.home-view{flex:1;overflow:auto;-webkit-overflow-scrolling:touch;padding:12px;color:#c9d6e2}.home-empty{color:#6b7a89;font-size:13px;display:flex;flex-direction:column;gap:4px;padding:16px 4px}.home-empty span{color:#4a5663;font-size:12px}.home-recent-row{display:flex;align-items:center;width:100%}.home-recent{flex:1;display:flex;flex-direction:column;align-items:flex-start;background:#11161d;border:1px solid #1d2630;border-radius:8px;padding:8px 10px;margin-bottom:6px;color:#e6edf3;text-align:left}.home-path{font-size:11px;color:#6b7a89;overflow:hidden;text-overflow:ellipsis;max-width:80vw}.home-x{background:transparent;border:none;color:#6b7a89;padding:0 8px}.browse-view{flex:1;display:flex;flex-direction:column;min-height:0;position:relative}.browse-bar{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid #1d2630;background:#0e131a}.browse-root-dd{flex:0 0 auto}.browse-root{display:inline-flex;align-items:center;gap:3px;padding:9px 4px 9px 10px;background:transparent;border:none;color:#6b86a3;font-size:13px}.browse-root .dd-caret{font-size:10px}.browse-root-dd .dd-menu{left:0;right:auto;min-width:120px}.browse-up{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:#11161d;border:1px solid #1d2630;border-radius:8px;color:#9fb0c0}.browse-up:disabled{opacity:.4}.browse-up svg{width:18px;height:18px}.browse-cwd{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:#11161d;border:1px solid #1d2630;border-radius:8px;color:#9fb0c0}.browse-cwd svg{width:18px;height:18px}.browse-path{flex:1;min-width:0;display:flex;align-items:center;border-radius:8px;border:1px solid #243446;background:#11161d}.browse-path:focus-within{border-color:#3a5a7e}.browse-input:focus{outline:none}.browse-home{flex:0 0 auto;padding:9px 2px 9px 10px;color:#6b86a3;font-size:13px;-webkit-user-select:none;user-select:none}.browse-input{flex:1;min-width:0;padding:9px 10px 9px 0;border:none;border-radius:8px;background:transparent;color:#e6edf3;font-size:13px}.browse-err{padding:8px 12px 0}.browse-notice{position:absolute;left:50%;bottom:16px;transform:translate(-50%);z-index:6;max-width:88%;width:max-content;padding:9px 14px;border-radius:10px;background:#1c1e22f7;color:#d3dbe4;font-size:13px;line-height:1.4;box-shadow:0 6px 24px #00000080;pointer-events:none;word-break:break-all}.browse-saved{display:flex;align-items:center;gap:10px;margin:8px 12px 0;padding:8px 10px;border:1px solid #2a3f56;border-radius:8px;background:#15212e}.browse-saved-text{flex:1;min-width:0;color:#cfe0f0;font-size:13px}.browse-saved-close{flex:0 0 auto;width:32px;height:32px;border:none;border-radius:8px;background:transparent;color:#8aa0b6;font-size:20px;line-height:1}.browse-pending{display:flex;align-items:center;gap:10px;margin:8px 12px 0;padding:8px 10px;border:1px solid #2a3f56;border-radius:8px;background:#15212e}.browse-pending-text{flex:1;min-width:0;color:#cfe0f0;font-size:13px;overflow:hidden;text-overflow:ellipsis}.browse-pending-hint{color:#8aa0b6;font-style:normal;font-size:12px}.browse-pending-btn{flex:0 0 auto;height:32px;padding:0 14px;border:none;border-radius:8px;background:#2f5fa0;color:#fff;font-size:13px}.browse-pending-btn:disabled{opacity:.4}.browse-list{flex:1;overflow:auto;-webkit-overflow-scrolling:touch;padding:4px 12px 16px}.browse-empty{color:#6b7a89;font-size:13px;padding:16px 4px}.browse-overflow{color:#6b7a89;font-size:12px;padding:12px 4px 16px;text-align:center}.browse-entry{display:flex;align-items:center;gap:9px;width:100%;background:transparent;border:none;border-bottom:1px solid #161d26;color:#e6edf3;padding:11px 4px;text-align:left}.browse-entry-icon{flex:0 0 auto;display:inline-flex;color:#6b86a3}.browse-entry-icon svg{width:17px;height:17px}.browse-entry-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.browse-upload{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:#11161d;border:1px solid #1d2630;border-radius:8px;color:#9fb0c0}.browse-upload:disabled{opacity:.4}.browse-upload svg{width:18px;height:18px}.browse-file-input{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.browse-mkdir{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:#11161d;border:1px solid #1d2630;border-radius:8px;color:#9fb0c0}.browse-mkdir:disabled{opacity:.4}.browse-mkdir svg{width:18px;height:18px}.browse-newfolder{display:flex;align-items:center;gap:8px;padding:8px 12px}.browse-newfolder-input{flex:1;min-width:0;padding:9px 10px;border-radius:8px;border:1px solid #243446;background:#11161d;color:#e6edf3;font-size:13px}.browse-newfolder-input:focus{outline:none;border-color:#3a5a7e}.browse-newfolder-ok{flex:0 0 auto;height:36px;padding:0 14px;border:none;border-radius:8px;background:#2f5fa0;color:#fff;font-size:13px;white-space:nowrap}.browse-newfolder-x{flex:0 0 auto;width:36px;height:36px;border:1px solid #1d2630;border-radius:8px;background:#11161d;color:#9fb0c0;font-size:15px;line-height:1}.browse-progress{padding:8px 12px 0}.browse-progress-label{display:block;color:#9fb6d0;font-size:12px;margin-bottom:4px;font-variant-numeric:tabular-nums}.browse-progress-track{display:block;height:4px;border-radius:2px;background:#1c2b3a;overflow:hidden}.browse-progress-fill{display:block;height:100%;background:#3a5a7e;transition:width .1s linear}.browse-entry-row{display:flex;align-items:center}.browse-entry-row .browse-entry{flex:1;min-width:0}.browse-entry-size{flex:0 0 auto;margin-left:auto;padding-left:8px;color:#6b7a89;font-size:12px;font-variant-numeric:tabular-nums}.browse-dl,.browse-copy{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:44px;border:none;background:none;color:#6b86a3;margin-left:4px}.browse-dl svg,.browse-copy svg{width:17px;height:17px}.browse-copy:active{color:#9db8ff}.browse-pick-bar{padding:8px;border-top:1px solid #1d2630}.browse-pick-confirm{width:100%;padding:10px;border:none;border-radius:8px;background:var(--blue);color:#fff;font-size:14px}.dirpick-backdrop{z-index:30;background:#0000009e}.dirpick-card{width:min(92vw,520px);max-width:none;z-index:31;max-height:min(80vh,calc(100vh - var(--kb-inset, 0px) - 32px));display:flex;flex-direction:column}.dirpick-card .browse-view{flex:1;min-height:0}.dirpick-hint{font-size:12px;color:#9a9a9a;line-height:1.5;margin-bottom:10px;word-break:break-all}.dirpick-hint code{color:#d8c08a;background:#2c2e33;padding:1px 5px;border-radius:4px}.doc-md-wrap{position:relative;flex:1;min-width:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.doc-zoom{position:sticky;top:0;z-index:1;display:flex;gap:6px;align-items:center;padding:8px 12px 0}.doc-tts{display:flex;gap:6px}.doc-fonts{display:flex;gap:6px;margin-left:auto}.doc-zoom-btn{display:inline-flex;align-items:center;justify-content:center;background:#11161d;border:1px solid #1d2630;color:#9fb0c0;border-radius:8px;padding:4px 12px;font-size:14px;touch-action:manipulation}.doc-zoom-btn:disabled{opacity:.4}.doc-zoom-icon{padding:4px 9px}.doc-zoom-icon svg{width:17px;height:17px;display:block}.tts-active{background:rgba(var(--blue-rgb),.3);border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.doc-md{padding:16px;color:#e6edf3;line-height:1.6;word-wrap:break-word}.doc-md h1,.doc-md h2,.doc-md h3{border-bottom:1px solid #1d2630;padding-bottom:4px}.doc-md pre{background:#11161d;padding:12px;border-radius:8px;overflow:auto}.doc-md code{background:#11161d;padding:1px 4px;border-radius:4px}.doc-md a{color:var(--blue)}.doc-md img{max-width:100%}.doc-md table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse}.doc-text{margin:0;padding:16px;color:#e6edf3;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}.doc-iframe{width:100%;height:100%;border:0;background:#fff}.doc-image-wrap{flex:1;min-height:0;overflow:hidden;position:relative;display:flex;align-items:center;justify-content:center;padding:8px;background:#1b1d22;touch-action:none;user-select:none;-webkit-user-select:none}.doc-image{max-width:100%;max-height:100%;object-fit:contain;display:block;will-change:transform;-webkit-touch-callout:none}.doc-image-msg{flex:1;display:flex;align-items:center;justify-content:center;color:#9fb0c0;font-size:14px}.doc-image-zoom{position:absolute;bottom:14px;left:50%;transform:translate(-50%);z-index:2;display:flex;align-items:center;gap:2px;padding:4px;background:#1c1e22eb;border:1px solid #3a3c42;border-radius:999px;box-shadow:0 6px 20px #00000073}.doc-image-zoom button{width:34px;height:30px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:#e6edf3;font-size:20px;line-height:1;border-radius:999px;touch-action:manipulation}.doc-image-zoom button:disabled{color:#5a626b}.doc-image-zoom-val{min-width:46px;text-align:center;color:#9fb0c0;font-size:13px;font-variant-numeric:tabular-nums}.doc-image-note{position:absolute;top:14px;left:50%;transform:translate(-50%);z-index:3;max-width:88%;padding:7px 14px;border-radius:999px;white-space:nowrap;background:#1c1e22f0;border:1px solid #3a3c42;color:#e6edf3;font-size:13px;box-shadow:0 6px 20px #00000073}.doclink-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:58}.doclink-pop{position:fixed;z-index:59;width:max-content;max-width:calc(100vw - 16px);background:#1b2330;border:1px solid #2c3a4e;border-radius:12px;padding:12px 14px;box-shadow:0 12px 32px #0000008c;color:#e6edf3}.doclink-name{display:flex;align-items:center;gap:7px;font-weight:600;font-size:14px}.doclink-name svg{width:17px;height:17px;color:#6cb4ff;flex:0 0 auto}.doclink-path{font-size:11px;color:#7d8da0;margin:5px 0 11px;word-break:break-all;max-width:72vw}.doclink-note{font-size:11px;color:#8a97a6;margin:-5px 0 11px;max-width:72vw;line-height:1.45}.doclink-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.doclink-actions button{border:1px solid #2c3a4e;background:#11161d;color:#c9d6e2;border-radius:8px;padding:7px 18px;font-size:14px}.doclink-actions .doclink-open.proxy{border-color:#d9822b99;color:#f2a450}.doclink-actions button:disabled{color:#68727c;border-color:#30363d}.doclink-open{background:#2563b0;border-color:#2f6fc0;color:#fff}.doc-deco{background:#6cb4ff33;border-radius:2px;box-sizing:border-box}.cursor-deco{background:#fff;mix-blend-mode:difference;pointer-events:none}.doc-toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:60;max-width:86vw;background:#2a1518;color:#ffd7d7;border:1px solid #5a2a2a;padding:10px 14px;border-radius:10px;font-size:13px;box-shadow:0 6px 20px #0006}.exit-toast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:60;max-width:86vw;white-space:nowrap;background:#1e2024f0;color:#e6e9ee;border:1px solid #3a3d44;padding:9px 16px;border-radius:999px;font-size:13px;box-shadow:0 6px 20px #0006;pointer-events:none;animation:exit-toast-in .18s ease}@keyframes exit-toast-in{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion: reduce){.exit-toast{animation:none}}.handoff-toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:60;max-width:88vw;text-align:center;background:#1e2024f0;color:#e6e9ee;border:1px solid #3a3d44;padding:9px 16px;border-radius:999px;font-size:13px;box-shadow:0 6px 20px #0006;pointer-events:none;animation:exit-toast-in .18s ease}@media (prefers-reduced-motion: reduce){.handoff-toast{animation:none}}.inbox-btn{position:relative}.inbox-dot{position:absolute;top:4px;right:4px;width:9px;height:9px;border-radius:50%;border:1.5px solid #2a2b2e}.inbox-dot.needs{background:#e0a020}.inbox-dot.done{background:var(--green)}.inbox-dot.working{background:var(--blue);animation:tw-blink 1s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.inbox-dot.working{animation:none}}.inbox-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:19}.inbox-panel{position:fixed;z-index:20;top:48px;right:8px;width:calc(100% - 32px);max-width:360px;max-height:70vh;overflow-y:auto;background:#232427;border-radius:12px;padding:8px;box-shadow:0 10px 40px #00000080}.inbox-group-title{font-size:12px;color:#888;letter-spacing:1px;padding:8px 8px 4px}.inbox-row{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;background:none;border:none;color:#e6e6e6;padding:8px;border-radius:8px;touch-action:manipulation}.inbox-row:active{background:#2f3034}.inbox-row-head{display:flex;align-items:center;gap:6px;min-width:0}.agent-mark{width:15px;height:15px;flex:none;display:inline-block}.agent-mark svg{display:block;width:100%;height:100%}.win-tab .agent-mark{margin:0}.inbox-chip{font-size:11px;padding:1px 6px;border-radius:4px;flex:none}.inbox-chip.needs{background:#e0a020;color:#111}.inbox-chip.done{background:var(--green);color:#fff}.inbox-chip.working{background:var(--blue);color:#fff;animation:tw-blink 1s ease-in-out infinite}@keyframes tw-blink{50%{opacity:.4}}@media (prefers-reduced-motion: reduce){.inbox-chip.working{animation:none}}.inbox-head{display:flex;align-items:center;gap:8px;padding:2px 8px 8px;font-size:13px;color:#9aa0a6}.inbox-summary{display:flex;gap:4px;margin-left:auto}.inbox-summary .inbox-chip{animation:none;font-size:10px;padding:1px 5px}.inbox-readall{background:none;border:none;color:var(--blue);font-size:13px;padding:4px 6px;touch-action:manipulation}.inbox-loc{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-time{margin-left:auto;font-size:11px;color:#888;flex:none}.inbox-msg{font-size:12px;color:#9aa0a6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-empty{padding:24px 8px;text-align:center;color:#888;font-size:13px}.inbox-enable{display:flex;flex-direction:column;gap:8px;align-items:stretch;text-align:left}.inbox-enable-title{font-weight:600;color:#e8eaed;font-size:14px}.inbox-enable-hint{color:#9aa0a6;font-size:12px;line-height:1.4}.inbox-enable-btn{margin-top:2px;padding:8px 12px;border:none;border-radius:8px;background:var(--blue);color:#fff;font-size:13px;touch-action:manipulation}.inbox-enable-btn:disabled{opacity:.6}.inbox-enable-err{color:var(--red);font-size:12px}.drawer-orphans{border-top:1px solid #34353a;margin-top:10px;padding-top:6px}.drawer-orphans-head{display:flex;align-items:center;width:100%;gap:6px;background:none;border:none;color:#888;font-size:12px;letter-spacing:1px;padding:6px 4px;text-align:left;touch-action:manipulation}.drawer-orphans-caret{margin-left:auto}.drawer-orphans-hint{color:#777;font-size:11px;padding:0 4px 4px}.drawer-orphan-row{padding:6px 4px}.drawer-orphan-row+.drawer-orphan-row{border-top:1px solid #2a2b2f}.drawer-orphan-head{display:flex;align-items:center;gap:6px}.drawer-orphan-cwd{flex:1;min-width:0;color:#cdddff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drawer-orphan-btn{flex:none;padding:4px 10px;border:none;border-radius:8px;background:#2b3550;color:#cdddff;font-size:13px;touch-action:manipulation}.drawer-orphan-btn:active{background:#344168}.drawer-orphan-btn:disabled{opacity:.45}.drawer-orphan-meta{display:flex;align-items:center;gap:6px;margin-top:2px;min-width:0}.drawer-orphan-agent{flex:none;font-size:10px;padding:0 5px;border-radius:3px;background:#333a45;color:#c7ccd1}.drawer-orphan-state{flex:none;font-size:10px;padding:0 5px;border-radius:3px}.drawer-orphan-state.idle{background:var(--green);color:#fff}.drawer-orphan-state.busy{background:var(--blue);color:#fff}.drawer-orphan-time{flex:none;font-size:11px;color:#888}.drawer-orphan-msg{flex:1;min-width:0;font-size:11px;color:#9aa0a6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bind-mode{display:flex;gap:4px;background:#23252b;border:1px solid #33353a;border-radius:10px;padding:3px}.bind-mode .seg{flex:1;padding:9px 10px;border:none;border-radius:7px;background:transparent;color:#aeb2ba;font-size:14px;touch-action:manipulation}.bind-mode .seg[aria-pressed=true]{background:var(--blue);color:#fff}.bind-mode .seg:disabled{opacity:.4}.orphan-targets{display:flex;flex-wrap:wrap;gap:6px}.orphan-targets .fontbtn[aria-pressed=true]{background:var(--blue);color:#fff;border-color:var(--blue)}.orphan-reco{margin-left:6px;font-size:10px;color:#7ee0a0}.orphan-targets .fontbtn[aria-pressed=true] .orphan-reco{color:#d6f5e3}.orphan-help{font-size:11px;color:#9aa0a6;line-height:1.5;margin-top:6px}.orphan-cmd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#d7dbe0;background:#ffffff12;padding:1px 6px;border-radius:6px;white-space:nowrap}.usage-card{max-width:420px;max-height:80vh;overflow-y:auto}.usage-agent{padding:12px 0}.usage-agent+.usage-agent{border-top:1px solid #33353a}.usage-agent-head{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px;margin-bottom:8px}.usage-agent-head .agent-mark{width:18px;height:18px}.usage-row{margin:12px 0}.usage-row-head{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;margin-bottom:5px}.usage-row-label{color:#ddd}.usage-row-sub{color:#888}.usage-row-pct{font-variant-numeric:tabular-nums;color:#ddd;font-weight:600}.usage-bar{position:relative;height:8px;background:#33353a;border-radius:5px;overflow:hidden}.usage-bar-time{position:absolute;top:-1px;bottom:-1px;width:2px;margin-left:-1px;background:#ffffffd9;box-shadow:0 0 2px #0009}.usage-bar-fill{height:100%;border-radius:5px;transition:width .3s ease}.usage-bar-fill.lvl-lo{background:#4ec98a}.usage-bar-fill.lvl-mid{background:#e0b341}.usage-bar-fill.lvl-hi{background:#ff6b6b}.usage-row-reset{margin-top:4px;font-size:11px;color:#888}.usage-empty{font-size:13px;color:#9aa0a6;padding:6px 0;line-height:1.5}.usage-code{display:inline-block;margin-top:6px;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;background:#1a1b1e;color:#b7f0cd;padding:3px 8px;border-radius:8px}.usage-updated{margin-left:auto;font-size:11px;color:#777}.usage-card .settings-title{margin-right:8px}.usage-head-note{margin-right:auto;font-size:11px;color:#777}.push-script-backdrop{z-index:30;background:#0000009e}.push-script-sheet{z-index:31;overflow-y:auto}.push-script-sheet .push-script-intro{margin:0 0 12px;color:var(--muted, #8a8a8e);font-size:13px;line-height:1.5}.push-script-block{margin:0 0 14px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}.push-script-label{font-size:12px;color:var(--muted, #8a8a8e)}.push-script-cmd{margin:0;padding:10px;background:#7878801f;border-radius:8px;overflow-x:auto;font-size:13px;line-height:1.5;align-self:stretch}.push-script-key{font-variant-numeric:tabular-nums;word-break:break-all;padding:8px 10px;background:#7878801f;border-radius:8px;font-size:13px;align-self:stretch}.push-script-fields{margin:0 0 14px;padding-left:18px;color:var(--muted, #8a8a8e);font-size:12px;line-height:1.7}.push-script-hint{margin:6px 0 0;color:var(--muted, #8a8a8e);font-size:13px;line-height:1.4}.push-script-note{margin:4px 0 0;padding:10px 12px;border-radius:8px;background:#7878801f;color:var(--muted, #8a8a8e);font-size:12px;line-height:1.55}.push-inbox-entry-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--red);margin-left:6px;vertical-align:middle}.push-inbox-head{align-items:stretch;min-height:42px}.push-inbox-markall{flex:0 0 auto;align-self:stretch;padding:0 12px;background:transparent;border:none;color:var(--blue);font-size:13px;white-space:nowrap}.push-inbox-drill-head{flex:1;min-width:0;display:flex;align-items:center;gap:4px;overflow:hidden}.push-inbox-back{flex:0 0 auto;width:40px;align-self:stretch;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:#9fb0c0;font-size:26px;line-height:1}.push-inbox-head-title{display:inline-flex;align-items:center;color:#e6edf3;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.push-inbox-list-title{flex:1;min-width:0;padding:0 12px}.push-inbox-unread-count{margin-left:8px;color:#6b7a89;font-size:12px;font-weight:400}.push-inbox-body{flex:1;min-height:0;display:flex;flex-direction:column}.push-inbox-error{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:9px 12px;color:#d8b0ad;background:#ff453a1a;border-bottom:1px solid rgba(255,69,58,.22);font-size:12.5px;line-height:1.4}.push-inbox-error span{flex:1;min-width:0}.push-inbox-error button{flex:0 0 auto;min-height:44px;padding:0 8px;border:none;background:transparent;color:var(--blue);font-size:13px;font-weight:600;touch-action:manipulation}.push-inbox-list{list-style:none;margin:0;padding:0;overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1}.push-inbox-row{display:flex;align-items:stretch;border-bottom:1px solid #1d2630}.push-inbox-main{flex:1;min-width:0;text-align:left;background:none;border:none;color:#e6edf3;padding:12px 14px}.push-inbox-row-top{display:flex;align-items:baseline;gap:8px}.push-inbox-row-title{flex:1;min-width:0;font-weight:500;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.push-inbox-unread .push-inbox-row-title{font-weight:700}.push-inbox-unread .push-inbox-row-title:before{content:"•";color:var(--blue);margin-right:6px}.push-inbox-delivery{flex:0 0 auto;font-size:10.5px;font-weight:600;white-space:nowrap}.push-inbox-delivery.pending{color:#8b99a7}.push-inbox-delivery.success{color:#65c98a}.push-inbox-delivery.failed{color:#ff8d84}.push-inbox-delivery.detail{margin:-9px 0 14px;font-size:12px}.push-inbox-row-body{color:#9fb0c0;font-size:13px;word-break:break-word;margin-top:3px}.push-inbox-row-time{flex:0 0 auto;color:#6b7a89;font-size:11px;font-variant-numeric:tabular-nums}.push-inbox-del{flex:0 0 auto;width:44px;background:none;border:none;color:#6b7a89;font-size:13px}.push-inbox-del:disabled,.push-inbox-detail-del:disabled{opacity:.45}.push-inbox-empty{color:#6b7a89;padding:48px 20px;text-align:center;font-size:14px}.push-inbox-detail{padding:18px 16px;overflow-y:auto;-webkit-overflow-scrolling:touch}.push-inbox-detail-title{color:#e6edf3;font-weight:700;font-size:18px}.push-inbox-detail-time{color:#6b7a89;font-size:12px;font-variant-numeric:tabular-nums;margin:5px 0 16px}.push-inbox-detail-text{color:#c9d5e1;white-space:pre-wrap;word-break:break-word;line-height:1.55;font-size:14px}.push-inbox-openurl{display:inline-block;margin-top:22px;text-decoration:none}.app,.app[data-chat-tone=dusk]{--ct-bg:#151109;--ct-ink:#f6f1e7;--ct-muted:#9f9081;--ct-me-bg:linear-gradient(180deg,#4a3a26,#3b2e20);--ct-me-ink:#f6efe2;--ct-chip:#201a10;--ct-chip-2:#2b2216;--ct-chip-line:#362b1b;--ct-chip-ink:#cbbfae;--ct-body:#1b150d;--ct-accent:#f4a84c;--ct-bar:#1b150c;--ct-field:#120d07;--ct-field-line:#3a2f1e;--ct-code-bg:#0f0b06;--ct-line:#2a2115;--ct-err-bg:rgba(255,120,90,.16);--ct-err-ink:#ff9a80}.app[data-chat-tone=ink]{--ct-bg:#0e0f0b;--ct-ink:#ece6d4;--ct-muted:#8f8b76;--ct-me-bg:linear-gradient(180deg,#423f2e,#383527);--ct-me-ink:#ece6d4;--ct-chip:rgba(255,240,200,.05);--ct-chip-2:rgba(255,240,200,.1);--ct-chip-line:rgba(255,230,180,.1);--ct-chip-ink:#b3ac90;--ct-body:rgba(255,240,200,.05);--ct-accent:#ffb454;--ct-bar:#15160f;--ct-field:#0a0b08;--ct-field-line:#2a2b22;--ct-code-bg:rgba(255,240,200,.06);--ct-line:rgba(255,230,180,.1);--ct-err-bg:rgba(255,120,90,.16);--ct-err-ink:#ff9a80}.app[data-chat-tone=light]{--ct-bg:#f4efe1;--ct-ink:#2c2a20;--ct-muted:#8a8266;--ct-me-bg:linear-gradient(180deg,#eeddba,#e6d3ae);--ct-me-ink:#3a3320;--ct-chip:#fffdf6;--ct-chip-2:#efe6d2;--ct-chip-line:rgba(90,70,20,.14);--ct-chip-ink:#7c7254;--ct-body:#efe6d2;--ct-accent:#b5741d;--ct-bar:#ece3d0;--ct-field:#fffdf6;--ct-field-line:#ddd1b6;--ct-code-bg:#efe6d2;--ct-line:rgba(90,70,20,.16);--ct-err-bg:rgba(200,60,40,.1);--ct-err-ink:#b23a2b}.chat-view{position:relative;display:flex;flex-direction:column;min-height:0;flex:1;background:var(--ct-bg)}.chat-scroll{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;gap:8px;padding:12px 12px calc(12px + env(safe-area-inset-bottom,0px));user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.chat-copy-hl{border-radius:10px;box-shadow:0 0 0 2px #0a84ff8c;background-color:#0a84ff1f}.chat-copy-callout{position:absolute}.lens-boot{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;pointer-events:none;color:#7d8189;text-align:center}.chat-scroll>.lens-boot{margin:auto;color:var(--ct-muted)}.terminal-wrap>.lens-boot{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4}.lens-boot-dots{display:inline-flex;align-items:center;gap:4px}.lens-boot-dot{width:5px;height:5px;border-radius:50%;background:currentColor;animation:chat-typing-wave 1.1s ease-in-out infinite}.lens-boot-dot:nth-child(2){animation-delay:.15s}.lens-boot-dot:nth-child(3){animation-delay:.3s}.lens-boot-hint{font-size:13px}.chat-new{margin:auto;padding:24px 0;color:var(--ct-muted);font-size:13.5px;text-align:center}@media (prefers-reduced-motion: reduce){.lens-boot-dot{animation:chat-typing-fade 1.6s ease-in-out infinite}}.chat-ts{color:var(--ct-muted);font-size:10.5px;font-weight:500;letter-spacing:.02em;font-variant-numeric:tabular-nums;margin-top:-4px;padding:0 4px}.chat-ts.ts-me{align-self:flex-end}.chat-ts.ts-them{align-self:flex-start}.chat-interrupt{align-self:center;display:flex;align-items:center;gap:8px;color:var(--ct-muted);font-size:11px;letter-spacing:.02em;padding:2px 0}.chat-interrupt:before,.chat-interrupt:after{content:"";width:22px;height:1px;background:var(--ct-line)}.chat-compact-divider{align-self:stretch;display:flex;align-items:center;gap:10px;color:var(--ct-muted);font-size:11px;letter-spacing:.04em;margin:6px 2px;padding:0}.chat-compact-divider:before,.chat-compact-divider:after{content:"";flex:1;height:1px;background:var(--ct-line)}.chat-slash-cmd{align-self:flex-end;max-width:82%;padding:3px 10px;border-radius:12px;background:var(--ct-chip);border:1px solid var(--ct-chip-line);color:var(--ct-chip-ink);font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;word-break:break-word}.chat-slash-result{align-self:flex-start;max-width:82%;color:var(--ct-muted);font-size:12.5px;line-height:1.45;padding:1px 2px;word-break:break-word}.chat-bubble{padding:9px 13px;border-radius:18px;font-size:15px;line-height:1.4;white-space:pre-wrap;word-break:break-word}.chat-me{align-self:flex-end;max-width:82%;background:var(--ct-me-bg);color:var(--ct-me-ink);border-bottom-right-radius:5px;box-shadow:0 1px 2px #0000001f}.chat-them{align-self:stretch;width:100%;max-width:100%;box-sizing:border-box;background:transparent;color:var(--ct-ink);border-radius:0;padding:3px 2px}.chat-md{white-space:normal}.chat-md>*:first-child{margin-top:0}.chat-md>*:last-child{margin-bottom:0}.chat-md p{margin:0 0 8px}.chat-md h1,.chat-md h2,.chat-md h3{font-size:1em;margin:10px 0 6px;border-bottom:1px solid var(--ct-line);padding-bottom:3px}.chat-md ul,.chat-md ol{margin:0 0 8px;padding-left:1.3em}.chat-md a{color:var(--ct-accent)}.chat-md img{max-width:100%;border-radius:6px}.chat-md code{background:var(--ct-code-bg);padding:1px 4px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em}.chat-md pre{background:var(--ct-code-bg);padding:10px;border-radius:8px;margin:0 0 8px;overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.chat-md pre code{background:none;padding:0}.chat-md table{display:block;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border-collapse:collapse;margin:0 0 8px}.chat-md th,.chat-md td{border:1px solid var(--ct-line);padding:4px 8px;text-align:left;white-space:nowrap}.chat-tool{align-self:flex-start;max-width:92%}.chat-tool-head{display:flex;align-items:center;gap:8px;width:100%;max-width:100%;min-height:30px;box-sizing:border-box;padding:6px 11px;border:1px solid var(--ct-chip-line);border-radius:10px;background:var(--ct-chip);color:var(--ct-chip-ink);font-size:12px;line-height:1.25;text-align:left;font-variant-numeric:tabular-nums;touch-action:manipulation}.chat-tool-ic{flex:none;display:inline-flex;align-items:center}.chat-tool-ic svg{width:15px;height:15px;display:block}.chat-tool-stat{flex:none;display:inline-flex;align-items:center;gap:6px;font-weight:600;font-variant-numeric:tabular-nums}.chat-tool-stat .cts-add{color:#3fb950}.chat-tool-stat .cts-del{color:#f85149}.chat-tool-head:active{background:var(--ct-chip-2)}.chat-tool-status{flex:none;display:inline-flex;align-items:center}.chat-tool-status svg{width:15px;height:15px;display:block}.chat-tool-status.ok{color:#3fb950}.chat-tool-status.err{color:#f85149}.chat-tool-body{margin:4px 0 0;padding:10px 12px;border-radius:10px;background:var(--ct-body);color:var(--ct-ink);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;overflow-x:auto;-webkit-overflow-scrolling:touch}.chat-diff{margin:4px 0 0;border:1px solid var(--ct-chip-line);border-radius:10px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:300px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}.chat-diff-hunk+.chat-diff-hunk{border-top:1px dashed var(--ct-chip-line)}.chat-diff-line{padding:0 10px;white-space:pre-wrap;word-break:break-word;color:var(--ct-ink)}.chat-diff-line.cd-add{background:#3fb95026}.chat-diff-line.cd-del{background:#f8514926}.chat-diff-line.cd-ctx{color:var(--ct-muted)}.tool-sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:41}.tool-sheet{position:fixed;left:0;right:0;bottom:0;z-index:42;max-height:62vh;min-height:42vh;display:flex;flex-direction:column;background:var(--ct-body);color:var(--ct-ink);border-radius:18px 18px 0 0;box-shadow:0 -8px 30px #00000080;animation:tool-sheet-up .28s cubic-bezier(.22,.61,.36,1)}@keyframes tool-sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.tool-sheet{animation:none}}.tool-sheet-grip{flex:none;width:36px;height:5px;border-radius:3px;background:var(--ct-chip-line);margin:8px auto 2px}.tool-sheet-head{flex:none;display:flex;align-items:center;gap:10px;padding:6px 46px 12px 14px;border-bottom:1px solid var(--ct-line)}.tool-sheet-ic{flex:none;display:inline-flex;color:var(--ct-accent)}.tool-sheet-ic svg{width:19px;height:19px;display:block}.tool-sheet-title{flex:1;min-width:0;margin-right:auto;font-size:15px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tool-sheet-x{position:absolute;top:12px;right:12px;z-index:2}.tool-sheet-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;gap:16px;padding:14px 14px calc(16px + env(safe-area-inset-bottom,0px))}.tool-sheet-sec{display:flex;flex-direction:column;gap:7px}.tool-sheet-body>.tool-sheet-sec{flex:none}.tool-sheet-label{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ct-muted)}.tool-sheet-mode-row{display:flex;align-items:center;gap:10px}.tool-sheet-mode-val{font-size:15px;font-weight:500;color:var(--ct-ink)}.tool-sheet-state{flex:none;font-size:11px;font-weight:600;padding:2px 9px;border-radius:10px}.tool-sheet-state.ok{color:#7ee0a3;background:#30d15824}.tool-sheet-state.err{color:#ff9086;background:#ff453a29}.tool-sheet-state.run{color:var(--ct-accent);background:#f4a84c29}.tool-sheet-state.idle{color:var(--ct-muted);background:var(--ct-chip-2)}.tool-sheet-cmd{margin:0;padding:11px 13px;border-radius:10px;background:var(--ct-code-bg);color:var(--ct-ink);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word;max-height:34vh;overflow-y:auto;overflow-x:auto;-webkit-overflow-scrolling:touch}.tool-sheet-empty{color:var(--ct-muted);font-size:13px;padding:6px 0}.tool-sheet-out .chat-tool-body,.tool-sheet-out .chat-diff{margin:0;max-height:none}.tool-sheet-edit{max-height:82vh}.es-head{padding-bottom:10px;align-items:flex-start}.es-head .tool-sheet-ic{margin-top:1px}.es-file{display:flex;flex-direction:column;gap:1px;min-width:0}.es-name{font-size:15px;font-weight:600;color:var(--ct-ink);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.es-dir{font-size:11.5px;color:var(--ct-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl;text-align:left}.es-body{gap:0;padding:0}.es-meta{flex:none;display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--ct-line)}.es-meta .tool-sheet-mode-val{font-size:13px;margin-right:auto}.es-note{color:var(--ct-muted);font-size:13px;padding:16px 14px}.es-diff{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.dv{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.55;min-width:max-content}.dv-gap{display:flex;align-items:center;justify-content:center;height:20px;color:var(--ct-muted);background:var(--ct-body);border-top:1px dashed var(--ct-chip-line);border-bottom:1px dashed var(--ct-chip-line);position:sticky;left:0}.dv-row{display:flex;align-items:flex-start;min-width:max-content}.dv-ln{position:sticky;left:0;z-index:1;flex:none;box-sizing:border-box;width:46px;padding:0 8px 0 6px;text-align:right;color:var(--ct-muted);background:var(--ct-body);font-variant-numeric:tabular-nums;border-right:2px solid transparent;-webkit-user-select:none;user-select:none}.dv-sign{flex:none;width:15px;text-align:center;-webkit-user-select:none;user-select:none}.dv-code{flex:1;white-space:pre;padding:0 12px 0 4px;color:var(--ct-ink)}.dv-add{background:#3fb9501f}.dv-add .dv-ln{background:#3fb95029;border-right-color:#3fb950;color:#6fca7f}.dv-add .dv-sign{color:#3fb950}.dv-del{background:#f851491f}.dv-del .dv-ln{background:#f8514929;border-right-color:#f85149;color:#f0857e}.dv-del .dv-sign{color:#f85149}.dv-ctx .dv-code{color:var(--ct-chip-ink)}.chat-tool-running .chat-tool-head{background:var(--ct-chip-2);color:var(--ct-ink);display:flex;align-items:center;gap:6px}.chat-tool-head-text{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-tool-head-running{flex:none;display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--ct-chip-ink)}.chat-typing{align-self:flex-start;padding:8px 12px;border-radius:14px;background:var(--ct-body)}.chat-typing-dots{display:inline-flex;align-items:center;gap:3px}.chat-typing-dot{width:6px;height:6px;border-radius:50%;background:var(--ct-muted);animation:chat-typing-wave 1.1s ease-in-out infinite}.chat-typing-dot:nth-child(2){animation-delay:.15s}.chat-typing-dot:nth-child(3){animation-delay:.3s}@keyframes chat-typing-wave{0%,60%,to{transform:translateY(0);opacity:.5}30%{transform:translateY(-3px);opacity:1}}@media (prefers-reduced-motion: reduce){.chat-typing-dot{animation:chat-typing-fade 1.6s ease-in-out infinite}@keyframes chat-typing-fade{0%,to{opacity:.35}50%{opacity:.9}}}.chat-compacting{align-self:flex-start;display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:14px;background:var(--ct-body)}.chat-compacting-label{font-size:13px;color:var(--ct-muted)}.chat-turn-error{align-self:flex-start;max-width:85%;padding:8px 12px;border-radius:14px;font-size:13px;line-height:18px;color:#b3261e;background:#b3261e1a}@media (prefers-color-scheme: dark){.chat-turn-error{color:#ffb4ab;background:#ffb4ab1f}}.chat-thinking{align-self:flex-start;max-width:88%;padding:6px 12px;color:var(--ct-muted);font-size:12.5px;font-style:italic;line-height:1.45;white-space:pre-wrap;word-break:break-word}.chat-gate{position:fixed;left:0;right:0;bottom:0;z-index:25;padding:12px 14px calc(12px + env(safe-area-inset-bottom,0px));border-radius:14px 14px 0 0;background:var(--ct-bar);box-shadow:0 -4px 18px #00000059}.chat-gate-leadin{margin:-2px 0 8px;padding-bottom:8px;border-bottom:.5px solid var(--ct-chip-line);font-size:13px;color:var(--ct-muted);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.chat-gate-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:24;background:#00000047}.chat-gate-step{font-size:11px;font-weight:600;color:var(--ct-muted);margin-bottom:6px;letter-spacing:.02em}.chat-gate-prompt{font-size:14px;color:var(--ct-ink);line-height:1.4;margin-bottom:10px}.chat-gate-options{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.chat-gate-opt{display:flex;flex-direction:column;gap:2px;text-align:left;min-height:44px;padding:8px 12px;border:1px solid var(--ct-chip-line);border-radius:10px;background:var(--ct-chip);color:var(--ct-ink);touch-action:manipulation;transition:background .12s,border-color .12s}.chat-gate-opt.on{background:color-mix(in srgb,var(--ct-accent) 16%,transparent);border-color:var(--ct-accent)}.chat-gate-opt-label{font-size:15px;font-weight:600}.chat-gate-opt-desc{font-size:12px;color:var(--ct-muted);line-height:1.35}.chat-gate-actions{display:flex;gap:8px;flex-wrap:wrap}.chat-gate-btn{flex:1;min-width:44px;min-height:44px;padding:0 14px;border:none;border-radius:10px;background:var(--ct-chip-2);color:var(--ct-accent);font-size:15px;font-weight:600;touch-action:manipulation}.chat-gate-btn.primary{background:var(--ct-accent);color:#fff}.chat-gate-btn.primary:disabled{background:var(--ct-chip-2);color:var(--ct-muted)}.chat-gate-btn:active{filter:brightness(1.08)}.chat-gate-btn.primary:not(:disabled):active{filter:brightness(1.1)}.chat-gate-hint{display:flex;align-items:center;color:var(--ct-chip-ink);font-size:13px;line-height:1.45;background:var(--ct-body);box-shadow:none}@media (prefers-reduced-motion: reduce){.chat-tool-head,.chat-gate-btn,.chat-gate-opt{transition:none}}.chat-composer{display:flex;flex-direction:column;gap:6px;padding:6px 8px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ct-bar)}.cc-quick{display:flex;gap:6px;overflow-x:auto}.cc-card{display:flex;flex-direction:column;gap:0;background:var(--ct-field);border:1px solid var(--ct-field-line);border-radius:20px;padding:10px 8px 8px 14px;transition:border-color .15s}.cc-card:focus-within{border-color:var(--ct-accent)}.cc-card.recording{border-color:#34c759}.cc-text{width:100%;background:transparent;border:none;outline:none;resize:none;color:var(--ct-ink);font-size:16px;line-height:22px;min-height:33px;max-height:132px;padding:2px 0 0;font-family:inherit}.cc-text::placeholder{color:var(--ct-muted)}.cc-actions{display:flex;align-items:center;justify-content:space-between;margin-top:-3px}.cc-actions-right{display:flex;align-items:center;gap:6px}.cc-ctx{flex:none;min-width:0;max-width:46vw;display:flex;align-items:baseline;gap:5px;padding:0 4px 0 2px;pointer-events:none;overflow:hidden;color:var(--ct-muted);font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}.cc-ctx-model{min-width:0;overflow:hidden;text-overflow:ellipsis}.cc-ctx-pct{flex:none;font-weight:600;color:var(--ct-chip-ink)}.cc-ctx.warn .cc-ctx-pct{color:var(--ct-accent)}.cc-attach,.cc-send{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:999px;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.cc-attach{background:transparent;color:var(--ct-chip-ink);margin-left:-7px}.cc-attach:active{background:var(--ct-chip-2)}.cc-send{background:var(--ct-accent);color:#fff}.cc-send:disabled{background:var(--ct-chip-2);color:var(--ct-muted)}.cc-send:not(:disabled):active{filter:brightness(1.1)}.cc-stop{background:#e5484d}.app[data-chat-tone=light] .cc-quick .quick-cmd{color:color-mix(in srgb,rgb(var(--rgb)) 58%,#2c2a20);border-color:rgba(var(--rgb),.5);background:rgba(var(--rgb),.16)}.chat-composer .input-mic{width:32px;height:32px;background:transparent;color:var(--ct-chip-ink)}.chat-composer .input-mic svg{width:20px;height:20px}.chat-composer .input-mic:active{background:var(--ct-chip-2)}.chat-composer .input-mic.on{color:#fff;background:var(--green)}.push-inbox-detail-del{display:block;margin-top:24px}@media (hover: hover) and (pointer: fine){*{scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{min-width:32px;min-height:32px;border:3px solid transparent;border-radius:999px;background-color:var(--scroll-thumb);background-clip:padding-box}*:hover::-webkit-scrollbar-thumb{background-color:var(--scroll-thumb-hover)}*::-webkit-scrollbar-thumb:active{background-color:var(--scroll-thumb-active)}*::-webkit-scrollbar-corner{background:transparent}.terminal .xterm-viewport{scrollbar-color:var(--scroll-thumb) transparent}.terminal .xterm-viewport::-webkit-scrollbar{width:10px;height:10px}.terminal .xterm-viewport::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:999px;background-color:var(--scroll-thumb);background-clip:padding-box}.terminal .xterm-viewport:hover::-webkit-scrollbar-thumb{background-color:var(--scroll-thumb-hover)}.terminal .xterm-viewport::-webkit-scrollbar-thumb:active{background-color:var(--scroll-thumb-active)}}.windowbar-scroll,.quick-scroll,.file-tabs-scroll,.git-tabs-scroll,.cc-quick{scrollbar-width:none}*::-webkit-scrollbar:horizontal{height:0}*::-webkit-scrollbar-button:horizontal{display:none;width:0;height:0}.terminal{scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}.terminal::-webkit-scrollbar:horizontal{height:10px}.terminal::-webkit-scrollbar-track:horizontal{background:transparent}.terminal::-webkit-scrollbar-thumb:horizontal{min-width:32px;border:3px solid transparent;border-radius:999px;background-color:var(--scroll-thumb);background-clip:padding-box}.terminal::-webkit-scrollbar-thumb:horizontal:active{background-color:var(--scroll-thumb-active)}.terminal::-webkit-scrollbar-button{display:none;width:0;height:0}.terminal-y-scrollbar{display:none}@media (hover: none) and (pointer: coarse){.terminal.terminal--x-overflow{padding-bottom:4px}.terminal::-webkit-scrollbar:horizontal{height:4px}.terminal::-webkit-scrollbar-thumb:horizontal{border:0}.terminal .xterm-viewport{scrollbar-width:none}.terminal .xterm-viewport::-webkit-scrollbar:vertical{width:0}}