diff --git a/README.md b/README.md index d3716416..6c8861a2 100644 --- a/README.md +++ b/README.md @@ -441,11 +441,16 @@ if __name__ == "__main__": - [Direct OpenAI Example](examples/lightrag_llamaindex_direct_demo.py) - [LiteLLM Proxy Example](examples/lightrag_llamaindex_litellm_demo.py) + + ### Conversation History Support LightRAG now supports multi-turn dialogue through the conversation history feature. Here's how to use it: +
+ Usage Example + ```python # Create conversation history conversation_history = [ @@ -468,10 +473,15 @@ response = rag.query( ) ``` +
+ ### Custom Prompt Support LightRAG now supports custom prompts for fine-tuned control over the system's behavior. Here's how to use it: +
+ Usage Example + ```python # Create query parameters query_param = QueryParam( @@ -506,6 +516,8 @@ response_custom = rag.query( print(response_custom) ``` +
+ ### Separate Keyword Extraction We've introduced a new function `query_with_separate_keyword_extraction` to enhance the keyword extraction capabilities. This function separates the keyword extraction process from the user's prompt, focusing solely on the query to improve the relevance of extracted keywords. @@ -519,7 +531,8 @@ The function operates by dividing the input into two parts: It then performs keyword extraction exclusively on the `user query`. This separation ensures that the extraction process is focused and relevant, unaffected by any additional language in the `prompt`. It also allows the `prompt` to serve purely for response formatting, maintaining the intent and clarity of the user's original question. -**Usage Example** +
+ Usage Example This `example` shows how to tailor the function for educational content, focusing on detailed explanations for older students. @@ -531,67 +544,6 @@ rag.query_with_separate_keyword_extraction( ) ``` -### Insert Custom KG - -```python -custom_kg = { - "chunks": [ - { - "content": "Alice and Bob are collaborating on quantum computing research.", - "source_id": "doc-1" - } - ], - "entities": [ - { - "entity_name": "Alice", - "entity_type": "person", - "description": "Alice is a researcher specializing in quantum physics.", - "source_id": "doc-1" - }, - { - "entity_name": "Bob", - "entity_type": "person", - "description": "Bob is a mathematician.", - "source_id": "doc-1" - }, - { - "entity_name": "Quantum Computing", - "entity_type": "technology", - "description": "Quantum computing utilizes quantum mechanical phenomena for computation.", - "source_id": "doc-1" - } - ], - "relationships": [ - { - "src_id": "Alice", - "tgt_id": "Bob", - "description": "Alice and Bob are research partners.", - "keywords": "collaboration research", - "weight": 1.0, - "source_id": "doc-1" - }, - { - "src_id": "Alice", - "tgt_id": "Quantum Computing", - "description": "Alice conducts research on quantum computing.", - "keywords": "research expertise", - "weight": 1.0, - "source_id": "doc-1" - }, - { - "src_id": "Bob", - "tgt_id": "Quantum Computing", - "description": "Bob researches quantum computing.", - "keywords": "research application", - "weight": 1.0, - "source_id": "doc-1" - } - ] -} - -rag.insert_custom_kg(custom_kg) -``` -
## Insert @@ -683,6 +635,70 @@ rag.insert(text_content.decode('utf-8')) +
+ Insert Custom KG + +```python +custom_kg = { + "chunks": [ + { + "content": "Alice and Bob are collaborating on quantum computing research.", + "source_id": "doc-1" + } + ], + "entities": [ + { + "entity_name": "Alice", + "entity_type": "person", + "description": "Alice is a researcher specializing in quantum physics.", + "source_id": "doc-1" + }, + { + "entity_name": "Bob", + "entity_type": "person", + "description": "Bob is a mathematician.", + "source_id": "doc-1" + }, + { + "entity_name": "Quantum Computing", + "entity_type": "technology", + "description": "Quantum computing utilizes quantum mechanical phenomena for computation.", + "source_id": "doc-1" + } + ], + "relationships": [ + { + "src_id": "Alice", + "tgt_id": "Bob", + "description": "Alice and Bob are research partners.", + "keywords": "collaboration research", + "weight": 1.0, + "source_id": "doc-1" + }, + { + "src_id": "Alice", + "tgt_id": "Quantum Computing", + "description": "Alice conducts research on quantum computing.", + "keywords": "research expertise", + "weight": 1.0, + "source_id": "doc-1" + }, + { + "src_id": "Bob", + "tgt_id": "Quantum Computing", + "description": "Bob researches quantum computing.", + "keywords": "research application", + "weight": 1.0, + "source_id": "doc-1" + } + ] +} + +rag.insert_custom_kg(custom_kg) +``` + +
+
Citation Functionality @@ -842,7 +858,8 @@ rag.delete_by_doc_id("doc_id") LightRAG now supports comprehensive knowledge graph management capabilities, allowing you to create, edit, and delete entities and relationships within your knowledge graph. -### Create Entities and Relations +
+ Create Entities and Relations ```python # Create new entity @@ -865,7 +882,10 @@ relation = rag.create_relation("Google", "Gmail", { }) ``` -### Edit Entities and Relations +
+ +
+ Edit Entities and Relations ```python # Edit an existing entity @@ -902,6 +922,8 @@ All operations are available in both synchronous and asynchronous versions. The These operations maintain data consistency across both the graph database and vector database components, ensuring your knowledge graph remains coherent. +
+ ## Data Export Functions ### Overview @@ -910,7 +932,8 @@ LightRAG allows you to export your knowledge graph data in various formats for a ### Export Functions -#### Basic Usage +
+ Basic Usage ```python # Basic CSV export (default format) @@ -920,7 +943,10 @@ rag.export_data("knowledge_graph.csv") rag.export_data("output.xlsx", file_format="excel") ``` -#### Different File Formats supported +
+ +
+ Different File Formats supported ```python #Export data in CSV format @@ -935,13 +961,18 @@ rag.export_data("graph_data.md", file_format="md") # Export data in Text rag.export_data("graph_data.txt", file_format="txt") ``` -#### Additional Options +
+ +
+ Additional Options Include vector embeddings in the export (optional): ```python rag.export_data("complete_data.csv", include_vector_data=True) ``` +
+ ### Data Included in Export All exports include: diff --git a/env.example b/env.example index 4bf9a340..b81d82b9 100644 --- a/env.example +++ b/env.example @@ -3,9 +3,11 @@ ### Server Configuration # HOST=0.0.0.0 # PORT=9621 -# WORKERS=1 -# NAMESPACE_PREFIX=lightrag # separating data from difference Lightrag instances -# MAX_GRAPH_NODES=1000 # Max nodes return from grap retrieval +# WORKERS=2 +### separating data from difference Lightrag instances +# NAMESPACE_PREFIX=lightrag +### Max nodes return from grap retrieval +# MAX_GRAPH_NODES=1000 # CORS_ORIGINS=http://localhost:3000,http://localhost:8080 ### Optional SSL Configuration @@ -13,7 +15,7 @@ # SSL_CERTFILE=/path/to/cert.pem # SSL_KEYFILE=/path/to/key.pem -### Directory Configuration +### Directory Configuration (defaults to current working directory) # WORKING_DIR= # INPUT_DIR= @@ -23,9 +25,10 @@ ### Logging level # LOG_LEVEL=INFO # VERBOSE=False -# LOG_DIR=/path/to/log/directory # Log file directory path, defaults to current working directory -# LOG_MAX_BYTES=10485760 # Log file max size in bytes, defaults to 10MB -# LOG_BACKUP_COUNT=5 # Number of backup files to keep, defaults to 5 +# LOG_MAX_BYTES=10485760 +# LOG_BACKUP_COUNT=5 +### Logfile location (defaults to current working directory) +# LOG_DIR=/path/to/log/directory ### Settings for RAG query # HISTORY_TURNS=3 @@ -36,28 +39,37 @@ # MAX_TOKEN_ENTITY_DESC=4000 ### Settings for document indexing -ENABLE_LLM_CACHE_FOR_EXTRACT=true # Enable LLM cache for entity extraction +ENABLE_LLM_CACHE_FOR_EXTRACT=true SUMMARY_LANGUAGE=English # CHUNK_SIZE=1200 # CHUNK_OVERLAP_SIZE=100 -# MAX_TOKEN_SUMMARY=500 # Max tokens for entity or relations summary -# MAX_PARALLEL_INSERT=2 # Number of parallel processing documents in one patch +### Max tokens for entity or relations summary +# MAX_TOKEN_SUMMARY=500 +### Number of parallel processing documents in one patch +# MAX_PARALLEL_INSERT=2 -# EMBEDDING_BATCH_NUM=32 # num of chunks send to Embedding in one request -# EMBEDDING_FUNC_MAX_ASYNC=16 # Max concurrency requests for Embedding +### Num of chunks send to Embedding in single request +# EMBEDDING_BATCH_NUM=32 +### Max concurrency requests for Embedding +# EMBEDDING_FUNC_MAX_ASYNC=16 # MAX_EMBED_TOKENS=8192 -### LLM Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) -TIMEOUT=150 # Time out in seconds for LLM, None for infinite timeout +### LLM Configuration +### Time out in seconds for LLM, None for infinite timeout +TIMEOUT=150 +### Some models like o1-mini require temperature to be set to 1 TEMPERATURE=0.5 -MAX_ASYNC=4 # Max concurrency requests of LLM -MAX_TOKENS=32768 # Max tokens send to LLM (less than context size of the model) +### Max concurrency requests of LLM +MAX_ASYNC=4 +### Max tokens send to LLM (less than context size of the model) +MAX_TOKENS=32768 +### Ollama example (For local services installed with docker, you can use host.docker.internal as host) LLM_BINDING=ollama LLM_MODEL=mistral-nemo:latest LLM_BINDING_API_KEY=your_api_key -### Ollama example LLM_BINDING_HOST=http://localhost:11434 + ### OpenAI alike example # LLM_BINDING=openai # LLM_MODEL=gpt-4o @@ -103,9 +115,10 @@ ORACLE_DSN=localhost:1521/XEPDB1 ORACLE_USER=your_username ORACLE_PASSWORD='your_password' ORACLE_CONFIG_DIR=/path/to/oracle/config -#ORACLE_WALLET_LOCATION=/path/to/wallet # optional -#ORACLE_WALLET_PASSWORD='your_password' # optional -#ORACLE_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) +#ORACLE_WALLET_LOCATION=/path/to/wallet +#ORACLE_WALLET_PASSWORD='your_password' +### separating all data from difference Lightrag instances(deprecating, use NAMESPACE_PREFIX in future) +#ORACLE_WORKSPACE=default ### TiDB Configuration TIDB_HOST=localhost @@ -113,7 +126,8 @@ TIDB_PORT=4000 TIDB_USER=your_username TIDB_PASSWORD='your_password' TIDB_DATABASE=your_database -#TIDB_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) +### separating all data from difference Lightrag instances(deprecating, use NAMESPACE_PREFIX in future) +#TIDB_WORKSPACE=default ### PostgreSQL Configuration POSTGRES_HOST=localhost @@ -121,7 +135,8 @@ POSTGRES_PORT=5432 POSTGRES_USER=your_username POSTGRES_PASSWORD='your_password' POSTGRES_DATABASE=your_database -#POSTGRES_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) +### separating all data from difference Lightrag instances(deprecating, use NAMESPACE_PREFIX in future) +#POSTGRES_WORKSPACE=default ### Independent AGM Configuration(not for AMG embedded in PostreSQL) AGE_POSTGRES_DB= @@ -130,8 +145,9 @@ AGE_POSTGRES_PASSWORD= AGE_POSTGRES_HOST= # AGE_POSTGRES_PORT=8529 +### separating all data from difference Lightrag instances(deprecating, use NAMESPACE_PREFIX in future) # AGE Graph Name(apply to PostgreSQL and independent AGM) -# AGE_GRAPH_NAME=lightrag # deprecated, use NAME_SPACE_PREFIX instead +# AGE_GRAPH_NAME=lightrag ### Neo4j Configuration NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io @@ -141,7 +157,8 @@ NEO4J_PASSWORD='your_password' ### MongoDB Configuration MONGO_URI=mongodb://root:root@localhost:27017/ MONGO_DATABASE=LightRAG -MONGODB_GRAPH=false # deprecated (keep for backward compatibility) +### separating all data from difference Lightrag instances(deprecating, use NAMESPACE_PREFIX in future) +# MONGODB_GRAPH=false ### Milvus Configuration MILVUS_URI=http://localhost:19530 @@ -158,11 +175,11 @@ QDRANT_URL=http://localhost:16333 REDIS_URI=redis://localhost:6379 ### For JWT Auth -AUTH_ACCOUNTS='admin:admin123,user1:pass456' # username:password,username:password -TOKEN_SECRET=Your-Key-For-LightRAG-API-Server # JWT key -#TOKEN_EXPIRE_HOURS=4 # Expire duration, default 4 -#GUEST_TOKEN_EXPIRE_HOURS=2 # Guest expire duration, default 2 -#JWT_ALGORITHM=HS256 # JWT encode algorithm, default HS256 +#AUTH_ACCOUNTS='admin:admin123,user1:pass456' +#TOKEN_SECRET=Your-Key-For-LightRAG-API-Server +#TOKEN_EXPIRE_HOURS=4 +#GUEST_TOKEN_EXPIRE_HOURS=2 +#JWT_ALGORITHM=HS256 ### API-Key to access LightRAG Server API # LIGHTRAG_API_KEY=your-secure-api-key-here diff --git a/examples/lightrag_gemini_track_token_demo.py b/examples/lightrag_gemini_track_token_demo.py new file mode 100644 index 00000000..a72fc717 --- /dev/null +++ b/examples/lightrag_gemini_track_token_demo.py @@ -0,0 +1,151 @@ +# pip install -q -U google-genai to use gemini as a client + +import os +import asyncio +import numpy as np +import nest_asyncio +from google import genai +from google.genai import types +from dotenv import load_dotenv +from lightrag.utils import EmbeddingFunc +from lightrag import LightRAG, QueryParam +from lightrag.kg.shared_storage import initialize_pipeline_status +from lightrag.llm.siliconcloud import siliconcloud_embedding +from lightrag.utils import setup_logger +from lightrag.utils import TokenTracker + +setup_logger("lightrag", level="DEBUG") + +# Apply nest_asyncio to solve event loop issues +nest_asyncio.apply() + +load_dotenv() +gemini_api_key = os.getenv("GEMINI_API_KEY") +siliconflow_api_key = os.getenv("SILICONFLOW_API_KEY") + +WORKING_DIR = "./dickens" + +if not os.path.exists(WORKING_DIR): + os.mkdir(WORKING_DIR) + +token_tracker = TokenTracker() + + +async def llm_model_func( + prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs +) -> str: + # 1. Initialize the GenAI Client with your Gemini API Key + client = genai.Client(api_key=gemini_api_key) + + # 2. Combine prompts: system prompt, history, and user prompt + if history_messages is None: + history_messages = [] + + combined_prompt = "" + if system_prompt: + combined_prompt += f"{system_prompt}\n" + + for msg in history_messages: + # Each msg is expected to be a dict: {"role": "...", "content": "..."} + combined_prompt += f"{msg['role']}: {msg['content']}\n" + + # Finally, add the new user prompt + combined_prompt += f"user: {prompt}" + + # 3. Call the Gemini model + response = client.models.generate_content( + model="gemini-2.0-flash", + contents=[combined_prompt], + config=types.GenerateContentConfig( + max_output_tokens=5000, temperature=0, top_k=10 + ), + ) + + # 4. Get token counts with null safety + usage = getattr(response, "usage_metadata", None) + prompt_tokens = getattr(usage, "prompt_token_count", 0) or 0 + completion_tokens = getattr(usage, "candidates_token_count", 0) or 0 + total_tokens = getattr(usage, "total_token_count", 0) or ( + prompt_tokens + completion_tokens + ) + + token_counts = { + "prompt_tokens": prompt_tokens, + "completion_tokens": completion_tokens, + "total_tokens": total_tokens, + } + + token_tracker.add_usage(token_counts) + + # 5. Return the response text + return response.text + + +async def embedding_func(texts: list[str]) -> np.ndarray: + return await siliconcloud_embedding( + texts, + model="BAAI/bge-m3", + api_key=siliconflow_api_key, + max_token_size=512, + ) + + +async def initialize_rag(): + rag = LightRAG( + working_dir=WORKING_DIR, + entity_extract_max_gleaning=1, + enable_llm_cache=True, + enable_llm_cache_for_entity_extract=True, + embedding_cache_config={"enabled": True, "similarity_threshold": 0.90}, + llm_model_func=llm_model_func, + embedding_func=EmbeddingFunc( + embedding_dim=1024, + max_token_size=8192, + func=embedding_func, + ), + ) + + await rag.initialize_storages() + await initialize_pipeline_status() + + return rag + + +def main(): + # Initialize RAG instance + rag = asyncio.run(initialize_rag()) + + with open("./book.txt", "r", encoding="utf-8") as f: + rag.insert(f.read()) + + # Context Manager Method + with token_tracker: + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="naive") + ) + ) + + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="local") + ) + ) + + print( + rag.query( + "What are the top themes in this story?", + param=QueryParam(mode="global"), + ) + ) + + print( + rag.query( + "What are the top themes in this story?", + param=QueryParam(mode="hybrid"), + ) + ) + + +if __name__ == "__main__": + main() diff --git a/examples/lightrag_siliconcloud_track_token_demo.py b/examples/lightrag_siliconcloud_track_token_demo.py new file mode 100644 index 00000000..d82a30bc --- /dev/null +++ b/examples/lightrag_siliconcloud_track_token_demo.py @@ -0,0 +1,110 @@ +import os +import asyncio +from lightrag import LightRAG, QueryParam +from lightrag.llm.openai import openai_complete_if_cache +from lightrag.llm.siliconcloud import siliconcloud_embedding +from lightrag.utils import EmbeddingFunc +from lightrag.utils import TokenTracker +import numpy as np +from lightrag.kg.shared_storage import initialize_pipeline_status +from dotenv import load_dotenv + +load_dotenv() + +token_tracker = TokenTracker() +WORKING_DIR = "./dickens" + +if not os.path.exists(WORKING_DIR): + os.mkdir(WORKING_DIR) + + +async def llm_model_func( + prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs +) -> str: + return await openai_complete_if_cache( + "Qwen/Qwen2.5-7B-Instruct", + prompt, + system_prompt=system_prompt, + history_messages=history_messages, + api_key=os.getenv("SILICONFLOW_API_KEY"), + base_url="https://api.siliconflow.cn/v1/", + token_tracker=token_tracker, + **kwargs, + ) + + +async def embedding_func(texts: list[str]) -> np.ndarray: + return await siliconcloud_embedding( + texts, + model="BAAI/bge-m3", + api_key=os.getenv("SILICONFLOW_API_KEY"), + max_token_size=512, + ) + + +# function test +async def test_funcs(): + # Context Manager Method + with token_tracker: + result = await llm_model_func("How are you?") + print("llm_model_func: ", result) + + +asyncio.run(test_funcs()) + + +async def initialize_rag(): + rag = LightRAG( + working_dir=WORKING_DIR, + llm_model_func=llm_model_func, + embedding_func=EmbeddingFunc( + embedding_dim=1024, max_token_size=512, func=embedding_func + ), + ) + + await rag.initialize_storages() + await initialize_pipeline_status() + + return rag + + +def main(): + # Initialize RAG instance + rag = asyncio.run(initialize_rag()) + + # Reset tracker before processing queries + token_tracker.reset() + + with open("./book.txt", "r", encoding="utf-8") as f: + rag.insert(f.read()) + + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="naive") + ) + ) + + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="local") + ) + ) + + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="global") + ) + ) + + print( + rag.query( + "What are the top themes in this story?", param=QueryParam(mode="hybrid") + ) + ) + + # Display final token usage after main query + print("Token usage:", token_tracker.get_usage()) + + +if __name__ == "__main__": + main() diff --git a/lightrag/__init__.py b/lightrag/__init__.py index 62b427bf..1c698ff6 100644 --- a/lightrag/__init__.py +++ b/lightrag/__init__.py @@ -1,5 +1,5 @@ from .lightrag import LightRAG as LightRAG, QueryParam as QueryParam -__version__ = "1.3.0" +__version__ = "1.3.1" __author__ = "Zirui Guo" __url__ = "https://github.com/HKUDS/LightRAG" diff --git a/lightrag/api/README-zh.md b/lightrag/api/README-zh.md index 839aa2ef..4bf31a61 100644 --- a/lightrag/api/README-zh.md +++ b/lightrag/api/README-zh.md @@ -52,7 +52,8 @@ LLM_BINDING=openai LLM_MODEL=gpt-4o LLM_BINDING_HOST=https://api.openai.com/v1 LLM_BINDING_API_KEY=your_api_key -MAX_TOKENS=32768 # 发送给 LLM 的最大 token 数(小于模型上下文大小) +### 发送给 LLM 的最大 token 数(小于模型上下文大小) +MAX_TOKENS=32768 EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 @@ -68,7 +69,8 @@ LLM_BINDING=ollama LLM_MODEL=mistral-nemo:latest LLM_BINDING_HOST=http://localhost:11434 # LLM_BINDING_API_KEY=your_api_key -MAX_TOKENS=8192 # 发送给 LLM 的最大 token 数(基于您的 Ollama 服务器容量) +### 发送给 LLM 的最大 token 数(基于您的 Ollama 服务器容量) +MAX_TOKENS=8192 EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 @@ -117,9 +119,12 @@ LightRAG 服务器可以在 `Gunicorn + Uvicorn` 预加载模式下运行。Guni 虽然 LightRAG 服务器使用一个工作进程来处理文档索引流程,但通过 Uvicorn 的异步任务支持,可以并行处理多个文件。文档索引速度的瓶颈主要在于 LLM。如果您的 LLM 支持高并发,您可以通过增加 LLM 的并发级别来加速文档索引。以下是几个与并发处理相关的环境变量及其默认值: ``` -WORKERS=2 # 工作进程数,不大于 (2 x 核心数) + 1 -MAX_PARALLEL_INSERT=2 # 一批中并行处理的文件数 -MAX_ASYNC=4 # LLM 的最大并发请求数 +### 工作进程数,数字不大于 (2 x 核心数) + 1 +WORKERS=2 +### 一批中并行处理的文件数 +MAX_PARALLEL_INSERT=2 +# LLM 的最大并发请求数 +MAX_ASYNC=4 ``` ### 将 Lightrag 安装为 Linux 服务 @@ -201,10 +206,9 @@ LightRAG API 服务器使用基于 HS256 算法的 JWT 认证。要启用安全 ```bash # JWT 认证 -AUTH_USERNAME=admin # 登录名 -AUTH_PASSWORD=admin123 # 密码 -TOKEN_SECRET=your-key # JWT 密钥 -TOKEN_EXPIRE_HOURS=4 # 过期时间 +AUTH_ACCOUNTS='admin:admin123,user1:pass456' +TOKEN_SECRET='your-key' +TOKEN_EXPIRE_HOURS=4 ``` > 目前仅支持配置一个管理员账户和密码。尚未开发和实现完整的账户系统。 @@ -238,8 +242,11 @@ LLM_BINDING=azure_openai LLM_BINDING_HOST=your-azure-endpoint LLM_MODEL=your-model-deployment-name LLM_BINDING_API_KEY=your-azure-api-key -AZURE_OPENAI_API_VERSION=2024-08-01-preview # 可选,默认为最新版本 -EMBEDDING_BINDING=azure_openai # 如果使用 Azure OpenAI 进行嵌入 +### API Version可选,默认为最新版本 +AZURE_OPENAI_API_VERSION=2024-08-01-preview + +### 如果使用 Azure OpenAI 进行嵌入 +EMBEDDING_BINDING=azure_openai EMBEDDING_MODEL=your-embedding-deployment-name ``` @@ -362,7 +369,47 @@ LIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage | --embedding-binding | ollama | 嵌入绑定类型(lollms、ollama、openai、azure_openai) | | auto-scan-at-startup | - | 扫描输入目录中的新文件并开始索引 | -### 使用示例 +### .env 文件示例 + +```bash +### Server Configuration +# HOST=0.0.0.0 +PORT=9621 +WORKERS=2 + +### Settings for document indexing +ENABLE_LLM_CACHE_FOR_EXTRACT=true +SUMMARY_LANGUAGE=Chinese +MAX_PARALLEL_INSERT=2 + +### LLM Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) +TIMEOUT=200 +TEMPERATURE=0.0 +MAX_ASYNC=4 +MAX_TOKENS=32768 + +LLM_BINDING=openai +LLM_MODEL=gpt-4o-mini +LLM_BINDING_HOST=https://api.openai.com/v1 +LLM_BINDING_API_KEY=your-api-key + +### Embedding Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) +EMBEDDING_MODEL=bge-m3:latest +EMBEDDING_DIM=1024 +EMBEDDING_BINDING=ollama +EMBEDDING_BINDING_HOST=http://localhost:11434 + +### For JWT Auth +# AUTH_ACCOUNTS='admin:admin123,user1:pass456' +# TOKEN_SECRET=your-key-for-LightRAG-API-Server-xxx +# TOKEN_EXPIRE_HOURS=48 + +# LIGHTRAG_API_KEY=your-secure-api-key-here-123 +# WHITELIST_PATHS=/api/* +# WHITELIST_PATHS=/health,/api/* +``` + + #### 使用 ollama 默认本地服务器作为 llm 和嵌入后端运行 Lightrag 服务器 diff --git a/lightrag/api/README.md b/lightrag/api/README.md index e042fd46..8b2e8177 100644 --- a/lightrag/api/README.md +++ b/lightrag/api/README.md @@ -52,7 +52,8 @@ LLM_BINDING=openai LLM_MODEL=gpt-4o LLM_BINDING_HOST=https://api.openai.com/v1 LLM_BINDING_API_KEY=your_api_key -MAX_TOKENS=32768 # Max tokens send to LLM (less than model context size) +### Max tokens send to LLM (less than model context size) +MAX_TOKENS=32768 EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 @@ -68,7 +69,8 @@ LLM_BINDING=ollama LLM_MODEL=mistral-nemo:latest LLM_BINDING_HOST=http://localhost:11434 # LLM_BINDING_API_KEY=your_api_key -MAX_TOKENS=8192 # Max tokens send to LLM (base on your Ollama Server capacity) +### Max tokens send to LLM (base on your Ollama Server capacity) +MAX_TOKENS=8192 EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 @@ -90,7 +92,9 @@ lightrag-server ``` lightrag-gunicorn --workers 4 ``` -The `.env` file must be placed in the startup directory. Upon launching, the LightRAG Server will create a documents directory (default is `./inputs`) and a data directory (default is `./rag_storage`). This allows you to initiate multiple instances of LightRAG Server from different directories, with each instance configured to listen on a distinct network port. +The `.env` file **must be placed in the startup directory**. + +Upon launching, the LightRAG Server will create a documents directory (default is `./inputs`) and a data directory (default is `./rag_storage`). This allows you to initiate multiple instances of LightRAG Server from different directories, with each instance configured to listen on a distinct network port. Here are some common used startup parameters: @@ -100,6 +104,8 @@ Here are some common used startup parameters: - `--log-level`: Logging level (default: INFO) - --input-dir: specifying the directory to scan for documents (default: ./input) +> The requirement for the .env file to be in the startup directory is intentionally designed this way. The purpose is to support users in launching multiple LightRAG instances simultaneously. Allow different .env files for different instances. + ### Auto scan on startup When starting any of the servers with the `--auto-scan-at-startup` parameter, the system will automatically: @@ -117,9 +123,12 @@ The LightRAG Server can operate in the `Gunicorn + Uvicorn` preload mode. Gunico Though LightRAG Server uses one workers to process the document indexing pipeline, with aysnc task supporting of Uvicorn, multiple files can be processed in parallell. The bottleneck of document indexing speed mainly lies with the LLM. If your LLM supports high concurrency, you can accelerate document indexing by increasing the concurrency level of the LLM. Below are several environment variables related to concurrent processing, along with their default values: ``` -WORKERS=2 # Num of worker processes, not greater then (2 x number_of_cores) + 1 -MAX_PARALLEL_INSERT=2 # Num of parallel files to process in one batch -MAX_ASYNC=4 # Max concurrency requests of LLM +### Num of worker processes, not greater then (2 x number_of_cores) + 1 +WORKERS=2 +### Num of parallel files to process in one batch +MAX_PARALLEL_INSERT=2 +### Max concurrency requests of LLM +MAX_ASYNC=4 ``` ### Install Lightrag as a Linux Service @@ -203,10 +212,9 @@ LightRAG API Server implements JWT-based authentication using HS256 algorithm. T ```bash # For jwt auth -AUTH_USERNAME=admin # login name -AUTH_PASSWORD=admin123 # password -TOKEN_SECRET=your-key # JWT key -TOKEN_EXPIRE_HOURS=4 # expire duration +AUTH_ACCOUNTS='admin:admin123,user1:pass456' +TOKEN_SECRET='your-key' +TOKEN_EXPIRE_HOURS=4 ``` > Currently, only the configuration of an administrator account and password is supported. A comprehensive account system is yet to be developed and implemented. @@ -243,10 +251,12 @@ LLM_BINDING=azure_openai LLM_BINDING_HOST=your-azure-endpoint LLM_MODEL=your-model-deployment-name LLM_BINDING_API_KEY=your-azure-api-key -AZURE_OPENAI_API_VERSION=2024-08-01-preview # optional, defaults to latest version -EMBEDDING_BINDING=azure_openai # if using Azure OpenAI for embeddings -EMBEDDING_MODEL=your-embedding-deployment-name +### API version is optional, defaults to latest version +AZURE_OPENAI_API_VERSION=2024-08-01-preview +### if using Azure OpenAI for embeddings +EMBEDDING_BINDING=azure_openai +EMBEDDING_MODEL=your-embedding-deployment-name ``` @@ -370,76 +380,47 @@ You can not change storage implementation selection after you add documents to L | --embedding-binding | ollama | Embedding binding type (lollms, ollama, openai, azure_openai) | | auto-scan-at-startup | - | Scan input directory for new files and start indexing | -### Example Usage - -#### Running a Lightrag server with ollama default local server as llm and embedding backends - -Ollama is the default backend for both llm and embedding, so by default you can run lightrag-server with no parameters and the default ones will be used. Make sure ollama is installed and is running and default models are already installed on ollama. +### .env Examples ```bash -# Run lightrag with ollama, mistral-nemo:latest for llm, and bge-m3:latest for embedding -lightrag-server +### Server Configuration +# HOST=0.0.0.0 +PORT=9621 +WORKERS=2 + +### Settings for document indexing +ENABLE_LLM_CACHE_FOR_EXTRACT=true +SUMMARY_LANGUAGE=Chinese +MAX_PARALLEL_INSERT=2 + +### LLM Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) +TIMEOUT=200 +TEMPERATURE=0.0 +MAX_ASYNC=4 +MAX_TOKENS=32768 + +LLM_BINDING=openai +LLM_MODEL=gpt-4o-mini +LLM_BINDING_HOST=https://api.openai.com/v1 +LLM_BINDING_API_KEY=your-api-key + +### Embedding Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) +EMBEDDING_MODEL=bge-m3:latest +EMBEDDING_DIM=1024 +EMBEDDING_BINDING=ollama +EMBEDDING_BINDING_HOST=http://localhost:11434 + +### For JWT Auth +# AUTH_ACCOUNTS='admin:admin123,user1:pass456' +# TOKEN_SECRET=your-key-for-LightRAG-API-Server-xxx +# TOKEN_EXPIRE_HOURS=48 + +# LIGHTRAG_API_KEY=your-secure-api-key-here-123 +# WHITELIST_PATHS=/api/* +# WHITELIST_PATHS=/health,/api/* -# Using an authentication key -lightrag-server --key my-key ``` -#### Running a Lightrag server with lollms default local server as llm and embedding backends - -```bash -# Run lightrag with lollms, mistral-nemo:latest for llm, and bge-m3:latest for embedding -# Configure LLM_BINDING=lollms and EMBEDDING_BINDING=lollms in .env or config.ini -lightrag-server - -# Using an authentication key -lightrag-server --key my-key -``` - -#### Running a Lightrag server with openai server as llm and embedding backends - -```bash -# Run lightrag with openai, GPT-4o-mini for llm, and text-embedding-3-small for embedding -# Configure in .env or config.ini: -# LLM_BINDING=openai -# LLM_MODEL=GPT-4o-mini -# EMBEDDING_BINDING=openai -# EMBEDDING_MODEL=text-embedding-3-small -lightrag-server - -# Using an authentication key -lightrag-server --key my-key -``` - -#### Running a Lightrag server with azure openai server as llm and embedding backends - -```bash -# Run lightrag with azure_openai -# Configure in .env or config.ini: -# LLM_BINDING=azure_openai -# LLM_MODEL=your-model -# EMBEDDING_BINDING=azure_openai -# EMBEDDING_MODEL=your-embedding-model -lightrag-server - -# Using an authentication key -lightrag-server --key my-key -``` - -**Important Notes:** -- For LoLLMs: Make sure the specified models are installed in your LoLLMs instance -- For Ollama: Make sure the specified models are installed in your Ollama instance -- For OpenAI: Ensure you have set up your OPENAI_API_KEY environment variable -- For Azure OpenAI: Build and configure your server as stated in the Prequisites section - -For help on any server, use the --help flag: -```bash -lightrag-server --help -``` - -Note: If you don't need the API functionality, you can install the base package without API support using: -```bash -pip install lightrag-hku -``` ## API Endpoints diff --git a/lightrag/api/__init__.py b/lightrag/api/__init__.py index 5dd9d398..ec1959de 100644 --- a/lightrag/api/__init__.py +++ b/lightrag/api/__init__.py @@ -1 +1 @@ -__api_version__ = "1.2.7" +__api_version__ = "1.2.8" diff --git a/lightrag/api/auth.py b/lightrag/api/auth.py index de02721b..0b61095d 100644 --- a/lightrag/api/auth.py +++ b/lightrag/api/auth.py @@ -7,7 +7,10 @@ from pydantic import BaseModel from .config import global_args -load_dotenv() +# use the .env that is inside the current folder +# allows to use different .env file for each lightrag instance +# the OS environment variables take precedence over the .env file +load_dotenv(dotenv_path=".env", override=False) class TokenPayload(BaseModel): diff --git a/lightrag/api/lightrag_server.py b/lightrag/api/lightrag_server.py index a00eab6c..f23391a9 100644 --- a/lightrag/api/lightrag_server.py +++ b/lightrag/api/lightrag_server.py @@ -50,15 +50,18 @@ from lightrag.kg.shared_storage import ( from fastapi.security import OAuth2PasswordRequestForm from lightrag.api.auth import auth_handler -# Load environment variables -# Updated to use the .env that is inside the current folder -# This update allows the user to put a different.env file for each lightrag folder -load_dotenv(".env") +# use the .env that is inside the current folder +# allows to use different .env file for each lightrag instance +# the OS environment variables take precedence over the .env file +load_dotenv(dotenv_path=".env", override=False) # Initialize config parser config = configparser.ConfigParser() config.read("config.ini") +# Global authentication configuration +auth_configured = bool(auth_handler.accounts) + def create_app(args): # Setup logging @@ -429,9 +432,7 @@ def create_app(args): try: pipeline_status = await get_namespace_data("pipeline_status") - username = os.getenv("AUTH_USERNAME") - password = os.getenv("AUTH_PASSWORD") - if not (username and password): + if not auth_configured: auth_mode = "disabled" else: auth_mode = "enabled" diff --git a/lightrag/api/routers/document_routes.py b/lightrag/api/routers/document_routes.py index 2a7873b8..e30b538f 100644 --- a/lightrag/api/routers/document_routes.py +++ b/lightrag/api/routers/document_routes.py @@ -540,6 +540,7 @@ def create_document_routes( Returns: InsertResponse: A response object containing the upload status and a message. + status can be "success", "duplicated", or error is thrown. Raises: HTTPException: If the file type is not supported (400) or other errors occur (500). @@ -552,6 +553,13 @@ def create_document_routes( ) file_path = doc_manager.input_dir / file.filename + # Check if file already exists + if file_path.exists(): + return InsertResponse( + status="duplicated", + message=f"File '{file.filename}' already exists in the input directory.", + ) + with open(file_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) diff --git a/lightrag/api/run_with_gunicorn.py b/lightrag/api/run_with_gunicorn.py index 8d71ba36..065a12a1 100644 --- a/lightrag/api/run_with_gunicorn.py +++ b/lightrag/api/run_with_gunicorn.py @@ -11,9 +11,10 @@ from lightrag.api.utils_api import parse_args, display_splash_screen, check_env_ from lightrag.kg.shared_storage import initialize_share_data, finalize_share_data from dotenv import load_dotenv -# Updated to use the .env that is inside the current folder -# This update allows the user to put a different.env file for each lightrag folder -load_dotenv(".env") +# use the .env that is inside the current folder +# allows to use different .env file for each lightrag instance +# the OS environment variables take precedence over the .env file +load_dotenv(dotenv_path=".env", override=False) def check_and_install_dependencies(): diff --git a/lightrag/api/utils_api.py b/lightrag/api/utils_api.py index 62ceecce..cbc28979 100644 --- a/lightrag/api/utils_api.py +++ b/lightrag/api/utils_api.py @@ -2,18 +2,17 @@ Utility functions for the LightRAG API. """ -import argparse import os -import sys +import argparse from typing import Optional, List, Tuple - +import sys from ascii_colors import ASCIIColors -from dotenv import load_dotenv +from lightrag.api import __api_version__ as api_version +from lightrag import __version__ as core_version from fastapi import HTTPException, Security, Request, status +from dotenv import load_dotenv from fastapi.security import APIKeyHeader, OAuth2PasswordBearer from starlette.status import HTTP_403_FORBIDDEN - -from lightrag.api import __api_version__ from .auth import auth_handler from .config import ollama_server_infos from ..prompt import PROMPTS @@ -25,9 +24,7 @@ def check_env_file(): Returns True if should continue, False if should exit. """ if not os.path.exists(".env"): - warning_msg = ( - "Warning: .env file not found. Some features may not work properly." - ) + warning_msg = "Warning: Startup directory must contain .env file for multi-instance support." ASCIIColors.yellow(warning_msg) # Check if running in interactive terminal @@ -39,8 +36,10 @@ def check_env_file(): return True -# Load environment variables -load_dotenv() +# use the .env that is inside the current folder +# allows to use different .env file for each lightrag instance +# the OS environment variables take precedence over the .env file +load_dotenv(dotenv_path=".env", override=False) # Get whitelist paths from environment variable, only once during initialization default_whitelist = "/health,/api/*" @@ -182,7 +181,7 @@ def display_splash_screen(args: argparse.Namespace) -> None: # Banner ASCIIColors.cyan(f""" ╔══════════════════════════════════════════════════════════════╗ - ║ 🚀 LightRAG Server v{__api_version__} ║ + ║ 🚀 LightRAG Server v{core_version}/{api_version} ║ ║ Fast, Lightweight RAG Server Implementation ║ ╚══════════════════════════════════════════════════════════════╝ """) diff --git a/lightrag/api/webui/assets/index-CD5HxTy1.css b/lightrag/api/webui/assets/index-CD5HxTy1.css new file mode 100644 index 00000000..a0ab321b --- /dev/null +++ b/lightrag/api/webui/assets/index-CD5HxTy1.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(.936 .032 17.717);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-950:oklch(.258 .092 26.042);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-yellow-600:oklch(.681 .162 75.834);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-700:oklch(.508 .118 165.612);--color-teal-100:oklch(.953 .051 180.801);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-violet-700:oklch(.491 .27 292.581);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-lg:32rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-xs:.125rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:color-mix(in oklab,var(--ring)50%,transparent)}body{background-color:var(--background);color:var(--foreground)}*{scrollbar-color:initial;scrollbar-width:initial}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-\[-1px\]{top:-1px;right:-1px;bottom:-1px;left:-1px}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.\!left-1\/2{left:50%!important}.\!left-\[25\%\]{left:25%!important}.\!left-\[75\%\]{left:75%!important}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.left-\[calc\(1rem\+2\.5rem\)\]{left:3.5rem}.z-10{z-index:10}.z-50{z-index:50}.z-60{z-index:60}.\!container{width:100%!important}@media (width>=40rem){.\!container{max-width:40rem!important}}@media (width>=48rem){.\!container{max-width:48rem!important}}@media (width>=64rem){.\!container{max-width:64rem!important}}@media (width>=80rem){.\!container{max-width:80rem!important}}@media (width>=96rem){.\!container{max-width:96rem!important}}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.\!mx-4{margin-inline:calc(var(--spacing)*4)!important}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-8{margin-right:calc(var(--spacing)*8)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!inline{display:inline!important}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.\!size-full{width:100%!important;height:100%!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-full{width:100%;height:100%}.h-1\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-52{height:calc(var(--spacing)*52)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-8{max-height:calc(var(--spacing)*8)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[40vh\]{max-height:40vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[300px\]{max-height:300px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[7\.5em\]{min-height:7.5em}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-56{width:calc(var(--spacing)*56)}.w-\[1px\]{width:1px}.w-\[200px\]{width:200px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.max-w-80{max-width:calc(var(--spacing)*80)}.max-w-\[80\%\]{max-width:80%}.max-w-\[250px\]{max-width:250px}.max-w-\[480px\]{max-width:480px}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-45{min-width:calc(var(--spacing)*45)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[180px\]{min-width:180px}.min-w-\[300px\]{min-width:300px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.\!-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)!important}.\!translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)!important}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\!overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.\!border-input{border-color:var(--input)!important}.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive)50%,transparent)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-400{border-color:var(--color-gray-400)}.border-input{border-color:var(--input)}.border-muted-foreground\/25{border-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}.border-muted-foreground\/50{border-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}.border-primary{border-color:var(--primary)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.\!bg-background{background-color:var(--background)!important}.\!bg-emerald-400{background-color:var(--color-emerald-400)!important}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}.bg-background\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-card\/95{background-color:color-mix(in oklab,var(--card)95%,transparent)}.bg-destructive{background-color:var(--destructive)}.bg-foreground\/10{background-color:color-mix(in oklab,var(--foreground)10%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-primary-foreground\/60{background-color:color-mix(in oklab,var(--primary-foreground)60%,transparent)}.bg-primary\/5{background-color:color-mix(in oklab,var(--primary)5%,transparent)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-emerald-50{--tw-gradient-from:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-100{--tw-gradient-to:var(--color-teal-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-16{padding:calc(var(--spacing)*16)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-6{padding-block:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-zinc-50{color:var(--color-zinc-50)!important}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground{color:var(--foreground)}.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground{color:var(--muted-foreground)}.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-primary\/60{color:color-mix(in oklab,var(--primary)60%,transparent)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-violet-700{color:var(--color-violet-700)}.text-yellow-600{color:var(--color-yellow-600)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-800{color:var(--color-zinc-800)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(34\,197\,94\,0\.4\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e66);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(239\,68\,68\,0\.4\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef444466);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_-1px_0_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:inset 0 -1px 0 var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-2000{--tw-duration:2s;transition-duration:2s}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-2000{animation-duration:2s}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:w-fit:hover{width:fit-content}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-background\/60:hover{background-color:color-mix(in oklab,var(--background)60%,transparent)}.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-muted\/25:hover{background-color:color-mix(in oklab,var(--muted)25%,transparent)}.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--primary)5%,transparent)}.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,var(--primary)20%,transparent)}.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}.hover\:bg-zinc-300:hover{background-color:var(--color-zinc-300)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-0:focus{outline-style:var(--tw-outline-style);outline-width:0}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:relative:focus-visible{position:relative}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:right-0:active{right:calc(var(--spacing)*0)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[selected\=\'true\'\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[state\=active\]\:visible[data-state=active]{visibility:visible}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=inactive\]\:invisible[data-state=inactive]{visibility:hidden}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}.supports-\[backdrop-filter\]\:bg-card\/75{background-color:color-mix(in oklab,var(--card)75%,transparent)}}@media (width>=40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:max-w-\[600px\]{max-width:600px}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:px-5{padding-inline:calc(var(--spacing)*5)}.sm\:text-left{text-align:left}}@media (width>=48rem){.md\:inline-block{display:inline-block}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.dark\:border-gray-600:is(.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:is(.dark *){border-color:var(--color-gray-700)}.dark\:bg-amber-900:is(.dark *){background-color:var(--color-amber-900)}.dark\:bg-gray-100\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-gray-100)20%,transparent)}.dark\:bg-gray-800\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-zinc-700:is(.dark *){background-color:var(--color-zinc-700)}.dark\:from-gray-900:is(.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800:is(.dark *){--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-amber-200:is(.dark *){color:var(--color-amber-200)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:is(.dark *){color:var(--color-gray-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}@media (hover:hover){.dark\:hover\:bg-gray-700:is(.dark *):hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:is(.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-zinc-600:is(.dark *):hover{background-color:var(--color-zinc-600)}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-inner-spin-button\]\:opacity-100::-webkit-inner-spin-button{opacity:1}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:opacity-100::-webkit-outer-spin-button{opacity:1}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:text-destructive>svg{color:var(--destructive)}.\[\&\>svg\]\:text-foreground>svg{color:var(--foreground)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}:root{--background:#fff;--foreground:#09090b;--card:#fff;--card-foreground:#09090b;--popover:#fff;--popover-foreground:#09090b;--primary:#18181b;--primary-foreground:#fafafa;--secondary:#f4f4f5;--secondary-foreground:#18181b;--muted:#f4f4f5;--muted-foreground:#71717a;--accent:#f4f4f5;--accent-foreground:#18181b;--destructive:#ef4444;--destructive-foreground:#fafafa;--border:#e4e4e7;--input:#e4e4e7;--ring:#09090b;--chart-1:#e76e50;--chart-2:#2a9d90;--chart-3:#274754;--chart-4:#e8c468;--chart-5:#f4a462;--radius:.6rem;--sidebar-background:#fafafa;--sidebar-foreground:#3f3f46;--sidebar-primary:#18181b;--sidebar-primary-foreground:#fafafa;--sidebar-accent:#f4f4f5;--sidebar-accent-foreground:#18181b;--sidebar-border:#e5e7eb;--sidebar-ring:#3b82f6}.dark{--background:#09090b;--foreground:#fafafa;--card:#09090b;--card-foreground:#fafafa;--popover:#09090b;--popover-foreground:#fafafa;--primary:#fafafa;--primary-foreground:#18181b;--secondary:#27272a;--secondary-foreground:#fafafa;--muted:#27272a;--muted-foreground:#a1a1aa;--accent:#27272a;--accent-foreground:#fafafa;--destructive:#7f1d1d;--destructive-foreground:#fafafa;--border:#27272a;--input:#27272a;--ring:#d4d4d8;--chart-1:#2662d9;--chart-2:#2eb88a;--chart-3:#e88c30;--chart-4:#af57db;--chart-5:#e23670;--sidebar-background:#18181b;--sidebar-foreground:#f4f4f5;--sidebar-primary:#1d4ed8;--sidebar-primary-foreground:#fff;--sidebar-accent:#27272a;--sidebar-accent-foreground:#f4f4f5;--sidebar-border:#27272a;--sidebar-ring:#3b82f6}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background-color:#ccc;border-radius:5px}::-webkit-scrollbar-track{background-color:#f2f2f2}.dark ::-webkit-scrollbar-thumb{background-color:#e6e6e6}.dark ::-webkit-scrollbar-track{background-color:#000}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}:root{--sigma-background-color:#fff;--sigma-controls-background-color:#fff;--sigma-controls-background-color-hover:rgba(0,0,0,.2);--sigma-controls-border-color:rgba(0,0,0,.2);--sigma-controls-color:#000;--sigma-controls-zindex:100;--sigma-controls-margin:5px;--sigma-controls-size:30px}div.react-sigma{height:100%;width:100%;position:relative;background:var(--sigma-background-color)}div.sigma-container{height:100%;width:100%}.react-sigma-controls{position:absolute;z-index:var(--sigma-controls-zindex);border:2px solid var(--sigma-controls-border-color);border-radius:4px;color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color)}.react-sigma-controls.bottom-right{bottom:var(--sigma-controls-margin);right:var(--sigma-controls-margin)}.react-sigma-controls.bottom-left{bottom:var(--sigma-controls-margin);left:var(--sigma-controls-margin)}.react-sigma-controls.top-right{top:var(--sigma-controls-margin);right:var(--sigma-controls-margin)}.react-sigma-controls.top-left{top:var(--sigma-controls-margin);left:var(--sigma-controls-margin)}.react-sigma-controls:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.react-sigma-controls:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.react-sigma-control{width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-color:var(--sigma-controls-background-color);border-bottom:1px solid var(--sigma-controls-border-color)}.react-sigma-control:last-child{border-bottom:none}.react-sigma-control>*{box-sizing:border-box}.react-sigma-control>button{display:block;border:none;margin:0;padding:0;width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-position:center;background-size:50%;background-repeat:no-repeat;background-color:var(--sigma-controls-background-color);clip:rect(0,0,0,0)}.react-sigma-control>button:hover{background-color:var(--sigma-controls-background-color-hover)}.react-sigma-search{background-color:var(--sigma-controls-background-color)}.react-sigma-search label{visibility:hidden}.react-sigma-search input{color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color);font-size:1em;width:100%;margin:0;border:none;padding:var(--sigma-controls-margin);box-sizing:border-box}:root{--sigma-grey-color:#ccc}.react-sigma .option.hoverable{cursor:pointer!important}.react-sigma .text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.react-sigma .react-select__clear-indicator{cursor:pointer!important}.react-sigma .text-muted{color:var(--sigma-grey-color)}.react-sigma .text-italic{font-style:italic}.react-sigma .text-center{text-align:center}.react-sigma .graph-search{min-width:250px}.react-sigma .graph-search .option{padding:2px 8px}.react-sigma .graph-search .dropdown-indicator{font-size:1.25em;padding:4px}.react-sigma .graph-search .option.selected{background-color:var(--sigma-grey-color)}.react-sigma .node .render{position:relative;display:inline-block;width:1em;height:1em;border-radius:1em;background-color:var(--sigma-grey-color);margin-right:8px}.react-sigma .node{display:flex;flex-direction:row;align-items:center}.react-sigma .node .render{flex-grow:0;flex-shrink:0;margin-right:0 .25em}.react-sigma .node .label{flex-grow:1;flex-shrink:1}.react-sigma .edge{display:flex;flex-direction:column;align-items:flex-start;flex-grow:0;flex-shrink:0;flex-wrap:nowrap}.react-sigma .edge .node{font-size:.7em}.react-sigma .edge .body{display:flex;flex-direction:row;flex-grow:1;flex-shrink:1;min-height:.6em}.react-sigma .edge .body .render{display:flex;flex-direction:column;margin:0 2px}.react-sigma .edge .body .render .dash,.react-sigma .edge .body .render .dotted{display:inline-block;width:0;margin:0 2px;border:2px solid #ccc;flex-grow:1;flex-shrink:1}.react-sigma .edge .body .render .dotted{border-style:dotted}.react-sigma .edge .body .render .arrow{width:0;height:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.6em solid red;flex-shrink:0;flex-grow:0;border-left-width:.3em;border-right-width:.3em}.react-sigma .edge .body .label{flex-grow:1;flex-shrink:1;text-align:center} diff --git a/lightrag/api/webui/assets/index-CbzkrOyx.css b/lightrag/api/webui/assets/index-CbzkrOyx.css deleted file mode 100644 index d29a2fd7..00000000 --- a/lightrag/api/webui/assets/index-CbzkrOyx.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(.936 .032 17.717);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-950:oklch(.258 .092 26.042);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-yellow-600:oklch(.681 .162 75.834);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-700:oklch(.508 .118 165.612);--color-teal-100:oklch(.953 .051 180.801);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-violet-700:oklch(.491 .27 292.581);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-lg:32rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-xs:.125rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:color-mix(in oklab,var(--ring)50%,transparent)}body{background-color:var(--background);color:var(--foreground)}*{scrollbar-color:initial;scrollbar-width:initial}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.\!left-1\/2{left:50%!important}.\!left-\[25\%\]{left:25%!important}.\!left-\[75\%\]{left:75%!important}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.left-\[calc\(1rem\+2\.5rem\)\]{left:3.5rem}.z-10{z-index:10}.z-50{z-index:50}.z-60{z-index:60}.z-\[9999\]{z-index:9999}.\!container{width:100%!important}@media (width>=40rem){.\!container{max-width:40rem!important}}@media (width>=48rem){.\!container{max-width:48rem!important}}@media (width>=64rem){.\!container{max-width:64rem!important}}@media (width>=80rem){.\!container{max-width:80rem!important}}@media (width>=96rem){.\!container{max-width:96rem!important}}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.\!mx-4{margin-inline:calc(var(--spacing)*4)!important}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-8{margin-right:calc(var(--spacing)*8)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!inline{display:inline!important}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.\!size-full{width:100%!important;height:100%!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-full{width:100%;height:100%}.h-1\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-52{height:calc(var(--spacing)*52)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-8{max-height:calc(var(--spacing)*8)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[40vh\]{max-height:40vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[300px\]{max-height:300px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[7\.5em\]{min-height:7.5em}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-56{width:calc(var(--spacing)*56)}.w-\[1px\]{width:1px}.w-\[200px\]{width:200px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.max-w-80{max-width:calc(var(--spacing)*80)}.max-w-\[80\%\]{max-width:80%}.max-w-\[480px\]{max-width:480px}.max-w-\[800px\]{max-width:800px}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-24{min-width:calc(var(--spacing)*24)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[180px\]{min-width:180px}.min-w-\[300px\]{min-width:300px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.\!-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)!important}.\!translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)!important}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.\!border-none{--tw-border-style:none;border-style:none!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.\!border-input{border-color:var(--input)!important}.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive)50%,transparent)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-400{border-color:var(--color-gray-400)}.border-input{border-color:var(--input)}.border-muted-foreground\/25{border-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}.border-muted-foreground\/50{border-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}.border-primary{border-color:var(--primary)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.\!bg-background{background-color:var(--background)!important}.\!bg-emerald-400{background-color:var(--color-emerald-400)!important}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}.bg-background\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/95{background-color:color-mix(in oklab,var(--color-black)95%,transparent)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive{background-color:var(--destructive)}.bg-foreground\/10{background-color:color-mix(in oklab,var(--foreground)10%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-primary-foreground\/60{background-color:color-mix(in oklab,var(--primary-foreground)60%,transparent)}.bg-primary\/5{background-color:color-mix(in oklab,var(--primary)5%,transparent)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-emerald-50{--tw-gradient-from:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-100{--tw-gradient-to:var(--color-teal-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-16{padding:calc(var(--spacing)*16)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-6{padding-block:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-zinc-50{color:var(--color-zinc-50)!important}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground{color:var(--foreground)}.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground{color:var(--muted-foreground)}.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-primary\/60{color:color-mix(in oklab,var(--primary)60%,transparent)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.text-yellow-600{color:var(--color-yellow-600)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-800{color:var(--color-zinc-800)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(34\,197\,94\,0\.4\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e66);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(239\,68\,68\,0\.4\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef444466);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-2000{--tw-duration:2s;transition-duration:2s}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-2000{animation-duration:2s}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:w-fit:hover{width:fit-content}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-background\/60:hover{background-color:color-mix(in oklab,var(--background)60%,transparent)}.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-muted\/25:hover{background-color:color-mix(in oklab,var(--muted)25%,transparent)}.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--primary)5%,transparent)}.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,var(--primary)20%,transparent)}.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}.hover\:bg-zinc-300:hover{background-color:var(--color-zinc-300)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-0:focus{outline-style:var(--tw-outline-style);outline-width:0}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:relative:focus-visible{position:relative}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:right-0:active{right:calc(var(--spacing)*0)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[selected\=\'true\'\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[state\=active\]\:visible[data-state=active]{visibility:visible}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=inactive\]\:invisible[data-state=inactive]{visibility:hidden}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}@media (width>=40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:max-w-\[600px\]{max-width:600px}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:px-5{padding-inline:calc(var(--spacing)*5)}.sm\:text-left{text-align:left}}@media (width>=48rem){.md\:inline-block{display:inline-block}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.dark\:border-gray-600:is(.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:is(.dark *){border-color:var(--color-gray-700)}.dark\:bg-amber-900:is(.dark *){background-color:var(--color-amber-900)}.dark\:bg-gray-100\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-gray-100)20%,transparent)}.dark\:bg-gray-800\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-white\/95:is(.dark *){background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.dark\:bg-zinc-700:is(.dark *){background-color:var(--color-zinc-700)}.dark\:from-gray-900:is(.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800:is(.dark *){--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-amber-200:is(.dark *){color:var(--color-amber-200)}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:is(.dark *){color:var(--color-gray-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}@media (hover:hover){.dark\:hover\:bg-gray-700:is(.dark *):hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:is(.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-zinc-600:is(.dark *):hover{background-color:var(--color-zinc-600)}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-inner-spin-button\]\:opacity-100::-webkit-inner-spin-button{opacity:1}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:opacity-100::-webkit-outer-spin-button{opacity:1}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:text-destructive>svg{color:var(--destructive)}.\[\&\>svg\]\:text-foreground>svg{color:var(--foreground)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}:root{--background:#fff;--foreground:#09090b;--card:#fff;--card-foreground:#09090b;--popover:#fff;--popover-foreground:#09090b;--primary:#18181b;--primary-foreground:#fafafa;--secondary:#f4f4f5;--secondary-foreground:#18181b;--muted:#f4f4f5;--muted-foreground:#71717a;--accent:#f4f4f5;--accent-foreground:#18181b;--destructive:#ef4444;--destructive-foreground:#fafafa;--border:#e4e4e7;--input:#e4e4e7;--ring:#09090b;--chart-1:#e76e50;--chart-2:#2a9d90;--chart-3:#274754;--chart-4:#e8c468;--chart-5:#f4a462;--radius:.6rem;--sidebar-background:#fafafa;--sidebar-foreground:#3f3f46;--sidebar-primary:#18181b;--sidebar-primary-foreground:#fafafa;--sidebar-accent:#f4f4f5;--sidebar-accent-foreground:#18181b;--sidebar-border:#e5e7eb;--sidebar-ring:#3b82f6}.dark{--background:#09090b;--foreground:#fafafa;--card:#09090b;--card-foreground:#fafafa;--popover:#09090b;--popover-foreground:#fafafa;--primary:#fafafa;--primary-foreground:#18181b;--secondary:#27272a;--secondary-foreground:#fafafa;--muted:#27272a;--muted-foreground:#a1a1aa;--accent:#27272a;--accent-foreground:#fafafa;--destructive:#7f1d1d;--destructive-foreground:#fafafa;--border:#27272a;--input:#27272a;--ring:#d4d4d8;--chart-1:#2662d9;--chart-2:#2eb88a;--chart-3:#e88c30;--chart-4:#af57db;--chart-5:#e23670;--sidebar-background:#18181b;--sidebar-foreground:#f4f4f5;--sidebar-primary:#1d4ed8;--sidebar-primary-foreground:#fff;--sidebar-accent:#27272a;--sidebar-accent-foreground:#f4f4f5;--sidebar-border:#27272a;--sidebar-ring:#3b82f6}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background-color:#ccc;border-radius:5px}::-webkit-scrollbar-track{background-color:#f2f2f2}.dark ::-webkit-scrollbar-thumb{background-color:#e6e6e6}.dark ::-webkit-scrollbar-track{background-color:#000}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}:root{--sigma-background-color:#fff;--sigma-controls-background-color:#fff;--sigma-controls-background-color-hover:rgba(0,0,0,.2);--sigma-controls-border-color:rgba(0,0,0,.2);--sigma-controls-color:#000;--sigma-controls-zindex:100;--sigma-controls-margin:5px;--sigma-controls-size:30px}div.react-sigma{height:100%;width:100%;position:relative;background:var(--sigma-background-color)}div.sigma-container{height:100%;width:100%}.react-sigma-controls{position:absolute;z-index:var(--sigma-controls-zindex);border:2px solid var(--sigma-controls-border-color);border-radius:4px;color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color)}.react-sigma-controls.bottom-right{bottom:var(--sigma-controls-margin);right:var(--sigma-controls-margin)}.react-sigma-controls.bottom-left{bottom:var(--sigma-controls-margin);left:var(--sigma-controls-margin)}.react-sigma-controls.top-right{top:var(--sigma-controls-margin);right:var(--sigma-controls-margin)}.react-sigma-controls.top-left{top:var(--sigma-controls-margin);left:var(--sigma-controls-margin)}.react-sigma-controls:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.react-sigma-controls:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.react-sigma-control{width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-color:var(--sigma-controls-background-color);border-bottom:1px solid var(--sigma-controls-border-color)}.react-sigma-control:last-child{border-bottom:none}.react-sigma-control>*{box-sizing:border-box}.react-sigma-control>button{display:block;border:none;margin:0;padding:0;width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-position:center;background-size:50%;background-repeat:no-repeat;background-color:var(--sigma-controls-background-color);clip:rect(0,0,0,0)}.react-sigma-control>button:hover{background-color:var(--sigma-controls-background-color-hover)}.react-sigma-search{background-color:var(--sigma-controls-background-color)}.react-sigma-search label{visibility:hidden}.react-sigma-search input{color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color);font-size:1em;width:100%;margin:0;border:none;padding:var(--sigma-controls-margin);box-sizing:border-box}:root{--sigma-grey-color:#ccc}.react-sigma .option.hoverable{cursor:pointer!important}.react-sigma .text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.react-sigma .react-select__clear-indicator{cursor:pointer!important}.react-sigma .text-muted{color:var(--sigma-grey-color)}.react-sigma .text-italic{font-style:italic}.react-sigma .text-center{text-align:center}.react-sigma .graph-search{min-width:250px}.react-sigma .graph-search .option{padding:2px 8px}.react-sigma .graph-search .dropdown-indicator{font-size:1.25em;padding:4px}.react-sigma .graph-search .option.selected{background-color:var(--sigma-grey-color)}.react-sigma .node .render{position:relative;display:inline-block;width:1em;height:1em;border-radius:1em;background-color:var(--sigma-grey-color);margin-right:8px}.react-sigma .node{display:flex;flex-direction:row;align-items:center}.react-sigma .node .render{flex-grow:0;flex-shrink:0;margin-right:0 .25em}.react-sigma .node .label{flex-grow:1;flex-shrink:1}.react-sigma .edge{display:flex;flex-direction:column;align-items:flex-start;flex-grow:0;flex-shrink:0;flex-wrap:nowrap}.react-sigma .edge .node{font-size:.7em}.react-sigma .edge .body{display:flex;flex-direction:row;flex-grow:1;flex-shrink:1;min-height:.6em}.react-sigma .edge .body .render{display:flex;flex-direction:column;margin:0 2px}.react-sigma .edge .body .render .dash,.react-sigma .edge .body .render .dotted{display:inline-block;width:0;margin:0 2px;border:2px solid #ccc;flex-grow:1;flex-shrink:1}.react-sigma .edge .body .render .dotted{border-style:dotted}.react-sigma .edge .body .render .arrow{width:0;height:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.6em solid red;flex-shrink:0;flex-grow:0;border-left-width:.3em;border-right-width:.3em}.react-sigma .edge .body .label{flex-grow:1;flex-shrink:1;text-align:center} diff --git a/lightrag/api/webui/assets/index-DTDDxtXc.js b/lightrag/api/webui/assets/index-raheqJeu.js similarity index 73% rename from lightrag/api/webui/assets/index-DTDDxtXc.js rename to lightrag/api/webui/assets/index-raheqJeu.js index aabb0584..fb574679 100644 --- a/lightrag/api/webui/assets/index-DTDDxtXc.js +++ b/lightrag/api/webui/assets/index-raheqJeu.js @@ -1,4 +1,4 @@ -var X6=Object.defineProperty;var Z6=(e,t,n)=>t in e?X6(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Xr=(e,t,n)=>Z6(e,typeof t!="symbol"?t+"":t,n);function Q6(e,t){for(var n=0;nr[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();var df=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function J6(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}),n}var qh={exports:{}},Zl={};/** +var eq=Object.defineProperty;var tq=(e,t,n)=>t in e?eq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Xr=(e,t,n)=>tq(e,typeof t!="symbol"?t+"":t,n);function nq(e,t){for(var n=0;nr[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();var df=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function rq(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}),n}var qh={exports:{}},Zl={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ var X6=Object.defineProperty;var Z6=(e,t,n)=>t in e?X6(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var H_;function e9(){if(H_)return Zl;H_=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,a,o){var s=null;if(o!==void 0&&(s=""+o),a.key!==void 0&&(s=""+a.key),"key"in a){o={};for(var u in a)u!=="key"&&(o[u]=a[u])}else o=a;return a=o.ref,{$$typeof:e,type:r,key:s,ref:a!==void 0?a:null,props:o}}return Zl.Fragment=t,Zl.jsx=n,Zl.jsxs=n,Zl}var $_;function t9(){return $_||($_=1,qh.exports=e9()),qh.exports}var E=t9(),Vh={exports:{}},it={};/** + */var W_;function aq(){if(W_)return Zl;W_=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,a,o){var s=null;if(o!==void 0&&(s=""+o),a.key!==void 0&&(s=""+a.key),"key"in a){o={};for(var u in a)u!=="key"&&(o[u]=a[u])}else o=a;return a=o.ref,{$$typeof:e,type:r,key:s,ref:a!==void 0?a:null,props:o}}return Zl.Fragment=t,Zl.jsx=n,Zl.jsxs=n,Zl}var Y_;function oq(){return Y_||(Y_=1,qh.exports=aq()),qh.exports}var E=oq(),Vh={exports:{}},it={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ var X6=Object.defineProperty;var Z6=(e,t,n)=>t in e?X6(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var q_;function n9(){if(q_)return it;q_=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),s=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),g=Symbol.iterator;function m(L){return L===null||typeof L!="object"?null:(L=g&&L[g]||L["@@iterator"],typeof L=="function"?L:null)}var b={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v=Object.assign,y={};function k(L,V,B){this.props=L,this.context=V,this.refs=y,this.updater=B||b}k.prototype.isReactComponent={},k.prototype.setState=function(L,V){if(typeof L!="object"&&typeof L!="function"&&L!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,L,V,"setState")},k.prototype.forceUpdate=function(L){this.updater.enqueueForceUpdate(this,L,"forceUpdate")};function A(){}A.prototype=k.prototype;function x(L,V,B){this.props=L,this.context=V,this.refs=y,this.updater=B||b}var R=x.prototype=new A;R.constructor=x,v(R,k.prototype),R.isPureReactComponent=!0;var O=Array.isArray,C={H:null,A:null,T:null,S:null},_=Object.prototype.hasOwnProperty;function N(L,V,B,P,K,ee){return B=ee.ref,{$$typeof:e,type:L,key:V,ref:B!==void 0?B:null,props:ee}}function M(L,V){return N(L.type,V,void 0,void 0,void 0,L.props)}function D(L){return typeof L=="object"&&L!==null&&L.$$typeof===e}function I(L){var V={"=":"=0",":":"=2"};return"$"+L.replace(/[=:]/g,function(B){return V[B]})}var H=/\/+/g;function $(L,V){return typeof L=="object"&&L!==null&&L.key!=null?I(""+L.key):V.toString(36)}function U(){}function W(L){switch(L.status){case"fulfilled":return L.value;case"rejected":throw L.reason;default:switch(typeof L.status=="string"?L.then(U,U):(L.status="pending",L.then(function(V){L.status==="pending"&&(L.status="fulfilled",L.value=V)},function(V){L.status==="pending"&&(L.status="rejected",L.reason=V)})),L.status){case"fulfilled":return L.value;case"rejected":throw L.reason}}throw L}function Q(L,V,B,P,K){var ee=typeof L;(ee==="undefined"||ee==="boolean")&&(L=null);var Z=!1;if(L===null)Z=!0;else switch(ee){case"bigint":case"string":case"number":Z=!0;break;case"object":switch(L.$$typeof){case e:case t:Z=!0;break;case p:return Z=L._init,Q(Z(L._payload),V,B,P,K)}}if(Z)return K=K(L),Z=P===""?"."+$(L,0):P,O(K)?(B="",Z!=null&&(B=Z.replace(H,"$&/")+"/"),Q(K,V,B,"",function(ke){return ke})):K!=null&&(D(K)&&(K=M(K,B+(K.key==null||L&&L.key===K.key?"":(""+K.key).replace(H,"$&/")+"/")+Z)),V.push(K)),1;Z=0;var J=P===""?".":P+":";if(O(L))for(var ae=0;aet in e?X6(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var W_;function a9(){return W_||(W_=1,function(e){function t(G,j){var z=G.length;G.push(j);e:for(;0>>1,L=G[Y];if(0>>1;Ya(P,z))Ka(ee,P)?(G[Y]=ee,G[K]=z,Y=K):(G[Y]=P,G[B]=z,Y=B);else if(Ka(ee,z))G[Y]=ee,G[K]=z,Y=K;else break e}}return j}function a(G,j){var z=G.sortIndex-j.sortIndex;return z!==0?z:G.id-j.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var c=[],d=[],p=1,g=null,m=3,b=!1,v=!1,y=!1,k=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,x=typeof setImmediate<"u"?setImmediate:null;function R(G){for(var j=n(d);j!==null;){if(j.callback===null)r(d);else if(j.startTime<=G)r(d),j.sortIndex=j.expirationTime,t(c,j);else break;j=n(d)}}function O(G){if(y=!1,R(G),!v)if(n(c)!==null)v=!0,W();else{var j=n(d);j!==null&&Q(O,j.startTime-G)}}var C=!1,_=-1,N=5,M=-1;function D(){return!(e.unstable_now()-MG&&D());){var Y=g.callback;if(typeof Y=="function"){g.callback=null,m=g.priorityLevel;var L=Y(g.expirationTime<=G);if(G=e.unstable_now(),typeof L=="function"){g.callback=L,R(G),j=!0;break t}g===n(c)&&r(c),R(G)}else r(c);g=n(c)}if(g!==null)j=!0;else{var V=n(d);V!==null&&Q(O,V.startTime-G),j=!1}}break e}finally{g=null,m=z,b=!1}j=void 0}}finally{j?H():C=!1}}}var H;if(typeof x=="function")H=function(){x(I)};else if(typeof MessageChannel<"u"){var $=new MessageChannel,U=$.port2;$.port1.onmessage=I,H=function(){U.postMessage(null)}}else H=function(){k(I,0)};function W(){C||(C=!0,H())}function Q(G,j){_=k(function(){G(e.unstable_now())},j)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(G){G.callback=null},e.unstable_continueExecution=function(){v||b||(v=!0,W())},e.unstable_forceFrameRate=function(G){0>G||125Y?(G.sortIndex=z,t(d,G),n(c)===null&&G===n(d)&&(y?(A(_),_=-1):y=!0,Q(O,z-Y))):(G.sortIndex=L,t(c,G),v||b||(v=!0,W())),G},e.unstable_shouldYield=D,e.unstable_wrapCallback=function(G){var j=m;return function(){var z=m;m=j;try{return G.apply(this,arguments)}finally{m=z}}}}(Kh)),Kh}var Y_;function o9(){return Y_||(Y_=1,Yh.exports=a9()),Yh.exports}var Xh={exports:{}},wn={};/** + */var Z_;function lq(){return Z_||(Z_=1,function(e){function t(G,j){var z=G.length;G.push(j);e:for(;0>>1,L=G[Y];if(0>>1;Ya(P,z))Ka(ee,P)?(G[Y]=ee,G[K]=z,Y=K):(G[Y]=P,G[B]=z,Y=B);else if(Ka(ee,z))G[Y]=ee,G[K]=z,Y=K;else break e}}return j}function a(G,j){var z=G.sortIndex-j.sortIndex;return z!==0?z:G.id-j.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var c=[],d=[],p=1,g=null,m=3,b=!1,y=!1,v=!1,x=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function R(G){for(var j=n(d);j!==null;){if(j.callback===null)r(d);else if(j.startTime<=G)r(d),j.sortIndex=j.expirationTime,t(c,j);else break;j=n(d)}}function O(G){if(v=!1,R(G),!y)if(n(c)!==null)y=!0,W();else{var j=n(d);j!==null&&Z(O,j.startTime-G)}}var N=!1,_=-1,C=5,M=-1;function D(){return!(e.unstable_now()-MG&&D());){var Y=g.callback;if(typeof Y=="function"){g.callback=null,m=g.priorityLevel;var L=Y(g.expirationTime<=G);if(G=e.unstable_now(),typeof L=="function"){g.callback=L,R(G),j=!0;break t}g===n(c)&&r(c),R(G)}else r(c);g=n(c)}if(g!==null)j=!0;else{var V=n(d);V!==null&&Z(O,V.startTime-G),j=!1}}break e}finally{g=null,m=z,b=!1}j=void 0}}finally{j?H():N=!1}}}var H;if(typeof k=="function")H=function(){k(I)};else if(typeof MessageChannel<"u"){var $=new MessageChannel,U=$.port2;$.port1.onmessage=I,H=function(){U.postMessage(null)}}else H=function(){x(I,0)};function W(){N||(N=!0,H())}function Z(G,j){_=x(function(){G(e.unstable_now())},j)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(G){G.callback=null},e.unstable_continueExecution=function(){y||b||(y=!0,W())},e.unstable_forceFrameRate=function(G){0>G||125Y?(G.sortIndex=z,t(d,G),n(c)===null&&G===n(d)&&(v?(A(_),_=-1):v=!0,Z(O,z-Y))):(G.sortIndex=L,t(c,G),y||b||(y=!0,W())),G},e.unstable_shouldYield=D,e.unstable_wrapCallback=function(G){var j=m;return function(){var z=m;m=j;try{return G.apply(this,arguments)}finally{m=z}}}}(Kh)),Kh}var Q_;function uq(){return Q_||(Q_=1,Yh.exports=lq()),Yh.exports}var Xh={exports:{}},wn={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ var X6=Object.defineProperty;var Z6=(e,t,n)=>t in e?X6(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var K_;function i9(){if(K_)return wn;K_=1;var e=Hf();function t(c){var d="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Xh.exports=i9(),Xh.exports}/** + */var J_;function cq(){if(J_)return wn;J_=1;var e=Hf();function t(c){var d="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Xh.exports=cq(),Xh.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ var X6=Object.defineProperty;var Z6=(e,t,n)=>t in e?X6(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Z_;function s9(){if(Z_)return Ql;Z_=1;var e=o9(),t=Hf(),n=Lz();function r(i){var l="https://react.dev/errors/"+i;if(1)":-1S||X[h]!==oe[S]){var be=` -`+X[h].replace(" at new "," at ");return i.displayName&&be.includes("")&&(be=be.replace("",i.displayName)),be}while(1<=h&&0<=S);break}}}finally{W=!1,Error.prepareStackTrace=f}return(f=i?i.displayName||i.name:"")?U(f):""}function G(i){switch(i.tag){case 26:case 27:case 5:return U(i.type);case 16:return U("Lazy");case 13:return U("Suspense");case 19:return U("SuspenseList");case 0:case 15:return i=Q(i.type,!1),i;case 11:return i=Q(i.type.render,!1),i;case 1:return i=Q(i.type,!0),i;default:return""}}function j(i){try{var l="";do l+=G(i),i=i.return;while(i);return l}catch(f){return` +`+X[h].replace(" at new "," at ");return i.displayName&&be.includes("")&&(be=be.replace("",i.displayName)),be}while(1<=h&&0<=S);break}}}finally{W=!1,Error.prepareStackTrace=f}return(f=i?i.displayName||i.name:"")?U(f):""}function G(i){switch(i.tag){case 26:case 27:case 5:return U(i.type);case 16:return U("Lazy");case 13:return U("Suspense");case 19:return U("SuspenseList");case 0:case 15:return i=Z(i.type,!1),i;case 11:return i=Z(i.type.render,!1),i;case 1:return i=Z(i.type,!0),i;default:return""}}function j(i){try{var l="";do l+=G(i),i=i.return;while(i);return l}catch(f){return` Error generating stack: `+f.message+` -`+f.stack}}function z(i){var l=i,f=i;if(i.alternate)for(;l.return;)l=l.return;else{i=l;do l=i,l.flags&4098&&(f=l.return),i=l.return;while(i)}return l.tag===3?f:null}function Y(i){if(i.tag===13){var l=i.memoizedState;if(l===null&&(i=i.alternate,i!==null&&(l=i.memoizedState)),l!==null)return l.dehydrated}return null}function L(i){if(z(i)!==i)throw Error(r(188))}function V(i){var l=i.alternate;if(!l){if(l=z(i),l===null)throw Error(r(188));return l!==i?null:i}for(var f=i,h=l;;){var S=f.return;if(S===null)break;var T=S.alternate;if(T===null){if(h=S.return,h!==null){f=h;continue}break}if(S.child===T.child){for(T=S.child;T;){if(T===f)return L(S),i;if(T===h)return L(S),l;T=T.sibling}throw Error(r(188))}if(f.return!==h.return)f=S,h=T;else{for(var F=!1,q=S.child;q;){if(q===f){F=!0,f=S,h=T;break}if(q===h){F=!0,h=S,f=T;break}q=q.sibling}if(!F){for(q=T.child;q;){if(q===f){F=!0,f=T,h=S;break}if(q===h){F=!0,h=T,f=S;break}q=q.sibling}if(!F)throw Error(r(189))}}if(f.alternate!==h)throw Error(r(190))}if(f.tag!==3)throw Error(r(188));return f.stateNode.current===f?i:l}function B(i){var l=i.tag;if(l===5||l===26||l===27||l===6)return i;for(i=i.child;i!==null;){if(l=B(i),l!==null)return l;i=i.sibling}return null}var P=Array.isArray,K=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ee={pending:!1,data:null,method:null,action:null},Z=[],J=-1;function ae(i){return{current:i}}function ke(i){0>J||(i.current=Z[J],Z[J]=null,J--)}function ie(i,l){J++,Z[J]=i.current,i.current=l}var Se=ae(null),ve=ae(null),Ie=ae(null),_e=ae(null);function Ee(i,l){switch(ie(Ie,l),ie(ve,i),ie(Se,null),i=l.nodeType,i){case 9:case 11:l=(l=l.documentElement)&&(l=l.namespaceURI)?y_(l):0;break;default:if(i=i===8?l.parentNode:l,l=i.tagName,i=i.namespaceURI)i=y_(i),l=v_(i,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ke(Se),ie(Se,l)}function te(){ke(Se),ke(ve),ke(Ie)}function fe(i){i.memoizedState!==null&&ie(_e,i);var l=Se.current,f=v_(l,i.type);l!==f&&(ie(ve,i),ie(Se,f))}function Te(i){ve.current===i&&(ke(Se),ke(ve)),_e.current===i&&(ke(_e),Vl._currentValue=ee)}var me=Object.prototype.hasOwnProperty,we=e.unstable_scheduleCallback,le=e.unstable_cancelCallback,ze=e.unstable_shouldYield,Be=e.unstable_requestPaint,he=e.unstable_now,Ne=e.unstable_getCurrentPriorityLevel,ne=e.unstable_ImmediatePriority,ce=e.unstable_UserBlockingPriority,Ce=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,We=e.unstable_IdlePriority,St=e.log,kt=e.unstable_setDisableYieldValue,bt=null,et=null;function Tt(i){if(et&&typeof et.onCommitFiberRoot=="function")try{et.onCommitFiberRoot(bt,i,void 0,(i.current.flags&128)===128)}catch{}}function ot(i){if(typeof St=="function"&&kt(i),et&&typeof et.setStrictMode=="function")try{et.setStrictMode(bt,i)}catch{}}var Et=Math.clz32?Math.clz32:Ft,Gt=Math.log,pn=Math.LN2;function Ft(i){return i>>>=0,i===0?32:31-(Gt(i)/pn|0)|0}var or=128,$r=4194304;function Jt(i){var l=i&42;if(l!==0)return l;switch(i&-i){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return i&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return i}}function fa(i,l){var f=i.pendingLanes;if(f===0)return 0;var h=0,S=i.suspendedLanes,T=i.pingedLanes,F=i.warmLanes;i=i.finishedLanes!==0;var q=f&134217727;return q!==0?(f=q&~S,f!==0?h=Jt(f):(T&=q,T!==0?h=Jt(T):i||(F=q&~F,F!==0&&(h=Jt(F))))):(q=f&~S,q!==0?h=Jt(q):T!==0?h=Jt(T):i||(F=f&~F,F!==0&&(h=Jt(F)))),h===0?0:l!==0&&l!==h&&!(l&S)&&(S=h&-h,F=l&-l,S>=F||S===32&&(F&4194176)!==0)?l:h}function Xe(i,l){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&l)===0}function yt(i,l){switch(i){case 1:case 2:case 4:case 8:return l+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Nt(){var i=or;return or<<=1,!(or&4194176)&&(or=128),i}function In(){var i=$r;return $r<<=1,!($r&62914560)&&($r=4194304),i}function Cn(i){for(var l=[],f=0;31>f;f++)l.push(i);return l}function Ln(i,l){i.pendingLanes|=l,l!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function pa(i,l,f,h,S,T){var F=i.pendingLanes;i.pendingLanes=f,i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0,i.expiredLanes&=f,i.entangledLanes&=f,i.errorRecoveryDisabledLanes&=f,i.shellSuspendCounter=0;var q=i.entanglements,X=i.expirationTimes,oe=i.hiddenUpdates;for(f=F&~f;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),HH=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),vA={},SA={};function $H(i){return me.call(SA,i)?!0:me.call(vA,i)?!1:HH.test(i)?SA[i]=!0:(vA[i]=!0,!1)}function sc(i,l,f){if($H(l))if(f===null)i.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":i.removeAttribute(l);return;case"boolean":var h=l.toLowerCase().slice(0,5);if(h!=="data-"&&h!=="aria-"){i.removeAttribute(l);return}}i.setAttribute(l,""+f)}}function lc(i,l,f){if(f===null)i.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(l);return}i.setAttribute(l,""+f)}}function ha(i,l,f,h){if(h===null)i.removeAttribute(f);else{switch(typeof h){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(f);return}i.setAttributeNS(l,f,""+h)}}function ir(i){switch(typeof i){case"bigint":case"boolean":case"number":case"string":case"undefined":return i;case"object":return i;default:return""}}function EA(i){var l=i.type;return(i=i.nodeName)&&i.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function qH(i){var l=EA(i)?"checked":"value",f=Object.getOwnPropertyDescriptor(i.constructor.prototype,l),h=""+i[l];if(!i.hasOwnProperty(l)&&typeof f<"u"&&typeof f.get=="function"&&typeof f.set=="function"){var S=f.get,T=f.set;return Object.defineProperty(i,l,{configurable:!0,get:function(){return S.call(this)},set:function(F){h=""+F,T.call(this,F)}}),Object.defineProperty(i,l,{enumerable:f.enumerable}),{getValue:function(){return h},setValue:function(F){h=""+F},stopTracking:function(){i._valueTracker=null,delete i[l]}}}}function uc(i){i._valueTracker||(i._valueTracker=qH(i))}function wA(i){if(!i)return!1;var l=i._valueTracker;if(!l)return!0;var f=l.getValue(),h="";return i&&(h=EA(i)?i.checked?"true":"false":i.value),i=h,i!==f?(l.setValue(i),!0):!1}function cc(i){if(i=i||(typeof document<"u"?document:void 0),typeof i>"u")return null;try{return i.activeElement||i.body}catch{return i.body}}var VH=/[\n"\\]/g;function sr(i){return i.replace(VH,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function Hp(i,l,f,h,S,T,F,q){i.name="",F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?i.type=F:i.removeAttribute("type"),l!=null?F==="number"?(l===0&&i.value===""||i.value!=l)&&(i.value=""+ir(l)):i.value!==""+ir(l)&&(i.value=""+ir(l)):F!=="submit"&&F!=="reset"||i.removeAttribute("value"),l!=null?$p(i,F,ir(l)):f!=null?$p(i,F,ir(f)):h!=null&&i.removeAttribute("value"),S==null&&T!=null&&(i.defaultChecked=!!T),S!=null&&(i.checked=S&&typeof S!="function"&&typeof S!="symbol"),q!=null&&typeof q!="function"&&typeof q!="symbol"&&typeof q!="boolean"?i.name=""+ir(q):i.removeAttribute("name")}function xA(i,l,f,h,S,T,F,q){if(T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"&&(i.type=T),l!=null||f!=null){if(!(T!=="submit"&&T!=="reset"||l!=null))return;f=f!=null?""+ir(f):"",l=l!=null?""+ir(l):f,q||l===i.value||(i.value=l),i.defaultValue=l}h=h??S,h=typeof h!="function"&&typeof h!="symbol"&&!!h,i.checked=q?i.checked:!!h,i.defaultChecked=!!h,F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"&&(i.name=F)}function $p(i,l,f){l==="number"&&cc(i.ownerDocument)===i||i.defaultValue===""+f||(i.defaultValue=""+f)}function Di(i,l,f,h){if(i=i.options,l){l={};for(var S=0;S=cl),PA=" ",FA=!1;function zA(i,l){switch(i){case"keyup":return S$.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function BA(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Pi=!1;function w$(i,l){switch(i){case"compositionend":return BA(l);case"keypress":return l.which!==32?null:(FA=!0,PA);case"textInput":return i=l.data,i===PA&&FA?null:i;default:return null}}function x$(i,l){if(Pi)return i==="compositionend"||!tg&&zA(i,l)?(i=NA(),fc=Xp=Ya=null,Pi=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:f,offset:l-i};i=h}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=WA(f)}}function KA(i,l){return i&&l?i===l?!0:i&&i.nodeType===3?!1:l&&l.nodeType===3?KA(i,l.parentNode):"contains"in i?i.contains(l):i.compareDocumentPosition?!!(i.compareDocumentPosition(l)&16):!1:!1}function XA(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var l=cc(i.document);l instanceof i.HTMLIFrameElement;){try{var f=typeof l.contentWindow.location.href=="string"}catch{f=!1}if(f)i=l.contentWindow;else break;l=cc(i.document)}return l}function ag(i){var l=i&&i.nodeName&&i.nodeName.toLowerCase();return l&&(l==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||l==="textarea"||i.contentEditable==="true")}function O$(i,l){var f=XA(l);l=i.focusedElem;var h=i.selectionRange;if(f!==l&&l&&l.ownerDocument&&KA(l.ownerDocument.documentElement,l)){if(h!==null&&ag(l)){if(i=h.start,f=h.end,f===void 0&&(f=i),"selectionStart"in l)l.selectionStart=i,l.selectionEnd=Math.min(f,l.value.length);else if(f=(i=l.ownerDocument||document)&&i.defaultView||window,f.getSelection){f=f.getSelection();var S=l.textContent.length,T=Math.min(h.start,S);h=h.end===void 0?T:Math.min(h.end,S),!f.extend&&T>h&&(S=h,h=T,T=S),S=YA(l,T);var F=YA(l,h);S&&F&&(f.rangeCount!==1||f.anchorNode!==S.node||f.anchorOffset!==S.offset||f.focusNode!==F.node||f.focusOffset!==F.offset)&&(i=i.createRange(),i.setStart(S.node,S.offset),f.removeAllRanges(),T>h?(f.addRange(i),f.extend(F.node,F.offset)):(i.setEnd(F.node,F.offset),f.addRange(i)))}}for(i=[],f=l;f=f.parentNode;)f.nodeType===1&&i.push({element:f,left:f.scrollLeft,top:f.scrollTop});for(typeof l.focus=="function"&&l.focus(),l=0;l=document.documentMode,Fi=null,og=null,gl=null,ig=!1;function ZA(i,l,f){var h=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;ig||Fi==null||Fi!==cc(h)||(h=Fi,"selectionStart"in h&&ag(h)?h={start:h.selectionStart,end:h.selectionEnd}:(h=(h.ownerDocument&&h.ownerDocument.defaultView||window).getSelection(),h={anchorNode:h.anchorNode,anchorOffset:h.anchorOffset,focusNode:h.focusNode,focusOffset:h.focusOffset}),gl&&pl(gl,h)||(gl=h,h=Jc(og,"onSelect"),0>=F,S-=F,ma=1<<32-Et(l)+S|f<Qe?(ln=Ye,Ye=null):ln=Ye.sibling;var xt=de(se,Ye,ue[Qe],xe);if(xt===null){Ye===null&&(Ye=ln);break}i&&Ye&&xt.alternate===null&&l(se,Ye),re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt,Ye=ln}if(Qe===ue.length)return f(se,Ye),wt&&Go(se,Qe),je;if(Ye===null){for(;QeQe?(ln=Ye,Ye=null):ln=Ye.sibling;var ho=de(se,Ye,xt.value,xe);if(ho===null){Ye===null&&(Ye=ln);break}i&&Ye&&ho.alternate===null&&l(se,Ye),re=T(ho,re,Qe),lt===null?je=ho:lt.sibling=ho,lt=ho,Ye=ln}if(xt.done)return f(se,Ye),wt&&Go(se,Qe),je;if(Ye===null){for(;!xt.done;Qe++,xt=ue.next())xt=Ae(se,xt.value,xe),xt!==null&&(re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt);return wt&&Go(se,Qe),je}for(Ye=h(Ye);!xt.done;Qe++,xt=ue.next())xt=ge(Ye,se,Qe,xt.value,xe),xt!==null&&(i&&xt.alternate!==null&&Ye.delete(xt.key===null?Qe:xt.key),re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt);return i&&Ye.forEach(function(K6){return l(se,K6)}),wt&&Go(se,Qe),je}function qt(se,re,ue,xe){if(typeof ue=="object"&&ue!==null&&ue.type===c&&ue.key===null&&(ue=ue.props.children),typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case s:e:{for(var je=ue.key;re!==null;){if(re.key===je){if(je=ue.type,je===c){if(re.tag===7){f(se,re.sibling),xe=S(re,ue.props.children),xe.return=se,se=xe;break e}}else if(re.elementType===je||typeof je=="object"&&je!==null&&je.$$typeof===x&&g1(je)===re.type){f(se,re.sibling),xe=S(re,ue.props),El(xe,ue),xe.return=se,se=xe;break e}f(se,re);break}else l(se,re);re=re.sibling}ue.type===c?(xe=Jo(ue.props.children,se.mode,xe,ue.key),xe.return=se,se=xe):(xe=Hc(ue.type,ue.key,ue.props,null,se.mode,xe),El(xe,ue),xe.return=se,se=xe)}return F(se);case u:e:{for(je=ue.key;re!==null;){if(re.key===je)if(re.tag===4&&re.stateNode.containerInfo===ue.containerInfo&&re.stateNode.implementation===ue.implementation){f(se,re.sibling),xe=S(re,ue.children||[]),xe.return=se,se=xe;break e}else{f(se,re);break}else l(se,re);re=re.sibling}xe=lh(ue,se.mode,xe),xe.return=se,se=xe}return F(se);case x:return je=ue._init,ue=je(ue._payload),qt(se,re,ue,xe)}if(P(ue))return qe(se,re,ue,xe);if(_(ue)){if(je=_(ue),typeof je!="function")throw Error(r(150));return ue=je.call(ue),nt(se,re,ue,xe)}if(typeof ue.then=="function")return qt(se,re,kc(ue),xe);if(ue.$$typeof===b)return qt(se,re,Uc(se,ue),xe);Tc(se,ue)}return typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint"?(ue=""+ue,re!==null&&re.tag===6?(f(se,re.sibling),xe=S(re,ue),xe.return=se,se=xe):(f(se,re),xe=sh(ue,se.mode,xe),xe.return=se,se=xe),F(se)):f(se,re)}return function(se,re,ue,xe){try{Sl=0;var je=qt(se,re,ue,xe);return Hi=null,je}catch(Ye){if(Ye===yl)throw Ye;var lt=hr(29,Ye,null,se.mode);return lt.lanes=xe,lt.return=se,lt}finally{}}}var $o=h1(!0),m1=h1(!1),$i=ae(null),Ac=ae(0);function b1(i,l){i=_a,ie(Ac,i),ie($i,l),_a=i|l.baseLanes}function gg(){ie(Ac,_a),ie($i,$i.current)}function hg(){_a=Ac.current,ke($i),ke(Ac)}var fr=ae(null),Vr=null;function Xa(i){var l=i.alternate;ie(en,en.current&1),ie(fr,i),Vr===null&&(l===null||$i.current!==null||l.memoizedState!==null)&&(Vr=i)}function y1(i){if(i.tag===22){if(ie(en,en.current),ie(fr,i),Vr===null){var l=i.alternate;l!==null&&l.memoizedState!==null&&(Vr=i)}}else Za()}function Za(){ie(en,en.current),ie(fr,fr.current)}function ya(i){ke(fr),Vr===i&&(Vr=null),ke(en)}var en=ae(0);function Rc(i){for(var l=i;l!==null;){if(l.tag===13){var f=l.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||f.data==="$?"||f.data==="$!"))return l}else if(l.tag===19&&l.memoizedProps.revealOrder!==void 0){if(l.flags&128)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===i)break;for(;l.sibling===null;){if(l.return===null||l.return===i)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var P$=typeof AbortController<"u"?AbortController:function(){var i=[],l=this.signal={aborted:!1,addEventListener:function(f,h){i.push(h)}};this.abort=function(){l.aborted=!0,i.forEach(function(f){return f()})}},F$=e.unstable_scheduleCallback,z$=e.unstable_NormalPriority,tn={$$typeof:b,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function mg(){return{controller:new P$,data:new Map,refCount:0}}function wl(i){i.refCount--,i.refCount===0&&F$(z$,function(){i.controller.abort()})}var xl=null,bg=0,qi=0,Vi=null;function B$(i,l){if(xl===null){var f=xl=[];bg=0,qi=xh(),Vi={status:"pending",value:void 0,then:function(h){f.push(h)}}}return bg++,l.then(v1,v1),l}function v1(){if(--bg===0&&xl!==null){Vi!==null&&(Vi.status="fulfilled");var i=xl;xl=null,qi=0,Vi=null;for(var l=0;lT?T:8;var F=D.T,q={};D.T=q,Lg(i,!1,l,f);try{var X=S(),oe=D.S;if(oe!==null&&oe(q,X),X!==null&&typeof X=="object"&&typeof X.then=="function"){var be=U$(X,h);Al(i,l,be,Zn(i))}else Al(i,l,h,Zn(i))}catch(Ae){Al(i,l,{then:function(){},status:"rejected",reason:Ae},Zn())}finally{K.p=T,D.T=F}}function q$(){}function Dg(i,l,f,h){if(i.tag!==5)throw Error(r(476));var S=X1(i).queue;K1(i,S,l,ee,f===null?q$:function(){return Z1(i),f(h)})}function X1(i){var l=i.memoizedState;if(l!==null)return l;l={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:va,lastRenderedState:ee},next:null};var f={};return l.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:va,lastRenderedState:f},next:null},i.memoizedState=l,i=i.alternate,i!==null&&(i.memoizedState=l),l}function Z1(i){var l=X1(i).next.queue;Al(i,l,{},Zn())}function Ig(){return En(Vl)}function Q1(){return Xt().memoizedState}function J1(){return Xt().memoizedState}function V$(i){for(var l=i.return;l!==null;){switch(l.tag){case 24:case 3:var f=Zn();i=no(f);var h=ro(l,i,f);h!==null&&(On(h,l,f),Cl(h,l,f)),l={cache:mg()},i.payload=l;return}l=l.return}}function W$(i,l,f){var h=Zn();f={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null},Pc(i)?tR(l,f):(f=ug(i,l,f,h),f!==null&&(On(f,i,h),nR(f,l,h)))}function eR(i,l,f){var h=Zn();Al(i,l,f,h)}function Al(i,l,f,h){var S={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null};if(Pc(i))tR(l,S);else{var T=i.alternate;if(i.lanes===0&&(T===null||T.lanes===0)&&(T=l.lastRenderedReducer,T!==null))try{var F=l.lastRenderedState,q=T(F,f);if(S.hasEagerState=!0,S.eagerState=q,Wn(q,F))return vc(i,l,S,0),Lt===null&&yc(),!1}catch{}finally{}if(f=ug(i,l,S,h),f!==null)return On(f,i,h),nR(f,l,h),!0}return!1}function Lg(i,l,f,h){if(h={lane:2,revertLane:xh(),action:h,hasEagerState:!1,eagerState:null,next:null},Pc(i)){if(l)throw Error(r(479))}else l=ug(i,f,h,2),l!==null&&On(l,i,2)}function Pc(i){var l=i.alternate;return i===st||l!==null&&l===st}function tR(i,l){Wi=Cc=!0;var f=i.pending;f===null?l.next=l:(l.next=f.next,f.next=l),i.pending=l}function nR(i,l,f){if(f&4194176){var h=l.lanes;h&=i.pendingLanes,f|=h,l.lanes=f,Ar(i,f)}}var Wr={readContext:En,use:Dc,useCallback:Vt,useContext:Vt,useEffect:Vt,useImperativeHandle:Vt,useLayoutEffect:Vt,useInsertionEffect:Vt,useMemo:Vt,useReducer:Vt,useRef:Vt,useState:Vt,useDebugValue:Vt,useDeferredValue:Vt,useTransition:Vt,useSyncExternalStore:Vt,useId:Vt};Wr.useCacheRefresh=Vt,Wr.useMemoCache=Vt,Wr.useHostTransitionStatus=Vt,Wr.useFormState=Vt,Wr.useActionState=Vt,Wr.useOptimistic=Vt;var Wo={readContext:En,use:Dc,useCallback:function(i,l){return zn().memoizedState=[i,l===void 0?null:l],i},useContext:En,useEffect:j1,useImperativeHandle:function(i,l,f){f=f!=null?f.concat([i]):null,Lc(4194308,4,$1.bind(null,l,i),f)},useLayoutEffect:function(i,l){return Lc(4194308,4,i,l)},useInsertionEffect:function(i,l){Lc(4,2,i,l)},useMemo:function(i,l){var f=zn();l=l===void 0?null:l;var h=i();if(Vo){ot(!0);try{i()}finally{ot(!1)}}return f.memoizedState=[h,l],h},useReducer:function(i,l,f){var h=zn();if(f!==void 0){var S=f(l);if(Vo){ot(!0);try{f(l)}finally{ot(!1)}}}else S=l;return h.memoizedState=h.baseState=S,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:S},h.queue=i,i=i.dispatch=W$.bind(null,st,i),[h.memoizedState,i]},useRef:function(i){var l=zn();return i={current:i},l.memoizedState=i},useState:function(i){i=Rg(i);var l=i.queue,f=eR.bind(null,st,l);return l.dispatch=f,[i.memoizedState,f]},useDebugValue:Ng,useDeferredValue:function(i,l){var f=zn();return Og(f,i,l)},useTransition:function(){var i=Rg(!1);return i=K1.bind(null,st,i.queue,!0,!1),zn().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,l,f){var h=st,S=zn();if(wt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=l(),Lt===null)throw Error(r(349));vt&60||T1(h,l,f)}S.memoizedState=f;var T={value:f,getSnapshot:l};return S.queue=T,j1(R1.bind(null,h,T,i),[i]),h.flags|=2048,Ki(9,A1.bind(null,h,T,f,l),{destroy:void 0},null),f},useId:function(){var i=zn(),l=Lt.identifierPrefix;if(wt){var f=ba,h=ma;f=(h&~(1<<32-Et(h)-1)).toString(32)+f,l=":"+l+"R"+f,f=Nc++,0 title"))),mn(T,h,f),T[Sn]=i,an(T),h=T;break e;case"link":var F=C_("link","href",S).get(h+(f.href||""));if(F){for(var q=0;q<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof h.is=="string"?S.createElement("select",{is:h.is}):S.createElement("select"),h.multiple?i.multiple=!0:h.size&&(i.size=h.size);break;default:i=typeof h.is=="string"?S.createElement(f,{is:h.is}):S.createElement(f)}}i[Sn]=l,i[Pn]=h;e:for(S=l.child;S!==null;){if(S.tag===5||S.tag===6)i.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===l)break e;for(;S.sibling===null;){if(S.return===null||S.return===l)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}l.stateNode=i;e:switch(mn(i,f,h),f){case"button":case"input":case"select":case"textarea":i=!!h.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&Aa(l)}}return zt(l),l.flags&=-16777217,null;case 6:if(i&&l.stateNode!=null)i.memoizedProps!==h&&Aa(l);else{if(typeof h!="string"&&l.stateNode===null)throw Error(r(166));if(i=Ie.current,hl(l)){if(i=l.stateNode,f=l.memoizedProps,h=null,S=Nn,S!==null)switch(S.tag){case 27:case 5:h=S.memoizedProps}i[Sn]=l,i=!!(i.nodeValue===f||h!==null&&h.suppressHydrationWarning===!0||b_(i.nodeValue,f)),i||Ho(l)}else i=td(i).createTextNode(h),i[Sn]=l,l.stateNode=i}return zt(l),null;case 13:if(h=l.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(S=hl(l),h!==null&&h.dehydrated!==null){if(i===null){if(!S)throw Error(r(318));if(S=l.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(r(317));S[Sn]=l}else ml(),!(l.flags&128)&&(l.memoizedState=null),l.flags|=4;zt(l),S=!1}else _r!==null&&(mh(_r),_r=null),S=!0;if(!S)return l.flags&256?(ya(l),l):(ya(l),null)}if(ya(l),l.flags&128)return l.lanes=f,l;if(f=h!==null,i=i!==null&&i.memoizedState!==null,f){h=l.child,S=null,h.alternate!==null&&h.alternate.memoizedState!==null&&h.alternate.memoizedState.cachePool!==null&&(S=h.alternate.memoizedState.cachePool.pool);var T=null;h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(T=h.memoizedState.cachePool.pool),T!==S&&(h.flags|=2048)}return f!==i&&f&&(l.child.flags|=8192),$c(l,l.updateQueue),zt(l),null;case 4:return te(),i===null&&Rh(l.stateNode.containerInfo),zt(l),null;case 10:return wa(l.type),zt(l),null;case 19:if(ke(en),S=l.memoizedState,S===null)return zt(l),null;if(h=(l.flags&128)!==0,T=S.rendering,T===null)if(h)Pl(S,!1);else{if($t!==0||i!==null&&i.flags&128)for(i=l.child;i!==null;){if(T=Rc(i),T!==null){for(l.flags|=128,Pl(S,!1),i=T.updateQueue,l.updateQueue=i,$c(l,i),l.subtreeFlags=0,i=f,f=l.child;f!==null;)qR(f,i),f=f.sibling;return ie(en,en.current&1|2),l.child}i=i.sibling}S.tail!==null&&he()>qc&&(l.flags|=128,h=!0,Pl(S,!1),l.lanes=4194304)}else{if(!h)if(i=Rc(T),i!==null){if(l.flags|=128,h=!0,i=i.updateQueue,l.updateQueue=i,$c(l,i),Pl(S,!0),S.tail===null&&S.tailMode==="hidden"&&!T.alternate&&!wt)return zt(l),null}else 2*he()-S.renderingStartTime>qc&&f!==536870912&&(l.flags|=128,h=!0,Pl(S,!1),l.lanes=4194304);S.isBackwards?(T.sibling=l.child,l.child=T):(i=S.last,i!==null?i.sibling=T:l.child=T,S.last=T)}return S.tail!==null?(l=S.tail,S.rendering=l,S.tail=l.sibling,S.renderingStartTime=he(),l.sibling=null,i=en.current,ie(en,h?i&1|2:i&1),l):(zt(l),null);case 22:case 23:return ya(l),hg(),h=l.memoizedState!==null,i!==null?i.memoizedState!==null!==h&&(l.flags|=8192):h&&(l.flags|=8192),h?f&536870912&&!(l.flags&128)&&(zt(l),l.subtreeFlags&6&&(l.flags|=8192)):zt(l),f=l.updateQueue,f!==null&&$c(l,f.retryQueue),f=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),h=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(h=l.memoizedState.cachePool.pool),h!==f&&(l.flags|=2048),i!==null&&ke(qo),null;case 24:return f=null,i!==null&&(f=i.memoizedState.cache),l.memoizedState.cache!==f&&(l.flags|=2048),wa(tn),zt(l),null;case 25:return null}throw Error(r(156,l.tag))}function e6(i,l){switch(dg(l),l.tag){case 1:return i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 3:return wa(tn),te(),i=l.flags,i&65536&&!(i&128)?(l.flags=i&-65537|128,l):null;case 26:case 27:case 5:return Te(l),null;case 13:if(ya(l),i=l.memoizedState,i!==null&&i.dehydrated!==null){if(l.alternate===null)throw Error(r(340));ml()}return i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 19:return ke(en),null;case 4:return te(),null;case 10:return wa(l.type),null;case 22:case 23:return ya(l),hg(),i!==null&&ke(qo),i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 24:return wa(tn),null;case 25:return null;default:return null}}function YR(i,l){switch(dg(l),l.tag){case 3:wa(tn),te();break;case 26:case 27:case 5:Te(l);break;case 4:te();break;case 13:ya(l);break;case 19:ke(en);break;case 10:wa(l.type);break;case 22:case 23:ya(l),hg(),i!==null&&ke(qo);break;case 24:wa(tn)}}var t6={getCacheForType:function(i){var l=En(tn),f=l.data.get(i);return f===void 0&&(f=i(),l.data.set(i,f)),f}},n6=typeof WeakMap=="function"?WeakMap:Map,Bt=0,Lt=null,ct=null,vt=0,Mt=0,Xn=null,Ra=!1,Ji=!1,uh=!1,_a=0,$t=0,lo=0,ei=0,ch=0,mr=0,es=0,Fl=null,Yr=null,dh=!1,fh=0,qc=1/0,Vc=null,uo=null,Wc=!1,ti=null,zl=0,ph=0,gh=null,Bl=0,hh=null;function Zn(){if(Bt&2&&vt!==0)return vt&-vt;if(D.T!==null){var i=qi;return i!==0?i:xh()}return hA()}function KR(){mr===0&&(mr=!(vt&536870912)||wt?Nt():536870912);var i=fr.current;return i!==null&&(i.flags|=32),mr}function On(i,l,f){(i===Lt&&Mt===2||i.cancelPendingCommit!==null)&&(ts(i,0),Ca(i,vt,mr,!1)),Ln(i,f),(!(Bt&2)||i!==Lt)&&(i===Lt&&(!(Bt&2)&&(ei|=f),$t===4&&Ca(i,vt,mr,!1)),Kr(i))}function XR(i,l,f){if(Bt&6)throw Error(r(327));var h=!f&&(l&60)===0&&(l&i.expiredLanes)===0||Xe(i,l),S=h?o6(i,l):vh(i,l,!0),T=h;do{if(S===0){Ji&&!h&&Ca(i,l,0,!1);break}else if(S===6)Ca(i,l,0,!Ra);else{if(f=i.current.alternate,T&&!r6(f)){S=vh(i,l,!1),T=!1;continue}if(S===2){if(T=l,i.errorRecoveryDisabledLanes&T)var F=0;else F=i.pendingLanes&-536870913,F=F!==0?F:F&536870912?536870912:0;if(F!==0){l=F;e:{var q=i;S=Fl;var X=q.current.memoizedState.isDehydrated;if(X&&(ts(q,F).flags|=256),F=vh(q,F,!1),F!==2){if(uh&&!X){q.errorRecoveryDisabledLanes|=T,ei|=T,S=4;break e}T=Yr,Yr=S,T!==null&&mh(T)}S=F}if(T=!1,S!==2)continue}}if(S===1){ts(i,0),Ca(i,l,0,!0);break}e:{switch(h=i,S){case 0:case 1:throw Error(r(345));case 4:if((l&4194176)===l){Ca(h,l,mr,!Ra);break e}break;case 2:Yr=null;break;case 3:case 5:break;default:throw Error(r(329))}if(h.finishedWork=f,h.finishedLanes=l,(l&62914560)===l&&(T=fh+300-he(),10f?32:f,D.T=null,ti===null)var T=!1;else{f=gh,gh=null;var F=ti,q=zl;if(ti=null,zl=0,Bt&6)throw Error(r(331));var X=Bt;if(Bt|=4,HR(F.current),UR(F,F.current,q,f),Bt=X,Ul(0,!1),et&&typeof et.onPostCommitFiberRoot=="function")try{et.onPostCommitFiberRoot(bt,F)}catch{}T=!0}return T}finally{K.p=S,D.T=h,o_(i,l)}}return!1}function i_(i,l,f){l=ur(f,l),l=Fg(i.stateNode,l,2),i=ro(i,l,2),i!==null&&(Ln(i,2),Kr(i))}function Ot(i,l,f){if(i.tag===3)i_(i,i,f);else for(;l!==null;){if(l.tag===3){i_(l,i,f);break}else if(l.tag===1){var h=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(uo===null||!uo.has(h))){i=ur(f,i),f=uR(2),h=ro(l,f,2),h!==null&&(cR(f,h,l,i),Ln(h,2),Kr(h));break}}l=l.return}}function Sh(i,l,f){var h=i.pingCache;if(h===null){h=i.pingCache=new n6;var S=new Set;h.set(l,S)}else S=h.get(l),S===void 0&&(S=new Set,h.set(l,S));S.has(f)||(uh=!0,S.add(f),i=l6.bind(null,i,l,f),l.then(i,i))}function l6(i,l,f){var h=i.pingCache;h!==null&&h.delete(l),i.pingedLanes|=i.suspendedLanes&f,i.warmLanes&=~f,Lt===i&&(vt&f)===f&&($t===4||$t===3&&(vt&62914560)===vt&&300>he()-fh?!(Bt&2)&&ts(i,0):ch|=f,es===vt&&(es=0)),Kr(i)}function s_(i,l){l===0&&(l=In()),i=Ka(i,l),i!==null&&(Ln(i,l),Kr(i))}function u6(i){var l=i.memoizedState,f=0;l!==null&&(f=l.retryLane),s_(i,f)}function c6(i,l){var f=0;switch(i.tag){case 13:var h=i.stateNode,S=i.memoizedState;S!==null&&(f=S.retryLane);break;case 19:h=i.stateNode;break;case 22:h=i.stateNode._retryCache;break;default:throw Error(r(314))}h!==null&&h.delete(l),s_(i,f)}function d6(i,l){return we(i,l)}var Xc=null,as=null,Eh=!1,Zc=!1,wh=!1,ni=0;function Kr(i){i!==as&&i.next===null&&(as===null?Xc=as=i:as=as.next=i),Zc=!0,Eh||(Eh=!0,p6(f6))}function Ul(i,l){if(!wh&&Zc){wh=!0;do for(var f=!1,h=Xc;h!==null;){if(i!==0){var S=h.pendingLanes;if(S===0)var T=0;else{var F=h.suspendedLanes,q=h.pingedLanes;T=(1<<31-Et(42|i)+1)-1,T&=S&~(F&~q),T=T&201326677?T&201326677|1:T?T|2:0}T!==0&&(f=!0,c_(h,T))}else T=vt,T=fa(h,h===Lt?T:0),!(T&3)||Xe(h,T)||(f=!0,c_(h,T));h=h.next}while(f);wh=!1}}function f6(){Zc=Eh=!1;var i=0;ni!==0&&(E6()&&(i=ni),ni=0);for(var l=he(),f=null,h=Xc;h!==null;){var S=h.next,T=l_(h,l);T===0?(h.next=null,f===null?Xc=S:f.next=S,S===null&&(as=f)):(f=h,(i!==0||T&3)&&(Zc=!0)),h=S}Ul(i)}function l_(i,l){for(var f=i.suspendedLanes,h=i.pingedLanes,S=i.expirationTimes,T=i.pendingLanes&-62914561;0"u"?null:document;function T_(i,l,f){var h=is;if(h&&typeof l=="string"&&l){var S=sr(l);S='link[rel="'+i+'"][href="'+S+'"]',typeof f=="string"&&(S+='[crossorigin="'+f+'"]'),k_.has(S)||(k_.add(S),i={rel:i,crossOrigin:f,href:l},h.querySelector(S)===null&&(l=h.createElement("link"),mn(l,"link",i),an(l),h.head.appendChild(l)))}}function C6(i){Na.D(i),T_("dns-prefetch",i,null)}function N6(i,l){Na.C(i,l),T_("preconnect",i,l)}function O6(i,l,f){Na.L(i,l,f);var h=is;if(h&&i&&l){var S='link[rel="preload"][as="'+sr(l)+'"]';l==="image"&&f&&f.imageSrcSet?(S+='[imagesrcset="'+sr(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(S+='[imagesizes="'+sr(f.imageSizes)+'"]')):S+='[href="'+sr(i)+'"]';var T=S;switch(l){case"style":T=ss(i);break;case"script":T=ls(i)}br.has(T)||(i=I({rel:"preload",href:l==="image"&&f&&f.imageSrcSet?void 0:i,as:l},f),br.set(T,i),h.querySelector(S)!==null||l==="style"&&h.querySelector(Hl(T))||l==="script"&&h.querySelector($l(T))||(l=h.createElement("link"),mn(l,"link",i),an(l),h.head.appendChild(l)))}}function D6(i,l){Na.m(i,l);var f=is;if(f&&i){var h=l&&typeof l.as=="string"?l.as:"script",S='link[rel="modulepreload"][as="'+sr(h)+'"][href="'+sr(i)+'"]',T=S;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":T=ls(i)}if(!br.has(T)&&(i=I({rel:"modulepreload",href:i},l),br.set(T,i),f.querySelector(S)===null)){switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector($l(T)))return}h=f.createElement("link"),mn(h,"link",i),an(h),f.head.appendChild(h)}}}function I6(i,l,f){Na.S(i,l,f);var h=is;if(h&&i){var S=Ni(h).hoistableStyles,T=ss(i);l=l||"default";var F=S.get(T);if(!F){var q={loading:0,preload:null};if(F=h.querySelector(Hl(T)))q.loading=5;else{i=I({rel:"stylesheet",href:i,"data-precedence":l},f),(f=br.get(T))&&Ph(i,f);var X=F=h.createElement("link");an(X),mn(X,"link",i),X._p=new Promise(function(oe,be){X.onload=oe,X.onerror=be}),X.addEventListener("load",function(){q.loading|=1}),X.addEventListener("error",function(){q.loading|=2}),q.loading|=4,rd(F,l,h)}F={type:"stylesheet",instance:F,count:1,state:q},S.set(T,F)}}}function L6(i,l){Na.X(i,l);var f=is;if(f&&i){var h=Ni(f).hoistableScripts,S=ls(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=I({src:i,async:!0},l),(l=br.get(S))&&Fh(i,l),T=f.createElement("script"),an(T),mn(T,"link",i),f.head.appendChild(T)),T={type:"script",instance:T,count:1,state:null},h.set(S,T))}}function M6(i,l){Na.M(i,l);var f=is;if(f&&i){var h=Ni(f).hoistableScripts,S=ls(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=I({src:i,async:!0,type:"module"},l),(l=br.get(S))&&Fh(i,l),T=f.createElement("script"),an(T),mn(T,"link",i),f.head.appendChild(T)),T={type:"script",instance:T,count:1,state:null},h.set(S,T))}}function A_(i,l,f,h){var S=(S=Ie.current)?nd(S):null;if(!S)throw Error(r(446));switch(i){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(l=ss(f.href),f=Ni(S).hoistableStyles,h=f.get(l),h||(h={type:"style",instance:null,count:0,state:null},f.set(l,h)),h):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){i=ss(f.href);var T=Ni(S).hoistableStyles,F=T.get(i);if(F||(S=S.ownerDocument||S,F={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},T.set(i,F),(T=S.querySelector(Hl(i)))&&!T._p&&(F.instance=T,F.state.loading=5),br.has(i)||(f={rel:"preload",as:"style",href:f.href,crossOrigin:f.crossOrigin,integrity:f.integrity,media:f.media,hrefLang:f.hrefLang,referrerPolicy:f.referrerPolicy},br.set(i,f),T||P6(S,i,f,F.state))),l&&h===null)throw Error(r(528,""));return F}if(l&&h!==null)throw Error(r(529,""));return null;case"script":return l=f.async,f=f.src,typeof f=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=ls(f),f=Ni(S).hoistableScripts,h=f.get(l),h||(h={type:"script",instance:null,count:0,state:null},f.set(l,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,i))}}function ss(i){return'href="'+sr(i)+'"'}function Hl(i){return'link[rel="stylesheet"]['+i+"]"}function R_(i){return I({},i,{"data-precedence":i.precedence,precedence:null})}function P6(i,l,f,h){i.querySelector('link[rel="preload"][as="style"]['+l+"]")?h.loading=1:(l=i.createElement("link"),h.preload=l,l.addEventListener("load",function(){return h.loading|=1}),l.addEventListener("error",function(){return h.loading|=2}),mn(l,"link",f),an(l),i.head.appendChild(l))}function ls(i){return'[src="'+sr(i)+'"]'}function $l(i){return"script[async]"+i}function __(i,l,f){if(l.count++,l.instance===null)switch(l.type){case"style":var h=i.querySelector('style[data-href~="'+sr(f.href)+'"]');if(h)return l.instance=h,an(h),h;var S=I({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return h=(i.ownerDocument||i).createElement("style"),an(h),mn(h,"style",S),rd(h,f.precedence,i),l.instance=h;case"stylesheet":S=ss(f.href);var T=i.querySelector(Hl(S));if(T)return l.state.loading|=4,l.instance=T,an(T),T;h=R_(f),(S=br.get(S))&&Ph(h,S),T=(i.ownerDocument||i).createElement("link"),an(T);var F=T;return F._p=new Promise(function(q,X){F.onload=q,F.onerror=X}),mn(T,"link",h),l.state.loading|=4,rd(T,f.precedence,i),l.instance=T;case"script":return T=ls(f.src),(S=i.querySelector($l(T)))?(l.instance=S,an(S),S):(h=f,(S=br.get(T))&&(h=I({},f),Fh(h,S)),i=i.ownerDocument||i,S=i.createElement("script"),an(S),mn(S,"link",h),i.head.appendChild(S),l.instance=S);case"void":return null;default:throw Error(r(443,l.type))}else l.type==="stylesheet"&&!(l.state.loading&4)&&(h=l.instance,l.state.loading|=4,rd(h,f.precedence,i));return l.instance}function rd(i,l,f){for(var h=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),S=h.length?h[h.length-1]:null,T=S,F=0;F title"):null)}function F6(i,l,f){if(f===1||l.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return i=l.disabled,typeof l.precedence=="string"&&i==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function O_(i){return!(i.type==="stylesheet"&&!(i.state.loading&3))}var ql=null;function z6(){}function B6(i,l,f){if(ql===null)throw Error(r(475));var h=ql;if(l.type==="stylesheet"&&(typeof f.media!="string"||matchMedia(f.media).matches!==!1)&&!(l.state.loading&4)){if(l.instance===null){var S=ss(f.href),T=i.querySelector(Hl(S));if(T){i=T._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(h.count++,h=od.bind(h),i.then(h,h)),l.state.loading|=4,l.instance=T,an(T);return}T=i.ownerDocument||i,f=R_(f),(S=br.get(S))&&Ph(f,S),T=T.createElement("link"),an(T);var F=T;F._p=new Promise(function(q,X){F.onload=q,F.onerror=X}),mn(T,"link",f),l.instance=T}h.stylesheets===null&&(h.stylesheets=new Map),h.stylesheets.set(l,i),(i=l.state.preload)&&!(l.state.loading&3)&&(h.count++,l=od.bind(h),i.addEventListener("load",l),i.addEventListener("error",l))}}function U6(){if(ql===null)throw Error(r(475));var i=ql;return i.stylesheets&&i.count===0&&zh(i,i.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Wh.exports=s9(),Wh.exports}var u9=l9(),Jl={},J_;function c9(){if(J_)return Jl;J_=1,Object.defineProperty(Jl,"__esModule",{value:!0}),Jl.parse=s,Jl.serialize=d;const e=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,t=/^[\u0021-\u003A\u003C-\u007E]*$/,n=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,r=/^[\u0020-\u003A\u003D-\u007E]*$/,a=Object.prototype.toString,o=(()=>{const m=function(){};return m.prototype=Object.create(null),m})();function s(m,b){const v=new o,y=m.length;if(y<2)return v;const k=(b==null?void 0:b.decode)||p;let A=0;do{const x=m.indexOf("=",A);if(x===-1)break;const R=m.indexOf(";",A),O=R===-1?y:R;if(x>O){A=m.lastIndexOf(";",x-1)+1;continue}const C=u(m,A,x),_=c(m,x,C),N=m.slice(C,_);if(v[N]===void 0){let M=u(m,x+1,O),D=c(m,O,M);const I=k(m.slice(M,D));v[N]=I}A=O+1}while(Av;){const y=m.charCodeAt(--b);if(y!==32&&y!==9)return b+1}return v}function d(m,b,v){const y=(v==null?void 0:v.encode)||encodeURIComponent;if(!e.test(m))throw new TypeError(`argument name is invalid: ${m}`);const k=y(b);if(!t.test(k))throw new TypeError(`argument val is invalid: ${b}`);let A=m+"="+k;if(!v)return A;if(v.maxAge!==void 0){if(!Number.isInteger(v.maxAge))throw new TypeError(`option maxAge is invalid: ${v.maxAge}`);A+="; Max-Age="+v.maxAge}if(v.domain){if(!n.test(v.domain))throw new TypeError(`option domain is invalid: ${v.domain}`);A+="; Domain="+v.domain}if(v.path){if(!r.test(v.path))throw new TypeError(`option path is invalid: ${v.path}`);A+="; Path="+v.path}if(v.expires){if(!g(v.expires)||!Number.isFinite(v.expires.valueOf()))throw new TypeError(`option expires is invalid: ${v.expires}`);A+="; Expires="+v.expires.toUTCString()}if(v.httpOnly&&(A+="; HttpOnly"),v.secure&&(A+="; Secure"),v.partitioned&&(A+="; Partitioned"),v.priority)switch(typeof v.priority=="string"?v.priority.toLowerCase():void 0){case"low":A+="; Priority=Low";break;case"medium":A+="; Priority=Medium";break;case"high":A+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${v.priority}`)}if(v.sameSite)switch(typeof v.sameSite=="string"?v.sameSite.toLowerCase():v.sameSite){case!0:case"strict":A+="; SameSite=Strict";break;case"lax":A+="; SameSite=Lax";break;case"none":A+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${v.sameSite}`)}return A}function p(m){if(m.indexOf("%")===-1)return m;try{return decodeURIComponent(m)}catch{return m}}function g(m){return a.call(m)==="[object Date]"}return Jl}c9();/** +`+f.stack}}function z(i){var l=i,f=i;if(i.alternate)for(;l.return;)l=l.return;else{i=l;do l=i,l.flags&4098&&(f=l.return),i=l.return;while(i)}return l.tag===3?f:null}function Y(i){if(i.tag===13){var l=i.memoizedState;if(l===null&&(i=i.alternate,i!==null&&(l=i.memoizedState)),l!==null)return l.dehydrated}return null}function L(i){if(z(i)!==i)throw Error(r(188))}function V(i){var l=i.alternate;if(!l){if(l=z(i),l===null)throw Error(r(188));return l!==i?null:i}for(var f=i,h=l;;){var S=f.return;if(S===null)break;var T=S.alternate;if(T===null){if(h=S.return,h!==null){f=h;continue}break}if(S.child===T.child){for(T=S.child;T;){if(T===f)return L(S),i;if(T===h)return L(S),l;T=T.sibling}throw Error(r(188))}if(f.return!==h.return)f=S,h=T;else{for(var F=!1,q=S.child;q;){if(q===f){F=!0,f=S,h=T;break}if(q===h){F=!0,h=S,f=T;break}q=q.sibling}if(!F){for(q=T.child;q;){if(q===f){F=!0,f=T,h=S;break}if(q===h){F=!0,h=T,f=S;break}q=q.sibling}if(!F)throw Error(r(189))}}if(f.alternate!==h)throw Error(r(190))}if(f.tag!==3)throw Error(r(188));return f.stateNode.current===f?i:l}function B(i){var l=i.tag;if(l===5||l===26||l===27||l===6)return i;for(i=i.child;i!==null;){if(l=B(i),l!==null)return l;i=i.sibling}return null}var P=Array.isArray,K=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ee={pending:!1,data:null,method:null,action:null},Q=[],J=-1;function ae(i){return{current:i}}function ke(i){0>J||(i.current=Q[J],Q[J]=null,J--)}function ie(i,l){J++,Q[J]=i.current,i.current=l}var Se=ae(null),ve=ae(null),Ie=ae(null),_e=ae(null);function Ee(i,l){switch(ie(Ie,l),ie(ve,i),ie(Se,null),i=l.nodeType,i){case 9:case 11:l=(l=l.documentElement)&&(l=l.namespaceURI)?w_(l):0;break;default:if(i=i===8?l.parentNode:l,l=i.tagName,i=i.namespaceURI)i=w_(i),l=x_(i,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ke(Se),ie(Se,l)}function te(){ke(Se),ke(ve),ke(Ie)}function fe(i){i.memoizedState!==null&&ie(_e,i);var l=Se.current,f=x_(l,i.type);l!==f&&(ie(ve,i),ie(Se,f))}function Te(i){ve.current===i&&(ke(Se),ke(ve)),_e.current===i&&(ke(_e),Vl._currentValue=ee)}var me=Object.prototype.hasOwnProperty,we=e.unstable_scheduleCallback,le=e.unstable_cancelCallback,ze=e.unstable_shouldYield,Be=e.unstable_requestPaint,he=e.unstable_now,Ne=e.unstable_getCurrentPriorityLevel,ne=e.unstable_ImmediatePriority,ce=e.unstable_UserBlockingPriority,Ce=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,We=e.unstable_IdlePriority,St=e.log,kt=e.unstable_setDisableYieldValue,bt=null,et=null;function Tt(i){if(et&&typeof et.onCommitFiberRoot=="function")try{et.onCommitFiberRoot(bt,i,void 0,(i.current.flags&128)===128)}catch{}}function ot(i){if(typeof St=="function"&&kt(i),et&&typeof et.setStrictMode=="function")try{et.setStrictMode(bt,i)}catch{}}var Et=Math.clz32?Math.clz32:Ft,Ht=Math.log,pn=Math.LN2;function Ft(i){return i>>>=0,i===0?32:31-(Ht(i)/pn|0)|0}var or=128,$r=4194304;function Jt(i){var l=i&42;if(l!==0)return l;switch(i&-i){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return i&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return i}}function fa(i,l){var f=i.pendingLanes;if(f===0)return 0;var h=0,S=i.suspendedLanes,T=i.pingedLanes,F=i.warmLanes;i=i.finishedLanes!==0;var q=f&134217727;return q!==0?(f=q&~S,f!==0?h=Jt(f):(T&=q,T!==0?h=Jt(T):i||(F=q&~F,F!==0&&(h=Jt(F))))):(q=f&~S,q!==0?h=Jt(q):T!==0?h=Jt(T):i||(F=f&~F,F!==0&&(h=Jt(F)))),h===0?0:l!==0&&l!==h&&!(l&S)&&(S=h&-h,F=l&-l,S>=F||S===32&&(F&4194176)!==0)?l:h}function Xe(i,l){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&l)===0}function yt(i,l){switch(i){case 1:case 2:case 4:case 8:return l+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Nt(){var i=or;return or<<=1,!(or&4194176)&&(or=128),i}function In(){var i=$r;return $r<<=1,!($r&62914560)&&($r=4194304),i}function Cn(i){for(var l=[],f=0;31>f;f++)l.push(i);return l}function Ln(i,l){i.pendingLanes|=l,l!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function pa(i,l,f,h,S,T){var F=i.pendingLanes;i.pendingLanes=f,i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0,i.expiredLanes&=f,i.entangledLanes&=f,i.errorRecoveryDisabledLanes&=f,i.shellSuspendCounter=0;var q=i.entanglements,X=i.expirationTimes,oe=i.hiddenUpdates;for(f=F&~f;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),WH=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),xA={},kA={};function YH(i){return me.call(kA,i)?!0:me.call(xA,i)?!1:WH.test(i)?kA[i]=!0:(xA[i]=!0,!1)}function sc(i,l,f){if(YH(l))if(f===null)i.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":i.removeAttribute(l);return;case"boolean":var h=l.toLowerCase().slice(0,5);if(h!=="data-"&&h!=="aria-"){i.removeAttribute(l);return}}i.setAttribute(l,""+f)}}function lc(i,l,f){if(f===null)i.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(l);return}i.setAttribute(l,""+f)}}function ha(i,l,f,h){if(h===null)i.removeAttribute(f);else{switch(typeof h){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(f);return}i.setAttributeNS(l,f,""+h)}}function ir(i){switch(typeof i){case"bigint":case"boolean":case"number":case"string":case"undefined":return i;case"object":return i;default:return""}}function TA(i){var l=i.type;return(i=i.nodeName)&&i.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function KH(i){var l=TA(i)?"checked":"value",f=Object.getOwnPropertyDescriptor(i.constructor.prototype,l),h=""+i[l];if(!i.hasOwnProperty(l)&&typeof f<"u"&&typeof f.get=="function"&&typeof f.set=="function"){var S=f.get,T=f.set;return Object.defineProperty(i,l,{configurable:!0,get:function(){return S.call(this)},set:function(F){h=""+F,T.call(this,F)}}),Object.defineProperty(i,l,{enumerable:f.enumerable}),{getValue:function(){return h},setValue:function(F){h=""+F},stopTracking:function(){i._valueTracker=null,delete i[l]}}}}function uc(i){i._valueTracker||(i._valueTracker=KH(i))}function AA(i){if(!i)return!1;var l=i._valueTracker;if(!l)return!0;var f=l.getValue(),h="";return i&&(h=TA(i)?i.checked?"true":"false":i.value),i=h,i!==f?(l.setValue(i),!0):!1}function cc(i){if(i=i||(typeof document<"u"?document:void 0),typeof i>"u")return null;try{return i.activeElement||i.body}catch{return i.body}}var XH=/[\n"\\]/g;function sr(i){return i.replace(XH,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function Hp(i,l,f,h,S,T,F,q){i.name="",F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?i.type=F:i.removeAttribute("type"),l!=null?F==="number"?(l===0&&i.value===""||i.value!=l)&&(i.value=""+ir(l)):i.value!==""+ir(l)&&(i.value=""+ir(l)):F!=="submit"&&F!=="reset"||i.removeAttribute("value"),l!=null?$p(i,F,ir(l)):f!=null?$p(i,F,ir(f)):h!=null&&i.removeAttribute("value"),S==null&&T!=null&&(i.defaultChecked=!!T),S!=null&&(i.checked=S&&typeof S!="function"&&typeof S!="symbol"),q!=null&&typeof q!="function"&&typeof q!="symbol"&&typeof q!="boolean"?i.name=""+ir(q):i.removeAttribute("name")}function RA(i,l,f,h,S,T,F,q){if(T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"&&(i.type=T),l!=null||f!=null){if(!(T!=="submit"&&T!=="reset"||l!=null))return;f=f!=null?""+ir(f):"",l=l!=null?""+ir(l):f,q||l===i.value||(i.value=l),i.defaultValue=l}h=h??S,h=typeof h!="function"&&typeof h!="symbol"&&!!h,i.checked=q?i.checked:!!h,i.defaultChecked=!!h,F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"&&(i.name=F)}function $p(i,l,f){l==="number"&&cc(i.ownerDocument)===i||i.defaultValue===""+f||(i.defaultValue=""+f)}function Di(i,l,f,h){if(i=i.options,l){l={};for(var S=0;S=cl),UA=" ",jA=!1;function GA(i,l){switch(i){case"keyup":return k$.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function HA(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Pi=!1;function A$(i,l){switch(i){case"compositionend":return HA(l);case"keypress":return l.which!==32?null:(jA=!0,UA);case"textInput":return i=l.data,i===UA&&jA?null:i;default:return null}}function R$(i,l){if(Pi)return i==="compositionend"||!tg&&GA(i,l)?(i=LA(),fc=Xp=Ya=null,Pi=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:f,offset:l-i};i=h}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=ZA(f)}}function JA(i,l){return i&&l?i===l?!0:i&&i.nodeType===3?!1:l&&l.nodeType===3?JA(i,l.parentNode):"contains"in i?i.contains(l):i.compareDocumentPosition?!!(i.compareDocumentPosition(l)&16):!1:!1}function e1(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var l=cc(i.document);l instanceof i.HTMLIFrameElement;){try{var f=typeof l.contentWindow.location.href=="string"}catch{f=!1}if(f)i=l.contentWindow;else break;l=cc(i.document)}return l}function ag(i){var l=i&&i.nodeName&&i.nodeName.toLowerCase();return l&&(l==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||l==="textarea"||i.contentEditable==="true")}function M$(i,l){var f=e1(l);l=i.focusedElem;var h=i.selectionRange;if(f!==l&&l&&l.ownerDocument&&JA(l.ownerDocument.documentElement,l)){if(h!==null&&ag(l)){if(i=h.start,f=h.end,f===void 0&&(f=i),"selectionStart"in l)l.selectionStart=i,l.selectionEnd=Math.min(f,l.value.length);else if(f=(i=l.ownerDocument||document)&&i.defaultView||window,f.getSelection){f=f.getSelection();var S=l.textContent.length,T=Math.min(h.start,S);h=h.end===void 0?T:Math.min(h.end,S),!f.extend&&T>h&&(S=h,h=T,T=S),S=QA(l,T);var F=QA(l,h);S&&F&&(f.rangeCount!==1||f.anchorNode!==S.node||f.anchorOffset!==S.offset||f.focusNode!==F.node||f.focusOffset!==F.offset)&&(i=i.createRange(),i.setStart(S.node,S.offset),f.removeAllRanges(),T>h?(f.addRange(i),f.extend(F.node,F.offset)):(i.setEnd(F.node,F.offset),f.addRange(i)))}}for(i=[],f=l;f=f.parentNode;)f.nodeType===1&&i.push({element:f,left:f.scrollLeft,top:f.scrollTop});for(typeof l.focus=="function"&&l.focus(),l=0;l=document.documentMode,Fi=null,og=null,gl=null,ig=!1;function t1(i,l,f){var h=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;ig||Fi==null||Fi!==cc(h)||(h=Fi,"selectionStart"in h&&ag(h)?h={start:h.selectionStart,end:h.selectionEnd}:(h=(h.ownerDocument&&h.ownerDocument.defaultView||window).getSelection(),h={anchorNode:h.anchorNode,anchorOffset:h.anchorOffset,focusNode:h.focusNode,focusOffset:h.focusOffset}),gl&&pl(gl,h)||(gl=h,h=Jc(og,"onSelect"),0>=F,S-=F,ma=1<<32-Et(l)+S|f<Qe?(ln=Ye,Ye=null):ln=Ye.sibling;var xt=de(se,Ye,ue[Qe],xe);if(xt===null){Ye===null&&(Ye=ln);break}i&&Ye&&xt.alternate===null&&l(se,Ye),re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt,Ye=ln}if(Qe===ue.length)return f(se,Ye),wt&&Go(se,Qe),je;if(Ye===null){for(;QeQe?(ln=Ye,Ye=null):ln=Ye.sibling;var ho=de(se,Ye,xt.value,xe);if(ho===null){Ye===null&&(Ye=ln);break}i&&Ye&&ho.alternate===null&&l(se,Ye),re=T(ho,re,Qe),lt===null?je=ho:lt.sibling=ho,lt=ho,Ye=ln}if(xt.done)return f(se,Ye),wt&&Go(se,Qe),je;if(Ye===null){for(;!xt.done;Qe++,xt=ue.next())xt=Ae(se,xt.value,xe),xt!==null&&(re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt);return wt&&Go(se,Qe),je}for(Ye=h(Ye);!xt.done;Qe++,xt=ue.next())xt=ge(Ye,se,Qe,xt.value,xe),xt!==null&&(i&&xt.alternate!==null&&Ye.delete(xt.key===null?Qe:xt.key),re=T(xt,re,Qe),lt===null?je=xt:lt.sibling=xt,lt=xt);return i&&Ye.forEach(function(J6){return l(se,J6)}),wt&&Go(se,Qe),je}function Vt(se,re,ue,xe){if(typeof ue=="object"&&ue!==null&&ue.type===c&&ue.key===null&&(ue=ue.props.children),typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case s:e:{for(var je=ue.key;re!==null;){if(re.key===je){if(je=ue.type,je===c){if(re.tag===7){f(se,re.sibling),xe=S(re,ue.props.children),xe.return=se,se=xe;break e}}else if(re.elementType===je||typeof je=="object"&&je!==null&&je.$$typeof===k&&y1(je)===re.type){f(se,re.sibling),xe=S(re,ue.props),El(xe,ue),xe.return=se,se=xe;break e}f(se,re);break}else l(se,re);re=re.sibling}ue.type===c?(xe=Jo(ue.props.children,se.mode,xe,ue.key),xe.return=se,se=xe):(xe=Hc(ue.type,ue.key,ue.props,null,se.mode,xe),El(xe,ue),xe.return=se,se=xe)}return F(se);case u:e:{for(je=ue.key;re!==null;){if(re.key===je)if(re.tag===4&&re.stateNode.containerInfo===ue.containerInfo&&re.stateNode.implementation===ue.implementation){f(se,re.sibling),xe=S(re,ue.children||[]),xe.return=se,se=xe;break e}else{f(se,re);break}else l(se,re);re=re.sibling}xe=lh(ue,se.mode,xe),xe.return=se,se=xe}return F(se);case k:return je=ue._init,ue=je(ue._payload),Vt(se,re,ue,xe)}if(P(ue))return qe(se,re,ue,xe);if(_(ue)){if(je=_(ue),typeof je!="function")throw Error(r(150));return ue=je.call(ue),nt(se,re,ue,xe)}if(typeof ue.then=="function")return Vt(se,re,kc(ue),xe);if(ue.$$typeof===b)return Vt(se,re,Uc(se,ue),xe);Tc(se,ue)}return typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint"?(ue=""+ue,re!==null&&re.tag===6?(f(se,re.sibling),xe=S(re,ue),xe.return=se,se=xe):(f(se,re),xe=sh(ue,se.mode,xe),xe.return=se,se=xe),F(se)):f(se,re)}return function(se,re,ue,xe){try{Sl=0;var je=Vt(se,re,ue,xe);return Hi=null,je}catch(Ye){if(Ye===yl)throw Ye;var lt=hr(29,Ye,null,se.mode);return lt.lanes=xe,lt.return=se,lt}finally{}}}var $o=v1(!0),S1=v1(!1),$i=ae(null),Ac=ae(0);function E1(i,l){i=_a,ie(Ac,i),ie($i,l),_a=i|l.baseLanes}function gg(){ie(Ac,_a),ie($i,$i.current)}function hg(){_a=Ac.current,ke($i),ke(Ac)}var fr=ae(null),Vr=null;function Xa(i){var l=i.alternate;ie(en,en.current&1),ie(fr,i),Vr===null&&(l===null||$i.current!==null||l.memoizedState!==null)&&(Vr=i)}function w1(i){if(i.tag===22){if(ie(en,en.current),ie(fr,i),Vr===null){var l=i.alternate;l!==null&&l.memoizedState!==null&&(Vr=i)}}else Za()}function Za(){ie(en,en.current),ie(fr,fr.current)}function ya(i){ke(fr),Vr===i&&(Vr=null),ke(en)}var en=ae(0);function Rc(i){for(var l=i;l!==null;){if(l.tag===13){var f=l.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||f.data==="$?"||f.data==="$!"))return l}else if(l.tag===19&&l.memoizedProps.revealOrder!==void 0){if(l.flags&128)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===i)break;for(;l.sibling===null;){if(l.return===null||l.return===i)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var U$=typeof AbortController<"u"?AbortController:function(){var i=[],l=this.signal={aborted:!1,addEventListener:function(f,h){i.push(h)}};this.abort=function(){l.aborted=!0,i.forEach(function(f){return f()})}},j$=e.unstable_scheduleCallback,G$=e.unstable_NormalPriority,tn={$$typeof:b,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function mg(){return{controller:new U$,data:new Map,refCount:0}}function wl(i){i.refCount--,i.refCount===0&&j$(G$,function(){i.controller.abort()})}var xl=null,bg=0,qi=0,Vi=null;function H$(i,l){if(xl===null){var f=xl=[];bg=0,qi=xh(),Vi={status:"pending",value:void 0,then:function(h){f.push(h)}}}return bg++,l.then(x1,x1),l}function x1(){if(--bg===0&&xl!==null){Vi!==null&&(Vi.status="fulfilled");var i=xl;xl=null,qi=0,Vi=null;for(var l=0;lT?T:8;var F=D.T,q={};D.T=q,Lg(i,!1,l,f);try{var X=S(),oe=D.S;if(oe!==null&&oe(q,X),X!==null&&typeof X=="object"&&typeof X.then=="function"){var be=$$(X,h);Al(i,l,be,Zn(i))}else Al(i,l,h,Zn(i))}catch(Ae){Al(i,l,{then:function(){},status:"rejected",reason:Ae},Zn())}finally{K.p=T,D.T=F}}function K$(){}function Dg(i,l,f,h){if(i.tag!==5)throw Error(r(476));var S=eR(i).queue;J1(i,S,l,ee,f===null?K$:function(){return tR(i),f(h)})}function eR(i){var l=i.memoizedState;if(l!==null)return l;l={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:va,lastRenderedState:ee},next:null};var f={};return l.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:va,lastRenderedState:f},next:null},i.memoizedState=l,i=i.alternate,i!==null&&(i.memoizedState=l),l}function tR(i){var l=eR(i).next.queue;Al(i,l,{},Zn())}function Ig(){return En(Vl)}function nR(){return Xt().memoizedState}function rR(){return Xt().memoizedState}function X$(i){for(var l=i.return;l!==null;){switch(l.tag){case 24:case 3:var f=Zn();i=no(f);var h=ro(l,i,f);h!==null&&(On(h,l,f),Cl(h,l,f)),l={cache:mg()},i.payload=l;return}l=l.return}}function Z$(i,l,f){var h=Zn();f={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null},Pc(i)?oR(l,f):(f=ug(i,l,f,h),f!==null&&(On(f,i,h),iR(f,l,h)))}function aR(i,l,f){var h=Zn();Al(i,l,f,h)}function Al(i,l,f,h){var S={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null};if(Pc(i))oR(l,S);else{var T=i.alternate;if(i.lanes===0&&(T===null||T.lanes===0)&&(T=l.lastRenderedReducer,T!==null))try{var F=l.lastRenderedState,q=T(F,f);if(S.hasEagerState=!0,S.eagerState=q,Wn(q,F))return vc(i,l,S,0),Lt===null&&yc(),!1}catch{}finally{}if(f=ug(i,l,S,h),f!==null)return On(f,i,h),iR(f,l,h),!0}return!1}function Lg(i,l,f,h){if(h={lane:2,revertLane:xh(),action:h,hasEagerState:!1,eagerState:null,next:null},Pc(i)){if(l)throw Error(r(479))}else l=ug(i,f,h,2),l!==null&&On(l,i,2)}function Pc(i){var l=i.alternate;return i===st||l!==null&&l===st}function oR(i,l){Wi=Cc=!0;var f=i.pending;f===null?l.next=l:(l.next=f.next,f.next=l),i.pending=l}function iR(i,l,f){if(f&4194176){var h=l.lanes;h&=i.pendingLanes,f|=h,l.lanes=f,Ar(i,f)}}var Wr={readContext:En,use:Dc,useCallback:Wt,useContext:Wt,useEffect:Wt,useImperativeHandle:Wt,useLayoutEffect:Wt,useInsertionEffect:Wt,useMemo:Wt,useReducer:Wt,useRef:Wt,useState:Wt,useDebugValue:Wt,useDeferredValue:Wt,useTransition:Wt,useSyncExternalStore:Wt,useId:Wt};Wr.useCacheRefresh=Wt,Wr.useMemoCache=Wt,Wr.useHostTransitionStatus=Wt,Wr.useFormState=Wt,Wr.useActionState=Wt,Wr.useOptimistic=Wt;var Wo={readContext:En,use:Dc,useCallback:function(i,l){return zn().memoizedState=[i,l===void 0?null:l],i},useContext:En,useEffect:q1,useImperativeHandle:function(i,l,f){f=f!=null?f.concat([i]):null,Lc(4194308,4,Y1.bind(null,l,i),f)},useLayoutEffect:function(i,l){return Lc(4194308,4,i,l)},useInsertionEffect:function(i,l){Lc(4,2,i,l)},useMemo:function(i,l){var f=zn();l=l===void 0?null:l;var h=i();if(Vo){ot(!0);try{i()}finally{ot(!1)}}return f.memoizedState=[h,l],h},useReducer:function(i,l,f){var h=zn();if(f!==void 0){var S=f(l);if(Vo){ot(!0);try{f(l)}finally{ot(!1)}}}else S=l;return h.memoizedState=h.baseState=S,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:S},h.queue=i,i=i.dispatch=Z$.bind(null,st,i),[h.memoizedState,i]},useRef:function(i){var l=zn();return i={current:i},l.memoizedState=i},useState:function(i){i=Rg(i);var l=i.queue,f=aR.bind(null,st,l);return l.dispatch=f,[i.memoizedState,f]},useDebugValue:Ng,useDeferredValue:function(i,l){var f=zn();return Og(f,i,l)},useTransition:function(){var i=Rg(!1);return i=J1.bind(null,st,i.queue,!0,!1),zn().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,l,f){var h=st,S=zn();if(wt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=l(),Lt===null)throw Error(r(349));vt&60||C1(h,l,f)}S.memoizedState=f;var T={value:f,getSnapshot:l};return S.queue=T,q1(O1.bind(null,h,T,i),[i]),h.flags|=2048,Ki(9,N1.bind(null,h,T,f,l),{destroy:void 0},null),f},useId:function(){var i=zn(),l=Lt.identifierPrefix;if(wt){var f=ba,h=ma;f=(h&~(1<<32-Et(h)-1)).toString(32)+f,l=":"+l+"R"+f,f=Nc++,0 title"))),mn(T,h,f),T[Sn]=i,an(T),h=T;break e;case"link":var F=I_("link","href",S).get(h+(f.href||""));if(F){for(var q=0;q<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof h.is=="string"?S.createElement("select",{is:h.is}):S.createElement("select"),h.multiple?i.multiple=!0:h.size&&(i.size=h.size);break;default:i=typeof h.is=="string"?S.createElement(f,{is:h.is}):S.createElement(f)}}i[Sn]=l,i[Pn]=h;e:for(S=l.child;S!==null;){if(S.tag===5||S.tag===6)i.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===l)break e;for(;S.sibling===null;){if(S.return===null||S.return===l)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}l.stateNode=i;e:switch(mn(i,f,h),f){case"button":case"input":case"select":case"textarea":i=!!h.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&Aa(l)}}return zt(l),l.flags&=-16777217,null;case 6:if(i&&l.stateNode!=null)i.memoizedProps!==h&&Aa(l);else{if(typeof h!="string"&&l.stateNode===null)throw Error(r(166));if(i=Ie.current,hl(l)){if(i=l.stateNode,f=l.memoizedProps,h=null,S=Nn,S!==null)switch(S.tag){case 27:case 5:h=S.memoizedProps}i[Sn]=l,i=!!(i.nodeValue===f||h!==null&&h.suppressHydrationWarning===!0||E_(i.nodeValue,f)),i||Ho(l)}else i=td(i).createTextNode(h),i[Sn]=l,l.stateNode=i}return zt(l),null;case 13:if(h=l.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(S=hl(l),h!==null&&h.dehydrated!==null){if(i===null){if(!S)throw Error(r(318));if(S=l.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(r(317));S[Sn]=l}else ml(),!(l.flags&128)&&(l.memoizedState=null),l.flags|=4;zt(l),S=!1}else _r!==null&&(mh(_r),_r=null),S=!0;if(!S)return l.flags&256?(ya(l),l):(ya(l),null)}if(ya(l),l.flags&128)return l.lanes=f,l;if(f=h!==null,i=i!==null&&i.memoizedState!==null,f){h=l.child,S=null,h.alternate!==null&&h.alternate.memoizedState!==null&&h.alternate.memoizedState.cachePool!==null&&(S=h.alternate.memoizedState.cachePool.pool);var T=null;h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(T=h.memoizedState.cachePool.pool),T!==S&&(h.flags|=2048)}return f!==i&&f&&(l.child.flags|=8192),$c(l,l.updateQueue),zt(l),null;case 4:return te(),i===null&&Rh(l.stateNode.containerInfo),zt(l),null;case 10:return wa(l.type),zt(l),null;case 19:if(ke(en),S=l.memoizedState,S===null)return zt(l),null;if(h=(l.flags&128)!==0,T=S.rendering,T===null)if(h)Pl(S,!1);else{if(qt!==0||i!==null&&i.flags&128)for(i=l.child;i!==null;){if(T=Rc(i),T!==null){for(l.flags|=128,Pl(S,!1),i=T.updateQueue,l.updateQueue=i,$c(l,i),l.subtreeFlags=0,i=f,f=l.child;f!==null;)KR(f,i),f=f.sibling;return ie(en,en.current&1|2),l.child}i=i.sibling}S.tail!==null&&he()>qc&&(l.flags|=128,h=!0,Pl(S,!1),l.lanes=4194304)}else{if(!h)if(i=Rc(T),i!==null){if(l.flags|=128,h=!0,i=i.updateQueue,l.updateQueue=i,$c(l,i),Pl(S,!0),S.tail===null&&S.tailMode==="hidden"&&!T.alternate&&!wt)return zt(l),null}else 2*he()-S.renderingStartTime>qc&&f!==536870912&&(l.flags|=128,h=!0,Pl(S,!1),l.lanes=4194304);S.isBackwards?(T.sibling=l.child,l.child=T):(i=S.last,i!==null?i.sibling=T:l.child=T,S.last=T)}return S.tail!==null?(l=S.tail,S.rendering=l,S.tail=l.sibling,S.renderingStartTime=he(),l.sibling=null,i=en.current,ie(en,h?i&1|2:i&1),l):(zt(l),null);case 22:case 23:return ya(l),hg(),h=l.memoizedState!==null,i!==null?i.memoizedState!==null!==h&&(l.flags|=8192):h&&(l.flags|=8192),h?f&536870912&&!(l.flags&128)&&(zt(l),l.subtreeFlags&6&&(l.flags|=8192)):zt(l),f=l.updateQueue,f!==null&&$c(l,f.retryQueue),f=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),h=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(h=l.memoizedState.cachePool.pool),h!==f&&(l.flags|=2048),i!==null&&ke(qo),null;case 24:return f=null,i!==null&&(f=i.memoizedState.cache),l.memoizedState.cache!==f&&(l.flags|=2048),wa(tn),zt(l),null;case 25:return null}throw Error(r(156,l.tag))}function a6(i,l){switch(dg(l),l.tag){case 1:return i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 3:return wa(tn),te(),i=l.flags,i&65536&&!(i&128)?(l.flags=i&-65537|128,l):null;case 26:case 27:case 5:return Te(l),null;case 13:if(ya(l),i=l.memoizedState,i!==null&&i.dehydrated!==null){if(l.alternate===null)throw Error(r(340));ml()}return i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 19:return ke(en),null;case 4:return te(),null;case 10:return wa(l.type),null;case 22:case 23:return ya(l),hg(),i!==null&&ke(qo),i=l.flags,i&65536?(l.flags=i&-65537|128,l):null;case 24:return wa(tn),null;case 25:return null;default:return null}}function QR(i,l){switch(dg(l),l.tag){case 3:wa(tn),te();break;case 26:case 27:case 5:Te(l);break;case 4:te();break;case 13:ya(l);break;case 19:ke(en);break;case 10:wa(l.type);break;case 22:case 23:ya(l),hg(),i!==null&&ke(qo);break;case 24:wa(tn)}}var o6={getCacheForType:function(i){var l=En(tn),f=l.data.get(i);return f===void 0&&(f=i(),l.data.set(i,f)),f}},i6=typeof WeakMap=="function"?WeakMap:Map,Bt=0,Lt=null,dt=null,vt=0,Mt=0,Xn=null,Ra=!1,Ji=!1,uh=!1,_a=0,qt=0,lo=0,ei=0,ch=0,mr=0,es=0,Fl=null,Yr=null,dh=!1,fh=0,qc=1/0,Vc=null,uo=null,Wc=!1,ti=null,zl=0,ph=0,gh=null,Bl=0,hh=null;function Zn(){if(Bt&2&&vt!==0)return vt&-vt;if(D.T!==null){var i=qi;return i!==0?i:xh()}return vA()}function JR(){mr===0&&(mr=!(vt&536870912)||wt?Nt():536870912);var i=fr.current;return i!==null&&(i.flags|=32),mr}function On(i,l,f){(i===Lt&&Mt===2||i.cancelPendingCommit!==null)&&(ts(i,0),Ca(i,vt,mr,!1)),Ln(i,f),(!(Bt&2)||i!==Lt)&&(i===Lt&&(!(Bt&2)&&(ei|=f),qt===4&&Ca(i,vt,mr,!1)),Kr(i))}function e_(i,l,f){if(Bt&6)throw Error(r(327));var h=!f&&(l&60)===0&&(l&i.expiredLanes)===0||Xe(i,l),S=h?u6(i,l):vh(i,l,!0),T=h;do{if(S===0){Ji&&!h&&Ca(i,l,0,!1);break}else if(S===6)Ca(i,l,0,!Ra);else{if(f=i.current.alternate,T&&!s6(f)){S=vh(i,l,!1),T=!1;continue}if(S===2){if(T=l,i.errorRecoveryDisabledLanes&T)var F=0;else F=i.pendingLanes&-536870913,F=F!==0?F:F&536870912?536870912:0;if(F!==0){l=F;e:{var q=i;S=Fl;var X=q.current.memoizedState.isDehydrated;if(X&&(ts(q,F).flags|=256),F=vh(q,F,!1),F!==2){if(uh&&!X){q.errorRecoveryDisabledLanes|=T,ei|=T,S=4;break e}T=Yr,Yr=S,T!==null&&mh(T)}S=F}if(T=!1,S!==2)continue}}if(S===1){ts(i,0),Ca(i,l,0,!0);break}e:{switch(h=i,S){case 0:case 1:throw Error(r(345));case 4:if((l&4194176)===l){Ca(h,l,mr,!Ra);break e}break;case 2:Yr=null;break;case 3:case 5:break;default:throw Error(r(329))}if(h.finishedWork=f,h.finishedLanes=l,(l&62914560)===l&&(T=fh+300-he(),10f?32:f,D.T=null,ti===null)var T=!1;else{f=gh,gh=null;var F=ti,q=zl;if(ti=null,zl=0,Bt&6)throw Error(r(331));var X=Bt;if(Bt|=4,WR(F.current),$R(F,F.current,q,f),Bt=X,Ul(0,!1),et&&typeof et.onPostCommitFiberRoot=="function")try{et.onPostCommitFiberRoot(bt,F)}catch{}T=!0}return T}finally{K.p=S,D.T=h,u_(i,l)}}return!1}function c_(i,l,f){l=ur(f,l),l=Fg(i.stateNode,l,2),i=ro(i,l,2),i!==null&&(Ln(i,2),Kr(i))}function Ot(i,l,f){if(i.tag===3)c_(i,i,f);else for(;l!==null;){if(l.tag===3){c_(l,i,f);break}else if(l.tag===1){var h=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(uo===null||!uo.has(h))){i=ur(f,i),f=pR(2),h=ro(l,f,2),h!==null&&(gR(f,h,l,i),Ln(h,2),Kr(h));break}}l=l.return}}function Sh(i,l,f){var h=i.pingCache;if(h===null){h=i.pingCache=new i6;var S=new Set;h.set(l,S)}else S=h.get(l),S===void 0&&(S=new Set,h.set(l,S));S.has(f)||(uh=!0,S.add(f),i=f6.bind(null,i,l,f),l.then(i,i))}function f6(i,l,f){var h=i.pingCache;h!==null&&h.delete(l),i.pingedLanes|=i.suspendedLanes&f,i.warmLanes&=~f,Lt===i&&(vt&f)===f&&(qt===4||qt===3&&(vt&62914560)===vt&&300>he()-fh?!(Bt&2)&&ts(i,0):ch|=f,es===vt&&(es=0)),Kr(i)}function d_(i,l){l===0&&(l=In()),i=Ka(i,l),i!==null&&(Ln(i,l),Kr(i))}function p6(i){var l=i.memoizedState,f=0;l!==null&&(f=l.retryLane),d_(i,f)}function g6(i,l){var f=0;switch(i.tag){case 13:var h=i.stateNode,S=i.memoizedState;S!==null&&(f=S.retryLane);break;case 19:h=i.stateNode;break;case 22:h=i.stateNode._retryCache;break;default:throw Error(r(314))}h!==null&&h.delete(l),d_(i,f)}function h6(i,l){return we(i,l)}var Xc=null,as=null,Eh=!1,Zc=!1,wh=!1,ni=0;function Kr(i){i!==as&&i.next===null&&(as===null?Xc=as=i:as=as.next=i),Zc=!0,Eh||(Eh=!0,b6(m6))}function Ul(i,l){if(!wh&&Zc){wh=!0;do for(var f=!1,h=Xc;h!==null;){if(i!==0){var S=h.pendingLanes;if(S===0)var T=0;else{var F=h.suspendedLanes,q=h.pingedLanes;T=(1<<31-Et(42|i)+1)-1,T&=S&~(F&~q),T=T&201326677?T&201326677|1:T?T|2:0}T!==0&&(f=!0,g_(h,T))}else T=vt,T=fa(h,h===Lt?T:0),!(T&3)||Xe(h,T)||(f=!0,g_(h,T));h=h.next}while(f);wh=!1}}function m6(){Zc=Eh=!1;var i=0;ni!==0&&(T6()&&(i=ni),ni=0);for(var l=he(),f=null,h=Xc;h!==null;){var S=h.next,T=f_(h,l);T===0?(h.next=null,f===null?Xc=S:f.next=S,S===null&&(as=f)):(f=h,(i!==0||T&3)&&(Zc=!0)),h=S}Ul(i)}function f_(i,l){for(var f=i.suspendedLanes,h=i.pingedLanes,S=i.expirationTimes,T=i.pendingLanes&-62914561;0"u"?null:document;function C_(i,l,f){var h=is;if(h&&typeof l=="string"&&l){var S=sr(l);S='link[rel="'+i+'"][href="'+S+'"]',typeof f=="string"&&(S+='[crossorigin="'+f+'"]'),__.has(S)||(__.add(S),i={rel:i,crossOrigin:f,href:l},h.querySelector(S)===null&&(l=h.createElement("link"),mn(l,"link",i),an(l),h.head.appendChild(l)))}}function I6(i){Na.D(i),C_("dns-prefetch",i,null)}function L6(i,l){Na.C(i,l),C_("preconnect",i,l)}function M6(i,l,f){Na.L(i,l,f);var h=is;if(h&&i&&l){var S='link[rel="preload"][as="'+sr(l)+'"]';l==="image"&&f&&f.imageSrcSet?(S+='[imagesrcset="'+sr(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(S+='[imagesizes="'+sr(f.imageSizes)+'"]')):S+='[href="'+sr(i)+'"]';var T=S;switch(l){case"style":T=ss(i);break;case"script":T=ls(i)}br.has(T)||(i=I({rel:"preload",href:l==="image"&&f&&f.imageSrcSet?void 0:i,as:l},f),br.set(T,i),h.querySelector(S)!==null||l==="style"&&h.querySelector(Hl(T))||l==="script"&&h.querySelector($l(T))||(l=h.createElement("link"),mn(l,"link",i),an(l),h.head.appendChild(l)))}}function P6(i,l){Na.m(i,l);var f=is;if(f&&i){var h=l&&typeof l.as=="string"?l.as:"script",S='link[rel="modulepreload"][as="'+sr(h)+'"][href="'+sr(i)+'"]',T=S;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":T=ls(i)}if(!br.has(T)&&(i=I({rel:"modulepreload",href:i},l),br.set(T,i),f.querySelector(S)===null)){switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector($l(T)))return}h=f.createElement("link"),mn(h,"link",i),an(h),f.head.appendChild(h)}}}function F6(i,l,f){Na.S(i,l,f);var h=is;if(h&&i){var S=Ni(h).hoistableStyles,T=ss(i);l=l||"default";var F=S.get(T);if(!F){var q={loading:0,preload:null};if(F=h.querySelector(Hl(T)))q.loading=5;else{i=I({rel:"stylesheet",href:i,"data-precedence":l},f),(f=br.get(T))&&Ph(i,f);var X=F=h.createElement("link");an(X),mn(X,"link",i),X._p=new Promise(function(oe,be){X.onload=oe,X.onerror=be}),X.addEventListener("load",function(){q.loading|=1}),X.addEventListener("error",function(){q.loading|=2}),q.loading|=4,rd(F,l,h)}F={type:"stylesheet",instance:F,count:1,state:q},S.set(T,F)}}}function z6(i,l){Na.X(i,l);var f=is;if(f&&i){var h=Ni(f).hoistableScripts,S=ls(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=I({src:i,async:!0},l),(l=br.get(S))&&Fh(i,l),T=f.createElement("script"),an(T),mn(T,"link",i),f.head.appendChild(T)),T={type:"script",instance:T,count:1,state:null},h.set(S,T))}}function B6(i,l){Na.M(i,l);var f=is;if(f&&i){var h=Ni(f).hoistableScripts,S=ls(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=I({src:i,async:!0,type:"module"},l),(l=br.get(S))&&Fh(i,l),T=f.createElement("script"),an(T),mn(T,"link",i),f.head.appendChild(T)),T={type:"script",instance:T,count:1,state:null},h.set(S,T))}}function N_(i,l,f,h){var S=(S=Ie.current)?nd(S):null;if(!S)throw Error(r(446));switch(i){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(l=ss(f.href),f=Ni(S).hoistableStyles,h=f.get(l),h||(h={type:"style",instance:null,count:0,state:null},f.set(l,h)),h):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){i=ss(f.href);var T=Ni(S).hoistableStyles,F=T.get(i);if(F||(S=S.ownerDocument||S,F={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},T.set(i,F),(T=S.querySelector(Hl(i)))&&!T._p&&(F.instance=T,F.state.loading=5),br.has(i)||(f={rel:"preload",as:"style",href:f.href,crossOrigin:f.crossOrigin,integrity:f.integrity,media:f.media,hrefLang:f.hrefLang,referrerPolicy:f.referrerPolicy},br.set(i,f),T||U6(S,i,f,F.state))),l&&h===null)throw Error(r(528,""));return F}if(l&&h!==null)throw Error(r(529,""));return null;case"script":return l=f.async,f=f.src,typeof f=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=ls(f),f=Ni(S).hoistableScripts,h=f.get(l),h||(h={type:"script",instance:null,count:0,state:null},f.set(l,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,i))}}function ss(i){return'href="'+sr(i)+'"'}function Hl(i){return'link[rel="stylesheet"]['+i+"]"}function O_(i){return I({},i,{"data-precedence":i.precedence,precedence:null})}function U6(i,l,f,h){i.querySelector('link[rel="preload"][as="style"]['+l+"]")?h.loading=1:(l=i.createElement("link"),h.preload=l,l.addEventListener("load",function(){return h.loading|=1}),l.addEventListener("error",function(){return h.loading|=2}),mn(l,"link",f),an(l),i.head.appendChild(l))}function ls(i){return'[src="'+sr(i)+'"]'}function $l(i){return"script[async]"+i}function D_(i,l,f){if(l.count++,l.instance===null)switch(l.type){case"style":var h=i.querySelector('style[data-href~="'+sr(f.href)+'"]');if(h)return l.instance=h,an(h),h;var S=I({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return h=(i.ownerDocument||i).createElement("style"),an(h),mn(h,"style",S),rd(h,f.precedence,i),l.instance=h;case"stylesheet":S=ss(f.href);var T=i.querySelector(Hl(S));if(T)return l.state.loading|=4,l.instance=T,an(T),T;h=O_(f),(S=br.get(S))&&Ph(h,S),T=(i.ownerDocument||i).createElement("link"),an(T);var F=T;return F._p=new Promise(function(q,X){F.onload=q,F.onerror=X}),mn(T,"link",h),l.state.loading|=4,rd(T,f.precedence,i),l.instance=T;case"script":return T=ls(f.src),(S=i.querySelector($l(T)))?(l.instance=S,an(S),S):(h=f,(S=br.get(T))&&(h=I({},f),Fh(h,S)),i=i.ownerDocument||i,S=i.createElement("script"),an(S),mn(S,"link",h),i.head.appendChild(S),l.instance=S);case"void":return null;default:throw Error(r(443,l.type))}else l.type==="stylesheet"&&!(l.state.loading&4)&&(h=l.instance,l.state.loading|=4,rd(h,f.precedence,i));return l.instance}function rd(i,l,f){for(var h=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),S=h.length?h[h.length-1]:null,T=S,F=0;F title"):null)}function j6(i,l,f){if(f===1||l.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return i=l.disabled,typeof l.precedence=="string"&&i==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function M_(i){return!(i.type==="stylesheet"&&!(i.state.loading&3))}var ql=null;function G6(){}function H6(i,l,f){if(ql===null)throw Error(r(475));var h=ql;if(l.type==="stylesheet"&&(typeof f.media!="string"||matchMedia(f.media).matches!==!1)&&!(l.state.loading&4)){if(l.instance===null){var S=ss(f.href),T=i.querySelector(Hl(S));if(T){i=T._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(h.count++,h=od.bind(h),i.then(h,h)),l.state.loading|=4,l.instance=T,an(T);return}T=i.ownerDocument||i,f=O_(f),(S=br.get(S))&&Ph(f,S),T=T.createElement("link"),an(T);var F=T;F._p=new Promise(function(q,X){F.onload=q,F.onerror=X}),mn(T,"link",f),l.instance=T}h.stylesheets===null&&(h.stylesheets=new Map),h.stylesheets.set(l,i),(i=l.state.preload)&&!(l.state.loading&3)&&(h.count++,l=od.bind(h),i.addEventListener("load",l),i.addEventListener("error",l))}}function $6(){if(ql===null)throw Error(r(475));var i=ql;return i.stylesheets&&i.count===0&&zh(i,i.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Wh.exports=dq(),Wh.exports}var pq=fq(),Jl={},rC;function gq(){if(rC)return Jl;rC=1,Object.defineProperty(Jl,"__esModule",{value:!0}),Jl.parse=s,Jl.serialize=d;const e=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,t=/^[\u0021-\u003A\u003C-\u007E]*$/,n=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,r=/^[\u0020-\u003A\u003D-\u007E]*$/,a=Object.prototype.toString,o=(()=>{const m=function(){};return m.prototype=Object.create(null),m})();function s(m,b){const y=new o,v=m.length;if(v<2)return y;const x=(b==null?void 0:b.decode)||p;let A=0;do{const k=m.indexOf("=",A);if(k===-1)break;const R=m.indexOf(";",A),O=R===-1?v:R;if(k>O){A=m.lastIndexOf(";",k-1)+1;continue}const N=u(m,A,k),_=c(m,k,N),C=m.slice(N,_);if(y[C]===void 0){let M=u(m,k+1,O),D=c(m,O,M);const I=x(m.slice(M,D));y[C]=I}A=O+1}while(Ay;){const v=m.charCodeAt(--b);if(v!==32&&v!==9)return b+1}return y}function d(m,b,y){const v=(y==null?void 0:y.encode)||encodeURIComponent;if(!e.test(m))throw new TypeError(`argument name is invalid: ${m}`);const x=v(b);if(!t.test(x))throw new TypeError(`argument val is invalid: ${b}`);let A=m+"="+x;if(!y)return A;if(y.maxAge!==void 0){if(!Number.isInteger(y.maxAge))throw new TypeError(`option maxAge is invalid: ${y.maxAge}`);A+="; Max-Age="+y.maxAge}if(y.domain){if(!n.test(y.domain))throw new TypeError(`option domain is invalid: ${y.domain}`);A+="; Domain="+y.domain}if(y.path){if(!r.test(y.path))throw new TypeError(`option path is invalid: ${y.path}`);A+="; Path="+y.path}if(y.expires){if(!g(y.expires)||!Number.isFinite(y.expires.valueOf()))throw new TypeError(`option expires is invalid: ${y.expires}`);A+="; Expires="+y.expires.toUTCString()}if(y.httpOnly&&(A+="; HttpOnly"),y.secure&&(A+="; Secure"),y.partitioned&&(A+="; Partitioned"),y.priority)switch(typeof y.priority=="string"?y.priority.toLowerCase():void 0){case"low":A+="; Priority=Low";break;case"medium":A+="; Priority=Medium";break;case"high":A+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${y.priority}`)}if(y.sameSite)switch(typeof y.sameSite=="string"?y.sameSite.toLowerCase():y.sameSite){case!0:case"strict":A+="; SameSite=Strict";break;case"lax":A+="; SameSite=Lax";break;case"none":A+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${y.sameSite}`)}return A}function p(m){if(m.indexOf("%")===-1)return m;try{return decodeURIComponent(m)}catch{return m}}function g(m){return a.call(m)==="[object Date]"}return Jl}gq();/** * react-router v7.3.0 * * Copyright (c) Remix Software Inc. @@ -55,19 +55,19 @@ Error generating stack: `+f.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */var eC="popstate";function d9(e={}){function t(a,o){let{pathname:s="/",search:u="",hash:c=""}=wi(a.location.hash.substring(1));return!s.startsWith("/")&&!s.startsWith(".")&&(s="/"+s),ak("",{pathname:s,search:u,hash:c},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(a,o){let s=a.document.querySelector("base"),u="";if(s&&s.getAttribute("href")){let c=a.location.href,d=c.indexOf("#");u=d===-1?c:c.slice(0,d)}return u+"#"+(typeof o=="string"?o:Eu(o))}function r(a,o){zr(a.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(o)})`)}return p9(t,n,r,e)}function jt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function zr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function f9(){return Math.random().toString(36).substring(2,10)}function tC(e,t){return{usr:e.state,key:e.key,idx:t}}function ak(e,t,n=null,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?wi(t):t,state:n,key:t&&t.key||r||f9()}}function Eu({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function wi(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function p9(e,t,n,r={}){let{window:a=document.defaultView,v5Compat:o=!1}=r,s=a.history,u="POP",c=null,d=p();d==null&&(d=0,s.replaceState({...s.state,idx:d},""));function p(){return(s.state||{idx:null}).idx}function g(){u="POP";let k=p(),A=k==null?null:k-d;d=k,c&&c({action:u,location:y.location,delta:A})}function m(k,A){u="PUSH";let x=ak(y.location,k,A);n&&n(x,k),d=p()+1;let R=tC(x,d),O=y.createHref(x);try{s.pushState(R,"",O)}catch(C){if(C instanceof DOMException&&C.name==="DataCloneError")throw C;a.location.assign(O)}o&&c&&c({action:u,location:y.location,delta:1})}function b(k,A){u="REPLACE";let x=ak(y.location,k,A);n&&n(x,k),d=p();let R=tC(x,d),O=y.createHref(x);s.replaceState(R,"",O),o&&c&&c({action:u,location:y.location,delta:0})}function v(k){let A=a.location.origin!=="null"?a.location.origin:a.location.href,x=typeof k=="string"?k:Eu(k);return x=x.replace(/ $/,"%20"),jt(A,`No window.location.(origin|href) available to create URL for href: ${x}`),new URL(x,A)}let y={get action(){return u},get location(){return e(a,s)},listen(k){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(eC,g),c=k,()=>{a.removeEventListener(eC,g),c=null}},createHref(k){return t(a,k)},createURL:v,encodeLocation(k){let A=v(k);return{pathname:A.pathname,search:A.search,hash:A.hash}},push:m,replace:b,go(k){return s.go(k)}};return y}function Mz(e,t,n="/"){return g9(e,t,n,!1)}function g9(e,t,n,r){let a=typeof t=="string"?wi(t):t,o=za(a.pathname||"/",n);if(o==null)return null;let s=Pz(e);h9(s);let u=null;for(let c=0;u==null&&c{let c={relativePath:u===void 0?o.path||"":u,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};c.relativePath.startsWith("/")&&(jt(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length));let d=Pa([r,c.relativePath]),p=n.concat(c);o.children&&o.children.length>0&&(jt(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${d}".`),Pz(o.children,t,p,d)),!(o.path==null&&!o.index)&&t.push({path:d,score:w9(d,o.index),routesMeta:p})};return e.forEach((o,s)=>{var u;if(o.path===""||!((u=o.path)!=null&&u.includes("?")))a(o,s);else for(let c of Fz(o.path))a(o,s,c)}),t}function Fz(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(r.length===0)return a?[o,""]:[o];let s=Fz(r.join("/")),u=[];return u.push(...s.map(c=>c===""?o:[o,c].join("/"))),a&&u.push(...s),u.map(c=>e.startsWith("/")&&c===""?"/":c)}function h9(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:x9(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var m9=/^:[\w-]+$/,b9=3,y9=2,v9=1,S9=10,E9=-2,nC=e=>e==="*";function w9(e,t){let n=e.split("/"),r=n.length;return n.some(nC)&&(r+=E9),t&&(r+=y9),n.filter(a=>!nC(a)).reduce((a,o)=>a+(m9.test(o)?b9:o===""?v9:S9),r)}function x9(e,t){return e.length===t.length&&e.slice(0,-1).every((r,a)=>r===t[a])?e[e.length-1]-t[t.length-1]:0}function k9(e,t,n=!1){let{routesMeta:r}=e,a={},o="/",s=[];for(let u=0;u{if(p==="*"){let v=u[m]||"";s=o.slice(0,o.length-v.length).replace(/(.)\/+$/,"$1")}const b=u[m];return g&&!b?d[p]=void 0:d[p]=(b||"").replace(/%2F/g,"/"),d},{}),pathname:o,pathnameBase:s,pattern:e}}function T9(e,t=!1,n=!0){zr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,u,c)=>(r.push({paramName:u,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),r]}function A9(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return zr(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function za(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function R9(e,t="/"){let{pathname:n,search:r="",hash:a=""}=typeof e=="string"?wi(e):e;return{pathname:n?n.startsWith("/")?n:_9(n,t):t,search:O9(r),hash:D9(a)}}function _9(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?n.length>1&&n.pop():a!=="."&&n.push(a)}),n.length>1?n.join("/"):"/"}function Zh(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function C9(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function zz(e){let t=C9(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function Bz(e,t,n,r=!1){let a;typeof e=="string"?a=wi(e):(a={...e},jt(!a.pathname||!a.pathname.includes("?"),Zh("?","pathname","search",a)),jt(!a.pathname||!a.pathname.includes("#"),Zh("#","pathname","hash",a)),jt(!a.search||!a.search.includes("#"),Zh("#","search","hash",a)));let o=e===""||a.pathname==="",s=o?"/":a.pathname,u;if(s==null)u=n;else{let g=t.length-1;if(!r&&s.startsWith("..")){let m=s.split("/");for(;m[0]==="..";)m.shift(),g-=1;a.pathname=m.join("/")}u=g>=0?t[g]:"/"}let c=R9(a,u),d=s&&s!=="/"&&s.endsWith("/"),p=(o||s===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(d||p)&&(c.pathname+="/"),c}var Pa=e=>e.join("/").replace(/\/\/+/g,"/"),N9=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),O9=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,D9=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function I9(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}var Uz=["POST","PUT","PATCH","DELETE"];new Set(Uz);var L9=["GET",...Uz];new Set(L9);var Us=w.createContext(null);Us.displayName="DataRouter";var $f=w.createContext(null);$f.displayName="DataRouterState";var jz=w.createContext({isTransitioning:!1});jz.displayName="ViewTransition";var M9=w.createContext(new Map);M9.displayName="Fetchers";var P9=w.createContext(null);P9.displayName="Await";var ia=w.createContext(null);ia.displayName="Navigation";var Bu=w.createContext(null);Bu.displayName="Location";var Ha=w.createContext({outlet:null,matches:[],isDataRoute:!1});Ha.displayName="Route";var E0=w.createContext(null);E0.displayName="RouteError";function F9(e,{relative:t}={}){jt(Uu(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(ia),{hash:a,pathname:o,search:s}=ju(e,{relative:t}),u=o;return n!=="/"&&(u=o==="/"?n:Pa([n,o])),r.createHref({pathname:u,search:s,hash:a})}function Uu(){return w.useContext(Bu)!=null}function xi(){return jt(Uu(),"useLocation() may be used only in the context of a component."),w.useContext(Bu).location}var Gz="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Hz(e){w.useContext(ia).static||w.useLayoutEffect(e)}function w0(){let{isDataRoute:e}=w.useContext(Ha);return e?X9():z9()}function z9(){jt(Uu(),"useNavigate() may be used only in the context of a component.");let e=w.useContext(Us),{basename:t,navigator:n}=w.useContext(ia),{matches:r}=w.useContext(Ha),{pathname:a}=xi(),o=JSON.stringify(zz(r)),s=w.useRef(!1);return Hz(()=>{s.current=!0}),w.useCallback((c,d={})=>{if(zr(s.current,Gz),!s.current)return;if(typeof c=="number"){n.go(c);return}let p=Bz(c,JSON.parse(o),a,d.relative==="path");e==null&&t!=="/"&&(p.pathname=p.pathname==="/"?t:Pa([t,p.pathname])),(d.replace?n.replace:n.push)(p,d.state,d)},[t,n,o,a,e])}w.createContext(null);function ju(e,{relative:t}={}){let{matches:n}=w.useContext(Ha),{pathname:r}=xi(),a=JSON.stringify(zz(n));return w.useMemo(()=>Bz(e,JSON.parse(a),r,t==="path"),[e,a,r,t])}function B9(e,t){return $z(e,t)}function $z(e,t,n,r){var x;jt(Uu(),"useRoutes() may be used only in the context of a component.");let{navigator:a,static:o}=w.useContext(ia),{matches:s}=w.useContext(Ha),u=s[s.length-1],c=u?u.params:{},d=u?u.pathname:"/",p=u?u.pathnameBase:"/",g=u&&u.route;{let R=g&&g.path||"";qz(d,!g||R.endsWith("*")||R.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + */var aC="popstate";function hq(e={}){function t(a,o){let{pathname:s="/",search:u="",hash:c=""}=wi(a.location.hash.substring(1));return!s.startsWith("/")&&!s.startsWith(".")&&(s="/"+s),sk("",{pathname:s,search:u,hash:c},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(a,o){let s=a.document.querySelector("base"),u="";if(s&&s.getAttribute("href")){let c=a.location.href,d=c.indexOf("#");u=d===-1?c:c.slice(0,d)}return u+"#"+(typeof o=="string"?o:Eu(o))}function r(a,o){zr(a.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(o)})`)}return bq(t,n,r,e)}function Gt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function zr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function mq(){return Math.random().toString(36).substring(2,10)}function oC(e,t){return{usr:e.state,key:e.key,idx:t}}function sk(e,t,n=null,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?wi(t):t,state:n,key:t&&t.key||r||mq()}}function Eu({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function wi(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function bq(e,t,n,r={}){let{window:a=document.defaultView,v5Compat:o=!1}=r,s=a.history,u="POP",c=null,d=p();d==null&&(d=0,s.replaceState({...s.state,idx:d},""));function p(){return(s.state||{idx:null}).idx}function g(){u="POP";let x=p(),A=x==null?null:x-d;d=x,c&&c({action:u,location:v.location,delta:A})}function m(x,A){u="PUSH";let k=sk(v.location,x,A);n&&n(k,x),d=p()+1;let R=oC(k,d),O=v.createHref(k);try{s.pushState(R,"",O)}catch(N){if(N instanceof DOMException&&N.name==="DataCloneError")throw N;a.location.assign(O)}o&&c&&c({action:u,location:v.location,delta:1})}function b(x,A){u="REPLACE";let k=sk(v.location,x,A);n&&n(k,x),d=p();let R=oC(k,d),O=v.createHref(k);s.replaceState(R,"",O),o&&c&&c({action:u,location:v.location,delta:0})}function y(x){let A=a.location.origin!=="null"?a.location.origin:a.location.href,k=typeof x=="string"?x:Eu(x);return k=k.replace(/ $/,"%20"),Gt(A,`No window.location.(origin|href) available to create URL for href: ${k}`),new URL(k,A)}let v={get action(){return u},get location(){return e(a,s)},listen(x){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(aC,g),c=x,()=>{a.removeEventListener(aC,g),c=null}},createHref(x){return t(a,x)},createURL:y,encodeLocation(x){let A=y(x);return{pathname:A.pathname,search:A.search,hash:A.hash}},push:m,replace:b,go(x){return s.go(x)}};return v}function Bz(e,t,n="/"){return yq(e,t,n,!1)}function yq(e,t,n,r){let a=typeof t=="string"?wi(t):t,o=za(a.pathname||"/",n);if(o==null)return null;let s=Uz(e);vq(s);let u=null;for(let c=0;u==null&&c{let c={relativePath:u===void 0?o.path||"":u,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};c.relativePath.startsWith("/")&&(Gt(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length));let d=Pa([r,c.relativePath]),p=n.concat(c);o.children&&o.children.length>0&&(Gt(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${d}".`),Uz(o.children,t,p,d)),!(o.path==null&&!o.index)&&t.push({path:d,score:Aq(d,o.index),routesMeta:p})};return e.forEach((o,s)=>{var u;if(o.path===""||!((u=o.path)!=null&&u.includes("?")))a(o,s);else for(let c of jz(o.path))a(o,s,c)}),t}function jz(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(r.length===0)return a?[o,""]:[o];let s=jz(r.join("/")),u=[];return u.push(...s.map(c=>c===""?o:[o,c].join("/"))),a&&u.push(...s),u.map(c=>e.startsWith("/")&&c===""?"/":c)}function vq(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Rq(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var Sq=/^:[\w-]+$/,Eq=3,wq=2,xq=1,kq=10,Tq=-2,iC=e=>e==="*";function Aq(e,t){let n=e.split("/"),r=n.length;return n.some(iC)&&(r+=Tq),t&&(r+=wq),n.filter(a=>!iC(a)).reduce((a,o)=>a+(Sq.test(o)?Eq:o===""?xq:kq),r)}function Rq(e,t){return e.length===t.length&&e.slice(0,-1).every((r,a)=>r===t[a])?e[e.length-1]-t[t.length-1]:0}function _q(e,t,n=!1){let{routesMeta:r}=e,a={},o="/",s=[];for(let u=0;u{if(p==="*"){let y=u[m]||"";s=o.slice(0,o.length-y.length).replace(/(.)\/+$/,"$1")}const b=u[m];return g&&!b?d[p]=void 0:d[p]=(b||"").replace(/%2F/g,"/"),d},{}),pathname:o,pathnameBase:s,pattern:e}}function Cq(e,t=!1,n=!0){zr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,u,c)=>(r.push({paramName:u,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),r]}function Nq(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return zr(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function za(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function Oq(e,t="/"){let{pathname:n,search:r="",hash:a=""}=typeof e=="string"?wi(e):e;return{pathname:n?n.startsWith("/")?n:Dq(n,t):t,search:Mq(r),hash:Pq(a)}}function Dq(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?n.length>1&&n.pop():a!=="."&&n.push(a)}),n.length>1?n.join("/"):"/"}function Zh(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Iq(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Gz(e){let t=Iq(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function Hz(e,t,n,r=!1){let a;typeof e=="string"?a=wi(e):(a={...e},Gt(!a.pathname||!a.pathname.includes("?"),Zh("?","pathname","search",a)),Gt(!a.pathname||!a.pathname.includes("#"),Zh("#","pathname","hash",a)),Gt(!a.search||!a.search.includes("#"),Zh("#","search","hash",a)));let o=e===""||a.pathname==="",s=o?"/":a.pathname,u;if(s==null)u=n;else{let g=t.length-1;if(!r&&s.startsWith("..")){let m=s.split("/");for(;m[0]==="..";)m.shift(),g-=1;a.pathname=m.join("/")}u=g>=0?t[g]:"/"}let c=Oq(a,u),d=s&&s!=="/"&&s.endsWith("/"),p=(o||s===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(d||p)&&(c.pathname+="/"),c}var Pa=e=>e.join("/").replace(/\/\/+/g,"/"),Lq=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Mq=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Pq=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Fq(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}var $z=["POST","PUT","PATCH","DELETE"];new Set($z);var zq=["GET",...$z];new Set(zq);var Us=w.createContext(null);Us.displayName="DataRouter";var $f=w.createContext(null);$f.displayName="DataRouterState";var qz=w.createContext({isTransitioning:!1});qz.displayName="ViewTransition";var Bq=w.createContext(new Map);Bq.displayName="Fetchers";var Uq=w.createContext(null);Uq.displayName="Await";var ia=w.createContext(null);ia.displayName="Navigation";var Bu=w.createContext(null);Bu.displayName="Location";var Ha=w.createContext({outlet:null,matches:[],isDataRoute:!1});Ha.displayName="Route";var T0=w.createContext(null);T0.displayName="RouteError";function jq(e,{relative:t}={}){Gt(Uu(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(ia),{hash:a,pathname:o,search:s}=ju(e,{relative:t}),u=o;return n!=="/"&&(u=o==="/"?n:Pa([n,o])),r.createHref({pathname:u,search:s,hash:a})}function Uu(){return w.useContext(Bu)!=null}function xi(){return Gt(Uu(),"useLocation() may be used only in the context of a component."),w.useContext(Bu).location}var Vz="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Wz(e){w.useContext(ia).static||w.useLayoutEffect(e)}function A0(){let{isDataRoute:e}=w.useContext(Ha);return e?e9():Gq()}function Gq(){Gt(Uu(),"useNavigate() may be used only in the context of a component.");let e=w.useContext(Us),{basename:t,navigator:n}=w.useContext(ia),{matches:r}=w.useContext(Ha),{pathname:a}=xi(),o=JSON.stringify(Gz(r)),s=w.useRef(!1);return Wz(()=>{s.current=!0}),w.useCallback((c,d={})=>{if(zr(s.current,Vz),!s.current)return;if(typeof c=="number"){n.go(c);return}let p=Hz(c,JSON.parse(o),a,d.relative==="path");e==null&&t!=="/"&&(p.pathname=p.pathname==="/"?t:Pa([t,p.pathname])),(d.replace?n.replace:n.push)(p,d.state,d)},[t,n,o,a,e])}w.createContext(null);function ju(e,{relative:t}={}){let{matches:n}=w.useContext(Ha),{pathname:r}=xi(),a=JSON.stringify(Gz(n));return w.useMemo(()=>Hz(e,JSON.parse(a),r,t==="path"),[e,a,r,t])}function Hq(e,t){return Yz(e,t)}function Yz(e,t,n,r){var k;Gt(Uu(),"useRoutes() may be used only in the context of a component.");let{navigator:a,static:o}=w.useContext(ia),{matches:s}=w.useContext(Ha),u=s[s.length-1],c=u?u.params:{},d=u?u.pathname:"/",p=u?u.pathnameBase:"/",g=u&&u.route;{let R=g&&g.path||"";Kz(d,!g||R.endsWith("*")||R.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let m=xi(),b;if(t){let R=typeof t=="string"?wi(t):t;jt(p==="/"||((x=R.pathname)==null?void 0:x.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${R.pathname}" was given in the \`location\` prop.`),b=R}else b=m;let v=b.pathname||"/",y=v;if(p!=="/"){let R=p.replace(/^\//,"").split("/");y="/"+v.replace(/^\//,"").split("/").slice(R.length).join("/")}let k=!o&&n&&n.matches&&n.matches.length>0?n.matches:Mz(e,{pathname:y});zr(g||k!=null,`No routes matched location "${b.pathname}${b.search}${b.hash}" `),zr(k==null||k[k.length-1].route.element!==void 0||k[k.length-1].route.Component!==void 0||k[k.length-1].route.lazy!==void 0,`Matched leaf route at location "${b.pathname}${b.search}${b.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let A=$9(k&&k.map(R=>Object.assign({},R,{params:Object.assign({},c,R.params),pathname:Pa([p,a.encodeLocation?a.encodeLocation(R.pathname).pathname:R.pathname]),pathnameBase:R.pathnameBase==="/"?p:Pa([p,a.encodeLocation?a.encodeLocation(R.pathnameBase).pathname:R.pathnameBase])})),s,n,r);return t&&A?w.createElement(Bu.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...b},navigationType:"POP"}},A):A}function U9(){let e=K9(),t=I9(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:r},o={padding:"2px 4px",backgroundColor:r},s=null;return console.error("Error handled by React Router default ErrorBoundary:",e),s=w.createElement(w.Fragment,null,w.createElement("p",null,"💿 Hey developer 👋"),w.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",w.createElement("code",{style:o},"ErrorBoundary")," or"," ",w.createElement("code",{style:o},"errorElement")," prop on your route.")),w.createElement(w.Fragment,null,w.createElement("h2",null,"Unexpected Application Error!"),w.createElement("h3",{style:{fontStyle:"italic"}},t),n?w.createElement("pre",{style:a},n):null,s)}var j9=w.createElement(U9,null),G9=class extends w.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return this.state.error!==void 0?w.createElement(Ha.Provider,{value:this.props.routeContext},w.createElement(E0.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function H9({routeContext:e,match:t,children:n}){let r=w.useContext(Us);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),w.createElement(Ha.Provider,{value:e},n)}function $9(e,t=[],n=null,r=null){if(e==null){if(!n)return null;if(n.errors)e=n.matches;else if(t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let a=e,o=n==null?void 0:n.errors;if(o!=null){let c=a.findIndex(d=>d.route.id&&(o==null?void 0:o[d.route.id])!==void 0);jt(c>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),a=a.slice(0,Math.min(a.length,c+1))}let s=!1,u=-1;if(n)for(let c=0;c=0?a=a.slice(0,u+1):a=[a[0]];break}}}return a.reduceRight((c,d,p)=>{let g,m=!1,b=null,v=null;n&&(g=o&&d.route.id?o[d.route.id]:void 0,b=d.route.errorElement||j9,s&&(u<0&&p===0?(qz("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),m=!0,v=null):u===p&&(m=!0,v=d.route.hydrateFallbackElement||null)));let y=t.concat(a.slice(0,p+1)),k=()=>{let A;return g?A=b:m?A=v:d.route.Component?A=w.createElement(d.route.Component,null):d.route.element?A=d.route.element:A=c,w.createElement(H9,{match:d,routeContext:{outlet:c,matches:y,isDataRoute:n!=null},children:A})};return n&&(d.route.ErrorBoundary||d.route.errorElement||p===0)?w.createElement(G9,{location:n.location,revalidation:n.revalidation,component:b,error:g,children:k(),routeContext:{outlet:null,matches:y,isDataRoute:!0}}):k()},null)}function x0(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function q9(e){let t=w.useContext(Us);return jt(t,x0(e)),t}function V9(e){let t=w.useContext($f);return jt(t,x0(e)),t}function W9(e){let t=w.useContext(Ha);return jt(t,x0(e)),t}function k0(e){let t=W9(e),n=t.matches[t.matches.length-1];return jt(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Y9(){return k0("useRouteId")}function K9(){var r;let e=w.useContext(E0),t=V9("useRouteError"),n=k0("useRouteError");return e!==void 0?e:(r=t.errors)==null?void 0:r[n]}function X9(){let{router:e}=q9("useNavigate"),t=k0("useNavigate"),n=w.useRef(!1);return Hz(()=>{n.current=!0}),w.useCallback(async(a,o={})=>{zr(n.current,Gz),n.current&&(typeof a=="number"?e.navigate(a):await e.navigate(a,{fromRouteId:t,...o}))},[e,t])}var rC={};function qz(e,t,n){!t&&!rC[e]&&(rC[e]=!0,zr(!1,n))}w.memo(Z9);function Z9({routes:e,future:t,state:n}){return $z(e,void 0,n,t)}function ok(e){jt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function Q9({basename:e="/",children:t=null,location:n,navigationType:r="POP",navigator:a,static:o=!1}){jt(!Uu(),"You cannot render a inside another . You should never have more than one in your app.");let s=e.replace(/^\/*/,"/"),u=w.useMemo(()=>({basename:s,navigator:a,static:o,future:{}}),[s,a,o]);typeof n=="string"&&(n=wi(n));let{pathname:c="/",search:d="",hash:p="",state:g=null,key:m="default"}=n,b=w.useMemo(()=>{let v=za(c,s);return v==null?null:{location:{pathname:v,search:d,hash:p,state:g,key:m},navigationType:r}},[s,c,d,p,g,m,r]);return zr(b!=null,` is not able to match the URL "${c}${d}${p}" because it does not start with the basename, so the won't render anything.`),b==null?null:w.createElement(ia.Provider,{value:u},w.createElement(Bu.Provider,{children:t,value:b}))}function J9({children:e,location:t}){return B9(ik(e),t)}function ik(e,t=[]){let n=[];return w.Children.forEach(e,(r,a)=>{if(!w.isValidElement(r))return;let o=[...t,a];if(r.type===w.Fragment){n.push.apply(n,ik(r.props.children,o));return}jt(r.type===ok,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),jt(!r.props.index||!r.props.children,"An index route cannot have child routes.");let s={id:r.props.id||o.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(s.children=ik(r.props.children,o)),n.push(s)}),n}var qd="get",Vd="application/x-www-form-urlencoded";function qf(e){return e!=null&&typeof e.tagName=="string"}function eq(e){return qf(e)&&e.tagName.toLowerCase()==="button"}function tq(e){return qf(e)&&e.tagName.toLowerCase()==="form"}function nq(e){return qf(e)&&e.tagName.toLowerCase()==="input"}function rq(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function aq(e,t){return e.button===0&&(!t||t==="_self")&&!rq(e)}var gd=null;function oq(){if(gd===null)try{new FormData(document.createElement("form"),0),gd=!1}catch{gd=!0}return gd}var iq=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Qh(e){return e!=null&&!iq.has(e)?(zr(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Vd}"`),null):e}function sq(e,t){let n,r,a,o,s;if(tq(e)){let u=e.getAttribute("action");r=u?za(u,t):null,n=e.getAttribute("method")||qd,a=Qh(e.getAttribute("enctype"))||Vd,o=new FormData(e)}else if(eq(e)||nq(e)&&(e.type==="submit"||e.type==="image")){let u=e.form;if(u==null)throw new Error('Cannot submit a - {t('documentPanel.documentManager.uploadedDescription')} + - + {!docs && ( - +
+ +
)} {docs && ( - - - - {t('documentPanel.documentManager.columns.id')} - {t('documentPanel.documentManager.columns.summary')} - {t('documentPanel.documentManager.columns.status')} - {t('documentPanel.documentManager.columns.length')} - {t('documentPanel.documentManager.columns.chunks')} - {t('documentPanel.documentManager.columns.created')} - {t('documentPanel.documentManager.columns.updated')} - - - - {Object.entries(docs.statuses).map(([status, documents]) => - documents.map((doc) => ( - - - {showFileName ? ( - <> -
-
- {getDisplayFileName(doc, 35)} -
-
- {doc.file_path} -
-
-
{doc.id}
- - ) : ( -
-
- {doc.id} -
-
- {doc.file_path} -
-
- )} -
- -
-
- {doc.content_summary} -
-
- {doc.content_summary} -
+
+
+
+ + + handleSort('id')} + className="cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-800 select-none" + > +
+ {t('documentPanel.documentManager.columns.id')} + {sortField === 'id' && ( + + {sortDirection === 'asc' ? : } + + )}
- - - {status === 'processed' && ( - {t('documentPanel.documentManager.status.completed')} - )} - {status === 'processing' && ( - {t('documentPanel.documentManager.status.processing')} - )} - {status === 'pending' && {t('documentPanel.documentManager.status.pending')}} - {status === 'failed' && {t('documentPanel.documentManager.status.failed')}} - {doc.error && ( - - ⚠️ - - )} - - {doc.content_length ?? '-'} - {doc.chunks_count ?? '-'} - - {new Date(doc.created_at).toLocaleString()} - - - {new Date(doc.updated_at).toLocaleString()} - +
+ {t('documentPanel.documentManager.columns.summary')} + {t('documentPanel.documentManager.columns.status')} + {t('documentPanel.documentManager.columns.length')} + {t('documentPanel.documentManager.columns.chunks')} + handleSort('created_at')} + className="cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-800 select-none" + > +
+ {t('documentPanel.documentManager.columns.created')} + {sortField === 'created_at' && ( + + {sortDirection === 'asc' ? : } + + )} +
+
+ handleSort('updated_at')} + className="cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-800 select-none" + > +
+ {t('documentPanel.documentManager.columns.updated')} + {sortField === 'updated_at' && ( + + {sortDirection === 'asc' ? : } + + )} +
+
- )) - )} - -
+ + + {Object.entries(docs.statuses).flatMap(([status, documents]) => { + // Apply sorting to documents + const sortedDocuments = sortDocuments(documents); + + return sortedDocuments.map(doc => ( + + + {showFileName ? ( + <> +
+
+ {getDisplayFileName(doc, 30)} +
+
+ {doc.file_path} +
+
+
{doc.id}
+ + ) : ( +
+
+ {doc.id} +
+
+ {doc.file_path} +
+
+ )} +
+ +
+
+ {doc.content_summary} +
+
+ {doc.content_summary} +
+
+
+ + {status === 'processed' && ( + {t('documentPanel.documentManager.status.completed')} + )} + {status === 'processing' && ( + {t('documentPanel.documentManager.status.processing')} + )} + {status === 'pending' && {t('documentPanel.documentManager.status.pending')}} + {status === 'failed' && {t('documentPanel.documentManager.status.failed')}} + {doc.error && ( + + ⚠️ + + )} + + {doc.content_length ?? '-'} + {doc.chunks_count ?? '-'} + + {new Date(doc.created_at).toLocaleString()} + + + {new Date(doc.updated_at).toLocaleString()} + +
+ )); + })} +
+ + + )}
diff --git a/lightrag_webui/src/hooks/useLightragGraph.tsx b/lightrag_webui/src/hooks/useLightragGraph.tsx index 2ee28749..92da7189 100644 --- a/lightrag_webui/src/hooks/useLightragGraph.tsx +++ b/lightrag_webui/src/hooks/useLightragGraph.tsx @@ -205,7 +205,7 @@ const createSigmaGraph = (rawGraph: RawGraph | null) => { // Add edges from raw graph data for (const rawEdge of rawGraph?.edges ?? []) { rawEdge.dynamicId = graph.addDirectedEdge(rawEdge.source, rawEdge.target, { - label: rawEdge.type || undefined + label: rawEdge.properties?.keywords || undefined }) } @@ -660,7 +660,7 @@ const useLightrangeGraph = () => { // Add the edge to the sigma graph newEdge.dynamicId = sigmaGraph.addDirectedEdge(newEdge.source, newEdge.target, { - label: newEdge.type || undefined + label: newEdge.properties?.keywords || undefined }); // Add the edge to the raw graph diff --git a/lightrag_webui/src/locales/ar.json b/lightrag_webui/src/locales/ar.json index ec25afe9..d7cff8e3 100644 --- a/lightrag_webui/src/locales/ar.json +++ b/lightrag_webui/src/locales/ar.json @@ -65,16 +65,19 @@ "singleFileLimit": "لا يمكن رفع أكثر من ملف واحد في المرة الواحدة", "maxFilesLimit": "لا يمكن رفع أكثر من {{count}} ملفات", "fileRejected": "تم رفض الملف {{name}}", + "unsupportedType": "نوع الملف غير مدعوم", + "fileTooLarge": "حجم الملف كبير جدًا، الحد الأقصى {{maxSize}}", "dropHere": "أفلت الملفات هنا", "dragAndDrop": "اسحب وأفلت الملفات هنا، أو انقر للاختيار", "removeFile": "إزالة الملف", - "uploadDescription": "يمكنك رفع {{isMultiple ? 'عدة' : count}} ملفات (حتى {{maxSize}} لكل منها)" + "uploadDescription": "يمكنك رفع {{isMultiple ? 'عدة' : count}} ملفات (حتى {{maxSize}} لكل منها)", + "duplicateFile": "اسم الملف موجود بالفعل في ذاكرة التخزين المؤقت للخادم" } }, "documentManager": { "title": "إدارة المستندات", "scanButton": "مسح ضوئي", - "scanTooltip": "مسح المستندات ضوئيًا", + "scanTooltip": "مسح المستندات ضوئيًا في مجلد الإدخال", "pipelineStatusButton": "حالة خط المعالجة", "pipelineStatusTooltip": "عرض حالة خط المعالجة", "uploadedTitle": "المستندات المرفوعة", @@ -212,7 +215,8 @@ "entity_id": "الاسم", "entity_type": "النوع", "source_id": "معرف المصدر", - "Neighbour": "الجار" + "Neighbour": "الجار", + "file_path": "المصدر" } }, "edge": { diff --git a/lightrag_webui/src/locales/en.json b/lightrag_webui/src/locales/en.json index 603e9df3..d7c68c73 100644 --- a/lightrag_webui/src/locales/en.json +++ b/lightrag_webui/src/locales/en.json @@ -65,16 +65,19 @@ "singleFileLimit": "Cannot upload more than 1 file at a time", "maxFilesLimit": "Cannot upload more than {{count}} files", "fileRejected": "File {{name}} was rejected", + "unsupportedType": "Unsupported file type", + "fileTooLarge": "File too large, maximum size is {{maxSize}}", "dropHere": "Drop the files here", "dragAndDrop": "Drag and drop files here, or click to select files", "removeFile": "Remove file", - "uploadDescription": "You can upload {{isMultiple ? 'multiple' : count}} files (up to {{maxSize}} each)" + "uploadDescription": "You can upload {{isMultiple ? 'multiple' : count}} files (up to {{maxSize}} each)", + "duplicateFile": "File name already exists in server cache" } }, "documentManager": { "title": "Document Management", "scanButton": "Scan", - "scanTooltip": "Scan documents", + "scanTooltip": "Scan documents in input folder", "pipelineStatusButton": "Pipeline Status", "pipelineStatusTooltip": "View pipeline status", "uploadedTitle": "Uploaded Documents", @@ -212,7 +215,8 @@ "entity_id": "Name", "entity_type": "Type", "source_id": "SrcID", - "Neighbour": "Neigh" + "Neighbour": "Neigh", + "file_path": "Source" } }, "edge": { diff --git a/lightrag_webui/src/locales/fr.json b/lightrag_webui/src/locales/fr.json index 1f7bf39c..f40d43f6 100644 --- a/lightrag_webui/src/locales/fr.json +++ b/lightrag_webui/src/locales/fr.json @@ -65,16 +65,19 @@ "singleFileLimit": "Impossible de télécharger plus d'un fichier à la fois", "maxFilesLimit": "Impossible de télécharger plus de {{count}} fichiers", "fileRejected": "Le fichier {{name}} a été rejeté", + "unsupportedType": "Type de fichier non pris en charge", + "fileTooLarge": "Fichier trop volumineux, taille maximale {{maxSize}}", "dropHere": "Déposez les fichiers ici", "dragAndDrop": "Glissez et déposez les fichiers ici, ou cliquez pour sélectionner", "removeFile": "Supprimer le fichier", - "uploadDescription": "Vous pouvez télécharger {{isMultiple ? 'plusieurs' : count}} fichiers (jusqu'à {{maxSize}} chacun)" + "uploadDescription": "Vous pouvez télécharger {{isMultiple ? 'plusieurs' : count}} fichiers (jusqu'à {{maxSize}} chacun)", + "duplicateFile": "Le nom du fichier existe déjà dans le cache du serveur" } }, "documentManager": { "title": "Gestion des documents", "scanButton": "Scanner", - "scanTooltip": "Scanner les documents", + "scanTooltip": "Scanner les documents dans le dossier d'entrée", "pipelineStatusButton": "État du Pipeline", "pipelineStatusTooltip": "Voir l'état du pipeline", "uploadedTitle": "Documents téléchargés", @@ -212,7 +215,8 @@ "entity_id": "Nom", "entity_type": "Type", "source_id": "ID source", - "Neighbour": "Voisin" + "Neighbour": "Voisin", + "file_path": "Source" } }, "edge": { diff --git a/lightrag_webui/src/locales/zh.json b/lightrag_webui/src/locales/zh.json index 0273f920..bd1a1841 100644 --- a/lightrag_webui/src/locales/zh.json +++ b/lightrag_webui/src/locales/zh.json @@ -65,16 +65,19 @@ "singleFileLimit": "一次只能上传一个文件", "maxFilesLimit": "最多只能上传 {{count}} 个文件", "fileRejected": "文件 {{name}} 被拒绝", + "unsupportedType": "不支持的文件类型", + "fileTooLarge": "文件过大,最大允许 {{maxSize}}", "dropHere": "将文件拖放到此处", "dragAndDrop": "拖放文件到此处,或点击选择文件", "removeFile": "移除文件", - "uploadDescription": "您可以上传{{isMultiple ? '多个' : count}}个文件(每个文件最大{{maxSize}})" + "uploadDescription": "您可以上传{{isMultiple ? '多个' : count}}个文件(每个文件最大{{maxSize}})", + "duplicateFile": "文件名与服务器上的缓存重复" } }, "documentManager": { "title": "文档管理", "scanButton": "扫描", - "scanTooltip": "扫描文档", + "scanTooltip": "扫描输入目录中的文档", "pipelineStatusButton": "流水线状态", "pipelineStatusTooltip": "查看流水线状态", "uploadedTitle": "已上传文档", @@ -212,7 +215,8 @@ "entity_id": "名称", "entity_type": "类型", "source_id": "信源ID", - "Neighbour": "邻接" + "Neighbour": "邻接", + "file_path": "信源" } }, "edge": {