clitrigger 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -5
- package/README_KR.md +39 -5
- package/bin/clitrigger.js +27 -60
- package/dist/client/assets/index-D4Xur2yY.css +1 -0
- package/dist/client/assets/index-Dz1uDy_d.js +567 -0
- package/dist/client/index.html +2 -2
- package/dist/server/db/queries.d.ts +25 -2
- package/dist/server/db/queries.d.ts.map +1 -1
- package/dist/server/db/queries.js +65 -0
- package/dist/server/db/queries.js.map +1 -1
- package/dist/server/db/schema.d.ts.map +1 -1
- package/dist/server/db/schema.js +4 -0
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/planner.d.ts.map +1 -1
- package/dist/server/routes/planner.js +194 -50
- package/dist/server/routes/planner.js.map +1 -1
- package/dist/server/routes/review.d.ts +3 -0
- package/dist/server/routes/review.d.ts.map +1 -0
- package/dist/server/routes/review.js +63 -0
- package/dist/server/routes/review.js.map +1 -0
- package/dist/server/services/discussion-orchestrator.js +1 -1
- package/dist/server/services/discussion-orchestrator.js.map +1 -1
- package/dist/server/services/orchestrator.d.ts.map +1 -1
- package/dist/server/services/orchestrator.js +4 -1
- package/dist/server/services/orchestrator.js.map +1 -1
- package/dist/server/services/review-capture.d.ts +20 -0
- package/dist/server/services/review-capture.d.ts.map +1 -0
- package/dist/server/services/review-capture.js +86 -0
- package/dist/server/services/review-capture.js.map +1 -0
- package/dist/server/services/session-manager.js +1 -1
- package/dist/server/services/session-manager.js.map +1 -1
- package/dist/server/services/worktree-manager.d.ts +1 -1
- package/dist/server/services/worktree-manager.d.ts.map +1 -1
- package/dist/server/services/worktree-manager.js +9 -5
- package/dist/server/services/worktree-manager.js.map +1 -1
- package/package.json +3 -1
- package/dist/client/assets/index-BiXO2oR3.js +0 -541
- package/dist/client/assets/index-tGOot928.css +0 -1
package/README.md
CHANGED
|
@@ -28,9 +28,13 @@
|
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-
>
|
|
32
|
-
>
|
|
33
|
-
>
|
|
31
|
+
> ### While you sleep, your AI is working.
|
|
32
|
+
>
|
|
33
|
+
> In the age of AI-generated code, the developer's role is shifting toward supervision and review. But **vibe coding without understanding** eventually hits a wall.
|
|
34
|
+
>
|
|
35
|
+
> CLITrigger takes the tasks you queued before bed and runs them overnight — multiple AI coding agents (**Claude Code · Codex · Gemini CLI**) working in parallel, each in its own isolated git worktree. Next morning, you just review the stack of diffs and **accept / reject**.
|
|
36
|
+
>
|
|
37
|
+
> **Parallel AI execution — without losing context.**
|
|
34
38
|
|
|
35
39
|
<div align="center">
|
|
36
40
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — Parallel worktree execution" width="800">
|
|
@@ -71,11 +75,41 @@ Each TODO runs in its **own isolated git worktree** — no conflicts, separate b
|
|
|
71
75
|
|
|
72
76
|
---
|
|
73
77
|
|
|
78
|
+
## The Workflow — Hand Off, Then Review
|
|
79
|
+
|
|
80
|
+
**CLITrigger is built for "delegate and review" — not for staring at a progress bar.**
|
|
81
|
+
|
|
82
|
+
### Scenario 1: The AI night shift — hand off at bedtime, pick up in the morning
|
|
83
|
+
Before bed, dump unfinished work and sudden ideas into the Planner, convert them into TODOs or scheduled runs, then close the laptop. While you sleep, Claude / Gemini / Codex burn through your token quota in parallel worktrees. Next morning, sit down with coffee and review the diffs holistically — accept what makes sense, reject what doesn't, merge what's ready.
|
|
84
|
+
|
|
85
|
+
**Your tokens never sleep. Neither does your codebase.**
|
|
86
|
+
|
|
87
|
+
### Scenario 2: The background worker
|
|
88
|
+
Stay focused on your main work while CLITrigger handles side quests in the background. Refactors, test coverage, doc updates, speculative features — the stuff you never have time for — gets done while you ship the critical path. Browser notifications (or phone alerts via Cloudflare Tunnel) surface completed tasks only when they need your attention.
|
|
89
|
+
|
|
90
|
+
### The Core Loop
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Evening Overnight / Sidelined Morning / Break
|
|
94
|
+
─────────── ─────────────────────── ────────────────────
|
|
95
|
+
Capture → AI executes in parallel → Review holistically
|
|
96
|
+
• Planner • Worktree isolation • Diff by diff
|
|
97
|
+
• TODOs • Rate-limit auto-recovery • Log by log
|
|
98
|
+
• Schedules • Multi-agent discussion • Accept / Reject / Merge
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Every feature — Planner, Scheduler, worktree isolation, rate-limit auto-recovery, multi-agent discussion, the built-in Git client — exists to support this loop: **capture → delegate → review**.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
74
105
|
## Features
|
|
75
106
|
|
|
76
107
|
### Parallel Worktree Execution
|
|
77
108
|
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.
|
|
78
109
|
|
|
110
|
+
### Morning Review Queue
|
|
111
|
+
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, `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.
|
|
112
|
+
|
|
79
113
|
### Multi-Agent Discussion
|
|
80
114
|
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.
|
|
81
115
|
|
|
@@ -93,7 +127,7 @@ Schedule tasks for off-peak hours to avoid rate limits. Supports recurring cron
|
|
|
93
127
|
</div>
|
|
94
128
|
|
|
95
129
|
### Planner
|
|
96
|
-
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.
|
|
130
|
+
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.
|
|
97
131
|
|
|
98
132
|
<div align="center">
|
|
99
133
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — Lightweight task management" width="800">
|
|
@@ -109,7 +143,7 @@ Per-project cost and execution stats powered by Recharts — stacked bar chart b
|
|
|
109
143
|
</div>
|
|
110
144
|
|
|
111
145
|
### Built-in Git Client
|
|
112
|
-
A full Git client lives inside the web UI — commit graph, action toolbar,
|
|
146
|
+
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.
|
|
113
147
|
|
|
114
148
|
<div align="center">
|
|
115
149
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — Built-in client" width="800">
|
package/README_KR.md
CHANGED
|
@@ -28,9 +28,13 @@
|
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-
>
|
|
32
|
-
>
|
|
33
|
-
>
|
|
31
|
+
> ### 자는 동안, 당신의 AI는 일합니다.
|
|
32
|
+
>
|
|
33
|
+
> AI가 코드를 짜는 시대, 개발자의 역할이 바뀌고 있다. 하지만 **이해 없는 바이브 코딩**은 결국 한계에 부딪힌다.
|
|
34
|
+
>
|
|
35
|
+
> CLITrigger는 자기 전 큐잉한 작업을 밤새 여러 AI 코딩 에이전트(**Claude Code · Codex · Gemini CLI**)가 각자의 git worktree에서 병렬로 처리하고 — 다음 날 아침 당신은 쌓인 diff를 보고 **accept / reject**만 하면 된다.
|
|
36
|
+
>
|
|
37
|
+
> **AI를 병렬로 돌리되, 개발자는 맥락을 잃지 않는다.**
|
|
34
38
|
|
|
35
39
|
<div align="center">
|
|
36
40
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — 병렬 워크트리 실행" width="800">
|
|
@@ -71,11 +75,41 @@ CLITrigger는 이 두 문제를 동시에 해결한다:
|
|
|
71
75
|
|
|
72
76
|
---
|
|
73
77
|
|
|
78
|
+
## 사용 흐름 — 맡겨두고, 나중에 리뷰
|
|
79
|
+
|
|
80
|
+
**CLITrigger는 "위임하고 리뷰"를 위해 설계되었다 — 진행 바를 쳐다보며 기다리는 도구가 아니다.**
|
|
81
|
+
|
|
82
|
+
### 시나리오 1: AI 야간 근무 — 저녁에 맡기고, 아침에 받기
|
|
83
|
+
자기 전에 못다 한 업무나 문득 떠오른 아이디어를 Planner에 던져 넣고, TODO나 예약 실행으로 변환한 뒤 노트북을 닫는다. 당신이 자는 동안 Claude / Gemini / Codex가 병렬 워크트리에서 토큰 한도를 끝까지 써가며 일한다. 다음날 아침 커피 한 잔 들고 책상에 앉아 결과물을 통합적으로 살펴본다 — 마음에 드는 건 accept, 아닌 건 reject, 준비된 건 머지.
|
|
84
|
+
|
|
85
|
+
**당신의 토큰은 잠들지 않는다. 당신의 코드베이스도.**
|
|
86
|
+
|
|
87
|
+
### 시나리오 2: 백그라운드 워커
|
|
88
|
+
메인 작업에 집중하는 동안 CLITrigger가 옆에서 서브 퀘스트를 처리한다. 리팩토링, 테스트 커버리지, 문서 업데이트, 해보고 싶었던 실험적 기능 — 평소 시간이 없어 미뤄둔 일들이 당신이 중요한 경로를 밀고 나가는 동안 끝나 있다. Cloudflare Tunnel + 브라우저 알림으로 작업이 완료되면 알림이 올라오니, 필요한 순간에만 주의를 돌리면 된다.
|
|
89
|
+
|
|
90
|
+
### 핵심 루프
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
저녁 밤새 / 딴 일 하는 동안 아침 / 쉬는 시간
|
|
94
|
+
───────── ──────────────────────── ─────────────────────
|
|
95
|
+
캡처 → AI가 병렬로 실행 → 통합 리뷰
|
|
96
|
+
• Planner • 워크트리 격리 • Diff 하나하나
|
|
97
|
+
• TODO • 한도 초과 자동 복구 • 로그 하나하나
|
|
98
|
+
• 예약 • 다중 AI 토론 • Accept / Reject / Merge
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
CLITrigger의 모든 기능 — Planner, Scheduler, 워크트리 격리, 한도 초과 자동 복구, 다중 AI 토론, 내장 Git 클라이언트 — 이 루프를 지원하려고 존재한다: **캡처 → 위임 → 리뷰**.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
74
105
|
## 주요 기능
|
|
75
106
|
|
|
76
107
|
### 병렬 Worktree 실행
|
|
77
108
|
TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된다. Claude / Gemini / Codex CLI가 동시에 병렬로 실행되며, 의존성 체인을 설정하면 선행 작업 완료 후 자동으로 후속 작업이 실행되고 브랜치 병합까지 처리된다. 프로젝트별 워크트리 토글에 더해 TODO별 3단계 오버라이드(상속 / 강제 워크트리 / 강제 메인)로 세밀한 제어가 가능하고, 메인 브랜치 작업은 자동 직렬화되어 충돌을 막는다. 드래그 앤 드롭으로 순서를 바꾸고, iOS 스타일 스택 모드로 긴 목록도 깔끔하게 관리할 수 있다.
|
|
78
109
|
|
|
110
|
+
### Morning Review Queue (아침 리뷰 큐)
|
|
111
|
+
"밤새 위임하고 아침에 리뷰" 루프를 위한 크로스-프로젝트 단일 트리아주 화면. 모든 프로젝트의 최근 TODO를 카드 스택으로 모아 프로젝트 라벨, 마지막 어시스턴트 한 줄 요약, 토큰 합계, diff 통계, 서버 분류 risk 배지(low / medium / high — 상태와 diff 크기 기반)를 한눈에 보여준다. 키보드 전용 조작: `j`/`k`로 이동, `Enter`로 임베드 로그 뷰어 열기, `m` 머지, `d` discard, `Esc`로 닫기 — N개 todo가 O(N) 키 입력으로 끝난다. 시간 윈도우(12h / 24h / 7d), 필터 칩(All / Risky / Quick wins / Failed), CLI별 분해가 표시되는 sticky 토큰 리본까지.
|
|
112
|
+
|
|
79
113
|
### 다중 AI 토론 (Discussion)
|
|
80
114
|
아키텍트, 개발자, 리뷰어 등 역할이 다른 AI 에이전트들이 라운드 방식으로 토론한 뒤, 합의된 내용을 바탕으로 자동 구현까지 이어진다. 단일 AI의 판단보다 훨씬 검증된 설계 결과물이 나온다. **구현자(Implementer, `can_implement`)** 로 표시된 에이전트는 일반 턴에서도 코드를 커밋할 수 있고, 마지막 구현 라운드가 남은 작업을 정리해 마무리한다. 자동 구현(Auto-implement) 옵션을 켜면 토론 완료 즉시 코드 작성 라운드가 자동 실행된다.
|
|
81
115
|
|
|
@@ -93,7 +127,7 @@ TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된
|
|
|
93
127
|
</div>
|
|
94
128
|
|
|
95
129
|
### Planner (플래너)
|
|
96
|
-
TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적고, 이미지를 첨부하고, 색상 태그로 분류하고, 열 단위로 정렬할 수 있다. 플래너 항목을 한 번의 클릭으로 TODO나 예약 스케줄로 변환할 수 있다.
|
|
130
|
+
TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적고, 이미지를 첨부하고, 색상 태그로 분류하고, 열 단위로 정렬할 수 있다. 플래너 항목을 한 번의 클릭으로 TODO나 예약 스케줄로 변환할 수 있다. Markdown Export / Import (status 섹션 + GFM 체크박스 + HTML 주석 메타데이터)로 다른 머신에 옮기거나 GitHub / Obsidian / 어떤 Markdown 뷰어에서도 그대로 열어볼 수 있고, `.md` 파일을 카드에 드래그하면 바로 Import된다.
|
|
97
131
|
|
|
98
132
|
<div align="center">
|
|
99
133
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — 경량 작업 관리" width="800">
|
|
@@ -109,7 +143,7 @@ TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적
|
|
|
109
143
|
</div>
|
|
110
144
|
|
|
111
145
|
### 내장 Git 클라이언트
|
|
112
|
-
웹 UI 안에 풀 Git 클라이언트가 내장되어 있다 — 커밋 그래프, 액션 툴바,
|
|
146
|
+
웹 UI 안에 Fork/SourceTree 스타일 풀 Git 클라이언트가 내장되어 있다 — 워크스페이스 메뉴로 **File Status** 뷰(staged/unstaged 파일 리스트, working tree diff 뷰어, 커밋 메시지 + push 토글, Cmd/Ctrl+Enter 커밋)와 **History** 뷰(커밋 그래프, 액션 툴바, 워크트리 목록, VS Code 스타일 브랜치 컨텍스트 메뉴: 체크아웃 / 머지 / 리베이스 / 페치 / 풀 / 푸시 / 이름 변경 / 삭제, 파일 단위 diff 뷰어가 붙은 커밋 상세 패널)를 전환한다. 모든 분할 영역은 사용자가 직접 비율을 조절할 수 있고, 그 비율은 localStorage에 영속된다. 한글·CJK·이모지 등 비-ASCII 파일명도 diff / status 출력에 제대로 표시된다.
|
|
113
147
|
|
|
114
148
|
<div align="center">
|
|
115
149
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — 내장 클라이언트" width="800">
|
package/bin/clitrigger.js
CHANGED
|
@@ -4,7 +4,6 @@ import fs from 'fs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import os from 'os';
|
|
6
6
|
import { createInterface } from 'readline/promises';
|
|
7
|
-
import { execSync, spawn } from 'child_process';
|
|
8
7
|
|
|
9
8
|
const CONFIG_DIR = path.join(os.homedir(), '.clitrigger');
|
|
10
9
|
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
@@ -16,10 +15,8 @@ if (args[0] === 'config') {
|
|
|
16
15
|
} else if (args[0] === '--help' || args[0] === '-h') {
|
|
17
16
|
printHelp();
|
|
18
17
|
} else {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
await startServer();
|
|
22
|
-
}
|
|
18
|
+
checkForUpdateAsync();
|
|
19
|
+
await startServer();
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
async function startServer() {
|
|
@@ -164,61 +161,31 @@ function isNewerVersion(latest, current) {
|
|
|
164
161
|
return false;
|
|
165
162
|
}
|
|
166
163
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
// npm registry에서 최신 버전 조회 (5초 타임아웃)
|
|
194
|
-
const controller = new AbortController();
|
|
195
|
-
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
196
|
-
const res = await fetch('https://registry.npmjs.org/clitrigger/latest', {
|
|
197
|
-
signal: controller.signal,
|
|
198
|
-
});
|
|
199
|
-
clearTimeout(timeout);
|
|
200
|
-
|
|
201
|
-
if (!res.ok) return false;
|
|
202
|
-
const data = await res.json();
|
|
203
|
-
const latestVersion = data.version;
|
|
204
|
-
|
|
205
|
-
if (!isNewerVersion(latestVersion, currentVersion)) return false;
|
|
206
|
-
|
|
207
|
-
console.log(`\nUpdate available: v${currentVersion} -> v${latestVersion}, updating...`);
|
|
208
|
-
execSync('npm i -g clitrigger@latest', { stdio: 'inherit' });
|
|
209
|
-
console.log(`Updated to v${latestVersion}. Restarting...\n`);
|
|
210
|
-
|
|
211
|
-
// 업데이트된 코드로 재시작
|
|
212
|
-
const child = spawn(process.argv[0], process.argv.slice(1), {
|
|
213
|
-
stdio: 'inherit',
|
|
214
|
-
env: { ...process.env, CLITRIGGER_UPDATED: '1' },
|
|
215
|
-
});
|
|
216
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
217
|
-
return true;
|
|
218
|
-
} catch {
|
|
219
|
-
// 네트워크 오류, 타임아웃 등 — 무시하고 현재 버전으로 계속
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
164
|
+
function checkForUpdateAsync() {
|
|
165
|
+
(async () => {
|
|
166
|
+
try {
|
|
167
|
+
const pkgPath = new URL('../package.json', import.meta.url);
|
|
168
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
169
|
+
const currentVersion = pkg.version;
|
|
170
|
+
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
173
|
+
const res = await fetch('https://registry.npmjs.org/clitrigger/latest', {
|
|
174
|
+
signal: controller.signal,
|
|
175
|
+
});
|
|
176
|
+
clearTimeout(timeout);
|
|
177
|
+
|
|
178
|
+
if (!res.ok) return;
|
|
179
|
+
const data = await res.json();
|
|
180
|
+
const latestVersion = data.version;
|
|
181
|
+
|
|
182
|
+
if (!isNewerVersion(latestVersion, currentVersion)) return;
|
|
183
|
+
|
|
184
|
+
console.log(` Update available: ${latestVersion} → npm i -g clitrigger@latest`);
|
|
185
|
+
} catch {
|
|
186
|
+
// 네트워크 오류·타임아웃 — 조용히 무시
|
|
187
|
+
}
|
|
188
|
+
})();
|
|
222
189
|
}
|
|
223
190
|
|
|
224
191
|
function printHelp() {
|
|
@@ -0,0 +1 @@
|
|
|
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))}*,: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)}::-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%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.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-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}.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}.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}.collapse{visibility:collapse}.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-6{bottom:1.5rem}.left-0{left:0}.left-4{left:1rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-3{top:.75rem}.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-4{margin-top:1rem;margin-bottom:1rem}.-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-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-5{margin-left:1.25rem}.ml-6{margin-left:1.5rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.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-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-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.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-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[600px\]{height:600px}.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-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[60px\]{min-height:60px}.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\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.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-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-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-\[380px\]{width:380px}.w-\[3px\]{width:3px}.w-\[480px\]{width:480px}.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-\[14px\]{min-width:14px}.min-w-\[160px\]{min-width:160px}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[280px\]{min-width:280px}.max-w-4xl{max-width:56rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[280px\]{max-width:280px}.max-w-\[80\%\]{max-width:80%}.max-w-\[90vw\]{max-width:90vw}.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}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.basis-\[calc\(100\%-100px\)\]{flex-basis:calc(100% - 100px)}.-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-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-grab{cursor:grab}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.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))}.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}.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-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))}.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-warm-200{border-color:var(--color-bg-tertiary)!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-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-theme-border{border-color:var(--color-border)}.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-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/80{border-color:#fffc}.border-l-accent{border-left-color:var(--color-accent)}.border-l-amber-500{--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / 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-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-\[\#1A1A1A\]{--tw-bg-opacity: 1;background-color:rgb(26 26 26 / var(--tw-bg-opacity, 1))}.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-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-800{background-color:var(--color-text-primary)}.bg-warm-900{background-color:var(--color-selection-text)}.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-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}.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-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-4{padding-left:1rem}.pr-8{padding-right:2rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.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-\[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}.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-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-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-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-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-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-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-warm-100{color:var(--color-bg-primary)}.text-warm-300{color:var(--color-border-strong)}.text-warm-400{color:var(--color-text-faint)}.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-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))}.line-through{text-decoration-line:line-through}.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-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-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-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-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-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)}.text-2xs{font-size:10px;line-height:1.4}@keyframes toastProgress{0%{width:100%}to{width:0%}}@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}.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\:\!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-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-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-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\: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\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.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\: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-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}.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}.group:focus-within .group-focus-within\:text-accent{color:var(--color-accent)}.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\: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\: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\: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-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\: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))}}
|