auto-coder-web 0.1.25__py3-none-any.whl → 0.1.27__py3-none-any.whl

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.
auto_coder_web/proxy.py CHANGED
@@ -15,317 +15,38 @@ import os
15
15
  import argparse
16
16
  import aiofiles
17
17
  import pkg_resources
18
- import asyncio
19
- import pathlib
20
- import time
21
18
  import sys
22
- from auto_coder_web.file_group import FileGroupManager
23
- from auto_coder_web.file_manager import get_directory_tree
24
19
  from auto_coder_web.auto_coder_runner import AutoCoderRunner
25
- from autocoder.agent.auto_filegroup import AutoFileGroup
26
- from .types import (
27
- ChatList,
20
+ from .types import (
28
21
  FileContentResponse,
29
22
  )
30
-
31
- from rich.console import Console
32
- from prompt_toolkit.shortcuts import radiolist_dialog
33
- from prompt_toolkit.formatted_text import HTML
34
- import subprocess
35
- from prompt_toolkit import prompt
36
- from pydantic import BaseModel
37
- from autocoder.utils.log_capture import LogCapture
38
23
  from .terminal import terminal_manager
39
24
  from autocoder.common import AutoCoderArgs
40
- import json
41
- import re
42
- import yaml
43
- import git
44
- import hashlib
45
- from datetime import datetime
46
- from autocoder.utils import operate_config_api
25
+ from auto_coder_web.auto_coder_runner_wrapper import AutoCoderRunnerWrapper
47
26
  from .routers import todo_router, settings_router, auto_router, commit_router, chat_router, coding_router
48
27
  from expert_routers import history_router
49
28
  from .common_router import completions_router, file_router, auto_coder_conf_router, chat_list_router, file_group_router
50
-
51
-
52
-
53
- def check_environment():
54
- """Check and initialize the required environment"""
55
- console = Console()
56
- console.print("\n[blue]Initializing the environment...[/blue]")
57
-
58
- def check_project():
59
- """Check if the current directory is initialized as an auto-coder project"""
60
- def print_status(message, status):
61
- if status == "success":
62
- console.print(f"✓ {message}", style="green")
63
- elif status == "warning":
64
- console.print(f"! {message}", style="yellow")
65
- elif status == "error":
66
- console.print(f"✗ {message}", style="red")
67
- else:
68
- console.print(f" {message}")
69
-
70
- if not os.path.exists("actions") or not os.path.exists(".auto-coder"):
71
- print_status("Project not initialized", "warning")
72
- init_choice = input(
73
- " Do you want to initialize the project? (y/n): ").strip().lower()
74
- if init_choice == "y":
75
- try:
76
- if not os.path.exists("actions"):
77
- os.makedirs("actions", exist_ok=True)
78
- print_status("Created actions directory", "success")
79
-
80
- if not os.path.exists(".auto-coder"):
81
- os.makedirs(".auto-coder", exist_ok=True)
82
- print_status(
83
- "Created .auto-coder directory", "success")
84
-
85
- subprocess.run(
86
- ["auto-coder", "init", "--source_dir", "."], check=True)
87
- print_status("Project initialized successfully", "success")
88
- except subprocess.CalledProcessError:
89
- print_status("Failed to initialize project", "error")
90
- print_status(
91
- "Please try to initialize manually: auto-coder init --source_dir .", "warning")
92
- return False
93
- else:
94
- print_status("Exiting due to no initialization", "warning")
95
- return False
96
-
97
- print_status("Project initialization check complete", "success")
98
- return True
99
-
100
- if not check_project():
101
- return False
102
-
103
- def print_status(message, status):
104
- if status == "success":
105
- console.print(f"✓ {message}", style="green")
106
- elif status == "warning":
107
- console.print(f"! {message}", style="yellow")
108
- elif status == "error":
109
- console.print(f"✗ {message}", style="red")
110
- else:
111
- console.print(f" {message}")
112
-
113
- # Check if Ray is running
114
- print_status("Checking Ray", "")
115
- ray_status = subprocess.run(
116
- ["ray", "status"], capture_output=True, text=True)
117
- if ray_status.returncode != 0:
118
- print_status("Ray is not running", "warning")
119
- try:
120
- subprocess.run(["ray", "start", "--head"], check=True)
121
- print_status("Ray started successfully", "success")
122
- except subprocess.CalledProcessError:
123
- print_status("Failed to start Ray", "error")
124
- return False
125
-
126
- # Check if deepseek_chat model is available
127
- print_status("Checking deepseek_chat model", "")
128
- try:
129
- result = subprocess.run(
130
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
131
- capture_output=True,
132
- text=True,
133
- timeout=30,
134
- )
135
- if result.returncode == 0:
136
- print_status("deepseek_chat model is available", "success")
137
- print_status("Environment check complete", "success")
138
- return True
139
- except subprocess.TimeoutExpired:
140
- print_status("Model check timeout", "error")
141
- except subprocess.CalledProcessError:
142
- print_status("Model check error", "error")
143
- except Exception as e:
144
- print_status(f"Unexpected error: {str(e)}", "error")
145
-
146
- print_status("deepseek_chat model is not available", "warning")
147
-
148
- # If deepseek_chat is not available, prompt user to choose a provider
149
- choice = radiolist_dialog(
150
- title="Select Provider",
151
- text="Please select a provider for deepseek_chat model:",
152
- values=[
153
- ("1", "硅基流动(https://siliconflow.cn)"),
154
- ("2", "Deepseek官方(https://www.deepseek.com/)"),
155
- ],
156
- ).run()
157
-
158
- if choice is None:
159
- print_status("No provider selected", "error")
160
- return False
161
-
162
- api_key = prompt(HTML("<b>Please enter your API key: </b>"))
163
-
164
- if choice == "1":
165
- print_status("Deploying model with 硅基流动", "")
166
- deploy_cmd = [
167
- "easy-byzerllm",
168
- "deploy",
169
- "deepseek-ai/deepseek-v2-chat",
170
- "--token",
171
- api_key,
172
- "--alias",
173
- "deepseek_chat",
174
- ]
175
- else:
176
- print_status("Deploying model with Deepseek官方", "")
177
- deploy_cmd = [
178
- "byzerllm",
179
- "deploy",
180
- "--pretrained_model_type",
181
- "saas/openai",
182
- "--cpus_per_worker",
183
- "0.001",
184
- "--gpus_per_worker",
185
- "0",
186
- "--worker_concurrency",
187
- "1000",
188
- "--num_workers",
189
- "1",
190
- "--infer_params",
191
- f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-chat",
192
- "--model",
193
- "deepseek_chat",
194
- ]
195
-
196
- try:
197
- subprocess.run(deploy_cmd, check=True)
198
- print_status("Model deployed successfully", "success")
199
- except subprocess.CalledProcessError:
200
- print_status("Failed to deploy model", "error")
201
- return False
202
-
203
- # Validate the deployment
204
- print_status("Validating model deployment", "")
205
- try:
206
- validation_result = subprocess.run(
207
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
208
- capture_output=True,
209
- text=True,
210
- timeout=30,
211
- check=True,
212
- )
213
- print_status("Model validation successful", "success")
214
- except (subprocess.TimeoutExpired, subprocess.CalledProcessError):
215
- print_status("Model validation failed", "error")
216
- print_status(
217
- "You may need to try manually: easy-byzerllm chat deepseek_chat 你好", "warning")
218
- return False
219
-
220
- print_status("Environment initialization complete", "success")
221
- return True
222
-
223
-
224
- def check_environment_lite():
225
- """Check and initialize the required environment for lite mode"""
226
- console = Console()
227
- console.print("\n[blue]Initializing the environment (Lite Mode)...[/blue]")
228
-
229
- def check_project():
230
- """Check if the current directory is initialized as an auto-coder project"""
231
- def print_status(message, status):
232
- if status == "success":
233
- console.print(f"✓ {message}", style="green")
234
- elif status == "warning":
235
- console.print(f"! {message}", style="yellow")
236
- elif status == "error":
237
- console.print(f"✗ {message}", style="red")
238
- else:
239
- console.print(f" {message}")
240
-
241
- first_time = False
242
- if not os.path.exists("actions") or not os.path.exists(".auto-coder"):
243
- first_time = True
244
- print_status("Project not initialized", "warning")
245
- init_choice = input(
246
- " Do you want to initialize the project? (y/n): ").strip().lower()
247
- if init_choice == "y":
248
- try:
249
- if not os.path.exists("actions"):
250
- os.makedirs("actions", exist_ok=True)
251
- print_status("Created actions directory", "success")
252
-
253
- if not os.path.exists(".auto-coder"):
254
- os.makedirs(".auto-coder", exist_ok=True)
255
- print_status(
256
- "Created .auto-coder directory", "success")
257
-
258
- subprocess.run(
259
- ["auto-coder", "init", "--source_dir", "."], check=True)
260
- print_status("Project initialized successfully", "success")
261
- except subprocess.CalledProcessError:
262
- print_status("Failed to initialize project", "error")
263
- print_status(
264
- "Please try to initialize manually: auto-coder init --source_dir .", "warning")
265
- return False
266
- else:
267
- print_status("Exiting due to no initialization", "warning")
268
- return False
269
-
270
- print_status("Project initialization check complete", "success")
271
- return True
272
-
273
- if not check_project():
274
- return False
275
-
276
- def print_status(message, status):
277
- if status == "success":
278
- console.print(f"✓ {message}", style="green")
279
- elif status == "warning":
280
- console.print(f"! {message}", style="yellow")
281
- elif status == "error":
282
- console.print(f"✗ {message}", style="red")
283
- else:
284
- console.print(f" {message}")
285
-
286
- # Setup deepseek api key
287
- api_key_dir = os.path.expanduser("~/.auto-coder/keys")
288
- api_key_file = os.path.join(api_key_dir, "api.deepseek.com")
289
-
290
- if not os.path.exists(api_key_file):
291
- print_status("API key not found", "warning")
292
- api_key = prompt(HTML("<b>Please enter your API key: </b>"))
293
-
294
- # Create directory if it doesn't exist
295
- os.makedirs(api_key_dir, exist_ok=True)
296
-
297
- # Save the API key
298
- with open(api_key_file, "w") as f:
299
- f.write(api_key)
300
-
301
- print_status(f"API key saved successfully: {api_key_file}", "success")
302
-
303
- print_status("Environment initialization complete", "success")
304
- return True
305
-
29
+ from rich.console import Console
30
+ from loguru import logger
31
+ from auto_coder_web.lang import get_message
306
32
 
307
33
  class ProxyServer:
308
34
  def __init__(self, project_path: str, quick: bool = False, product_mode: str = "pro"):
309
- self.app = FastAPI()
310
-
311
- if not quick:
312
- # Check the environment based on product mode
313
- if product_mode == "lite":
314
- if not check_environment_lite():
315
- print(
316
- "\033[31mEnvironment check failed. Some features may not work properly.\033[0m")
317
- else:
318
- if not check_environment():
319
- print(
320
- "\033[31mEnvironment check failed. Some features may not work properly.\033[0m")
321
-
35
+ self.app = FastAPI()
322
36
  self.setup_middleware()
323
37
 
324
38
  self.setup_static_files()
325
39
  self.project_path = project_path
326
40
 
327
- self.auto_coder_runner = AutoCoderRunner(project_path, product_mode=product_mode)
328
- self.file_group_manager = FileGroupManager(self.auto_coder_runner)
41
+ # Check if project is initialized
42
+ self.is_initialized = self.check_project_initialization()
43
+ if not self.is_initialized:
44
+ logger.warning(get_message("project_not_initialized"))
45
+ logger.warning(get_message("run_auto_coder_chat"))
46
+ sys.exit(1)
47
+
48
+ self.auto_coder_runner = AutoCoderRunnerWrapper(project_path, product_mode=product_mode)
49
+
329
50
 
330
51
  self.setup_routes()
331
52
  self.client = httpx.AsyncClient()
@@ -353,6 +74,13 @@ class ProxyServer:
353
74
 
354
75
  def setup_routes(self):
355
76
 
77
+ # Store project_path in app state for dependency injection
78
+ self.app.state.project_path = self.project_path
79
+ # Store auto_coder_runner in app state for dependency injection
80
+ self.app.state.auto_coder_runner = self.auto_coder_runner
81
+ # Store initialization status
82
+ self.app.state.is_initialized = self.is_initialized
83
+
356
84
  self.app.include_router(todo_router.router)
357
85
  self.app.include_router(settings_router.router)
358
86
  self.app.include_router(auto_router.router)
@@ -364,14 +92,7 @@ class ProxyServer:
364
92
  self.app.include_router(file_router.router)
365
93
  self.app.include_router(auto_coder_conf_router.router)
366
94
  self.app.include_router(chat_list_router.router)
367
- self.app.include_router(file_group_router.router)
368
-
369
- # Store project_path in app state for dependency injection
370
- self.app.state.project_path = self.project_path
371
- # Store auto_coder_runner in app state for dependency injection
372
- self.app.state.auto_coder_runner = self.auto_coder_runner
373
- # Store file_group_manager in app state for dependency injection
374
- self.app.state.file_group_manager = self.file_group_manager
95
+ self.app.include_router(file_group_router.router)
375
96
 
376
97
  @self.app.on_event("shutdown")
377
98
  async def shutdown_event():
@@ -387,8 +108,21 @@ class ProxyServer:
387
108
  if os.path.exists(self.index_html_path):
388
109
  async with aiofiles.open(self.index_html_path, "r") as f:
389
110
  content = await f.read()
111
+
112
+ # If project is not initialized, inject a warning banner
113
+ if not self.is_initialized:
114
+ init_warning = f"""
115
+ <div style="background-color: #fff3cd; color: #856404; padding: 15px; margin: 15px; border-radius: 5px; text-align: center; font-weight: bold;">
116
+ <p>⚠️ {get_message("project_not_initialized")}</p>
117
+ <p>{get_message("run_auto_coder_chat")}</p>
118
+ </div>
119
+ """
120
+ # Insert the warning after the body tag
121
+ content = content.replace("<body>", "<body>" + init_warning)
122
+
390
123
  return HTMLResponse(content=content)
391
124
  return HTMLResponse(content="<h1>Welcome to Proxy Server</h1>")
125
+
392
126
 
393
127
  @self.app.get("/api/project-path")
394
128
  async def get_project_path():
@@ -486,7 +220,26 @@ class ProxyServer:
486
220
  success=False,
487
221
  message=f"读取文件出错: {str(e)}"
488
222
  )
223
+
224
+ @self.app.get("/api/initialization-status")
225
+ async def get_initialization_status():
226
+ """Get the project initialization status"""
227
+ return {
228
+ "initialized": self.is_initialized,
229
+ "message": None if self.is_initialized else get_message("run_auto_coder_chat")
230
+ }
231
+
232
+ def check_project_initialization(self) -> bool:
233
+ """Check if the project has been initialized with auto-coder.chat"""
234
+ auto_coder_dir = os.path.join(self.project_path, ".auto-coder")
235
+ actions_dir = os.path.join(self.project_path, "actions")
236
+ return os.path.exists(auto_coder_dir) and os.path.exists(actions_dir)
489
237
 
238
+ def check_project_conf(self):
239
+ conf = self.auto_coder_runner.get_conf_wrapper()
240
+ if conf.get("human_as_model","false") in ["true","True","TRUE"]:
241
+ logger.warning(get_message("human_as_model_warning"))
242
+ self.auto_coder_runner.configure_wrapper("human_as_model=false")
490
243
 
491
244
 
492
245
  def main():
auto_coder_web/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.25"
1
+ __version__ = "0.1.27"
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "/static/css/main.95277c5f.css",
4
- "main.js": "/static/js/main.66c37ccf.js",
3
+ "main.css": "/static/css/main.8a602674.css",
4
+ "main.js": "/static/js/main.c14e8b91.js",
5
5
  "static/js/453.d855a71b.chunk.js": "/static/js/453.d855a71b.chunk.js",
6
6
  "index.html": "/index.html",
7
- "main.95277c5f.css.map": "/static/css/main.95277c5f.css.map",
8
- "main.66c37ccf.js.map": "/static/js/main.66c37ccf.js.map",
7
+ "main.8a602674.css.map": "/static/css/main.8a602674.css.map",
8
+ "main.c14e8b91.js.map": "/static/js/main.c14e8b91.js.map",
9
9
  "453.d855a71b.chunk.js.map": "/static/js/453.d855a71b.chunk.js.map"
10
10
  },
11
11
  "entrypoints": [
12
- "static/css/main.95277c5f.css",
13
- "static/js/main.66c37ccf.js"
12
+ "static/css/main.8a602674.css",
13
+ "static/js/main.c14e8b91.js"
14
14
  ]
15
15
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.66c37ccf.js"></script><link href="/static/css/main.95277c5f.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.c14e8b91.js"></script><link href="/static/css/main.8a602674.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -0,0 +1,6 @@
1
+ /*
2
+ ! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com
3
+ */body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:1.5}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@keyframes slideIn{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.animate-fade-in{animation:fadeIn .3s ease-out forwards}.animate-slide-in{animation:slideIn .3s ease-out forwards}.animate-pulse{animation:pulse 2s infinite}.transition-all{transition-duration:.3s}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:#c1c1c1}::-webkit-scrollbar-thumb:hover{background:#a1a1a1}.diff-viewer-tabs .ant-tabs-nav{margin-bottom:0!important}.diff-viewer-tabs .ant-tabs-tab{background-color:#1a2234!important;border:1px solid #374151!important;border-bottom:none!important;border-radius:6px 6px 0 0!important;margin-right:2px!important;padding:0!important;transition:all .3s}.diff-viewer-tabs .ant-tabs-tab-active{background-color:#2d3748!important;border-color:#4b5563!important}.diff-viewer-tabs .ant-tabs-content-holder{background-color:#111827;border-top:1px solid #374151}.diff-viewer-tabs .ant-tabs-content{background-color:#111827;height:100%}.custom-tabs-bar{margin:0!important;padding:0!important}.bg-\[#1F2937\]::-webkit-scrollbar-track,.bg-\[\#111827\]::-webkit-scrollbar-track{background:#1f2937}.bg-\[#1F2937\]::-webkit-scrollbar-thumb,.bg-\[\#111827\]::-webkit-scrollbar-thumb{background:#4b5563}.bg-\[#1F2937\]::-webkit-scrollbar-thumb:hover,.bg-\[\#111827\]::-webkit-scrollbar-thumb:hover{background:#6b7280}.message-font{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:14px}.message-title{align-items:center;display:flex;margin-bottom:.5rem}.message-title-icon{height:1rem;margin-right:.5rem;width:1rem}.message-title-text{font-weight:600}.message-toggle-button{border-radius:.25rem;margin-right:.5rem;padding:.125rem;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.message-toggle-button:hover{background-color:#374151}.message-toggle-icon{height:.75rem;width:.75rem}.message-content-container{background-color:#1f293780;border:1px solid #374151;border-radius:.375rem;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;margin-top:.5rem;overflow:hidden}.custom-modal .ant-modal-content{background-color:#1f2937;border:1px solid #4b5563;box-shadow:0 4px 12px #00000080;color:#fff}.custom-modal .ant-modal-header{background-color:#1f2937;border-bottom:1px solid #4b5563;padding:16px 24px}.custom-modal .ant-modal-title{color:#fff}.custom-modal .ant-modal-close{color:#9ca3af}.custom-modal .ant-modal-close:hover{color:#e5e7eb}.custom-modal .ant-modal-footer{background-color:#1f2937;border-top:1px solid #4b5563;padding:12px 24px}.custom-modal .ant-modal-footer .ant-btn-default{background-color:initial;border-color:#4b5563;color:#e5e7eb}.custom-modal .ant-modal-footer .ant-btn-default:hover{background-color:#374151;border-color:#6b7280}.custom-modal .ant-modal-footer .ant-btn-primary:not(:disabled){background-color:#8b5cf6;border-color:#8b5cf6}.custom-modal .ant-modal-footer .ant-btn-primary:not(:disabled):hover{background-color:#7c3aed;border-color:#7c3aed}.file-tree-container{background-color:#1e1e1e;border-right:1px solid #333;display:flex;flex-direction:column;font-size:.9rem;height:100%}.file-tree-header{align-items:center;background-color:#252525;border-bottom:1px solid #333;display:flex;justify-content:space-between;padding:8px 12px}.file-tree-header-title{color:#e0e0e0;font-size:.95rem;font-weight:500;-webkit-user-select:none;user-select:none}.file-tree-actions{display:flex;gap:8px}.action-button{align-items:center;background:#0000;border:none;border-radius:4px;color:#aaa;cursor:pointer;display:flex;justify-content:center;padding:4px;transition:all .2s ease}.action-button:hover{background-color:#ffffff1a;color:#fff}.file-tree-search{background-color:#252525;border-bottom:1px solid #333;padding:8px 12px}.file-tree-content{flex:1 1;overflow-y:auto;padding:4px 0}.custom-input{background-color:#2c2c2c!important;border-color:#444!important;border-radius:4px!important;color:#ddd!important;transition:all .3s ease!important}.custom-input:focus-within,.custom-input:hover{border-color:#1890ff!important}.custom-input input{color:#ddd!important}.custom-input .ant-input-prefix{color:#999!important}.file-tree-container .ant-tree{background-color:initial!important}.file-tree-container .ant-tree-node-content-wrapper{border-radius:2px;padding:2px 4px;transition:all .2s ease}.file-tree-container .ant-tree-node-content-wrapper:hover{background-color:#ffffff1a!important}.file-tree-container .ant-tree-node-selected{background-color:#1890ff33!important}.file-tree-container .ant-tree-switcher{color:#aaa}.file-tree-container .ant-tree-title{color:#e0e0e0;font-size:.9rem}.file-node{gap:6px}.file-icon,.file-node{align-items:center;display:flex}.file-icon{font-size:1rem;height:16px;justify-content:center;width:16px}.file-icon.folder{color:#e8c37b}.file-icon.file{color:#9cdcfe}.file-icon.file-js,.file-icon.file-jsx,.file-icon.file-ts,.file-icon.file-tsx{color:#4fc1ff}.file-icon.file-css,.file-icon.file-less,.file-icon.file-scss{color:#ce9178}.file-icon.file-json{color:#fad67d}.file-icon.file-md{color:#c586c0}.file-icon.file-html{color:#e06c75}.file-icon.file-py{color:#4ec9b0}.empty-state{align-items:center;color:#777;display:flex;flex-direction:column;height:100%;justify-content:center;padding:20px;text-align:center}.empty-state-icon{font-size:2rem;margin-bottom:12px;opacity:.6}.empty-state-text{font-size:.9rem}.path-breadcrumb{color:#888;font-size:.8rem;margin-top:2px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor-container{background-color:#1e1e1e;height:100%;width:100%}.code-editor-container{background-color:#1e1e1e;display:flex;flex-direction:column;height:100%}.code-editor-header{background-color:#252526;border-bottom:1px solid #333;padding:8px 12px}.code-editor-header-content{align-items:center;display:flex;justify-content:space-between}.file-info{align-items:center;display:flex;gap:8px}.file-path{color:#ddd;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.save-button{align-items:center;background-color:#0e639c;border:none;border-radius:4px;color:#fff;cursor:pointer;display:flex;font-size:14px;gap:6px;padding:6px 12px;transition:background-color .2s}.save-button:hover{background-color:#17b}.save-button:disabled{cursor:not-allowed;opacity:.5}.code-editor-content{display:flex;flex:1 1;overflow:hidden}.file-tree-panel{height:100%;overflow:hidden;width:250px}.editor-panel{flex:1 1;height:100%}.file-directory-selector{background-color:#111827;border-right:1px solid #4b556380;display:flex;flex-direction:column;height:100%;transition:all .2s ease}.search-container{border-bottom:1px solid #4b55634d;padding:12px}.search-header{align-items:center;display:flex;gap:8px;margin-bottom:8px}.view-mode-toggle{flex-shrink:0}.view-mode-toggle .ant-radio-button-wrapper{background-color:#1f2937cc!important;border-color:#4b556380!important;color:#e5e7eb!important}.view-mode-toggle .ant-radio-button-wrapper-checked{background-color:#3b82f6!important;border-color:#3b82f6!important;color:#fff!important}.directory-breadcrumb{border-bottom:1px solid #4b556333;color:#9ca3af;flex-wrap:wrap;font-size:12px;margin-bottom:8px;padding:4px 0}.breadcrumb-item,.directory-breadcrumb{align-items:center;display:flex;gap:4px}.breadcrumb-item .ant-btn{color:#d1d5db;font-size:12px;height:auto;min-height:24px;padding:0 4px}.breadcrumb-item .ant-btn:hover{background-color:#3b82f61a;color:#3b82f6}.search-input.ant-input-affix-wrapper{background-color:#1f2937cc!important;border:1px solid #4b556380!important;border-radius:6px!important;box-shadow:0 1px 2px #0000001a;flex:1 1;transition:all .2s ease}.filter-icon{color:#9ca3af;cursor:pointer;transition:color .2s}.filter-icon:hover{color:#d1d5db}.search-input.ant-input-affix-wrapper:focus,.search-input.ant-input-affix-wrapper:hover{border-color:#3b82f6!important;box-shadow:0 0 0 2px #3b82f61a}.search-input .ant-input{background-color:initial!important;color:#e5e7eb!important}.search-input .ant-input::placeholder{color:#9ca3afcc!important}.action-buttons{display:flex;gap:8px;margin-top:10px}.add-button.ant-btn{background-color:#2563eb!important;border-color:#1d4ed8!important;border-radius:6px;box-shadow:0 1px 2px #0000001a;height:32px;padding:4px 12px;transition:all .2s ease}.add-button.ant-btn:hover:not(:disabled){background-color:#1d4ed8!important;box-shadow:0 2px 4px #00000026;transform:translateY(-1px)}.add-button.ant-btn:disabled{background-color:#2563eb80!important;border-color:#1d4ed880!important;color:#e5e7eb80!important}.select-all-button.ant-btn{background-color:#1f2937cc!important;border-color:#4b556380!important;border-radius:6px;color:#e5e7eb!important;height:32px;padding:4px 12px;transition:all .2s ease}.select-all-button.ant-btn:hover{background-color:#374151cc!important;border-color:#6b728080!important}.file-tree-container{flex:1 1;margin-top:4px;overflow:auto;padding:8px;scrollbar-color:#4b5563 #1f2937;scrollbar-width:thin}.file-tree-container::-webkit-scrollbar{width:6px}.file-tree-container::-webkit-scrollbar-track{background:#1f293780;border-radius:6px}.file-tree-container::-webkit-scrollbar-thumb{background-color:#4b5563b3;border:1px solid #1f293780;border-radius:6px}.file-tree-container::-webkit-scrollbar-thumb:hover{background-color:#6b7280b3}.custom-dark-tree.ant-tree{background-color:initial!important;color:#e5e7eb!important;font-size:13px!important}.custom-dark-tree .ant-tree-treenode{padding:2px 0!important;transition:all .15s ease}.custom-dark-tree .ant-tree-node-content-wrapper{border-radius:4px!important;color:#e5e7eb!important;padding:2px 4px!important;transition:all .15s ease}.custom-dark-tree .ant-tree-node-content-wrapper:hover{background-color:#374151b3!important}.custom-dark-tree .ant-tree-node-selected{background-color:#1e40af99!important}.custom-dark-tree .ant-tree-checkbox-inner{background-color:#37415180!important;border-color:#4b5563b3!important;transition:all .15s ease}.custom-dark-tree .ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#2563eb!important;border-color:#2563eb!important}.custom-dark-tree .ant-tree-switcher{color:#9ca3afcc!important;transition:all .15s ease}.custom-dark-tree .ant-tree-switcher:hover{color:#d1d5dbe6!important}.custom-dark-tree .ant-tree-title{color:#e5e7eb!important;max-width:100%;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease;white-space:nowrap}.file-context-menu{background-color:#1f2937!important;border:1px solid #4b556399!important;border-radius:6px!important;box-shadow:0 4px 12px #0000004d!important;min-width:160px!important;padding:6px 0!important}.file-context-menu .ant-menu-item{color:#e5e7eb!important;font-size:13px!important;padding:6px 12px!important;transition:all .15s ease!important}.file-context-menu .ant-menu-item:hover{background-color:#3b82f626!important;color:#60a5fa!important}.file-context-menu .ant-menu-item-disabled{color:#e5e7eb66!important}.file-context-menu .ant-menu-item .anticon{margin-right:8px!important}.context-menu-wrapper{z-index:1050}.custom-dark-tree .file-icon{font-size:14px;margin-right:6px;opacity:.8}.custom-dark-tree .folder-icon{color:#d97706!important}.file-node-title{align-items:center;display:flex;width:100%}.file-name{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-highlight{background-color:#eab3084d;border-radius:2px;font-weight:700;padding:0 2px}.file-list-view{width:100%}.file-list-item{background-color:initial!important;border:none!important;border-radius:4px!important;cursor:pointer;margin-bottom:2px!important;padding:4px 8px!important;transition:all .15s ease}.file-list-item:hover{background-color:#37415180!important}.file-list-item.selected{background-color:#1e40af80!important}.file-list-icon{background-color:initial!important}.file-list-title{font-size:13px!important}.file-list-item .ant-checkbox-wrapper,.file-list-title{color:#e5e7eb!important}.file-type-filter-menu{background-color:#1f2937!important;border:1px solid #4b556399!important;border-radius:6px!important;box-shadow:0 4px 12px #0000004d!important;max-height:300px;overflow-y:auto;padding:6px 0!important}.file-type-filter-menu .ant-menu-item-group-title{color:#60a5fa!important;font-size:12px!important;padding:6px 12px!important}.file-type-filter-menu .ant-menu-item{padding:6px 12px!important}.file-type-filter-menu .ant-checkbox-wrapper{color:#e5e7eb!important;font-size:13px!important}.file-type-filter-menu .ant-checkbox-inner{background-color:#1f2937cc!important;border-color:#4b556399!important}.file-type-filter-menu .ant-checkbox-checked .ant-checkbox-inner{background-color:#3b82f6!important;border-color:#3b82f6!important}.dark-mode-table .ant-table{color:#e5e7eb!important}.dark-mode-table .ant-table-thead>tr>th{background-color:#1f2937!important;border-bottom:1px solid #374151!important;color:#e5e7eb!important}.dark-mode-table .ant-table-tbody>tr>td{border-bottom:1px solid #374151!important;transition:background .2s}.dark-mode-table .ant-table-tbody>tr:hover>td{background-color:#374151!important}.dark-mode-table .ant-table-tbody>tr.ant-table-row-selected>td{background-color:#1e40af!important}.dark-mode-table .ant-empty-description{color:#9ca3af!important}.dark-mode-table .ant-table-placeholder{background-color:#111827!important;border-bottom:1px solid #374151!important}.dark-mode-table .ant-empty{color:#9ca3af!important}.dark-mode-table .ant-empty-img-simple-g{stroke:#4b5563!important}.dark-mode-table .ant-empty-img-simple-path{fill:#1f2937!important}.dark-mode-table .ant-empty-img-simple-ellipse{fill:#374151!important}.ant-empty-img-default-path{fill:#1f2937!important}.ant-empty-img-default-g{stroke:#4b5563!important}.ant-empty-img-default-ellipse{fill:#374151!important}.custom-empty-container{background-color:#111827!important;border-radius:8px;padding:24px}.dark-theme-modal .ant-modal-content{background-color:#1f2937!important;box-shadow:0 8px 30px #00000080!important}.dark-theme-modal .ant-modal-header{background-color:#1f2937!important;border-bottom:1px solid #374151!important}.dark-theme-modal .ant-modal-footer{border-top:1px solid #374151!important}.dark-theme-modal .ant-btn-default{background-color:#374151!important;border-color:#4b5563!important;color:#e5e7eb!important}.dark-theme-modal .ant-btn-default:hover{background-color:#4b5563!important;border-color:#6b7280!important}.dark-theme-modal .ant-btn-primary{background-color:#2563eb!important;border-color:#1d4ed8!important}.dark-theme-modal .ant-btn-primary:hover{background-color:#1d4ed8!important;border-color:#1e40af!important}div{scrollbar-color:#4b5563 #1f2937;scrollbar-width:thin}div::-webkit-scrollbar{height:8px;width:8px}div::-webkit-scrollbar-track{background:#1f2937}div::-webkit-scrollbar-thumb{background-color:#4b5563;border:2px solid #1f2937;border-radius:4px}div::-webkit-scrollbar-corner{background-color:#1f2937}.ant-input,.ant-input-affix-wrapper,.ant-input-number,.ant-select-dropdown,.ant-select-selector{background-color:#1f2937!important;border-color:#374151!important;color:#e5e7eb!important}.ant-input-affix-wrapper:hover,.ant-input-number:hover,.ant-input:hover,.ant-select-selector:hover{border-color:#4b5563!important}.ant-input-affix-wrapper-focused,.ant-input-number-focused,.ant-input:focus,.ant-select-focused .ant-select-selector{border-color:#3b82f6!important;box-shadow:0 0 0 2px #3b82f633!important}.ant-input-affix-wrapper .ant-input{background-color:initial!important;border:none!important}.ant-checkbox-inner{background-color:#374151!important;border-color:#4b5563!important}.ant-checkbox-checked .ant-checkbox-inner{background-color:#2563eb!important;border-color:#2563eb!important}.custom-empty-state .ant-empty-image{filter:invert(20%) sepia(10%) saturate(200%) hue-rotate(180deg) brightness(95%) contrast(80%);opacity:.6}.custom-empty-state .ant-empty-description{color:#9ca3af!important}.empty-files-container{align-items:center;background-color:#111827;border-radius:8px;color:#9ca3af;display:flex;height:100%;justify-content:center;padding:24px}.dark-mode-table .ant-table-cell,.dark-mode-table .ant-table-container,.dark-mode-table .ant-table-content{background-color:initial!important}.ant-empty-normal .ant-empty-image{height:60px}.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{border:0;height:0;left:-9999em;margin:0;opacity:0;overflow:hidden;padding:0;position:absolute;resize:none;top:0;white-space:nowrap;width:0;z-index:-5}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;bottom:0;cursor:default;left:0;overflow-y:scroll;position:absolute;right:0;top:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{left:0;position:absolute;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;left:-9999em;line-height:normal;position:absolute;top:0;visibility:hidden}.xterm.enable-mouse-events{cursor:default}.xterm .xterm-cursor-pointer,.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{bottom:0;color:#0000;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:10}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{height:1px;left:-9999px;overflow:hidden;position:absolute;width:1px}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{position:absolute;z-index:6}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{pointer-events:none;position:absolute;right:0;top:0;z-index:8}.xterm-decoration-top{position:relative;z-index:2}.split-container{display:flex;height:100%;width:100%}.gutter{position:relative}.gutter.gutter-horizontal{cursor:col-resize}.gutter:after{background-color:#9ca3af;border-radius:2px;content:"";height:20px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:4px}.gutter:hover:after{background-color:#f3f4f6}.split-container>div{height:100%;min-width:0;overflow:hidden}.task-status-card{background-color:#2d2d2d;border:1px solid #374151;box-shadow:0 2px 8px #00000026;margin-bottom:16px;width:100%}.task-status-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.task-status-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:40px 0}.task-status-footer{display:flex;justify-content:flex-end;padding-top:8px}.todo-container{background-color:initial}.todo-column{background-color:#1a1a1a;border:1px solid #2d2d2d;min-height:200px;overflow:hidden;position:relative;transition:all .2s ease;transition:all .3s ease-in-out}.todo-column:hover{border-color:#3d3d3d}.todo-column.is-dragging-over{background:#3b82f61a;border-color:#3b82f6;transition:background .2s ease}.todo-card{background-color:#2d2d2d;border:1px solid #374151;cursor:move;transition:all .2s ease;-webkit-user-select:none;user-select:none}.todo-card:hover{background-color:#374151;box-shadow:0 2px 4px #0000001a;transform:translateY(-1px)}.todo-card.is-dragging{border-color:#3b82f6;box-shadow:0 4px 8px #3b82f633;opacity:.8;transform:scale(1.02)}.todo-title{color:#e5e7eb;font-size:14px;line-height:1.4}.todo-due-date{color:#9ca3af;font-size:12px;margin-top:4px}.todo-tags{display:flex;flex-wrap:wrap;gap:4px}.ant-modal-title{color:#e5e7eb!important}.ant-modal-close{color:#9ca3af!important}.ant-modal-close:hover{color:#e5e7eb!important}.custom-input{border-color:#374151!important}.custom-select .ant-select-selector{background-color:#1f2937!important;border-color:#374151!important;color:#e5e7eb!important}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:#1e293b}.custom-scrollbar::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:#475569}.custom-scrollbar{scrollbar-color:#4b5563 #374151;scrollbar-width:thin}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn{animation:fadeIn .3s ease-in-out}.loading-spinner{animation:spin 1s ease-in-out infinite;border:3px solid #3b82f64d;border-radius:50%;border-top-color:#3b82f6;display:inline-block;height:30px;width:30px}.bg-gray-750{background-color:#222933}.task-split-result-view{animation:slideDown .3s ease-in-out;border-radius:8px;box-shadow:0 4px 12px #00000040;overflow:hidden}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.task-split-result-view .ant-typography{transition:color .3s ease}.task-split-result-view .ant-collapse-item{border-radius:6px;margin-bottom:8px;overflow:hidden}.task-split-result-view .ant-card{transition:all .3s ease}.task-split-result-view .ant-card:hover{box-shadow:0 6px 12px #00000026;transform:translateY(-1px)}.task-split-result-view .ant-divider{margin:16px 0}.task-split-result-view .ant-tag{transition:all .3s ease}.task-split-result-view .ant-tag:hover{transform:scale(1.05)}.todo-board{gap:1rem}.todo-column.flex.w-full{animation:scaleUp .3s ease-in-out}@keyframes scaleUp{0%{transform:scale(.98)}to{transform:scale(1)}}.todo-column.flex-1{animation:fadeIn .3s ease-in-out}.todo-column.maximized{flex:1 0 100%}.todo-column .maximize-button{opacity:.7;transition:opacity .2s ease}.todo-column:hover .maximize-button{opacity:1}.todo-column-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:.75rem}.todo-column-header h3{font-weight:500;margin:0}*,::backdrop,:after,:before{--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:#3b82f680;--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: }/*
4
+ ! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com
5
+ */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height: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:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}*{scrollbar-color:auto;scrollbar-width:auto}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-right-2{right:-.5rem}.-right-4{right:-1rem}.-top-2{top:-.5rem}.bottom-0{bottom:0}.bottom-24{bottom:6rem}.left-0{left:0}.left-10{left:2.5rem}.left-2{left:.5rem}.left-3\.5{left:.875rem}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-bottom:.125rem;margin-top:.125rem}.my-4{margin-bottom:1rem;margin-top:1rem}.-ml-1{margin-left:-.25rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.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}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-0\.5{margin-right:.125rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.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-\[1px\]{height:1px}.h-\[80vh\]{height:80vh}.h-\[calc\(100\%-80px\)\]{height:calc(100% - 80px)}.h-full{height:100%}.h-screen{height:100vh}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[150px\]{max-height:150px}.max-h-\[calc\(100vh-220px\)\]{max-height:calc(100vh - 220px)}.max-h-screen{max-height:100vh}.min-h-\[120px\]{min-height:120px}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.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-96{width:24rem}.w-\[50px\]{width:50px}.w-\[80\%\]{width:80%}.w-full{width:100%}.min-w-0{min-width:0}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\[180px\]{max-width:180px}.max-w-\[80\%\]{max-width:80%}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.flex-1{flex:1 1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-45{--tw-rotate:45deg}.rotate-45,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce{animation:bounce 1s infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[120px_1fr\]{grid-template-columns:120px 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-l-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-r-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0}.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-solid{border-style:solid}.border-none{border-style:none}.border-\[\#374151\]{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-gray-700\/50{border-color:#37415180}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-r-transparent{border-right-color:#0000}.bg-\[\#111827\]{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-\[\#1F2937\]{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-\[\#1e1e1e\]{--tw-bg-opacity:1;background-color:rgb(30 30 30/var(--tw-bg-opacity))}.bg-\[\#1f1f1f\]{--tw-bg-opacity:1;background-color:rgb(31 31 31/var(--tw-bg-opacity))}.bg-\[\#2d2d2d\]{--tw-bg-opacity:1;background-color:rgb(45 45 45/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-900\/30{background-color:#1e3a8a4d}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-700\/50{background-color:#37415180}.bg-gray-700\/70{background-color:#374151b3}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-800\/20{background-color:#1f293733}.bg-gray-800\/30{background-color:#1f29374d}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-800\/60{background-color:#1f293799}.bg-gray-800\/90{background-color:#1f2937e6}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-red-900\/80{background-color:#7f1d1dcc}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-opacity-25{--tw-bg-opacity:0.25}.bg-opacity-50{--tw-bg-opacity:0.5}.bg-opacity-70{--tw-bg-opacity:0.7}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500{--tw-gradient-from:#f59e0b var(--tw-gradient-from-position);--tw-gradient-to:#f59e0b00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:#3b82f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gray-800{--tw-gradient-from:#1f2937 var(--tw-gradient-from-position);--tw-gradient-to:#1f293700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-green-900\/70{--tw-gradient-from:#14532db3 var(--tw-gradient-from-position);--tw-gradient-to:#14532d00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from:#6366f1 var(--tw-gradient-from-position);--tw-gradient-to:#6366f100 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-800{--tw-gradient-from:#6b21a8 var(--tw-gradient-from-position);--tw-gradient-to:#6b21a800 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-indigo-600{--tw-gradient-to:#4f46e5 var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to:#ea580c var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.to-purple-700{--tw-gradient-to:#7e22ce var(--tw-gradient-to-position)}.to-teal-900\/70{--tw-gradient-to:#134e4ab3 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.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-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pl-16{padding-left:4rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-16{padding-right:4rem}.pr-2{padding-right:.5rem}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xs{font-size:.625rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[14px\]{font-size:14px}.text-\[9px\]{font-size:9px}.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-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.text-transparent{color:#0000}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-inner,.shadow-lg{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);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 #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-blue-500\/20{--tw-shadow-color:#3b82f633;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid #0000;outline-offset:2px}.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),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.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-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.scrollbar{scrollbar-color:initial initial;scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial)}.scrollbar::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track);background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.scrollbar::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track);background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.scrollbar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb);background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.scrollbar::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb);background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.scrollbar::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner);background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.scrollbar::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner);background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}.scrollbar{scrollbar-width:auto}.scrollbar::-webkit-scrollbar{display:block;height:16px;height:var(--scrollbar-height,16px);width:16px;width:var(--scrollbar-width,16px)}.scrollbar-thin{scrollbar-color:initial initial;scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial)}.scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track);background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track);background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb);background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb);background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner);background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner);background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.scrollbar-track-gray-800{--scrollbar-track:#1f2937!important}.scrollbar-thumb-gray-700{--scrollbar-thumb:#374151!important}body,html{background-color:#1a1a1a;margin:0}#root,body,html{height:100%}::-webkit-scrollbar{height:4px;width:4px}::-webkit-scrollbar-track{background:#2d2d2d}::-webkit-scrollbar-thumb{background:#888;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.custom-select .ant-select-selector{background-color:#374151!important;border-color:#4b5563!important;color:#fff!important;font-size:12px!important;height:24px!important;padding:0 6px!important}.custom-select .ant-select-selection-placeholder{color:#9ca3af!important}.custom-select .ant-select-selection-item,.custom-select.ant-select-multiple .ant-select-selection-item{background-color:#4b5563!important;border-color:#6b7280!important;color:#fff!important}.custom-select.ant-select-multiple .ant-select-selection-item{margin-bottom:2px!important;margin-top:2px!important}.custom-select .ant-select-selection-item .anticon,.custom-select .ant-select-selection-item span,.custom-select .ant-select-selection-item-content,.custom-select .ant-select-selection-item-remove{color:#fff!important}.custom-select .ant-select-selection-item .ant-select-selection-item-remove{color:#ffffffa6!important}.custom-select .ant-select-selection-item .ant-select-selection-item-remove:hover{color:#fff!important}.custom-select .ant-select-dropdown{background-color:#374151!important;border:1px solid #4b5563!important}.custom-select .ant-select-item{color:#fff!important}.custom-select .ant-select-item-option-active{background-color:#4b5563!important}.custom-select .ant-select-item-option-selected{background-color:#6b7280!important}.custom-select .ant-select-selection-search input{color:#fff!important}.custom-select .ant-select-clear{background-color:initial!important;color:#9ca3af!important}.custom-select .ant-select-arrow{color:#9ca3af!important}.dark-theme-modal .ant-modal-title{color:#e5e7eb!important}.dark-theme-modal .ant-modal-close{color:#9ca3af!important}.dark-theme-modal .ant-modal-close:hover{color:#e5e7eb!important}.dark-theme-list .ant-list-item{border-color:#374151!important}.dark-theme-list .ant-list-item:hover{background-color:#374151!important}.dark-theme-input{background-color:#1f2937!important;border-color:#374151!important;color:#e5e7eb!important}.dark-theme-input::placeholder{color:#9ca3af!important}.dark-theme-input:focus,.dark-theme-input:hover{border-color:#6366f1!important;box-shadow:0 0 0 2px #6366f133!important}.split{display:flex;flex-direction:row}.gutter{background-color:#4b5563;cursor:col-resize;width:2px!important}.gutter:hover{background-color:#6b7280}.custom-input{background-color:#1f2937!important;border-color:#4b5563!important;color:#e5e7eb!important}.custom-input::placeholder{color:#9ca3af!important;opacity:1!important}.custom-input:focus,.custom-input:hover{border-color:#6366f1!important;box-shadow:0 0 0 2px #6366f133!important}.custom-input input{background-color:initial!important;color:#e5e7eb!important}.custom-input .anticon{color:#9ca3af!important}.dark-mode-table,.dark-mode-table .ant-table{background-color:initial!important}.dark-mode-table .ant-table-thead>tr>th{background-color:#374151!important}.dark-mode-table .ant-table-tbody>tr>td,.dark-mode-table .ant-table-thead>tr>th{border-bottom:1px solid #4b5563!important;color:#fff!important}.dark-mode-table .ant-table-tbody>tr:hover>td{background-color:#4b5563!important}.dark-mode-table .ant-table-row-expand-icon{background-color:#4b5563!important;border-color:#6b7280!important;color:#fff!important}.dark-mode-table .nested-table{margin:0!important;padding:0!important}.dark-mode-table .nested-table .ant-table-tbody>tr>td{background-color:#1f2937!important}.dark-mode-table .nested-table .ant-table-tbody>tr:hover>td{background-color:#374151!important}.custom-select .ant-select-selection-overflow-item .ant-select-selection-item{background-color:#4b5563!important;border-color:#6b7280!important;color:#fff!important}.custom-select .ant-select-selection-overflow-item .ant-select-selection-item-content{color:#fff!important}.custom-select .ant-select-selection-overflow-item .ant-select-selection-item-remove{color:#ffffffa6!important}.custom-select .ant-select-selection-overflow-item .ant-select-selection-item-remove:hover{color:#fff!important}.dark-dropdown-menu{border:1px solid #374151!important}.dark-dropdown-menu,.dark-dropdown-menu .ant-select-item{background-color:#1f2937!important;color:#e5e7eb!important}.dark-dropdown-menu .ant-select-item-option-active{background-color:#374151!important}.dark-dropdown-menu .ant-select-item-option-selected{background-color:#3b82f6!important;color:#fff!important}.dark-dropdown-menu .ant-select-item-empty{color:#9ca3af!important}.dark-dropdown-menu .ant-select-item-group{color:#9ca3af!important;font-weight:700;padding:8px 12px}.file-option{transition:background-color .2s}.dark-dropdown-menu .file-option{background-color:initial!important}.dark-dropdown-menu .file-option:hover{background-color:#374151!important}.last\:border-b-0:last-child{border-bottom-width:0}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:opacity-100{opacity:1}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-\[\#2D3748\]:hover{--tw-bg-opacity:1;background-color:rgb(45 55 72/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-gray-700\/50:hover{background-color:#37415180}.hover\:bg-gray-700\/80:hover{background-color:#374151cc}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-purple-800:hover{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:from-amber-600:hover{--tw-gradient-from:#d97706 var(--tw-gradient-from-position);--tw-gradient-to:#d9770600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:from-blue-600:hover{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:#2563eb00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-indigo-700:hover{--tw-gradient-to:#4338ca var(--tw-gradient-to-position)}.hover\:to-orange-700:hover{--tw-gradient-to:#c2410c var(--tw-gradient-to-position)}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.hover\:shadow-lg:hover,.hover\:shadow-sm:hover{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-blue-500\/30:hover{--tw-shadow-color:#3b82f64d;--tw-shadow:var(--tw-shadow-colored)}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.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),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:#1f2937}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:640px){.sm\:px-0{padding-left:0;padding-right:0}}
6
+ /*# sourceMappingURL=main.8a602674.css.map*/