auto-coder-web 0.1.26__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/auto_coder_runner_wrapper.py +5 -1
- auto_coder_web/common_router/chat_list_router.py +24 -14
- auto_coder_web/common_router/completions_router.py +120 -7
- auto_coder_web/common_router/file_group_router.py +21 -4
- auto_coder_web/lang.py +35 -0
- auto_coder_web/proxy.py +49 -291
- auto_coder_web/version.py +1 -1
- auto_coder_web/web/asset-manifest.json +6 -6
- auto_coder_web/web/index.html +1 -1
- auto_coder_web/web/static/css/main.8a602674.css +6 -0
- auto_coder_web/web/static/css/main.8a602674.css.map +1 -0
- auto_coder_web/web/static/js/{main.a707a18c.js → main.c14e8b91.js} +3 -3
- auto_coder_web/web/static/js/{main.a707a18c.js.map → main.c14e8b91.js.map} +1 -1
- {auto_coder_web-0.1.26.dist-info → auto_coder_web-0.1.27.dist-info}/METADATA +1 -1
- {auto_coder_web-0.1.26.dist-info → auto_coder_web-0.1.27.dist-info}/RECORD +19 -18
- auto_coder_web/web/static/css/main.b9764291.css +0 -6
- auto_coder_web/web/static/css/main.b9764291.css.map +0 -1
- /auto_coder_web/web/static/js/{main.a707a18c.js.LICENSE.txt → main.c14e8b91.js.LICENSE.txt} +0 -0
- {auto_coder_web-0.1.26.dist-info → auto_coder_web-0.1.27.dist-info}/WHEEL +0 -0
- {auto_coder_web-0.1.26.dist-info → auto_coder_web-0.1.27.dist-info}/entry_points.txt +0 -0
- {auto_coder_web-0.1.26.dist-info → auto_coder_web-0.1.27.dist-info}/top_level.txt +0 -0
auto_coder_web/proxy.py
CHANGED
@@ -15,315 +15,39 @@ 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
|
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
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
|
40
|
+
|
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
|
+
|
326
48
|
self.auto_coder_runner = AutoCoderRunnerWrapper(project_path, product_mode=product_mode)
|
49
|
+
|
50
|
+
|
327
51
|
self.setup_routes()
|
328
52
|
self.client = httpx.AsyncClient()
|
329
53
|
|
@@ -354,6 +78,8 @@ class ProxyServer:
|
|
354
78
|
self.app.state.project_path = self.project_path
|
355
79
|
# Store auto_coder_runner in app state for dependency injection
|
356
80
|
self.app.state.auto_coder_runner = self.auto_coder_runner
|
81
|
+
# Store initialization status
|
82
|
+
self.app.state.is_initialized = self.is_initialized
|
357
83
|
|
358
84
|
self.app.include_router(todo_router.router)
|
359
85
|
self.app.include_router(settings_router.router)
|
@@ -382,8 +108,21 @@ class ProxyServer:
|
|
382
108
|
if os.path.exists(self.index_html_path):
|
383
109
|
async with aiofiles.open(self.index_html_path, "r") as f:
|
384
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
|
+
|
385
123
|
return HTMLResponse(content=content)
|
386
124
|
return HTMLResponse(content="<h1>Welcome to Proxy Server</h1>")
|
125
|
+
|
387
126
|
|
388
127
|
@self.app.get("/api/project-path")
|
389
128
|
async def get_project_path():
|
@@ -481,7 +220,26 @@ class ProxyServer:
|
|
481
220
|
success=False,
|
482
221
|
message=f"读取文件出错: {str(e)}"
|
483
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)
|
484
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")
|
485
243
|
|
486
244
|
|
487
245
|
def main():
|
auto_coder_web/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.27"
|
@@ -1,15 +1,15 @@
|
|
1
1
|
{
|
2
2
|
"files": {
|
3
|
-
"main.css": "/static/css/main.
|
4
|
-
"main.js": "/static/js/main.
|
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.
|
8
|
-
"main.
|
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.
|
13
|
-
"static/js/main.
|
12
|
+
"static/css/main.8a602674.css",
|
13
|
+
"static/js/main.c14e8b91.js"
|
14
14
|
]
|
15
15
|
}
|
auto_coder_web/web/index.html
CHANGED
@@ -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.
|
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*/
|