clitrigger 0.2.17 → 0.2.19

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 (60) hide show
  1. package/README.md +19 -16
  2. package/README_KR.md +18 -15
  3. package/dist/client/assets/index-BRlrF8ex.css +32 -0
  4. package/dist/client/assets/index-C1PWQbRi.js +860 -0
  5. package/dist/client/index.html +2 -2
  6. package/dist/server/plugins/harness/adapters/claude.d.ts.map +1 -1
  7. package/dist/server/plugins/harness/adapters/claude.js +60 -2
  8. package/dist/server/plugins/harness/adapters/claude.js.map +1 -1
  9. package/dist/server/plugins/harness/io.d.ts +1 -0
  10. package/dist/server/plugins/harness/io.d.ts.map +1 -1
  11. package/dist/server/plugins/harness/io.js +9 -0
  12. package/dist/server/plugins/harness/io.js.map +1 -1
  13. package/dist/server/plugins/harness/router.d.ts.map +1 -1
  14. package/dist/server/plugins/harness/router.js +93 -0
  15. package/dist/server/plugins/harness/router.js.map +1 -1
  16. package/dist/server/plugins/harness/types.d.ts +14 -0
  17. package/dist/server/plugins/harness/types.d.ts.map +1 -1
  18. package/dist/server/routes/discussions.d.ts.map +1 -1
  19. package/dist/server/routes/discussions.js +4 -2
  20. package/dist/server/routes/discussions.js.map +1 -1
  21. package/dist/server/routes/planner.d.ts.map +1 -1
  22. package/dist/server/routes/planner.js +8 -6
  23. package/dist/server/routes/planner.js.map +1 -1
  24. package/dist/server/routes/projects.d.ts.map +1 -1
  25. package/dist/server/routes/projects.js +35 -5
  26. package/dist/server/routes/projects.js.map +1 -1
  27. package/dist/server/routes/schedules.d.ts.map +1 -1
  28. package/dist/server/routes/schedules.js +7 -7
  29. package/dist/server/routes/schedules.js.map +1 -1
  30. package/dist/server/routes/sessions.d.ts.map +1 -1
  31. package/dist/server/routes/sessions.js +5 -3
  32. package/dist/server/routes/sessions.js.map +1 -1
  33. package/dist/server/routes/todos.d.ts.map +1 -1
  34. package/dist/server/routes/todos.js +6 -4
  35. package/dist/server/routes/todos.js.map +1 -1
  36. package/dist/server/routes/vault.d.ts.map +1 -1
  37. package/dist/server/routes/vault.js +38 -1
  38. package/dist/server/routes/vault.js.map +1 -1
  39. package/dist/server/services/claude-manager.d.ts.map +1 -1
  40. package/dist/server/services/claude-manager.js +31 -0
  41. package/dist/server/services/claude-manager.js.map +1 -1
  42. package/dist/server/services/discussion-orchestrator.d.ts.map +1 -1
  43. package/dist/server/services/discussion-orchestrator.js +3 -21
  44. package/dist/server/services/discussion-orchestrator.js.map +1 -1
  45. package/dist/server/services/file-scanner.d.ts +1 -0
  46. package/dist/server/services/file-scanner.d.ts.map +1 -1
  47. package/dist/server/services/file-scanner.js +46 -1
  48. package/dist/server/services/file-scanner.js.map +1 -1
  49. package/dist/server/services/orchestrator.d.ts.map +1 -1
  50. package/dist/server/services/orchestrator.js +4 -10
  51. package/dist/server/services/orchestrator.js.map +1 -1
  52. package/dist/server/services/scheduler.d.ts.map +1 -1
  53. package/dist/server/services/scheduler.js +3 -1
  54. package/dist/server/services/scheduler.js.map +1 -1
  55. package/dist/server/services/session-manager.d.ts.map +1 -1
  56. package/dist/server/services/session-manager.js +3 -1
  57. package/dist/server/services/session-manager.js.map +1 -1
  58. package/package.json +4 -1
  59. package/dist/client/assets/index-2mYmwdkH.css +0 -32
  60. package/dist/client/assets/index-BS9h76bp.js +0 -852
package/README.md CHANGED
@@ -62,12 +62,12 @@ CLITrigger solves all three:
62
62
 
63
63
  ## Features
64
64
 
65
- CLITrigger spans four layers — **plan & organize** what needs doing, **delegate** it to AI, **review & ship** the results, and **access** it from anywhere.
65
+ CLITrigger spans four layers — **plan & organize** what needs doing, **delegate** it to AI, **review & ship** the results, and **access** it from anywhere. Each feature below has a full guide in the **[Wiki](https://github.com/HyperAITeam/CLITrigger/wiki)** (↗).
66
66
 
67
67
  ### 🗂 Plan & Organize
68
68
 
69
69
  #### My Schedule
70
- A global, project-independent personal hub. One calendar month / week / day / table views — overlays four sources on a single grid: your own dated **memos**, **schedules** across every project, **planner due dates**, and **Jira issues** assigned to you. Capture quick notes (optional title, body, pasted images, color tags), filter by tag, **drag-resize** the calendar rows, **hover a crowded day** to expand it into a full popover, and **bulk-clean memos by date range** for housekeeping. Connect Jira once (site URL + email + API token, stored server-side, the token never echoed back) to overlay your assigned issues as blue chips and import them into a memo or straight into a project planner. Read-only project / Jira chips deep-link back to their source.
70
+ One personal calendar overlaying your memos, every project's schedules, planner due dates, and assigned Jira issues. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize#my-schedule)
71
71
 
72
72
  <div align="center">
73
73
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-agenda.png" alt="My Schedule — personal calendar overlaying memos, schedules, planner & Jira" width="800">
@@ -75,7 +75,7 @@ A global, project-independent personal hub. One calendar — month / week / day
75
75
  </div>
76
76
 
77
77
  #### Planner
78
- A lightweight task planner separate from TODOs — capture ideas, attach images, tag with colors, sort by any column. Convert any planner item into a TODO or a schedule in one click. Markdown export/import (status sections + GFM checkboxes + HTML-comment metadata) lets you move plans across machines or share via GitHub / Obsidian / any plain Markdown viewer. Drop a `.md` file onto the planner card to import.
78
+ A lightweight task planner — capture ideas, then convert any item into a TODO, schedule, or session; Markdown import/export. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize#planner)
79
79
 
80
80
  <div align="center">
81
81
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — Lightweight task management" width="800">
@@ -83,7 +83,7 @@ A lightweight task planner separate from TODOs — capture ideas, attach images,
83
83
  </div>
84
84
 
85
85
  #### Vault (File-based Knowledge)
86
- An Obsidian-style, file-based knowledge vault per project. CLITrigger auto-scans the `.md` / `.html` files in your project root, parses `[[wikilinks]]` and YAML frontmatter (`title`, `tags`), and builds a relationship graph — files *are* the nodes, so there's no separate ingest step. Browse them in the **Files** tab with inline preview, then flip the graph toggle for a ReactFlow force-directed view (tag-based node colors, `.vaultignore` to exclude paths). The markdown preview is interactive: Find/Replace, ephemeral pen/highlighter annotations with undo/redo, and task-checkbox toggles that round-trip `- [ ]` / `- [x]` straight to disk. Inject it into any task / session / discussion prompt — `None` / **`Auto`** (server picks files matching the task text) / `All` / `Selected`, with an **Include linked** toggle that pulls in 1-hop `[[wikilink]]` neighbors (each row previews how many will be added). Serialized as a `<long_term_memory>` wrapper with `<vault_file type="md|html">` blocks — CLI-agnostic, so Claude, Gemini, and Codex all see identical context.
86
+ A per-project Obsidian-style knowledge base with a `[[wikilink]]` graph — inject any file into a prompt, CLI-agnostically. [](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize#vault)
87
87
 
88
88
  <div align="center">
89
89
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-vault.png" alt="Vault — Obsidian-style file-based knowledge with a link graph" width="800">
@@ -91,15 +91,15 @@ An Obsidian-style, file-based knowledge vault per project. CLITrigger auto-scans
91
91
  </div>
92
92
 
93
93
  #### Favorites Launcher
94
- Register frequently-used external tools (executables, shell commands, URLs/folders) in a global Favorites section in the sidebar. Fire-and-forget one-click execution from anywhere in CLITrigger — reduces context-switching to the OS shell for environment setup, IDE launches, or external service access.
94
+ One-click launcher for your frequent external tools (executables, commands, URLs) from the sidebar. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize#favorites-launcher)
95
95
 
96
96
  ### 🤖 Delegate to AI
97
97
 
98
98
  #### Parallel Worktree Execution (Tasks)
99
- Each TODO automatically gets its own git worktree. Claude / Gemini / Codex CLIs execute simultaneously in parallel. Dependency chains let you automatically trigger follow-up tasks and branch merges once prerequisites complete. Per-project worktree toggle plus per-TODO tri-state override (inherit / force-worktree / force-main) give you fine-grained control — main-branch tasks are automatically serialized to avoid conflicts. Drag-and-drop reordering and an iOS-style stack mode keep long task lists manageable.
99
+ Every TODO runs in its own git worktree with Claude / Gemini / Codex in parallel, plus dependency chains and merge control. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI#parallel-worktree-execution)
100
100
 
101
101
  #### Interactive Sessions
102
- Long-lived interactive CLI sessions as first-class entities — bring up a Claude / Gemini / Codex session in a floating draggable window. **VS Code-style window grouping and docking**: drag a tab onto another window for a 5-zone diamond (top/bottom/left/right/center) to either split into resizable panes or merge as tabs, plus **Aero-style edge snapping, sticky window-to-window snapping, and a minimize-to-dock-tray** flow — keeps multi-session screens tidy. Pop a window out into a **separate OS window** (multi-window), and the session list flags it with a badge + a one-click "bring back to the main window" recall — popped windows also appear as chips in the bottom dock tray. **xterm.js rendering** shows ANSI colors, cursor control, and TUI box-drawing identically to a native terminal. PTY spawns at the exact viewport dimensions, with **per-session font size** (A−/A+ buttons or Ctrl/Cmd ±) for readability. Per-session wiki injection plus a **Send/Skip pre-flight banner** lets you review the auto-generated initial prompt before it hits the model. Inline edit button updates non-running sessions in place. iOS Safari mobile Hangul IME is composed via a client-side dubeolsik composer. Window geometry, group tree, and tab arrangement persist and survive tab navigation; works on desktop and mobile (fullscreen on small screens).
102
+ Long-lived CLI sessions in floating windows with VS Code-style docking, pop-out, and real xterm.js terminals. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI#interactive-sessions)
103
103
 
104
104
  <div align="center">
105
105
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-sessions.png" alt="Sessions — Multi-CLI floating windows with VS Code-style docking" width="800">
@@ -107,7 +107,7 @@ Long-lived interactive CLI sessions as first-class entities — bring up a Claud
107
107
  </div>
108
108
 
109
109
  #### Multi-Agent Discussion
110
- AI agents with different roles — architect, developer, reviewer debate in rounds before implementation. The resulting design is far more robust than a single AI working in isolation. Agents flagged as **Implementers** (`can_implement`) can commit code during their regular turns, while a final implementation round stitches everything together. Auto-implement triggers the code-writing round automatically on consensus. Or hit **Send to Planner** on a finished discussion to have the transcript distilled into curated planner items via a one-shot LLM extraction — review and edit before persisting.
110
+ Architect / developer / reviewer agents debate before implementing, then commit code or send action items to the planner. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI#multi-agent-discussion)
111
111
 
112
112
  <div align="center">
113
113
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — Multi-agent debate" width="800">
@@ -115,7 +115,7 @@ AI agents with different roles — architect, developer, reviewer — debate in
115
115
  </div>
116
116
 
117
117
  #### Scheduled Execution
118
- Schedule tasks for off-peak hours to avoid rate limits. Supports recurring cron schedules, one-time scheduled runs, and auto-recovery scheduling on rate-limit events — if the CLI hits a token quota, CLITrigger schedules a retry for the exact reset time.
118
+ Run tasks on cron or one-off schedules, with auto-retry at the exact rate-limit reset time. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI#scheduled-execution)
119
119
 
120
120
  <div align="center">
121
121
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — Scheduled execution" width="800">
@@ -123,15 +123,15 @@ Schedule tasks for off-peak hours to avoid rate limits. Supports recurring cron
123
123
  </div>
124
124
 
125
125
  #### Multi-CLI & Sandbox Mode
126
- Select Claude / Gemini / Codex per project, per TODO, or per discussion agent. Strict sandbox mode restricts CLI file access to the worktree directory using each CLI's native sandboxing (Claude settings.json, Codex `--full-auto`, Gemini prompt-level restriction).
126
+ Pick Claude / Gemini / Codex per project, TODO, or agent; strict sandbox confines file access to the worktree. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI#multi-cli--sandbox-mode)
127
127
 
128
128
  ### 🔍 Review & Ship
129
129
 
130
130
  #### Morning Review Queue
131
- A single cross-project triage screen for the "delegate overnight, review next morning" loop. Aggregates every recent TODO across all your projects into a card stack with project label, last-assistant summary, token totals, diff stats, and a server-classified risk badge (low / medium / high based on status and diff size). Keyboard-only operation: `j`/`k` to navigate, `Enter` for the embedded log viewer, `Space` / `→` to expand changed files and diffs inline, `m` to merge, `d` to discard, `Esc` to close — N todos become O(N) keypresses. Time-window selector (12h / 24h / 7d), filter chips (All / Risky / Quick wins / Failed), and a sticky token ribbon with CLI breakdown. Inline diffs survive worktree cleanup by falling back through branch ref → `master`/`main`.
131
+ Triage every overnight TODO across projects in one keyboard-driven card stack navigate, merge, or discard in a keypress. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship#morning-review-queue)
132
132
 
133
133
  #### Built-in Git Client
134
- A full Git client lives inside the web UI with a Fork/SourceTree-style layout a workspace menu switches between **File Status** (staged/unstaged file lists, working-tree diff viewer, commit message + push toggle, Cmd/Ctrl+Enter to commit) and **History** (commit graph, action toolbar, worktree list, VS Code-style branch context menu with checkout / merge / rebase / fetch / pull / push / rename / delete, and a commit detail panel with file-level diff viewer). Every split is user-resizable and persisted to localStorage. Non-ASCII filenames (Korean, CJK, emoji) render correctly in diff and status output.
134
+ A Fork / SourceTree-style Git client in the browser stage, commit, push, and manage branches and diffs. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship#built-in-git-client)
135
135
 
136
136
  <div align="center">
137
137
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — Built-in client" width="800">
@@ -139,7 +139,7 @@ A full Git client lives inside the web UI with a Fork/SourceTree-style layout
139
139
  </div>
140
140
 
141
141
  #### Analytics
142
- Per-project cost and execution stats powered by Recharts stacked bar chart by CLI tool, donut chart for status distribution, line chart for cost/token trends. Denormalized cost fields in the DB keep aggregation fast even on long histories.
142
+ Per-project cost and execution stats — by CLI, by status, and over time. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship#analytics)
143
143
 
144
144
  <div align="center">
145
145
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — Execution stats" width="800">
@@ -147,12 +147,12 @@ Per-project cost and execution stats powered by Recharts — stacked bar chart b
147
147
  </div>
148
148
 
149
149
  #### Live Logs (Chat & Raw)
150
- WebSocket-based real-time log streaming with two view modes — Chat mode renders assistant messages as markdown with collapsible tool-use rows; Raw mode is a flat terminal view. Multi-round continue reuses the same worktree via the CLI's native `--continue` flag.
150
+ Real-time WebSocket log streaming in Chat (markdown) or Raw (terminal) mode. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship#live-logs)
151
151
 
152
152
  ### 🌐 Access Anywhere
153
153
 
154
154
  #### Remote Access
155
- Access and control from anywhere via Cloudflare Tunnel. Browser notifications alert you when tasks or discussions complete, so you can walk away and come back. **Route a named tunnel through your own domain** — set Tunnel Name + Custom Hostname in the sidebar ⚙ → Tunnel settings modal, and the displayed URL becomes `https://app.your-domain.com`, sidestepping the browser "dangerous site" warnings that hit `*.trycloudflare.com` / `*.cfargotunnel.com` by inheriting your domain's reputation.
155
+ Reach CLITrigger from anywhere via Cloudflare Tunnel, with completion notifications and custom-domain routing. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Remote-Access)
156
156
 
157
157
  ---
158
158
 
@@ -285,9 +285,12 @@ The displayed URL becomes `https://app.your-domain.com` and reputation tracks yo
285
285
 
286
286
  ## Documentation
287
287
 
288
+ 📖 **The full manual lives in the [Wiki](https://github.com/HyperAITeam/CLITrigger/wiki)** — installation, every feature guide, and remote access.
289
+
288
290
  | Doc | Content |
289
291
  |-----|---------|
290
- | [SETUP.md](docs/SETUP.md) | Detailed installation and usage guide |
292
+ | [Wiki](https://github.com/HyperAITeam/CLITrigger/wiki) | Detailed feature guides and usage |
293
+ | [SETUP.md](docs/SETUP.md) | Detailed installation and usage guide (한국어) |
291
294
  | [changelog/](docs/changelog/README.md) | Version history (per-date entries by month) |
292
295
  | [CICD.md](docs/CICD.md) | GitHub Actions CI/CD setup |
293
296
  | [TESTING.md](docs/TESTING.md) | Testing guide |
package/README_KR.md CHANGED
@@ -62,12 +62,12 @@ CLITrigger는 이 세 가지를 한 번에 해결한다:
62
62
 
63
63
  ## 주요 기능
64
64
 
65
- CLITrigger는 네 개의 계층으로 이루어진다 — 할 일을 **계획·정리**하고, AI에 **위임**하고, 결과를 **리뷰·머지**하고, **어디서나 접속**한다.
65
+ CLITrigger는 네 개의 계층으로 이루어진다 — 할 일을 **계획·정리**하고, AI에 **위임**하고, 결과를 **리뷰·머지**하고, **어디서나 접속**한다. 각 기능의 자세한 가이드는 **[Wiki](https://github.com/HyperAITeam/CLITrigger/wiki/Home-KR)** (↗)에 있다.
66
66
 
67
67
  ### 🗂 계획 · 정리
68
68
 
69
69
  #### 내 일정 (My Schedule)
70
- 프로젝트에 종속되지 않는 전역 개인 허브. 하나의 캘린더(월 / 주 / 일 / 표 뷰)가 네 가지 소스를 한 그리드에 겹쳐 보여준다 — **개인 메모**, 프로젝트의 **스케줄**, **플래너 마감일**, 그리고 나에게 할당된 **Jira 이슈**. 빠른 메모(제목은 선택, 본문·붙여넣기 이미지·색상 태그)를 캡처하고, 태그로 필터링하고, 캘린더 행 높이를 **드래그로 조절**하고, 항목이 많은 날을 **잠깐 호버하면** 팝오버로 확대해서 전체를 보고, **기간 단위로 메모를 일괄 정리**할 수 있다. Jira는 번만 연결하면(사이트 주소 + 이메일 + API 토큰, 서버에 저장되고 토큰은 응답에 노출되지 않음) 내게 할당된 이슈가 파란 칩으로 겹쳐 보이고, 메모나 프로젝트 플래너로 바로 가져올 수 있다. 읽기 전용 프로젝트 / Jira 칩은 클릭하면 원본으로 딥링크된다.
70
+ 메모·전 프로젝트 스케줄·플래너 마감일·할당된 Jira 이슈를캘린더에 겹쳐 보는 개인 허브. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize-KR#내-일정)
71
71
 
72
72
  <div align="center">
73
73
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-agenda.png" alt="내 일정 — 개인 메모·스케줄·플래너·Jira를 한 캘린더에" width="800">
@@ -75,7 +75,7 @@ CLITrigger는 네 개의 계층으로 이루어진다 — 할 일을 **계획·
75
75
  </div>
76
76
 
77
77
  #### Planner (플래너)
78
- TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적고, 이미지를 첨부하고, 색상 태그로 분류하고, 열 단위로 정렬할 수 있다. 플래너 항목을 한 번의 클릭으로 TODO 예약 스케줄로 변환할 수 있다. Markdown Export / Import (status 섹션 + GFM 체크박스 + HTML 주석 메타데이터)로 다른 머신에 옮기거나 GitHub / Obsidian / 어떤 Markdown 뷰어에서도 그대로 열어볼 수 있고, `.md` 파일을 카드에 드래그하면 바로 Import된다.
78
+ 경량 작업 플래너 — 아이디어를 적고 한 번의 클릭으로 TODO·스케줄·세션으로 변환, Markdown 입출력 지원. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize-KR#플래너)
79
79
 
80
80
  <div align="center">
81
81
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — 경량 작업 관리" width="800">
@@ -83,7 +83,7 @@ TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적
83
83
  </div>
84
84
 
85
85
  #### 볼트 (파일 기반 지식)
86
- 프로젝트별 Obsidian 스타일 **파일 기반 지식 볼트**. CLITrigger가 프로젝트 루트의 `.md` / `.html` 파일을 자동 스캔하고, `[[wikilink]]`와 YAML frontmatter(`title`, `tags`)를 파싱해 관계 그래프를 구성한다 파일이 노드라 별도 인제스트가 필요 없다. **Files** 탭에서 인라인 미리보기로 탐색하고, 그래프 토글로 ReactFlow force-directed 뷰(태그 기반 노드 색상, `.vaultignore`로 경로 제외)로 전환한다. 마크다운 프리뷰는 정적 뷰어가 아니라 인터랙티브하다 Find/Replace, 휘발성 펜/형광펜 주석(Undo/Redo), `- [ ]` / `- [x]` 체크박스를 디스크에 바로 round-trip. 그리고 task / session / discussion 프롬프트에 골라 주입한다 — `None` / **`Auto`**(태스크 텍스트와 매칭되는 파일 자동 선택) / `All` / `Selected`, **Include linked** 토글로 `[[wikilink]]` 1-hop 이웃까지 포함(행마다 추가될 개수 미리보기). `<long_term_memory>` 래퍼 + `<vault_file type="md|html">` 블록으로 직렬화 — CLI-agnostic이라 Claude / Gemini / Codex 모두 동일한 컨텍스트를 받는다.
86
+ `[[wikilink]]` 그래프를 갖춘 프로젝트별 Obsidian 스타일 지식 저장소파일을 CLI 불문으로 프롬프트에 주입. [](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize-KR#볼트)
87
87
 
88
88
  <div align="center">
89
89
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-vault.png" alt="볼트 — Obsidian 스타일 파일 기반 지식 + 링크 그래프" width="800">
@@ -91,15 +91,15 @@ TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적
91
91
  </div>
92
92
 
93
93
  #### 즐겨찾기 런처 (Favorites)
94
- 자주 쓰는 외부 도구(실행파일, 명령어, URL/폴더)를 사이드바의 글로벌 Favorites 섹션에 등록해 두고 어디서든 한 번의 클릭으로 실행한다. 일-맡겨두기 모드라 OS 셸로 오갈 필요 없이 CLITrigger 내에서 환경 설정, IDE 실행, 외부 서비스 접근 등을 빠르게 수행할 수 있다.
94
+ 자주 쓰는 외부 도구(실행파일, 명령어, URL)를 사이드바에서 원클릭으로 실행. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Plan-&-Organize-KR#즐겨찾기-런처)
95
95
 
96
96
  ### 🤖 AI에 위임
97
97
 
98
98
  #### 병렬 Worktree 실행 (자동 작업)
99
- TODO 작성하면 각 작업마다 격리된 git worktree 자동 생성된다. Claude / Gemini / Codex CLI동시에 병렬로 실행되며, 의존성 체인을 설정하면 선행 작업 완료 후 자동으로 후속 작업이 실행되고 브랜치 병합까지 처리된다. 프로젝트별 워크트리 토글에 더해 TODO별 3단계 오버라이드(상속 / 강제 워크트리 / 강제 메인)로 세밀한 제어가 가능하고, 메인 브랜치 작업은 자동 직렬화되어 충돌을 막는다. 드래그 앤 드롭으로 순서를 바꾸고, iOS 스타일 스택 모드로 긴 목록도 깔끔하게 관리할 수 있다.
99
+ TODO마다 격리된 git worktree에서 Claude / Gemini / Codex가 병렬 실행 + 의존성 체인·머지 제어. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI-KR#병렬-워크트리-실행)
100
100
 
101
101
  #### 인터랙티브 세션 (Sessions)
102
- 긴 생애주기의 인터랙티브 CLI 세션을 1급 엔티티로 관리 — Claude / Gemini / Codex 세션을 드래그 가능한 floating window에 띄운다. **VS Code 스타일 그룹화/도킹** 지원: 탭을 다른 윈도우로 드래그하면 5-zone 다이아몬드(top/bottom/left/right/center)로 분할 pane이나 탭 합치기가 가능하고, **Aero 스타일 엣지 스냅 + 윈도우 간 sticky 스냅 + dock tray 최소화**까지 — 멀티 세션 화면을 깔끔하게 정리할 수 있다. 윈도우를 **별도 OS (멀티 윈도우)** 으로 빼내면 세션 목록에 그 상태가 배지로 표시되고 "중앙 창으로 불러오기" 버튼 한 번으로 되돌릴 수 있으며, 빼낸 창은 하단 dock tray에도 칩으로 나타난다. **xterm.js 렌더링**으로 ANSI 컬러, 커서 제어, TUI 박스 그리기까지 네이티브 터미널과 동일하게 표시된다. PTY가 정확한 viewport 크기로 spawn되고, **per-session 폰트 크기**(A−/A+ 또는 Ctrl/Cmd ±)로 가독성도 조절 가능. 세션별 위키 주입 모드와 **Send/Skip pre-flight** 배너로 자동 생성된 초기 프롬프트를 검토 후 명시적으로 보낼 수 있고, 인라인 편집 버튼으로 running이 아닌 세션은 그 자리에서 제목/CLI/모델/위키 주입 변경. iOS Safari 모바일은 한글 IME가 두벌식 composer로 정상 조립된다. Window 위치/크기/그룹 트리는 영속되고 탭 전환 후에도 살아남는다.
102
+ VS Code 스타일 도킹·별도분리·실제 xterm.js 터미널을 갖춘 장시간 CLI 세션. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI-KR#인터랙티브-세션)
103
103
 
104
104
  <div align="center">
105
105
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-sessions.png" alt="Sessions — VS Code 스타일로 도킹된 멀티 CLI floating windows" width="800">
@@ -107,7 +107,7 @@ TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된
107
107
  </div>
108
108
 
109
109
  #### 다중 AI 토론 (Discussion)
110
- 아키텍트, 개발자, 리뷰어 역할이 다른 AI 에이전트들이 라운드 방식으로 토론한 뒤, 합의된 내용을 바탕으로 자동 구현까지 이어진다. 단일 AI의 판단보다 훨씬 검증된 설계 결과물이 나온다. **구현자(Implementer, `can_implement`)** 로 표시된 에이전트는 일반 턴에서도 코드를 커밋할 수 있고, 마지막 구현 라운드가 남은 작업을 정리해 마무리한다. 자동 구현(Auto-implement) 옵션을 켜면 토론 완료 즉시 코드 작성 라운드가 자동 실행된다. 완료된 토론에서 **Send to Planner** 버튼을 누르면 트랜스크립트를 한방 LLM 호출로 추출해 액션 아이템을 Planner로 영속한다 — 저장 전 항목별 편집 가능.
110
+ 아키텍트·개발자·리뷰어 에이전트가 구현 전에 토론하고, 코드 커밋이나 플래너 전송까지 이어진다. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI-KR#멀티-에이전트-토론)
111
111
 
112
112
  <div align="center">
113
113
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — 다중 AI 토론" width="800">
@@ -115,7 +115,7 @@ TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된
115
115
  </div>
116
116
 
117
117
  #### 예약 실행 (Scheduler)
118
- 토큰 한도를 피해 새벽이나 특정 시각에 작업을 예약 실행할 있다. cron 기반 반복 스케줄, 일회성 예약, 그리고 **한도 초과 자동 복구 예약**까지 지원한다 — CLI가 토큰 한도에 걸리면 CLITrigger가 리셋 시각을 파싱해 자동으로 재시도를 예약한다.
118
+ cron·일회성 스케줄로 작업을 예약하고, 토큰 한도 리셋 시각에 자동 재시도. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI-KR#스케줄-실행)
119
119
 
120
120
  <div align="center">
121
121
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — 예약 실행" width="800">
@@ -123,15 +123,15 @@ TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된
123
123
  </div>
124
124
 
125
125
  #### 멀티 CLI & 샌드박스
126
- Claude / Gemini / Codex CLI를 프로젝트·TODO·토론 에이전트별로 선택한다. 엄격(strict) 샌드박스 모드에서는 CLI의 네이티브 샌드박싱(Claude `settings.json`, Codex `--full-auto`, Gemini 프롬프트 단 제한)을 사용해 파일 접근을 워크트리 디렉토리로 제한한다.
126
+ Claude / Gemini / Codex를 프로젝트·TODO·에이전트별로 선택, strict 샌드박스로 파일 접근을 워크트리로 제한. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Delegate-to-AI-KR#멀티-cli--샌드박스-모드)
127
127
 
128
128
  ### 🔍 리뷰 · 머지
129
129
 
130
130
  #### Morning Review Queue (아침 리뷰 큐)
131
- "밤새 위임하고 아침에 리뷰" 루프를 위한 크로스-프로젝트 단일 트리아주 화면. 모든 프로젝트의 최근 TODO를 카드 스택으로 모아 프로젝트 라벨, 마지막 어시스턴트 요약, 토큰 합계, diff 통계, 서버 분류 risk 배지(low / medium / high — 상태와 diff 크기 기반)를 한눈에 보여준다. 키보드 전용 조작: `j`/`k`로 이동, `Enter`로 임베드 로그 뷰어, `Space` / `→`로 변경 파일과 diff를 카드에서 바로 펼치기, `m` 머지, `d` discard, `Esc`로 닫기 N개 todo가 O(N) 키 입력으로 끝난다. 시간 윈도우(12h / 24h / 7d), 필터 칩(All / Risky / Quick wins / Failed), CLI별 분해가 표시되는 sticky 토큰 리본까지. 워크트리가 정리된 뒤에도 브랜치 ref → `master`/`main` 폴백으로 인라인 diff를 끝까지 보여준다.
131
+ 밤새 실행된 프로젝트 TODO를 키보드번으로 이동·머지·discard하는 단일 트리아주 카드 스택. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship-KR#모닝-리뷰-큐)
132
132
 
133
133
  #### 내장 Git 클라이언트
134
- UI 안에 Fork/SourceTree 스타일 Git 클라이언트가 내장되어 있다 워크스페이스 메뉴로 **File Status** 뷰(staged/unstaged 파일 리스트, working tree diff 뷰어, 커밋 메시지 + push 토글, Cmd/Ctrl+Enter 커밋)와 **History** 뷰(커밋 그래프, 액션 툴바, 워크트리 목록, VS Code 스타일 브랜치 컨텍스트 메뉴: 체크아웃 / 머지 / 리베이스 / 페치 / 풀 / 푸시 / 이름 변경 / 삭제, 파일 단위 diff 뷰어가 붙은 커밋 상세 패널)를 전환한다. 모든 분할 영역은 사용자가 직접 비율을 조절할 수 있고, 그 비율은 localStorage에 영속된다. 한글·CJK·이모지 등 비-ASCII 파일명도 diff / status 출력에 제대로 표시된다.
134
+ 브라우저 안의 Fork/SourceTree 스타일 Git 클라이언트스테이지·커밋·푸시·브랜치/diff 관리. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship-KR#내장-git-클라이언트)
135
135
 
136
136
  <div align="center">
137
137
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — 내장 클라이언트" width="800">
@@ -139,7 +139,7 @@ Claude / Gemini / Codex CLI를 프로젝트·TODO·토론 에이전트별로 선
139
139
  </div>
140
140
 
141
141
  #### Analytics (통계)
142
- 프로젝트별 비용·실행 통계를 Recharts 기반 차트로 시각화 — CLI 도구별 누적 막대, 상태별 도넛, 시간에 따른 비용/토큰 라인 차트를 제공한다. DB에 비정규화된 비용 컬럼을 두어 긴 실행 이력에서도 집계가 빠르다.
142
+ 프로젝트별 비용·실행 통계 — CLI별, 상태별, 시간 축으로. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship-KR#분석)
143
143
 
144
144
  <div align="center">
145
145
  <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — 실행 통계" width="800">
@@ -147,12 +147,12 @@ Claude / Gemini / Codex CLI를 프로젝트·TODO·토론 에이전트별로 선
147
147
  </div>
148
148
 
149
149
  #### 실시간 로그 (Chat & Raw)
150
- WebSocket으로 실행 로그를 실시간 스트리밍하며 가지 뷰를 지원한다 — Chat 모드는 assistant 메시지를 마크다운으로 렌더링하고 tool-use 행을 접을 수 있으며, Raw 모드는 플랫 터미널 뷰다. 다중 라운드 Continue는 CLI의 네이티브 `--continue` 플래그를 사용해 동일 워크트리를 재사용한다.
150
+ WebSocket 실시간 로그 스트리밍 — Chat(마크다운) 또는 Raw(터미널) 모드. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Review-&-Ship-KR#실시간-로그)
151
151
 
152
152
  ### 🌐 어디서나 접속
153
153
 
154
154
  #### 외부 접속
155
- Cloudflare Tunnel로 어디서든 폰·노트북으로 제어한다. 작업이나 토론이 완료되면 브라우저 알림이 울리므로, 자리를 비워도 상태를 놓치지 않는다. **Named Tunnel을 본인 도메인으로 라우팅**할 수 있어 사이드바 Tunnel 설정 모달에서 Tunnel Name + Custom Hostname을 입력하면 표시 URL이 `https://app.your-domain.com`으로 바뀌고, `*.trycloudflare.com` / `*.cfargotunnel.com`에서 발생하던 브라우저 "위험한 사이트" 경고를 본인 도메인 평판으로 회피할 수 있다.
155
+ Cloudflare Tunnel로 어디서든 접속완료 알림과 커스텀 도메인 라우팅 지원. [↗](https://github.com/HyperAITeam/CLITrigger/wiki/Remote-Access-KR)
156
156
 
157
157
  ---
158
158
 
@@ -285,8 +285,11 @@ cloudflared tunnel route dns <tunnel-name> app.your-domain.com # 한 번만
285
285
 
286
286
  ## 문서
287
287
 
288
+ 📖 **전체 매뉴얼은 [Wiki](https://github.com/HyperAITeam/CLITrigger/wiki/Home-KR)에 있습니다** — 설치, 기능별 가이드, 원격 접속까지.
289
+
288
290
  | 문서 | 내용 |
289
291
  |------|------|
292
+ | [Wiki (한국어)](https://github.com/HyperAITeam/CLITrigger/wiki/Home-KR) | 기능별 상세 가이드와 사용법 |
290
293
  | [SETUP.md](docs/SETUP.md) | 상세 설치 및 사용 가이드 |
291
294
  | [changelog/](docs/changelog/README.md) | 변경 이력 (월별 폴더 + 날짜별 파일) |
292
295
  | [CICD.md](docs/CICD.md) | GitHub Actions CI/CD 설정 |
@@ -0,0 +1,32 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap";.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}/**
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;-moz-user-select:none;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) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;-moz-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{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;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}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{color-scheme:light;--color-bg-primary: #F5F5F7;--color-bg-secondary: #EDEDF0;--color-bg-tertiary: #E2E2E8;--color-bg-card: #FFFFFF;--color-bg-input: #EEEEF2;--color-bg-hover: #E5E5EB;--color-bg-active: #D1D1D6;--color-text-primary: #1D1D1F;--color-text-secondary: #6E6E73;--color-text-tertiary: #7C7C82;--color-text-muted: #AEAEB2;--color-text-faint: #C7C7CC;--color-border: #D8D8DD;--color-border-strong: #C7C7CC;--color-border-muted: rgba(0, 0, 0, .1);--color-accent: #0071E3;--color-accent-light: #4DA3FF;--color-accent-dark: #0058B0;--color-accent-amber: #FF9500;--color-scrollbar: #D1D1D6;--color-scrollbar-hover: #AEAEB2;--color-selection-bg: rgba(0, 113, 227, .15);--color-selection-text: #1D1D1F;--shadow-soft: 0 1px 2px -1px rgba(0,0,0,.04), 0 2px 8px -2px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.02);--shadow-card: 0 4px 6px -2px rgba(0,0,0,.05), 0 12px 24px -4px rgba(0,0,0,.08), 0 0 0 1px rgba(0,0,0,.03);--shadow-elevated: 0 8px 16px -4px rgba(0,0,0,.08), 0 24px 48px -8px rgba(0,0,0,.12), 0 0 0 1px rgba(0,0,0,.04);--shadow-accent: 0 8px 20px -4px rgba(0, 113, 227, .2), 0 4px 12px -2px rgba(0, 113, 227, .1);--color-bg-gradient: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(0,113,227,.03), transparent 50%), radial-gradient(ellipse 60% 40% at 80% 50%, rgba(175,82,222,.02), transparent 50%)}[data-theme=dark]{color-scheme:dark;--color-bg-primary: #141414;--color-bg-secondary: #1A1A1A;--color-bg-tertiary: #2C2C2C;--color-bg-card: #222222;--color-bg-input: #2C2C2C;--color-bg-hover: #363636;--color-bg-active: #444444;--color-text-primary: #F0F0F0;--color-text-secondary: #A8A8A8;--color-text-tertiary: #858585;--color-text-muted: #5A5A5A;--color-text-faint: #3C3C3C;--color-border: #333333;--color-border-strong: #444444;--color-border-muted: rgba(255, 255, 255, .1);--color-accent: #4B8DFF;--color-accent-light: #7BABFF;--color-accent-dark: #3370E0;--color-accent-amber: #FF9F0A;--color-scrollbar: #3A3A3A;--color-scrollbar-hover: #555555;--color-selection-bg: rgba(75, 141, 255, .25);--color-selection-text: #EBEBEB;--shadow-soft: 0 1px 2px -1px rgba(0,0,0,.2), 0 2px 8px -2px rgba(0,0,0,.3), 0 0 0 1px rgba(255,255,255,.03);--shadow-card: 0 4px 6px -2px rgba(0,0,0,.3), 0 12px 24px -4px rgba(0,0,0,.4), 0 0 0 1px rgba(255,255,255,.04);--shadow-elevated: 0 8px 16px -4px rgba(0,0,0,.4), 0 24px 48px -8px rgba(0,0,0,.5), 0 0 0 1px rgba(255,255,255,.05);--shadow-accent: 0 8px 20px -4px rgba(75, 141, 255, .25), 0 4px 12px -2px rgba(75, 141, 255, .15);--color-bg-gradient: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(75,141,255,.06), transparent 50%), radial-gradient(ellipse 60% 40% at 80% 50%, rgba(175,82,222,.04), transparent 50%)}html,body{background:var(--color-bg-gradient),var(--color-bg-primary);color:var(--color-text-primary);font-family:Inter,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:15px;line-height:1.6}h1,h2,h3,h4,h5,h6{font-weight:600;letter-spacing:-.025em;color:var(--color-text-primary);line-height:1.25}p{line-height:1.625;color:var(--color-text-secondary)}.text-primary{color:var(--color-text-primary);font-weight:600}.text-secondary{color:var(--color-text-secondary);font-weight:500}.text-muted{color:var(--color-text-muted);font-weight:400}a,button,input,select,textarea,.card{transition:all .3s cubic-bezier(.4,0,.2,1)}input[type=checkbox],input[type=radio]{accent-color:var(--color-accent)}::-moz-selection{background-color:var(--color-selection-bg);color:var(--color-selection-text)}::selection{background-color:var(--color-selection-bg);color:var(--color-selection-text)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{background-color:var(--color-scrollbar);border-radius:9999px;border-width:2px;border-color:transparent;background-clip:padding-box;-webkit-transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}::-webkit-scrollbar-thumb:hover{background-color:var(--color-scrollbar-hover)}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.card{background-color:var(--color-bg-card);border:1px solid var(--color-border-muted);box-shadow:var(--shadow-soft),inset 0 1px #ffffff0f;position:relative;overflow:hidden;border-radius:.75rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.card:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent 10%,rgba(0,113,227,.15) 50%,transparent 90%);z-index:1;pointer-events:none;opacity:0;transition:opacity .3s ease}.card:hover:before{opacity:1}[data-theme=dark] .card:before{background:linear-gradient(90deg,transparent 10%,rgba(75,141,255,.2) 50%,transparent 90%)}.card:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-card),inset 0 1px #ffffff14;transform:translateY(-2px)}.btn-primary{background-color:var(--color-bg-tertiary);color:var(--color-accent);border:1px solid var(--color-border);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;overflow:hidden;border-radius:.75rem;padding:.625rem 1.5rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.btn-primary:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn-primary:disabled{cursor:not-allowed;opacity:.4}.btn-primary:hover:disabled{transform:none;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-primary:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle,rgba(255,255,255,.25) 0%,transparent 70%);transform:scale(0);opacity:0;transition:transform .4s ease,opacity .4s ease;pointer-events:none}.btn-primary:active:not(:disabled):after{transform:scale(2);opacity:1;transition:0s}.btn-primary:hover:not(:disabled){border-color:var(--color-accent);background-color:var(--color-accent);color:#fff}.btn-secondary{background-color:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border-muted);box-shadow:0 1px 2px #0000000a,inset 0 1px #ffffff0a;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.625rem 1.5rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.btn-secondary:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:var(--color-bg-active);color:var(--color-text-primary);--tw-shadow: var(--shadow-soft);--tw-shadow-colored: var(--shadow-soft);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-secondary:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.btn-secondary:disabled{cursor:not-allowed;opacity:.4}.btn-secondary:hover:disabled{transform:none}.btn-danger{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;background-color:#ff3b301a;padding:.625rem 1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(255 59 48 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.btn-danger:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(255 59 48 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: rgb(255 59 48 / .2);--tw-shadow: var(--tw-shadow-colored)}.btn-danger:active{--tw-scale-x: .97;--tw-scale-y: .97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.btn-danger:disabled{cursor:not-allowed;opacity:.4}.btn-danger:hover:disabled{transform:none}.btn-ghost{color:var(--color-text-tertiary);display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.5rem .75rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.btn-ghost:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:var(--color-bg-tertiary);color:var(--color-text-primary)}.btn-ghost:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:var(--color-bg-active)}.btn-ghost:disabled{cursor:not-allowed;opacity:.3}.btn-ghost:hover:disabled{transform:none}.btn-md{gap:.5rem;border-radius:.75rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.btn-sm{gap:.375rem;border-radius:.5rem;padding:.375rem .75rem;font-size:.75rem;line-height:1rem}.input-field{background-color:var(--color-bg-input);border:1px solid var(--color-border-strong);color:var(--color-text-primary);box-shadow:inset 0 1px 2px #00000005;width:100%;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.input-field:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}@media(prefers-color-scheme:dark){.input-field:focus{background-color:#0003}}select{color-scheme:inherit}select option{background-color:var(--color-bg-card);color:var(--color-text-primary)}.input-field::-moz-placeholder{color:var(--color-text-faint)}.input-field::placeholder{color:var(--color-text-faint)}.input-field:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-selection-bg),0 0 12px -2px #0071e31a,inset 0 1px 2px #00000005;--tw-ring-color: transparent;transform:translateY(-1px)}[data-theme=dark] .input-field:focus{box-shadow:0 0 0 3px var(--color-selection-bg),0 0 12px -2px #4b8dff26,inset 0 1px 2px #0000001a}.badge{display:inline-flex;flex-shrink:0;cursor:default;align-items:center;gap:.375rem;white-space:nowrap;border-radius:9999px;padding:.25rem .625rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;font-size:10px;line-height:1.4}.badge:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.badge{position:relative}.badge:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;border:1px solid currentColor;opacity:.15;pointer-events:none}.section-label{font-weight:600;text-transform:uppercase;letter-spacing:.05em;font-size:10px;line-height:1.4;color:var(--color-text-muted)}.panel{border-radius:.75rem;padding:1rem;border:1px solid var(--color-border)}.lang-toggle{background-color:var(--color-bg-tertiary);color:var(--color-text-tertiary)}.lang-toggle.h-screen>aside{border-right:1px solid var(--color-border)}.lang-toggle{display:flex;height:2.25rem;width:2.25rem;align-items:center;justify-content:center;border-radius:.75rem;font-weight:700;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;font-size:10px;line-height:1.4}.lang-toggle:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:var(--color-accent);--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-accent);--tw-shadow-colored: var(--shadow-accent);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: var(--color-accent);--tw-shadow: var(--tw-shadow-colored)}.lang-toggle:active{--tw-scale-x: .9;--tw-scale-y: .9;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.markdown-content{font-size:.75rem;line-height:1rem;line-height:1.625;color:var(--color-text-primary)}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4{margin-top:.75rem;margin-bottom:.375rem;font-weight:600;color:var(--color-text-primary)}.markdown-content h1{font-size:1rem;line-height:1.5rem}.markdown-content h2{font-size:.875rem;line-height:1.25rem}.markdown-content h3{font-size:.75rem;line-height:1rem;font-weight:700}.markdown-content p{margin-bottom:.5rem}.markdown-content p:last-child{margin-bottom:0}.markdown-content ul,.markdown-content ol{margin-left:1rem;margin-bottom:.5rem}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin-bottom:.125rem}.markdown-content code{background-color:var(--color-bg-tertiary);border-radius:.25rem;padding:.125rem .25rem;font-family:JetBrains Mono,Fira Code,monospace;font-size:.75rem;line-height:1rem}.markdown-content pre{background-color:var(--color-bg-tertiary);border:1px solid var(--color-border);margin-bottom:.5rem;overflow-x:auto;border-radius:.5rem;padding:.5rem}.markdown-content pre code{background-color:transparent;padding:0}.markdown-content table{border-color:var(--color-border-strong);margin-bottom:.5rem;width:100%;border-collapse:collapse;font-size:.75rem;line-height:1rem}.markdown-content th,.markdown-content td{border-color:var(--color-border-strong);border-width:1px;padding:.25rem .5rem;text-align:left}.markdown-content th{background-color:var(--color-bg-tertiary);font-weight:600}.markdown-content blockquote{border-left-color:var(--color-accent);color:var(--color-text-secondary);margin-bottom:.5rem;border-left-width:2px;padding-left:.75rem;font-style:italic}.markdown-content a{color:var(--color-accent);text-decoration-line:underline}.markdown-content a:hover{color:var(--color-accent-dark)}.markdown-content hr{border-color:var(--color-border);margin-top:.75rem;margin-bottom:.75rem}.markdown-content strong{font-weight:600;color:var(--color-text-primary)}.markdown-content input[type=checkbox]{margin-right:.375rem}.vault-md-zoom .markdown-content{font-size:1em}.vault-md-zoom .markdown-content h1{font-size:1.4em}.vault-md-zoom .markdown-content h2{font-size:1.2em}.vault-md-zoom .markdown-content h3{font-size:1.05em}.vault-md-zoom .markdown-content h4{font-size:1em}.vault-md-zoom .markdown-content code{font-size:.95em}.vault-md-zoom .markdown-content table{font-size:1em}mark.vault-find-match{background-color:#facc1573;color:inherit;border-radius:2px}mark.vault-find-match-active{background-color:#f97316b3;color:inherit;border-radius:2px;outline:1px solid rgba(234,88,12,.9)}.markdown-content-dark{font-size:.75rem;line-height:1rem;line-height:1.625;color:#d4d4d4}.markdown-content-dark h1,.markdown-content-dark h2,.markdown-content-dark h3,.markdown-content-dark h4{color:#e6e6e6;margin-top:.5rem;margin-bottom:.25rem;font-weight:600}.markdown-content-dark h1{font-size:.875rem;line-height:1.25rem}.markdown-content-dark h2,.markdown-content-dark h3{font-size:.75rem;line-height:1rem;font-weight:700}.markdown-content-dark p{margin-bottom:.375rem;line-height:1.625}.markdown-content-dark ul,.markdown-content-dark ol{margin-left:1rem;margin-bottom:.5rem}.markdown-content-dark ul{list-style-type:disc}.markdown-content-dark ol{list-style-type:decimal}.markdown-content-dark li{margin-bottom:.125rem}.markdown-content-dark code{background:#ffffff14;color:#ce9178;border-radius:.25rem;padding:.125rem .25rem;font-size:.75rem;line-height:1rem}.markdown-content-dark pre{background:#0000004d;border:1px solid #3c3c3c;margin-bottom:.5rem;overflow-x:auto;border-radius:.5rem;padding:.5rem}.markdown-content-dark pre code{background-color:transparent;padding:0}.markdown-content-dark table{border-color:#3c3c3c;margin-bottom:.5rem;width:100%;border-collapse:collapse;font-size:.75rem;line-height:1rem}.markdown-content-dark th,.markdown-content-dark td{border:1px solid #3c3c3c;padding:.25rem .5rem}.markdown-content-dark th{background:#ffffff0d}.markdown-content-dark blockquote{border-left:3px solid #b392f0;color:#8b949e;margin-top:.5rem;margin-bottom:.5rem;margin-left:0;padding-left:.75rem}.markdown-content-dark a{color:#79c0ff;text-decoration-line:underline}.markdown-content-dark a:hover{color:#a5d6ff}.markdown-content-dark strong{font-weight:600;color:#e6e6e6}.markdown-content-dark hr{border-color:#3c3c3c;margin-top:.75rem;margin-bottom:.75rem}.glass{border-width:1px;border-color:#fff3;--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background:#ffffffb3}:is([data-theme=dark] .glass){border-color:#ffffff1a;background:color-mix(in srgb,var(--color-bg-secondary) 85%,transparent)}.glass-card{border-width:1px;--tw-shadow: 0 8px 32px 0 rgba(31, 38, 135, .1), inset 0 0 0 1px rgba(255, 255, 255, .1);--tw-shadow-colored: 0 8px 32px 0 var(--tw-shadow-color), inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background:color-mix(in srgb,var(--color-bg-secondary) 80%,transparent);border-color:color-mix(in srgb,var(--color-bg-tertiary) 50%,transparent)}:is([data-theme=dark] .glass-card){border-color:#ffffff1a;background:color-mix(in srgb,var(--color-bg-card) 85%,transparent)}.flex.h-screen>aside{border-right:1px solid var(--color-border)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.\!-bottom-1\.5{bottom:-.375rem!important}.\!-top-1\.5{top:-.375rem!important}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.bottom-1\/4{bottom:25%}.bottom-2{bottom:.5rem}.bottom-3{bottom:.75rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-modal{z-index:100}.z-overlay{z-index:30}.z-sticky{z-index:60}.z-toast{z-index:150}.z-tooltip{z-index:200}.order-none{order:0}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.\!h-3{height:.75rem!important}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[300px\]{height:300px}.h-\[600px\]{height:600px}.h-\[75vh\]{height:75vh}.h-\[92vh\]{height:92vh}.h-\[calc\(100vh-220px\)\]{height:calc(100vh - 220px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[200px\]{max-height:200px}.max-h-\[240px\]{max-height:240px}.max-h-\[280px\]{max-height:280px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[280px\]{min-height:280px}.min-h-\[360px\]{min-height:360px}.min-h-\[38px\]{min-height:38px}.min-h-\[400px\]{min-height:400px}.min-h-\[480px\]{min-height:480px}.min-h-\[500px\]{min-height:500px}.min-h-\[60px\]{min-height:60px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.\!w-3{width:.75rem!important}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-4\/6{width:66.666667%}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[14px\]{width:14px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[22px\]{width:22px}.w-\[380px\]{width:380px}.w-\[3px\]{width:3px}.w-\[420px\]{width:420px}.w-\[480px\]{width:480px}.w-\[94vw\]{width:94vw}.w-\[min\(560px\,90vw\)\]{width:min(560px,90vw)}.w-\[min\(600px\,90vw\)\]{width:min(600px,90vw)}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-7{min-width:1.75rem}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[14px\]{min-width:14px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[280px\]{min-width:280px}.min-w-\[44px\]{min-width:44px}.min-w-\[80px\]{min-width:80px}.min-w-\[8rem\]{min-width:8rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[1200px\]{max-width:1200px}.max-w-\[160px\]{max-width:160px}.max-w-\[200px\]{max-width:200px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[60\%\]{max-width:60%}.max-w-\[80\%\]{max-width:80%}.max-w-\[80vw\]{max-width:80vw}.max-w-\[820px\]{max-width:820px}.max-w-\[90vw\]{max-width:90vw}.max-w-\[calc\(100vw-16px\)\]{max-width:calc(100vw - 16px)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-\[calc\(100\%-100px\)\]{flex-basis:calc(100% - 100px)}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-8{--tw-translate-x: 2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fadeIn .4s cubic-bezier(.4,0,.2,1)}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes scaleIn{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}.animate-scale-in{animation:scaleIn .3s cubic-bezier(.34,1.56,.64,1)}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.animate-slide-in-right{animation:slideInRight .4s cubic-bezier(.4,0,.2,1)}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.4,0,.2,1)}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-context-menu{cursor:context-menu}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-ns-resize{cursor:ns-resize}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-zoom-in{cursor:zoom-in}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.grid-rows-\[1fr_2fr\]{grid-template-rows:1fr 2fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-px{gap:1px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.25rem * var(--tw-space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1px * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-warm-100>:not([hidden])~:not([hidden]){border-color:var(--color-bg-primary)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-lg{border-radius:.5rem!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.\!border-2{border-width:2px!important}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.\!border-\[\#333\]{--tw-border-opacity: 1 !important;border-color:rgb(51 51 51 / var(--tw-border-opacity, 1))!important}.\!border-warm-200{border-color:var(--color-bg-tertiary)!important}.\!border-warm-300{border-color:var(--color-border-strong)!important}.\!border-white{--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))!important}.border-accent{border-color:var(--color-accent)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-500\/30{border-color:#f59e0b4d}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-300\/30{border-color:#93c5fd4d}.border-cyan-400{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-status-error\/20{border-color:#ff3b3033}.border-status-error\/30{border-color:#ff3b304d}.border-status-merged\/20{border-color:#af52de33}.border-status-merged\/30{border-color:#af52de4d}.border-status-success{--tw-border-opacity: 1;border-color:rgb(52 199 89 / var(--tw-border-opacity, 1))}.border-status-success\/30{border-color:#34c7594d}.border-status-warning{--tw-border-opacity: 1;border-color:rgb(255 149 0 / var(--tw-border-opacity, 1))}.border-status-warning\/20{border-color:#ff950033}.border-status-warning\/30{border-color:#ff95004d}.border-theme-border{border-color:var(--color-border)}.border-theme-border-strong{border-color:var(--color-border-strong)}.border-transparent{border-color:transparent}.border-warm-100{border-color:var(--color-bg-primary)}.border-warm-200{border-color:var(--color-bg-tertiary)}.border-warm-300{border-color:var(--color-border-strong)}.border-warm-50{border-color:var(--color-bg-secondary)}.border-warm-700{border-color:var(--color-text-secondary)}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:#ffffff1a}.border-white\/80{border-color:#fffc}.border-l-accent{border-left-color:var(--color-accent)}.border-l-amber-400{--tw-border-opacity: 1;border-left-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-l-amber-500{--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-l-red-400{--tw-border-opacity: 1;border-left-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-l-status-error{--tw-border-opacity: 1;border-left-color:rgb(255 59 48 / var(--tw-border-opacity, 1))}.border-l-status-merged{--tw-border-opacity: 1;border-left-color:rgb(175 82 222 / var(--tw-border-opacity, 1))}.border-l-status-running{--tw-border-opacity: 1;border-left-color:rgb(0 122 255 / var(--tw-border-opacity, 1))}.border-l-status-success{--tw-border-opacity: 1;border-left-color:rgb(52 199 89 / var(--tw-border-opacity, 1))}.border-l-status-warning{--tw-border-opacity: 1;border-left-color:rgb(255 149 0 / var(--tw-border-opacity, 1))}.border-l-warm-300{border-left-color:var(--color-border-strong)}.\!bg-\[\#222\]{--tw-bg-opacity: 1 !important;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))!important}.\!bg-accent{background-color:var(--color-accent)!important}.\!bg-amber-500{--tw-bg-opacity: 1 !important;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))!important}.\!bg-blue-500{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))!important}.\!bg-cyan-500{--tw-bg-opacity: 1 !important;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))!important}.\!bg-emerald-500{--tw-bg-opacity: 1 !important;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))!important}.\!bg-theme-card{background-color:var(--color-bg-card)!important}.\!bg-warm-100{background-color:var(--color-bg-primary)!important}.\!bg-warm-50{background-color:var(--color-bg-secondary)!important}.bg-\[\#1A1A1A\]{--tw-bg-opacity: 1;background-color:rgb(26 26 26 / var(--tw-bg-opacity, 1))}.bg-\[\#1A1A1A\]\/95{background-color:#1a1a1af2}.bg-\[var\(--color-bg-card\)\]{background-color:var(--color-bg-card)}.bg-\[var\(--color-bg-input\)\]{background-color:var(--color-bg-input)}.bg-accent{background-color:var(--color-accent)}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/50{background-color:#fffbeb80}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-700{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.bg-amber-800\/20{background-color:#92400e33}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/20{background-color:#3b82f633}.bg-cyan-50\/50{background-color:#ecfeff80}.bg-cyan-500\/10{background-color:#06b6d41a}.bg-emerald-50\/50{background-color:#ecfdf580}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/20{background-color:#10b98133}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-500\/20{background-color:#6b728033}.bg-green-500\/20{background-color:#22c55e33}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/20{background-color:#f9731633}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-pink-500\/20{background-color:#ec489933}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/20{background-color:#a855f733}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/50{background-color:#fef2f280}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-status-error{--tw-bg-opacity: 1;background-color:rgb(255 59 48 / var(--tw-bg-opacity, 1))}.bg-status-error\/10{background-color:#ff3b301a}.bg-status-error\/15{background-color:#ff3b3026}.bg-status-error\/5{background-color:#ff3b300d}.bg-status-info\/10{background-color:#8e8e931a}.bg-status-merged{--tw-bg-opacity: 1;background-color:rgb(175 82 222 / var(--tw-bg-opacity, 1))}.bg-status-merged\/10{background-color:#af52de1a}.bg-status-merged\/15{background-color:#af52de26}.bg-status-merged\/5{background-color:#af52de0d}.bg-status-running{--tw-bg-opacity: 1;background-color:rgb(0 122 255 / var(--tw-bg-opacity, 1))}.bg-status-running\/10{background-color:#007aff1a}.bg-status-success{--tw-bg-opacity: 1;background-color:rgb(52 199 89 / var(--tw-bg-opacity, 1))}.bg-status-success\/10{background-color:#34c7591a}.bg-status-success\/15{background-color:#34c75926}.bg-status-warning{--tw-bg-opacity: 1;background-color:rgb(255 149 0 / var(--tw-bg-opacity, 1))}.bg-status-warning\/10{background-color:#ff95001a}.bg-status-warning\/15{background-color:#ff950026}.bg-status-warning\/5{background-color:#ff95000d}.bg-theme-bg{background-color:var(--color-bg-primary)}.bg-theme-bg-tertiary{background-color:var(--color-bg-tertiary)}.bg-theme-card{background-color:var(--color-bg-card)}.bg-theme-hover{background-color:var(--color-bg-hover)}.bg-transparent{background-color:transparent}.bg-violet-500\/15{background-color:#8b5cf626}.bg-warm-100{background-color:var(--color-bg-primary)}.bg-warm-200{background-color:var(--color-bg-tertiary)}.bg-warm-300{background-color:var(--color-border-strong)}.bg-warm-50{background-color:var(--color-bg-secondary)}.bg-warm-700{background-color:var(--color-text-secondary)}.bg-warm-800{background-color:var(--color-text-primary)}.bg-warm-900{background-color:var(--color-selection-text)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/20{background-color:#fff3}.bg-white\/70{background-color:#ffffffb3}.bg-white\/85{background-color:#ffffffd9}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/20{background-color:#eab30833}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.\!py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-px{padding-bottom:1px}.pl-1{padding-left:.25rem}.pl-12{padding-left:3rem}.pl-3{padding-left:.75rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-9{padding-left:2.25rem}.pl-\[18px\]{padding-left:18px}.pl-\[26px\]{padding-left:26px}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[20vh\]{padding-top:20vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.\!text-warm-50{color:var(--color-bg-secondary)!important}.text-accent{color:var(--color-accent)}.text-accent-dark{color:var(--color-accent-dark)}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-500\/60{color:#f59e0b99}.text-amber-500\/80{color:#f59e0bcc}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-500\/60{color:#06b6d499}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-500\/70{color:#10b981b3}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-500\/60{color:#f9731699}.text-pink-400{--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.text-pink-500{--tw-text-opacity: 1;color:rgb(236 72 153 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-status-error{--tw-text-opacity: 1;color:rgb(255 59 48 / var(--tw-text-opacity, 1))}.text-status-error\/60{color:#ff3b3099}.text-status-info{--tw-text-opacity: 1;color:rgb(142 142 147 / var(--tw-text-opacity, 1))}.text-status-merged{--tw-text-opacity: 1;color:rgb(175 82 222 / var(--tw-text-opacity, 1))}.text-status-merged\/60{color:#af52de99}.text-status-running{--tw-text-opacity: 1;color:rgb(0 122 255 / var(--tw-text-opacity, 1))}.text-status-success{--tw-text-opacity: 1;color:rgb(52 199 89 / var(--tw-text-opacity, 1))}.text-status-success\/60{color:#34c75999}.text-status-warning{--tw-text-opacity: 1;color:rgb(255 149 0 / var(--tw-text-opacity, 1))}.text-status-warning\/60{color:#ff950099}.text-theme-accent{color:var(--color-accent)}.text-theme-muted{color:var(--color-text-muted)}.text-theme-text{color:var(--color-text-primary)}.text-theme-text-secondary{color:var(--color-text-secondary)}.text-theme-text-tertiary{color:var(--color-text-tertiary)}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-warm-100{color:var(--color-bg-primary)}.text-warm-200{color:var(--color-bg-tertiary)}.text-warm-300{color:var(--color-border-strong)}.text-warm-400{color:var(--color-text-faint)}.text-warm-50{color:var(--color-bg-secondary)}.text-warm-500{color:var(--color-text-muted)}.text-warm-600{color:var(--color-text-tertiary)}.text-warm-700{color:var(--color-text-secondary)}.text-warm-800{color:var(--color-text-primary)}.text-warm-900{color:var(--color-selection-text)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.decoration-dashed{text-decoration-style:dashed}.underline-offset-2{text-underline-offset:2px}.placeholder-warm-400::-moz-placeholder{color:var(--color-text-faint)}.placeholder-warm-400::placeholder{color:var(--color-text-faint)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.\!shadow-soft{--tw-shadow: var(--shadow-soft) !important;--tw-shadow-colored: var(--shadow-soft) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow: 0 0 6px rgba(0,0,0,.15);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-card{--tw-shadow: var(--shadow-card);--tw-shadow-colored: var(--shadow-card);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-elevated{--tw-shadow: var(--shadow-elevated);--tw-shadow-colored: var(--shadow-elevated);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow: var(--shadow-soft);--tw-shadow-colored: var(--shadow-soft);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-accent{--tw-ring-color: var(--color-accent)}.ring-blue-400{--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.ring-cyan-400{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 211 238 / var(--tw-ring-opacity, 1))}.ring-red-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity, 1))}.ring-status-error\/30{--tw-ring-color: rgb(255 59 48 / .3)}.ring-status-running\/50{--tw-ring-color: rgb(0 122 255 / .5)}.ring-status-success{--tw-ring-opacity: 1;--tw-ring-color: rgb(52 199 89 / var(--tw-ring-opacity, 1))}.ring-warm-400{--tw-ring-color: var(--color-text-faint)}.ring-offset-1{--tw-ring-offset-width: 1px}.ring-offset-2{--tw-ring-offset-width: 2px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[transform\,width\]{transition-property:transform,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.text-2xs{font-size:10px;line-height:1.4}@keyframes toastProgress{0%{width:100%}to{width:0%}}@keyframes workspaceDotPulse{0%,to{transform:scale(1)}50%{transform:scale(1.55)}}.workspace-dot-pulse{animation:workspaceDotPulse 1.4s ease-in-out infinite}.xterm .composition-view{display:none!important}@media(min-width:640px){.sm\:flex.h-screen>aside{border-right:1px solid var(--color-border)}}@media(min-width:768px){.md\:flex.h-screen>aside{border-right:1px solid var(--color-border)}}.placeholder\:text-warm-400::-moz-placeholder{color:var(--color-text-faint)}.placeholder\:text-warm-400::placeholder{color:var(--color-text-faint)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-warm-300:after{content:var(--tw-content);border-color:var(--color-border-strong)}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.first\:rounded-l-full:first-child{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.last\:mb-0:last-child{margin-bottom:0}.last\:rounded-r-full:last-child{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.last\:border-r-0:last-child{border-right-width:0px}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-amber-300:hover{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.hover\:border-red-400:hover{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.hover\:border-warm-300:hover{border-color:var(--color-border-strong)}.hover\:border-warm-400:hover{border-color:var(--color-text-faint)}.hover\:border-warm-500:hover{border-color:var(--color-text-muted)}.hover\:\!bg-amber-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))!important}.hover\:\!bg-blue-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))!important}.hover\:\!bg-emerald-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))!important}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-accent-dark:hover{background-color:var(--color-accent-dark)}.hover\:bg-amber-50:hover{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-500\/10:hover{background-color:#06b6d41a}.hover\:bg-cyan-500\/20:hover{background-color:#06b6d433}.hover\:bg-orange-500\/10:hover{background-color:#f973161a}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-status-error\/10:hover{background-color:#ff3b301a}.hover\:bg-status-merged\/10:hover{background-color:#af52de1a}.hover\:bg-status-merged\/25:hover{background-color:#af52de40}.hover\:bg-status-success\/10:hover{background-color:#34c7591a}.hover\:bg-status-success\/25:hover{background-color:#34c75940}.hover\:bg-status-warning\/10:hover{background-color:#ff95001a}.hover\:bg-theme-hover:hover{background-color:var(--color-bg-hover)}.hover\:bg-violet-500\/10:hover{background-color:#8b5cf61a}.hover\:bg-warm-100:hover{background-color:var(--color-bg-primary)}.hover\:bg-warm-200:hover{background-color:var(--color-bg-tertiary)}.hover\:bg-warm-50:hover{background-color:var(--color-bg-secondary)}.hover\:bg-warm-800:hover{background-color:var(--color-text-primary)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-accent-dark:hover{color:var(--color-accent-dark)}.hover\:text-amber-500:hover{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.hover\:text-amber-600:hover{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-cyan-500:hover{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.hover\:text-orange-500:hover{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-status-error:hover{--tw-text-opacity: 1;color:rgb(255 59 48 / var(--tw-text-opacity, 1))}.hover\:text-status-merged:hover{--tw-text-opacity: 1;color:rgb(175 82 222 / var(--tw-text-opacity, 1))}.hover\:text-status-success:hover{--tw-text-opacity: 1;color:rgb(52 199 89 / var(--tw-text-opacity, 1))}.hover\:text-status-warning:hover{--tw-text-opacity: 1;color:rgb(255 149 0 / var(--tw-text-opacity, 1))}.hover\:text-theme-text:hover{color:var(--color-text-primary)}.hover\:text-warm-500:hover{color:var(--color-text-muted)}.hover\:text-warm-600:hover{color:var(--color-text-tertiary)}.hover\:text-warm-700:hover{color:var(--color-text-secondary)}.hover\:text-warm-800:hover{color:var(--color-text-primary)}.hover\:text-warm-900:hover{color:var(--color-selection-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-elevated:hover{--tw-shadow: var(--shadow-elevated);--tw-shadow-colored: var(--shadow-elevated);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-1:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:ring-warm-400:hover{--tw-ring-color: var(--color-text-faint)}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:border-amber-400:focus{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.focus\:border-blue-400:focus{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.focus\:border-emerald-400:focus{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.focus\:border-warm-300:focus{border-color:var(--color-border-strong)}.focus\:border-warm-400:focus{border-color:var(--color-text-faint)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent:focus{--tw-ring-color: var(--color-accent)}.focus\:ring-amber-400\/20:focus{--tw-ring-color: rgb(251 191 36 / .2)}.focus\:ring-amber-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-400\/20:focus{--tw-ring-color: rgb(96 165 250 / .2)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-emerald-400\/20:focus{--tw-ring-color: rgb(52 211 153 / .2)}.focus\:ring-status-success:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(52 199 89 / var(--tw-ring-opacity, 1))}.focus\:ring-warm-400:focus{--tw-ring-color: var(--color-text-faint)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-accent:active{background-color:var(--color-accent)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.disabled\:hover\:text-warm-500:hover:disabled{color:var(--color-text-muted)}.group:focus-within .group-focus-within\:text-accent{color:var(--color-accent)}.group:hover .group-hover\:scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:bg-warm-200{background-color:var(--color-bg-tertiary)}.group\/dep:hover .group-hover\/dep\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-50{opacity:.5}.peer:checked~.peer-checked\:bg-status-success{--tw-bg-opacity: 1;background-color:rgb(52 199 89 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}@media(min-width:640px){.sm\:mx-0{margin-left:0;margin-right:0}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:h-64{height:16rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-3{gap:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media(min-width:768px){.md\:static{position:static}.md\:left-\[248px\]{left:248px}.md\:z-auto{z-index:auto}.md\:ml-2{margin-left:.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:w-14{width:3.5rem}.md\:max-w-\[calc\(100vw-256px\)\]{max-width:calc(100vw - 256px)}.md\:basis-auto{flex-basis:auto}.md\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-nowrap{flex-wrap:nowrap}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-3{gap:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-3\.5{padding-top:.875rem;padding-bottom:.875rem}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-warm-600{border-color:var(--color-text-tertiary)}.dark\:border-warm-700{border-color:var(--color-text-secondary)}.dark\:bg-blue-900\/30{background-color:#1e3a8a4d}.dark\:bg-purple-900\/30{background-color:#581c874d}.dark\:bg-red-900\/20{background-color:#7f1d1d33}.dark\:bg-warm-900{background-color:var(--color-selection-text)}.dark\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}}