diff --git a/README.md b/README.md index 091b5b77..c3a43650 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@

🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation

+
@@ -6,6 +7,7 @@ lightrag
+

@@ -32,9 +34,13 @@

+
+ HKUDS%2FLightRAG | Trendshift +
+ ## 🎉 News -- [X] [2025.03.18]🎯📢LightRAG now supports citation functionality. +- [X] [2025.03.18]🎯📢LightRAG now supports citation functionality, enabling proper source attribution. - [X] [2025.02.05]🎯📢Our team has released [VideoRAG](https://github.com/HKUDS/VideoRAG) understanding extremely long-context videos. - [X] [2025.01.13]🎯📢Our team has released [MiniRAG](https://github.com/HKUDS/MiniRAG) making RAG simpler with small models. - [X] [2025.01.06]🎯📢You can now [use PostgreSQL for Storage](#using-postgresql-for-storage). diff --git a/env.example b/env.example index d21bbef6..cb6b8e28 100644 --- a/env.example +++ b/env.example @@ -40,15 +40,18 @@ WEBUI_DESCRIPTION="Simple and Fast Graph Based RAG System" # MAX_TOKEN_ENTITY_DESC=4000 ### Settings for document indexing -ENABLE_LLM_CACHE_FOR_EXTRACT=true SUMMARY_LANGUAGE=English # CHUNK_SIZE=1200 # CHUNK_OVERLAP_SIZE=100 -### Max tokens for entity or relations summary -# MAX_TOKEN_SUMMARY=500 + ### Number of parallel processing documents in one patch # MAX_PARALLEL_INSERT=2 +### Max tokens for entity/relations description after merge +# MAX_TOKEN_SUMMARY=500 +### Number of entities/edges to trigger LLM re-summary on merge ( at least 3 is recommented) +# FORCE_LLM_SUMMARY_ON_MERGE=6 + ### Num of chunks send to Embedding in single request # EMBEDDING_BATCH_NUM=32 ### Max concurrency requests for Embedding @@ -64,6 +67,8 @@ TEMPERATURE=0.5 MAX_ASYNC=4 ### Max tokens send to LLM (less than context size of the model) MAX_TOKENS=32768 +ENABLE_LLM_CACHE=true +ENABLE_LLM_CACHE_FOR_EXTRACT=true ### Ollama example (For local services installed with docker, you can use host.docker.internal as host) LLM_BINDING=ollama diff --git a/lightrag/__init__.py b/lightrag/__init__.py index 1c698ff6..2664f6e4 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.1" +__version__ = "1.3.2" __author__ = "Zirui Guo" __url__ = "https://github.com/HKUDS/LightRAG" diff --git a/lightrag/api/README-zh.md b/lightrag/api/README-zh.md index 03718656..f6db7c88 100644 --- a/lightrag/api/README-zh.md +++ b/lightrag/api/README-zh.md @@ -102,6 +102,10 @@ lightrag-gunicorn --workers 4 - `--log-level`:日志级别(默认:INFO) - --input-dir:指定要扫描文档的目录(默认:./input) +> ** 要求将.env文件置于启动目录中是经过特意设计的**。 这样做的目的是支持用户同时启动多个LightRAG实例,并为不同实例配置不同的.env文件。 + +> **修改.env文件后,您需要重新打开终端以使新设置生效**。 这是因为每次启动时,LightRAG Server会将.env文件中的环境变量加载至系统环境变量,且系统环境变量的设置具有更高优先级。 + ### 启动时自动扫描 当使用 `--auto-scan-at-startup` 参数启动任何服务器时,系统将自动: @@ -164,7 +168,7 @@ sudo systemctl enable lightrag.service ### 将 Open WebUI 连接到 LightRAG -启动 lightrag-server 后,您可以在 Open WebUI 管理面板中添加 Ollama 类型的连接。然后,一个名为 lightrag:latest 的模型将出现在 Open WebUI 的模型管理界面中。用户随后可以通过聊天界面向 LightRAG 发送查询。对于这种用例,最好将 LightRAG 安装为服务。 +启动 lightrag-server 后,您可以在 Open WebUI 管理面板中添加 Ollama 类型的连接。然后,一个名为 `lightrag:latest` 的模型将出现在 Open WebUI 的模型管理界面中。用户随后可以通过聊天界面向 LightRAG 发送查询。对于这种用例,最好将 LightRAG 安装为服务。 Open WebUI 使用 LLM 来执行会话标题和会话关键词生成任务。因此,Ollama 聊天补全 API 会检测并将 OpenWebUI 会话相关请求直接转发给底层 LLM。Open WebUI 的截图: @@ -172,6 +176,8 @@ Open WebUI 使用 LLM 来执行会话标题和会话关键词生成任务。因 ### 在聊天中选择查询模式 +如果您从 LightRAG 的 Ollama 接口发送消息(查询),默认查询模式是 `hybrid`。您可以通过发送带有查询前缀的消息来选择查询模式。 + 查询字符串中的查询前缀可以决定使用哪种 LightRAG 查询模式来生成响应。支持的前缀包括: ``` @@ -180,13 +186,22 @@ Open WebUI 使用 LLM 来执行会话标题和会话关键词生成任务。因 /hybrid /naive /mix + /bypass +/context +/localcontext +/globalcontext +/hybridcontext +/naivecontext +/mixcontext ``` 例如,聊天消息 "/mix 唐僧有几个徒弟" 将触发 LightRAG 的混合模式查询。没有查询前缀的聊天消息默认会触发混合模式查询。 "/bypass" 不是 LightRAG 查询模式,它会告诉 API 服务器将查询连同聊天历史直接传递给底层 LLM。因此用户可以使用 LLM 基于聊天历史回答问题。如果您使用 Open WebUI 作为前端,您可以直接切换到普通 LLM 模型,而不是使用 /bypass 前缀。 +"/context" 也不是 LightRAG 查询模式,它会告诉 LightRAG 只返回为 LLM 准备的上下文信息。您可以检查上下文是否符合您的需求,或者自行处理上下文。 + ## API 密钥和认证 默认情况下,LightRAG 服务器可以在没有任何认证的情况下访问。我们可以使用 API 密钥或账户凭证配置服务器以确保其安全。 diff --git a/lightrag/api/README.md b/lightrag/api/README.md index 27f3d14a..1d05ba78 100644 --- a/lightrag/api/README.md +++ b/lightrag/api/README.md @@ -1,6 +1,6 @@ # LightRAG Server and WebUI -The LightRAG Server is designed to provide Web UI and API support. The Web UI facilitates document indexing, knowledge graph exploration, and a simple RAG query interface. LightRAG Server also provide an Ollama compatible interfaces, aiming to emulate LightRAG as an Ollama chat model. This allows AI chat bot, such as Open WebUI, to access LightRAG easily. +The LightRAG Server is designed to provide a Web UI and API support. The Web UI facilitates document indexing, knowledge graph exploration, and a simple RAG query interface. LightRAG Server also provides an Ollama-compatible interface, aiming to emulate LightRAG as an Ollama chat model. This allows AI chat bots, such as Open WebUI, to access LightRAG easily. ![image-20250323122538997](./README.assets/image-20250323122538997.png) @@ -8,17 +8,17 @@ The LightRAG Server is designed to provide Web UI and API support. The Web UI fa ![image-20250323123011220](./README.assets/image-20250323123011220.png) -## Getting Start +## Getting Started ### Installation -* Install from PyPI +* Install from PyPI ```bash pip install "lightrag-hku[api]" ``` -* Installation from Source +* Installation from Source ```bash # Clone the repository @@ -27,7 +27,7 @@ git clone https://github.com/HKUDS/lightrag.git # Change to the repository directory cd lightrag -# create a Python virtual enviroment if neccesary +# create a Python virtual environment if necessary # Install in editable mode with API support pip install -e ".[api]" ``` @@ -36,23 +36,23 @@ pip install -e ".[api]" LightRAG necessitates the integration of both an LLM (Large Language Model) and an Embedding Model to effectively execute document indexing and querying operations. Prior to the initial deployment of the LightRAG server, it is essential to configure the settings for both the LLM and the Embedding Model. LightRAG supports binding to various LLM/Embedding backends: -* ollama -* lollms -* openai or openai compatible -* azure_openai +* ollama +* lollms +* openai or openai compatible +* azure_openai It is recommended to use environment variables to configure the LightRAG Server. There is an example environment variable file named `env.example` in the root directory of the project. Please copy this file to the startup directory and rename it to `.env`. After that, you can modify the parameters related to the LLM and Embedding models in the `.env` file. It is important to note that the LightRAG Server will load the environment variables from `.env` into the system environment variables each time it starts. Since the LightRAG Server will prioritize the settings in the system environment variables, if you modify the `.env` file after starting the LightRAG Server via the command line, you need to execute `source .env` to make the new settings take effect. -Here are some examples of common settings for LLM and Embedding models: +Here are some examples of common settings for LLM and Embedding models: -* OpenAI LLM + Ollama Embedding +* OpenAI LLM + Ollama Embedding: ``` LLM_BINDING=openai LLM_MODEL=gpt-4o LLM_BINDING_HOST=https://api.openai.com/v1 LLM_BINDING_API_KEY=your_api_key -### Max tokens send to LLM (less than model context size) +### Max tokens sent to LLM (less than model context size) MAX_TOKENS=32768 EMBEDDING_BINDING=ollama @@ -62,14 +62,14 @@ EMBEDDING_DIM=1024 # EMBEDDING_BINDING_API_KEY=your_api_key ``` -* Ollama LLM + Ollama Embedding +* Ollama LLM + Ollama Embedding: ``` LLM_BINDING=ollama LLM_MODEL=mistral-nemo:latest LLM_BINDING_HOST=http://localhost:11434 # LLM_BINDING_API_KEY=your_api_key -### Max tokens send to LLM (base on your Ollama Server capacity) +### Max tokens sent to LLM (based on your Ollama Server capacity) MAX_TOKENS=8192 EMBEDDING_BINDING=ollama @@ -82,12 +82,12 @@ EMBEDDING_DIM=1024 ### Starting LightRAG Server The LightRAG Server supports two operational modes: -* The simple and efficient Uvicorn mode +* The simple and efficient Uvicorn mode: ``` lightrag-server ``` -* The multiprocess Gunicorn + Uvicorn mode (production mode, not supported on Windows environments) +* The multiprocess Gunicorn + Uvicorn mode (production mode, not supported on Windows environments): ``` lightrag-gunicorn --workers 4 @@ -96,44 +96,46 @@ 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: +Here are some commonly used startup parameters: -- `--host`: Server listening address (default: 0.0.0.0) -- `--port`: Server listening port (default: 9621) -- `--timeout`: LLM request timeout (default: 150 seconds) -- `--log-level`: Logging level (default: INFO) -- --input-dir: specifying the directory to scan for documents (default: ./input) +- `--host`: Server listening address (default: 0.0.0.0) +- `--port`: Server listening port (default: 9621) +- `--timeout`: LLM request timeout (default: 150 seconds) +- `--log-level`: Logging level (default: INFO) +- `--input-dir`: Specifying the directory to scan for documents (default: ./inputs) -> 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. +> 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, allowing different .env files for different instances. + +> **After changing the .env file, you need to open a new terminal to make the new settings take effect.** This because the LightRAG Server will load the environment variables from .env into the system environment variables each time it starts, and LightRAG Server will prioritize the settings in the system environment variables. ### Auto scan on startup When starting any of the servers with the `--auto-scan-at-startup` parameter, the system will automatically: -1. Scan for new files in the input directory -2. Indexing new documents that aren't already in the database -3. Make all content immediately available for RAG queries +1. Scan for new files in the input directory +2. Index new documents that aren't already in the database +3. Make all content immediately available for RAG queries -> The `--input-dir` parameter specify the input directory to scan for. You can trigger input diretory scan from webui. +> The `--input-dir` parameter specifies the input directory to scan. You can trigger the input directory scan from the Web UI. ### Multiple workers for Gunicorn + Uvicorn -The LightRAG Server can operate in the `Gunicorn + Uvicorn` preload mode. Gunicorn's Multiple Worker (multiprocess) capability prevents document indexing tasks from blocking RAG queries. Using CPU-exhaustive document extraction tools, such as docling, can lead to the entire system being blocked in pure Uvicorn mode. +The LightRAG Server can operate in the `Gunicorn + Uvicorn` preload mode. Gunicorn's multiple worker (multiprocess) capability prevents document indexing tasks from blocking RAG queries. Using CPU-exhaustive document extraction tools, such as docling, can lead to the entire system being blocked in pure Uvicorn mode. -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: +Though LightRAG Server uses one worker to process the document indexing pipeline, with the async task support of Uvicorn, multiple files can be processed in parallel. 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: ``` -### Num of worker processes, not greater then (2 x number_of_cores) + 1 +### Number of worker processes, not greater than (2 x number_of_cores) + 1 WORKERS=2 -### Num of parallel files to process in one batch +### Number of parallel files to process in one batch MAX_PARALLEL_INSERT=2 -### Max concurrency requests of LLM +### Max concurrent requests to the LLM MAX_ASYNC=4 ``` -### Install Lightrag as a Linux Service +### Install LightRAG as a Linux Service -Create a your service file `lightrag.sevice` from the sample file : `lightrag.sevice.example`. Modified the WorkingDirectoryand EexecStart in the service file: +Create your service file `lightrag.service` from the sample file: `lightrag.service.example`. Modify the `WorkingDirectory` and `ExecStart` in the service file: ```text Description=LightRAG Ollama Service @@ -141,7 +143,7 @@ WorkingDirectory= ExecStart=/lightrag/api/lightrag-api ``` -Modify your service startup script: `lightrag-api`. Change you python virtual environment activation command as needed: +Modify your service startup script: `lightrag-api`. Change your Python virtual environment activation command as needed: ```shell #!/bin/bash @@ -164,19 +166,21 @@ sudo systemctl enable lightrag.service ## Ollama Emulation -We provide an Ollama-compatible interfaces for LightRAG, aiming to emulate LightRAG as an Ollama chat model. This allows AI chat frontends supporting Ollama, such as Open WebUI, to access LightRAG easily. +We provide Ollama-compatible interfaces for LightRAG, aiming to emulate LightRAG as an Ollama chat model. This allows AI chat frontends supporting Ollama, such as Open WebUI, to access LightRAG easily. ### Connect Open WebUI to LightRAG -After starting the lightrag-server, you can add an Ollama-type connection in the Open WebUI admin pannel. And then a model named lightrag:latest will appear in Open WebUI's model management interface. Users can then send queries to LightRAG through the chat interface. You'd better install LightRAG as service for this use case. +After starting the lightrag-server, you can add an Ollama-type connection in the Open WebUI admin panel. And then a model named `lightrag:latest` will appear in Open WebUI's model management interface. Users can then send queries to LightRAG through the chat interface. You should install LightRAG as a service for this use case. -Open WebUI's use LLM to do the session title and session keyword generation task. So the Ollama chat chat completion API detects and forwards OpenWebUI session-related requests directly to underlying LLM. Screen shot from Open WebUI: +Open WebUI uses an LLM to do the session title and session keyword generation task. So the Ollama chat completion API detects and forwards OpenWebUI session-related requests directly to the underlying LLM. Screenshot from Open WebUI: ![image-20250323194750379](./README.assets/image-20250323194750379.png) ### Choose Query mode in chat -A query prefix in the query string can determines which LightRAG query mode is used to generate the respond for the query. The supported prefixes include: +The default query mode is `hybrid` if you send a message (query) from the Ollama interface of LightRAG. You can select query mode by sending a message with a query prefix. + +A query prefix in the query string can determine which LightRAG query mode is used to generate the response for the query. The supported prefixes include: ``` /local @@ -184,31 +188,38 @@ A query prefix in the query string can determines which LightRAG query mode is u /hybrid /naive /mix + /bypass +/context +/localcontext +/globalcontext +/hybridcontext +/naivecontext +/mixcontext ``` -For example, chat message "/mix 唐僧有几个徒弟" will trigger a mix mode query for LighRAG. A chat message without query prefix will trigger a hybrid mode query by default。 +For example, the chat message `/mix What's LightRAG?` will trigger a mix mode query for LightRAG. A chat message without a query prefix will trigger a hybrid mode query by default. -"/bypass" is not a LightRAG query mode, it will tell API Server to pass the query directly to the underlying LLM with chat history. So user can use LLM to answer question base on the chat history. If you are using Open WebUI as front end, you can just switch the model to a normal LLM instead of using /bypass prefix. +`/bypass` is not a LightRAG query mode; it will tell the API Server to pass the query directly to the underlying LLM, including the chat history. So the user can use the LLM to answer questions based on the chat history. If you are using Open WebUI as a front end, you can just switch the model to a normal LLM instead of using the `/bypass` prefix. +`/context` is also not a LightRAG query mode; it will tell LightRAG to return only the context information prepared for the LLM. You can check the context if it's what you want, or process the context by yourself. +## API Key and Authentication -## API-Key and Authentication +By default, the LightRAG Server can be accessed without any authentication. We can configure the server with an API Key or account credentials to secure it. -By default, the LightRAG Server can be accessed without any authentication. We can configure the server with an API-Key or account credentials to secure it. - -* API-KEY +* API Key: ``` LIGHTRAG_API_KEY=your-secure-api-key-here WHITELIST_PATHS=/health,/api/* ``` -> Health check and Ollama emuluation endpoins is exclude from API-KEY check by default. +> Health check and Ollama emulation endpoints are excluded from API Key check by default. -* Account credentials (the web UI requires login before access) +* Account credentials (the Web UI requires login before access can be granted): -LightRAG API Server implements JWT-based authentication using HS256 algorithm. To enable secure access control, the following environment variables are required: +LightRAG API Server implements JWT-based authentication using the HS256 algorithm. To enable secure access control, the following environment variables are required: ```bash # For jwt auth @@ -219,16 +230,14 @@ 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. -If Account credentials are not configured, the web UI will access the system as a Guest. Therefore, even if only API-KEY is configured, all API can still be accessed through the Guest account, which remains insecure. Hence, to safeguard the API, it is necessary to configure both authentication methods simultaneously. - - +If Account credentials are not configured, the Web UI will access the system as a Guest. Therefore, even if only an API Key is configured, all APIs can still be accessed through the Guest account, which remains insecure. Hence, to safeguard the API, it is necessary to configure both authentication methods simultaneously. ## For Azure OpenAI Backend Azure OpenAI API can be created using the following commands in Azure CLI (you need to install Azure CLI first from [https://docs.microsoft.com/en-us/cli/azure/install-azure-cli](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)): ```bash -# Change the resource group name, location and OpenAI resource name as needed +# Change the resource group name, location, and OpenAI resource name as needed RESOURCE_GROUP_NAME=LightRAG LOCATION=swedencentral RESOURCE_NAME=LightRAG-OpenAI @@ -246,7 +255,7 @@ az cognitiveservices account keys list --name $RESOURCE_NAME -g $RESOURCE_GROUP_ The output of the last command will give you the endpoint and the key for the OpenAI API. You can use these values to set the environment variables in the `.env` file. ``` -# Azure OpenAI Configuration in .env +# Azure OpenAI Configuration in .env: LLM_BINDING=azure_openai LLM_BINDING_HOST=your-azure-endpoint LLM_MODEL=your-model-deployment-name @@ -254,91 +263,89 @@ LLM_BINDING_API_KEY=your-azure-api-key ### API version is optional, defaults to latest version AZURE_OPENAI_API_VERSION=2024-08-01-preview -### if using Azure OpenAI for embeddings +### If using Azure OpenAI for embeddings EMBEDDING_BINDING=azure_openai EMBEDDING_MODEL=your-embedding-deployment-name ``` - - ## LightRAG Server Configuration in Detail -API Server can be config in three way (highest priority first): +The API Server can be configured in three ways (highest priority first): -* Command line arguments -* Enviroment variables or .env file -* Config.ini (Only for storage configuration) +* Command line arguments +* Environment variables or .env file +* Config.ini (Only for storage configuration) -Most of the configurations come with a default settings, check out details in sample file: `.env.example`. Datastorage configuration can be also set by config.ini. A sample file `config.ini.example` is provided for your convenience. +Most of the configurations come with default settings; check out the details in the sample file: `.env.example`. Data storage configuration can also be set by config.ini. A sample file `config.ini.example` is provided for your convenience. ### LLM and Embedding Backend Supported LightRAG supports binding to various LLM/Embedding backends: -* ollama -* lollms -* openai & openai compatible -* azure_openai +* ollama +* lollms +* openai & openai compatible +* azure_openai -Use environment variables `LLM_BINDING` or CLI argument `--llm-binding` to select LLM backend type. Use environment variables `EMBEDDING_BINDING` or CLI argument `--embedding-binding` to select LLM backend type. +Use environment variables `LLM_BINDING` or CLI argument `--llm-binding` to select the LLM backend type. Use environment variables `EMBEDDING_BINDING` or CLI argument `--embedding-binding` to select the Embedding backend type. ### Entity Extraction Configuration -* ENABLE_LLM_CACHE_FOR_EXTRACT: Enable LLM cache for entity extraction (default: true) +* ENABLE_LLM_CACHE_FOR_EXTRACT: Enable LLM cache for entity extraction (default: true) -It's very common to set `ENABLE_LLM_CACHE_FOR_EXTRACT` to true for test environment to reduce the cost of LLM calls. +It's very common to set `ENABLE_LLM_CACHE_FOR_EXTRACT` to true for a test environment to reduce the cost of LLM calls. ### Storage Types Supported -LightRAG uses 4 types of storage for difference purposes: +LightRAG uses 4 types of storage for different purposes: -* KV_STORAGE:llm response cache, text chunks, document information -* VECTOR_STORAGE:entities vectors, relation vectors, chunks vectors -* GRAPH_STORAGE:entity relation graph -* DOC_STATUS_STORAGE:documents indexing status +* KV_STORAGE: llm response cache, text chunks, document information +* VECTOR_STORAGE: entities vectors, relation vectors, chunks vectors +* GRAPH_STORAGE: entity relation graph +* DOC_STATUS_STORAGE: document indexing status -Each storage type have servals implementations: +Each storage type has several implementations: -* KV_STORAGE supported implement-name +* KV_STORAGE supported implementations: ``` -JsonKVStorage JsonFile(default) +JsonKVStorage JsonFile (default) PGKVStorage Postgres RedisKVStorage Redis -MongoKVStorage MogonDB +MongoKVStorage MongoDB ``` -* GRAPH_STORAGE supported implement-name +* GRAPH_STORAGE supported implementations: ``` -NetworkXStorage NetworkX(defualt) +NetworkXStorage NetworkX (default) Neo4JStorage Neo4J PGGraphStorage Postgres AGEStorage AGE ``` -* VECTOR_STORAGE supported implement-name +* VECTOR_STORAGE supported implementations: ``` -NanoVectorDBStorage NanoVector(default) +NanoVectorDBStorage NanoVector (default) PGVectorStorage Postgres -MilvusVectorDBStorge Milvus +MilvusVectorDBStorage Milvus ChromaVectorDBStorage Chroma FaissVectorDBStorage Faiss QdrantVectorDBStorage Qdrant MongoVectorDBStorage MongoDB ``` -* DOC_STATUS_STORAGE:supported implement-name +* DOC_STATUS_STORAGE: supported implementations: ``` -JsonDocStatusStorage JsonFile(default) +JsonDocStatusStorage JsonFile (default) PGDocStatusStorage Postgres MongoDocStatusStorage MongoDB ``` -### How Select Storage Implementation +### How to Select Storage Implementation -You can select storage implementation by environment variables. Your can set the following environmental variables to a specific storage implement-name before the your first start of the API Server: +You can select storage implementation by environment variables. You can set the following environment variables to a specific storage implementation name before the first start of the API Server: ``` LIGHTRAG_KV_STORAGE=PGKVStorage @@ -347,30 +354,30 @@ LIGHTRAG_GRAPH_STORAGE=PGGraphStorage LIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage ``` -You can not change storage implementation selection after you add documents to LightRAG. Data migration from one storage implementation to anthor is not supported yet. For further information please read the sample env file or config.ini file. +You cannot change storage implementation selection after adding documents to LightRAG. Data migration from one storage implementation to another is not supported yet. For further information, please read the sample env file or config.ini file. -### LightRag API Server Comand Line Options +### LightRAG API Server Command Line Options -| Parameter | Default | Description | -|-----------|---------|-------------| -| --host | 0.0.0.0 | Server host | -| --port | 9621 | Server port | -| --working-dir | ./rag_storage | Working directory for RAG storage | -| --input-dir | ./inputs | Directory containing input documents | -| --max-async | 4 | Maximum async operations | -| --max-tokens | 32768 | Maximum token size | -| --timeout | 150 | Timeout in seconds. None for infinite timeout(not recommended) | -| --log-level | INFO | Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | -| --verbose | - | Verbose debug output (True, Flase) | -| --key | None | API key for authentication. Protects lightrag server against unauthorized access | -| --ssl | False | Enable HTTPS | -| --ssl-certfile | None | Path to SSL certificate file (required if --ssl is enabled) | -| --ssl-keyfile | None | Path to SSL private key file (required if --ssl is enabled) | -| --top-k | 50 | Number of top-k items to retrieve; corresponds to entities in "local" mode and relationships in "global" mode. | -| --cosine-threshold | 0.4 | The cossine threshold for nodes and relations retrieval, works with top-k to control the retrieval of nodes and relations. | -| --llm-binding | ollama | LLM binding type (lollms, ollama, openai, openai-ollama, azure_openai) | -| --embedding-binding | ollama | Embedding binding type (lollms, ollama, openai, azure_openai) | -| auto-scan-at-startup | - | Scan input directory for new files and start indexing | +| Parameter | Default | Description | +| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| --host | 0.0.0.0 | Server host | +| --port | 9621 | Server port | +| --working-dir | ./rag_storage | Working directory for RAG storage | +| --input-dir | ./inputs | Directory containing input documents | +| --max-async | 4 | Maximum number of async operations | +| --max-tokens | 32768 | Maximum token size | +| --timeout | 150 | Timeout in seconds. None for infinite timeout (not recommended) | +| --log-level | INFO | Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | +| --verbose | - | Verbose debug output (True, False) | +| --key | None | API key for authentication. Protects the LightRAG server against unauthorized access | +| --ssl | False | Enable HTTPS | +| --ssl-certfile | None | Path to SSL certificate file (required if --ssl is enabled) | +| --ssl-keyfile | None | Path to SSL private key file (required if --ssl is enabled) | +| --top-k | 50 | Number of top-k items to retrieve; corresponds to entities in "local" mode and relationships in "global" mode. | +| --cosine-threshold | 0.4 | The cosine threshold for nodes and relation retrieval, works with top-k to control the retrieval of nodes and relations. | +| --llm-binding | ollama | LLM binding type (lollms, ollama, openai, openai-ollama, azure_openai) | +| --embedding-binding | ollama | Embedding binding type (lollms, ollama, openai, azure_openai) | +| --auto-scan-at-startup| - | Scan input directory for new files and start indexing | ### .env Examples @@ -416,20 +423,20 @@ EMBEDDING_BINDING_HOST=http://localhost:11434 ## API Endpoints -All servers (LoLLMs, Ollama, OpenAI and Azure OpenAI) provide the same REST API endpoints for RAG functionality. When API Server is running, visit: +All servers (LoLLMs, Ollama, OpenAI and Azure OpenAI) provide the same REST API endpoints for RAG functionality. When the API Server is running, visit: -- Swagger UI: http://localhost:9621/docs -- ReDoc: http://localhost:9621/redoc +- Swagger UI: http://localhost:9621/docs +- ReDoc: http://localhost:9621/redoc You can test the API endpoints using the provided curl commands or through the Swagger UI interface. Make sure to: -1. Start the appropriate backend service (LoLLMs, Ollama, or OpenAI) -2. Start the RAG server -3. Upload some documents using the document management endpoints -4. Query the system using the query endpoints -5. Trigger document scan if new files is put into inputs directory +1. Start the appropriate backend service (LoLLMs, Ollama, or OpenAI) +2. Start the RAG server +3. Upload some documents using the document management endpoints +4. Query the system using the query endpoints +5. Trigger document scan if new files are put into the inputs directory -### Query Endpoints +### Query Endpoints: #### POST /query Query the RAG system with options for different search modes. @@ -437,7 +444,7 @@ Query the RAG system with options for different search modes. ```bash curl -X POST "http://localhost:9621/query" \ -H "Content-Type: application/json" \ - -d '{"query": "Your question here", "mode": "hybrid", ""}' + -d '{"query": "Your question here", "mode": "hybrid"}' ``` #### POST /query/stream @@ -449,7 +456,7 @@ curl -X POST "http://localhost:9621/query/stream" \ -d '{"query": "Your question here", "mode": "hybrid"}' ``` -### Document Management Endpoints +### Document Management Endpoints: #### POST /documents/text Insert text directly into the RAG system. @@ -480,13 +487,13 @@ curl -X POST "http://localhost:9621/documents/batch" \ #### POST /documents/scan -Trigger document scan for new files in the Input directory. +Trigger document scan for new files in the input directory. ```bash curl -X POST "http://localhost:9621/documents/scan" --max-time 1800 ``` -> Ajust max-time according to the estimated index time for all new files. +> Adjust max-time according to the estimated indexing time for all new files. #### DELETE /documents @@ -496,7 +503,7 @@ Clear all documents from the RAG system. curl -X DELETE "http://localhost:9621/documents" ``` -### Ollama Emulation Endpoints +### Ollama Emulation Endpoints: #### GET /api/version @@ -508,7 +515,7 @@ curl http://localhost:9621/api/version #### GET /api/tags -Get Ollama available models. +Get available Ollama models. ```bash curl http://localhost:9621/api/tags @@ -516,20 +523,20 @@ curl http://localhost:9621/api/tags #### POST /api/chat -Handle chat completion requests. Routes user queries through LightRAG by selecting query mode based on query prefix. Detects and forwards OpenWebUI session-related requests (for meta data generation task) directly to underlying LLM. +Handle chat completion requests. Routes user queries through LightRAG by selecting query mode based on query prefix. Detects and forwards OpenWebUI session-related requests (for metadata generation task) directly to the underlying LLM. ```shell curl -N -X POST http://localhost:9621/api/chat -H "Content-Type: application/json" -d \ '{"model":"lightrag:latest","messages":[{"role":"user","content":"猪八戒是谁"}],"stream":true}' ``` -> For more information about Ollama API pls. visit : [Ollama API documentation](https://github.com/ollama/ollama/blob/main/docs/api.md) +> For more information about Ollama API, please visit: [Ollama API documentation](https://github.com/ollama/ollama/blob/main/docs/api.md) #### POST /api/generate -Handle generate completion requests. For compatibility purpose, the request is not processed by LightRAG, and will be handled by underlying LLM model. +Handle generate completion requests. For compatibility purposes, the request is not processed by LightRAG, and will be handled by the underlying LLM model. -### Utility Endpoints +### Utility Endpoints: #### GET /health Check server health and configuration. diff --git a/lightrag/api/__init__.py b/lightrag/api/__init__.py index 792f181a..4e05d060 100644 --- a/lightrag/api/__init__.py +++ b/lightrag/api/__init__.py @@ -1 +1 @@ -__api_version__ = "0139" +__api_version__ = "0148" diff --git a/lightrag/api/config.py b/lightrag/api/config.py index 1bbdb1c9..268b41cb 100644 --- a/lightrag/api/config.py +++ b/lightrag/api/config.py @@ -297,6 +297,7 @@ def parse_args() -> argparse.Namespace: args.enable_llm_cache_for_extract = get_env_value( "ENABLE_LLM_CACHE_FOR_EXTRACT", True, bool ) + args.enable_llm_cache = get_env_value("ENABLE_LLM_CACHE", True, bool) # Inject LLM temperature configuration args.temperature = get_env_value("TEMPERATURE", 0.5, float) diff --git a/lightrag/api/lightrag_server.py b/lightrag/api/lightrag_server.py index 84636bde..e7411883 100644 --- a/lightrag/api/lightrag_server.py +++ b/lightrag/api/lightrag_server.py @@ -157,7 +157,6 @@ def create_app(args): "openapi_url": "/openapi.json", # Explicitly set OpenAPI schema URL "docs_url": "/docs", # Explicitly set docs URL "redoc_url": "/redoc", # Explicitly set redoc URL - "openapi_tags": [{"name": "api"}], "lifespan": lifespan, } @@ -317,6 +316,7 @@ def create_app(args): "cosine_better_than_threshold": args.cosine_threshold }, enable_llm_cache_for_entity_extract=args.enable_llm_cache_for_extract, + enable_llm_cache=args.enable_llm_cache, embedding_cache_config={ "enabled": True, "similarity_threshold": 0.95, @@ -348,6 +348,7 @@ def create_app(args): "cosine_better_than_threshold": args.cosine_threshold }, enable_llm_cache_for_entity_extract=args.enable_llm_cache_for_extract, + enable_llm_cache=args.enable_llm_cache, embedding_cache_config={ "enabled": True, "similarity_threshold": 0.95, @@ -470,6 +471,7 @@ def create_app(args): "graph_storage": args.graph_storage, "vector_storage": args.vector_storage, "enable_llm_cache_for_extract": args.enable_llm_cache_for_extract, + "enable_llm_cache": args.enable_llm_cache, }, "auth_mode": auth_mode, "pipeline_busy": pipeline_status.get("busy", False), diff --git a/lightrag/api/routers/document_routes.py b/lightrag/api/routers/document_routes.py index 8e664006..0111e237 100644 --- a/lightrag/api/routers/document_routes.py +++ b/lightrag/api/routers/document_routes.py @@ -499,7 +499,10 @@ async def pipeline_enqueue_file(rag: LightRAG, file_path: Path) -> bool: content = result.document.export_to_markdown() else: if not pm.is_installed("python-docx"): # type: ignore - pm.install("docx") + try: + pm.install("python-docx") + except Exception: + pm.install("docx") from docx import Document # type: ignore from io import BytesIO diff --git a/lightrag/api/routers/ollama_api.py b/lightrag/api/routers/ollama_api.py index 6d9ea8e6..088cd02c 100644 --- a/lightrag/api/routers/ollama_api.py +++ b/lightrag/api/routers/ollama_api.py @@ -23,6 +23,7 @@ class SearchMode(str, Enum): hybrid = "hybrid" mix = "mix" bypass = "bypass" + context = "context" class OllamaMessage(BaseModel): @@ -100,26 +101,38 @@ def estimate_tokens(text: str) -> int: return len(tokens) -def parse_query_mode(query: str) -> tuple[str, SearchMode]: +def parse_query_mode(query: str) -> tuple[str, SearchMode, bool]: """Parse query prefix to determine search mode - Returns tuple of (cleaned_query, search_mode) + Returns tuple of (cleaned_query, search_mode, only_need_context) """ mode_map = { - "/local ": SearchMode.local, - "/global ": SearchMode.global_, # global_ is used because 'global' is a Python keyword - "/naive ": SearchMode.naive, - "/hybrid ": SearchMode.hybrid, - "/mix ": SearchMode.mix, - "/bypass ": SearchMode.bypass, + "/local ": (SearchMode.local, False), + "/global ": ( + SearchMode.global_, + False, + ), # global_ is used because 'global' is a Python keyword + "/naive ": (SearchMode.naive, False), + "/hybrid ": (SearchMode.hybrid, False), + "/mix ": (SearchMode.mix, False), + "/bypass ": (SearchMode.bypass, False), + "/context": ( + SearchMode.hybrid, + True, + ), + "/localcontext": (SearchMode.local, True), + "/globalcontext": (SearchMode.global_, True), + "/hybridcontext": (SearchMode.hybrid, True), + "/naivecontext": (SearchMode.naive, True), + "/mixcontext": (SearchMode.mix, True), } - for prefix, mode in mode_map.items(): + for prefix, (mode, only_need_context) in mode_map.items(): if query.startswith(prefix): # After removing prefix an leading spaces cleaned_query = query[len(prefix) :].lstrip() - return cleaned_query, mode + return cleaned_query, mode, only_need_context - return query, SearchMode.hybrid + return query, SearchMode.hybrid, False class OllamaAPI: @@ -295,7 +308,7 @@ class OllamaAPI: "Cache-Control": "no-cache", "Connection": "keep-alive", "Content-Type": "application/x-ndjson", - "X-Accel-Buffering": "no", # 确保在Nginx代理时正确处理流式响应 + "X-Accel-Buffering": "no", # Ensure proper handling of streaming responses in Nginx proxy }, ) else: @@ -349,7 +362,7 @@ class OllamaAPI: ] # Check for query prefix - cleaned_query, mode = parse_query_mode(query) + cleaned_query, mode, only_need_context = parse_query_mode(query) start_time = time.time_ns() prompt_tokens = estimate_tokens(cleaned_query) @@ -357,7 +370,7 @@ class OllamaAPI: param_dict = { "mode": mode, "stream": request.stream, - "only_need_context": False, + "only_need_context": only_need_context, "conversation_history": conversation_history, "top_k": self.top_k, } diff --git a/lightrag/api/routers/query_routes.py b/lightrag/api/routers/query_routes.py index c9648356..81603487 100644 --- a/lightrag/api/routers/query_routes.py +++ b/lightrag/api/routers/query_routes.py @@ -22,7 +22,7 @@ class QueryRequest(BaseModel): description="The query text", ) - mode: Literal["local", "global", "hybrid", "naive", "mix"] = Field( + mode: Literal["local", "global", "hybrid", "naive", "mix", "bypass"] = Field( default="hybrid", description="Query mode", ) diff --git a/lightrag/api/run_with_gunicorn.py b/lightrag/api/run_with_gunicorn.py index cf902a8a..5b41af8a 100644 --- a/lightrag/api/run_with_gunicorn.py +++ b/lightrag/api/run_with_gunicorn.py @@ -147,8 +147,8 @@ def main(): # Timeout configuration prioritizes command line arguments gunicorn_config.timeout = ( - global_args.timeout - if global_args.timeout * 2 + global_args.timeout * 2 + if global_args.timeout is not None else int(os.getenv("TIMEOUT", 150 * 2)) ) diff --git a/lightrag/api/utils_api.py b/lightrag/api/utils_api.py index ad75fd4e..a1dade88 100644 --- a/lightrag/api/utils_api.py +++ b/lightrag/api/utils_api.py @@ -229,8 +229,12 @@ def display_splash_screen(args: argparse.Namespace) -> None: ASCIIColors.yellow(f"{args.max_async}") ASCIIColors.white(" ├─ Max Tokens: ", end="") ASCIIColors.yellow(f"{args.max_tokens}") - ASCIIColors.white(" └─ Timeout: ", end="") + ASCIIColors.white(" ├─ Timeout: ", end="") ASCIIColors.yellow(f"{args.timeout if args.timeout else 'None (infinite)'}") + ASCIIColors.white(" ├─ LLM Cache Enabled: ", end="") + ASCIIColors.yellow(f"{args.enable_llm_cache}") + ASCIIColors.white(" └─ LLM Cache for Extraction Enabled: ", end="") + ASCIIColors.yellow(f"{args.enable_llm_cache_for_extract}") # Embedding Configuration ASCIIColors.magenta("\n📊 Embedding Configuration:") @@ -259,8 +263,10 @@ def display_splash_screen(args: argparse.Namespace) -> None: ASCIIColors.yellow(f"{args.cosine_threshold}") ASCIIColors.white(" ├─ Top-K: ", end="") ASCIIColors.yellow(f"{args.top_k}") - ASCIIColors.white(" └─ LLM Cache for Extraction Enabled: ", end="") - ASCIIColors.yellow(f"{args.enable_llm_cache_for_extract}") + ASCIIColors.white(" ├─ Max Token Summary: ", end="") + ASCIIColors.yellow(f"{int(os.getenv('MAX_TOKEN_SUMMARY', 500))}") + ASCIIColors.white(" └─ Force LLM Summary on Merge: ", end="") + ASCIIColors.yellow(f"{int(os.getenv('FORCE_LLM_SUMMARY_ON_MERGE', 6))}") # System Configuration ASCIIColors.magenta("\n💾 Storage Configuration:") diff --git a/lightrag/api/webui/assets/index-CQhBIpFe.css b/lightrag/api/webui/assets/index-CQhBIpFe.css deleted file mode 100644 index 29f0f196..00000000 --- a/lightrag/api/webui/assets/index-CQhBIpFe.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-900:oklch(.396 .141 25.723);--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-100:oklch(.973 .071 103.193);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-900:oklch(.421 .095 57.708);--color-green-100:oklch(.962 .044 156.743);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-900:oklch(.393 .095 152.535);--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-100:oklch(.932 .032 255.585);--color-blue-400:oklch(.707 .165 254.624);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-900:oklch(.379 .146 265.522);--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)}.bottom-10{bottom:calc(var(--spacing)*10)}.\!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)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.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-40{max-height:calc(var(--spacing)*40)}.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-\[200px\]{min-width:200px}.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}.flex-shrink-0,.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-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-\[120px_1fr\]{grid-template-columns:120px 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-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)))}:where(.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)))}.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-blue-400{border-color:var(--color-blue-400)}.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-green-400{border-color:var(--color-green-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-red-400{border-color:var(--color-red-400)}.border-transparent{border-color:#0000}.border-yellow-400{border-color:var(--color-yellow-400)}.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-blue-100{background-color:var(--color-blue-100)}.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-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-100{background-color:var(--color-green-100)}.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-yellow-100{background-color:var(--color-yellow-100)}.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-2{padding-top:calc(var(--spacing)*2)}.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)}.lowercase{text-transform:lowercase}.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:hover{background-color:var(--muted)}.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\:text-foreground:hover{color:var(--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-muted[data-state=checked]{background-color:var(--muted)}.data-\[state\=checked\]\:text-muted-foreground[data-state=checked]{color:var(--muted-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-\[500px\]{max-width:500px}.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-blue-600:is(.dark *){border-color:var(--color-blue-600)}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.dark\:border-gray-500:is(.dark *){border-color:var(--color-gray-500)}.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\:border-green-600:is(.dark *){border-color:var(--color-green-600)}.dark\:border-red-600:is(.dark *){border-color:var(--color-red-600)}.dark\:border-yellow-600:is(.dark *){border-color:var(--color-yellow-600)}.dark\:bg-amber-900:is(.dark *){background-color:var(--color-amber-900)}.dark\:bg-blue-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.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-gray-900:is(.dark *){background-color:var(--color-gray-900)}.dark\:bg-green-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}.dark\:bg-red-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-red-900)30%,transparent)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-yellow-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-yellow-900)30%,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-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-50::-webkit-inner-spin-button{opacity:.5}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:opacity-50::-webkit-outer-spin-button{opacity:.5}.\[\&\: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-space-x-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}: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-CTB4Vp_z.css b/lightrag/api/webui/assets/index-CTB4Vp_z.css new file mode 100644 index 00000000..8c46abce --- /dev/null +++ b/lightrag/api/webui/assets/index-CTB4Vp_z.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-900:oklch(.396 .141 25.723);--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-100:oklch(.973 .071 103.193);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-900:oklch(.421 .095 57.708);--color-green-100:oklch(.962 .044 156.743);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-900:oklch(.393 .095 152.535);--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-100:oklch(.932 .032 255.585);--color-blue-400:oklch(.707 .165 254.624);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-900:oklch(.379 .146 265.522);--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)}.bottom-10{bottom:calc(var(--spacing)*10)}.\!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)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.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-80{max-height:calc(var(--spacing)*80)}.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-\[200px\]{max-width:200px}.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-\[200px\]{min-width:200px}.min-w-\[300px\]{min-width:300px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-auto{min-width:auto}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.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-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-\[120px_1fr\]{grid-template-columns:120px 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-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)))}:where(.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)))}.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-blue-400{border-color:var(--color-blue-400)}.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-green-400{border-color:var(--color-green-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-red-400{border-color:var(--color-red-400)}.border-transparent{border-color:#0000}.border-yellow-400{border-color:var(--color-yellow-400)}.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-blue-100{background-color:var(--color-blue-100)}.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-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-100{background-color:var(--color-green-100)}.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-yellow-100{background-color:var(--color-yellow-100)}.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-2{padding-top:calc(var(--spacing)*2)}.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)}.lowercase{text-transform:lowercase}.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:hover{background-color:var(--muted)}.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\:text-foreground:hover{color:var(--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-muted[data-state=checked]{background-color:var(--muted)}.data-\[state\=checked\]\:text-muted-foreground[data-state=checked]{color:var(--muted-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-\[500px\]{max-width:500px}.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-blue-600:is(.dark *){border-color:var(--color-blue-600)}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.dark\:border-gray-500:is(.dark *){border-color:var(--color-gray-500)}.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\:border-green-600:is(.dark *){border-color:var(--color-green-600)}.dark\:border-red-600:is(.dark *){border-color:var(--color-red-600)}.dark\:border-yellow-600:is(.dark *){border-color:var(--color-yellow-600)}.dark\:bg-amber-900:is(.dark *){background-color:var(--color-amber-900)}.dark\:bg-blue-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.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-gray-900:is(.dark *){background-color:var(--color-gray-900)}.dark\:bg-green-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}.dark\:bg-red-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-red-900)30%,transparent)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-yellow-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-yellow-900)30%,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-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-50::-webkit-inner-spin-button{opacity:.5}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:opacity-50::-webkit-outer-spin-button{opacity:.5}.\[\&\: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-space-x-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}: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-sivPufd7.js b/lightrag/api/webui/assets/index-CkwV8nfm.js similarity index 64% rename from lightrag/api/webui/assets/index-sivPufd7.js rename to lightrag/api/webui/assets/index-CkwV8nfm.js index 5ffd05bc..a3d82a72 100644 --- a/lightrag/api/webui/assets/index-sivPufd7.js +++ b/lightrag/api/webui/assets/index-CkwV8nfm.js @@ -1,4 +1,4 @@ -var iq=Object.defineProperty;var sq=(e,t,n)=>t in e?iq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Qr=(e,t,n)=>sq(e,typeof t!="symbol"?t+"":t,n);function lq(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 gf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function un(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function cq(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 Wh={exports:{}},Zl={};/** +var sq=Object.defineProperty;var lq=(e,t,n)=>t in e?sq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Qr=(e,t,n)=>lq(e,typeof t!="symbol"?t+"":t,n);function cq(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 pf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function un(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function uq(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 Wh={exports:{}},Zl={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ var iq=Object.defineProperty;var sq=(e,t,n)=>t in e?iq(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 t_;function uq(){if(t_)return Zl;t_=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 l in a)l!=="key"&&(o[l]=a[l])}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 n_;function dq(){return n_||(n_=1,Wh.exports=uq()),Wh.exports}var E=dq(),Yh={exports:{}},lt={};/** + */var t_;function dq(){if(t_)return Zl;t_=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 l in a)l!=="key"&&(o[l]=a[l])}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 n_;function fq(){return n_||(n_=1,Wh.exports=dq()),Wh.exports}var E=fq(),Yh={exports:{}},lt={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ var iq=Object.defineProperty;var sq=(e,t,n)=>t in e?iq(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 r_;function fq(){if(r_)return lt;r_=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"),l=Symbol.for("react.forward_ref"),u=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,j){this.props=L,this.context=V,this.refs=y,this.updater=j||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,j){this.props=L,this.context=V,this.refs=y,this.updater=j||b}var R=x.prototype=new A;R.constructor=x,v(R,k.prototype),R.isPureReactComponent=!0;var O=Array.isArray,N={H:null,A:null,T:null,S:null},C=Object.prototype.hasOwnProperty;function _(L,V,j,P,Z,Q){return j=Q.ref,{$$typeof:e,type:L,key:V,ref:j!==void 0?j:null,props:Q}}function M(L,V){return _(L.type,V,void 0,void 0,void 0,L.props)}function I(L){return typeof L=="object"&&L!==null&&L.$$typeof===e}function D(L){var V={"=":"=0",":":"=2"};return"$"+L.replace(/[=:]/g,function(j){return V[j]})}var U=/\/+/g;function $(L,V){return typeof L=="object"&&L!==null&&L.key!=null?D(""+L.key):V.toString(36)}function B(){}function W(L){switch(L.status){case"fulfilled":return L.value;case"rejected":throw L.reason;default:switch(typeof L.status=="string"?L.then(B,B):(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 K(L,V,j,P,Z){var Q=typeof L;(Q==="undefined"||Q==="boolean")&&(L=null);var oe=!1;if(L===null)oe=!0;else switch(Q){case"bigint":case"string":case"number":oe=!0;break;case"object":switch(L.$$typeof){case e:case t:oe=!0;break;case p:return oe=L._init,K(oe(L._payload),V,j,P,Z)}}if(oe)return Z=Z(L),oe=P===""?"."+$(L,0):P,O(Z)?(j="",oe!=null&&(j=oe.replace(U,"$&/")+"/"),K(Z,V,j,"",function(Re){return Re})):Z!=null&&(I(Z)&&(Z=M(Z,j+(Z.key==null||L&&L.key===Z.key?"":(""+Z.key).replace(U,"$&/")+"/")+oe)),V.push(Z)),1;oe=0;var ae=P===""?".":P+":";if(O(L))for(var ce=0;cet in e?iq(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 o_;function gq(){return o_||(o_=1,function(e){function t(H,G){var z=H.length;H.push(G);e:for(;0>>1,L=H[Y];if(0>>1;Ya(P,z))Za(Q,P)?(H[Y]=Q,H[Z]=z,Y=Z):(H[Y]=P,H[j]=z,Y=j);else if(Za(Q,z))H[Y]=Q,H[Z]=z,Y=Z;else break e}}return G}function a(H,G){var z=H.sortIndex-G.sortIndex;return z!==0?z:H.id-G.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,l=s.now();e.unstable_now=function(){return s.now()-l}}var u=[],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(H){for(var G=n(d);G!==null;){if(G.callback===null)r(d);else if(G.startTime<=H)r(d),G.sortIndex=G.expirationTime,t(u,G);else break;G=n(d)}}function O(H){if(y=!1,R(H),!v)if(n(u)!==null)v=!0,W();else{var G=n(d);G!==null&&K(O,G.startTime-H)}}var N=!1,C=-1,_=5,M=-1;function I(){return!(e.unstable_now()-M<_)}function D(){if(N){var H=e.unstable_now();M=H;var G=!0;try{e:{v=!1,y&&(y=!1,A(C),C=-1),b=!0;var z=m;try{t:{for(R(H),g=n(u);g!==null&&!(g.expirationTime>H&&I());){var Y=g.callback;if(typeof Y=="function"){g.callback=null,m=g.priorityLevel;var L=Y(g.expirationTime<=H);if(H=e.unstable_now(),typeof L=="function"){g.callback=L,R(H),G=!0;break t}g===n(u)&&r(u),R(H)}else r(u);g=n(u)}if(g!==null)G=!0;else{var V=n(d);V!==null&&K(O,V.startTime-H),G=!1}}break e}finally{g=null,m=z,b=!1}G=void 0}}finally{G?U():N=!1}}}var U;if(typeof x=="function")U=function(){x(D)};else if(typeof MessageChannel<"u"){var $=new MessageChannel,B=$.port2;$.port1.onmessage=D,U=function(){B.postMessage(null)}}else U=function(){k(D,0)};function W(){N||(N=!0,U())}function K(H,G){C=k(function(){H(e.unstable_now())},G)}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(H){H.callback=null},e.unstable_continueExecution=function(){v||b||(v=!0,W())},e.unstable_forceFrameRate=function(H){0>H||125Y?(H.sortIndex=z,t(d,H),n(u)===null&&H===n(d)&&(y?(A(C),C=-1):y=!0,K(O,z-Y))):(H.sortIndex=L,t(u,H),v||b||(v=!0,W())),H},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(H){var G=m;return function(){var z=m;m=G;try{return H.apply(this,arguments)}finally{m=z}}}}(Zh)),Zh}var i_;function hq(){return i_||(i_=1,Xh.exports=gq()),Xh.exports}var Qh={exports:{}},wn={};/** + */var o_;function hq(){return o_||(o_=1,function(e){function t(G,H){var F=G.length;G.push(H);e:for(;0>>1,L=G[Y];if(0>>1;Ya(P,F))Za(Q,P)?(G[Y]=Q,G[Z]=F,Y=Z):(G[Y]=P,G[j]=F,Y=j);else if(Za(Q,F))G[Y]=Q,G[Z]=F,Y=Z;else break e}}return H}function a(G,H){var F=G.sortIndex-H.sortIndex;return F!==0?F:G.id-H.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,l=s.now();e.unstable_now=function(){return s.now()-l}}var u=[],d=[],p=1,g=null,m=3,b=!1,y=!1,v=!1,x=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function R(G){for(var H=n(d);H!==null;){if(H.callback===null)r(d);else if(H.startTime<=G)r(d),H.sortIndex=H.expirationTime,t(u,H);else break;H=n(d)}}function O(G){if(v=!1,R(G),!y)if(n(u)!==null)y=!0,W();else{var H=n(d);H!==null&&K(O,H.startTime-G)}}var N=!1,C=-1,_=5,M=-1;function D(){return!(e.unstable_now()-M<_)}function I(){if(N){var G=e.unstable_now();M=G;var H=!0;try{e:{y=!1,v&&(v=!1,T(C),C=-1),b=!0;var F=m;try{t:{for(R(G),g=n(u);g!==null&&!(g.expirationTime>G&&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),H=!0;break t}g===n(u)&&r(u),R(G)}else r(u);g=n(u)}if(g!==null)H=!0;else{var V=n(d);V!==null&&K(O,V.startTime-G),H=!1}}break e}finally{g=null,m=F,b=!1}H=void 0}}finally{H?U():N=!1}}}var U;if(typeof k=="function")U=function(){k(I)};else if(typeof MessageChannel<"u"){var $=new MessageChannel,B=$.port2;$.port1.onmessage=I,U=function(){B.postMessage(null)}}else U=function(){x(I,0)};function W(){N||(N=!0,U())}function K(G,H){C=x(function(){G(e.unstable_now())},H)}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=F,t(d,G),n(u)===null&&G===n(d)&&(v?(T(C),C=-1):v=!0,K(O,F-Y))):(G.sortIndex=L,t(u,G),y||b||(y=!0,W())),G},e.unstable_shouldYield=D,e.unstable_wrapCallback=function(G){var H=m;return function(){var F=m;m=H;try{return G.apply(this,arguments)}finally{m=F}}}}(Zh)),Zh}var i_;function mq(){return i_||(i_=1,Xh.exports=hq()),Xh.exports}var Qh={exports:{}},xn={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ var iq=Object.defineProperty;var sq=(e,t,n)=>t in e?iq(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 s_;function mq(){if(s_)return wn;s_=1;var e=qf();function t(u){var d="https://react.dev/errors/"+u;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Qh.exports=mq(),Qh.exports}/** + */var s_;function bq(){if(s_)return xn;s_=1;var e=$f();function t(u){var d="https://react.dev/errors/"+u;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Qh.exports=bq(),Qh.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ var iq=Object.defineProperty;var sq=(e,t,n)=>t in e?iq(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 c_;function bq(){if(c_)return Ql;c_=1;var e=hq(),t=qf(),n=Wz();function r(i){var c="https://react.dev/errors/"+i;if(1)":-1S||X[h]!==re[S]){var ve=` -`+X[h].replace(" at new "," at ");return i.displayName&&ve.includes("")&&(ve=ve.replace("",i.displayName)),ve}while(1<=h&&0<=S);break}}}finally{W=!1,Error.prepareStackTrace=f}return(f=i?i.displayName||i.name:"")?B(f):""}function H(i){switch(i.tag){case 26:case 27:case 5:return B(i.type);case 16:return B("Lazy");case 13:return B("Suspense");case 19:return B("SuspenseList");case 0:case 15:return i=K(i.type,!1),i;case 11:return i=K(i.type.render,!1),i;case 1:return i=K(i.type,!0),i;default:return""}}function G(i){try{var c="";do c+=H(i),i=i.return;while(i);return c}catch(f){return` +`+X[h].replace(" at new "," at ");return i.displayName&&ve.includes("")&&(ve=ve.replace("",i.displayName)),ve}while(1<=h&&0<=S);break}}}finally{W=!1,Error.prepareStackTrace=f}return(f=i?i.displayName||i.name:"")?B(f):""}function G(i){switch(i.tag){case 26:case 27:case 5:return B(i.type);case 16:return B("Lazy");case 13:return B("Suspense");case 19:return B("SuspenseList");case 0:case 15:return i=K(i.type,!1),i;case 11:return i=K(i.type.render,!1),i;case 1:return i=K(i.type,!0),i;default:return""}}function H(i){try{var c="";do c+=G(i),i=i.return;while(i);return c}catch(f){return` Error generating stack: `+f.message+` -`+f.stack}}function z(i){var c=i,f=i;if(i.alternate)for(;c.return;)c=c.return;else{i=c;do c=i,c.flags&4098&&(f=c.return),i=c.return;while(i)}return c.tag===3?f:null}function Y(i){if(i.tag===13){var c=i.memoizedState;if(c===null&&(i=i.alternate,i!==null&&(c=i.memoizedState)),c!==null)return c.dehydrated}return null}function L(i){if(z(i)!==i)throw Error(r(188))}function V(i){var c=i.alternate;if(!c){if(c=z(i),c===null)throw Error(r(188));return c!==i?null:i}for(var f=i,h=c;;){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),c;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:c}function j(i){var c=i.tag;if(c===5||c===26||c===27||c===6)return i;for(i=i.child;i!==null;){if(c=j(i),c!==null)return c;i=i.sibling}return null}var P=Array.isArray,Z=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q={pending:!1,data:null,method:null,action:null},oe=[],ae=-1;function ce(i){return{current:i}}function Re(i){0>ae||(i.current=oe[ae],oe[ae]=null,ae--)}function ie(i,c){ae++,oe[ae]=i.current,i.current=c}var Te=ce(null),ne=ce(null),xe=ce(null),Se=ce(null);function be(i,c){switch(ie(xe,c),ie(ne,i),ie(Te,null),i=c.nodeType,i){case 9:case 11:c=(c=c.documentElement)&&(c=c.namespaceURI)?NC(c):0;break;default:if(i=i===8?c.parentNode:c,c=i.tagName,i=i.namespaceURI)i=NC(i),c=OC(i,c);else switch(c){case"svg":c=1;break;case"math":c=2;break;default:c=0}}Re(Te),ie(Te,c)}function J(){Re(Te),Re(ne),Re(xe)}function pe(i){i.memoizedState!==null&&ie(Se,i);var c=Te.current,f=OC(c,i.type);c!==f&&(ie(ne,i),ie(Te,f))}function ke(i){ne.current===i&&(Re(Te),Re(ne)),Se.current===i&&(Re(Se),Vl._currentValue=Q)}var he=Object.prototype.hasOwnProperty,Ee=e.unstable_scheduleCallback,se=e.unstable_cancelCallback,Be=e.unstable_shouldYield,je=e.unstable_requestPaint,ye=e.unstable_now,Oe=e.unstable_getCurrentPriorityLevel,ee=e.unstable_ImmediatePriority,de=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,We=e.unstable_IdlePriority,St=e.log,Tt=e.unstable_setDisableYieldValue,bt=null,et=null;function At(i){if(et&&typeof et.onCommitFiberRoot=="function")try{et.onCommitFiberRoot(bt,i,void 0,(i.current.flags&128)===128)}catch{}}function st(i){if(typeof St=="function"&&Tt(i),et&&typeof et.setStrictMode=="function")try{et.setStrictMode(bt,i)}catch{}}var wt=Math.clz32?Math.clz32:zt,Ht=Math.log,pn=Math.LN2;function zt(i){return i>>>=0,i===0?32:31-(Ht(i)/pn|0)|0}var ir=128,Vr=4194304;function Jt(i){var c=i&42;if(c!==0)return c;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 pa(i,c){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:c!==0&&c!==h&&!(c&S)&&(S=h&-h,F=c&-c,S>=F||S===32&&(F&4194176)!==0)?c:h}function Xe(i,c){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&c)===0}function yt(i,c){switch(i){case 1:case 2:case 4:case 8:return c+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 c+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=ir;return ir<<=1,!(ir&4194176)&&(ir=128),i}function Ln(){var i=Vr;return Vr<<=1,!(Vr&62914560)&&(Vr=4194304),i}function _n(i){for(var c=[],f=0;31>f;f++)c.push(i);return c}function Mn(i,c){i.pendingLanes|=c,c!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function ga(i,c,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,re=i.hiddenUpdates;for(f=F&~f;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),JH=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]*$"),OA={},IA={};function e6(i){return he.call(IA,i)?!0:he.call(OA,i)?!1:JH.test(i)?IA[i]=!0:(OA[i]=!0,!1)}function uu(i,c,f){if(e6(c))if(f===null)i.removeAttribute(c);else{switch(typeof f){case"undefined":case"function":case"symbol":i.removeAttribute(c);return;case"boolean":var h=c.toLowerCase().slice(0,5);if(h!=="data-"&&h!=="aria-"){i.removeAttribute(c);return}}i.setAttribute(c,""+f)}}function du(i,c,f){if(f===null)i.removeAttribute(c);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(c);return}i.setAttribute(c,""+f)}}function ma(i,c,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(c,f,""+h)}}function sr(i){switch(typeof i){case"bigint":case"boolean":case"number":case"string":case"undefined":return i;case"object":return i;default:return""}}function DA(i){var c=i.type;return(i=i.nodeName)&&i.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function t6(i){var c=DA(i)?"checked":"value",f=Object.getOwnPropertyDescriptor(i.constructor.prototype,c),h=""+i[c];if(!i.hasOwnProperty(c)&&typeof f<"u"&&typeof f.get=="function"&&typeof f.set=="function"){var S=f.get,T=f.set;return Object.defineProperty(i,c,{configurable:!0,get:function(){return S.call(this)},set:function(F){h=""+F,T.call(this,F)}}),Object.defineProperty(i,c,{enumerable:f.enumerable}),{getValue:function(){return h},setValue:function(F){h=""+F},stopTracking:function(){i._valueTracker=null,delete i[c]}}}}function fu(i){i._valueTracker||(i._valueTracker=t6(i))}function LA(i){if(!i)return!1;var c=i._valueTracker;if(!c)return!0;var f=c.getValue(),h="";return i&&(h=DA(i)?i.checked?"true":"false":i.value),i=h,i!==f?(c.setValue(i),!0):!1}function pu(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 n6=/[\n"\\]/g;function lr(i){return i.replace(n6,function(c){return"\\"+c.charCodeAt(0).toString(16)+" "})}function qp(i,c,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"),c!=null?F==="number"?(c===0&&i.value===""||i.value!=c)&&(i.value=""+sr(c)):i.value!==""+sr(c)&&(i.value=""+sr(c)):F!=="submit"&&F!=="reset"||i.removeAttribute("value"),c!=null?Vp(i,F,sr(c)):f!=null?Vp(i,F,sr(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=""+sr(q):i.removeAttribute("name")}function MA(i,c,f,h,S,T,F,q){if(T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"&&(i.type=T),c!=null||f!=null){if(!(T!=="submit"&&T!=="reset"||c!=null))return;f=f!=null?""+sr(f):"",c=c!=null?""+sr(c):f,q||c===i.value||(i.value=c),i.defaultValue=c}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 Vp(i,c,f){c==="number"&&pu(i.ownerDocument)===i||i.defaultValue===""+f||(i.defaultValue=""+f)}function Di(i,c,f,h){if(i=i.options,c){c={};for(var S=0;S=ul),YA=" ",KA=!1;function XA(i,c){switch(i){case"keyup":return N6.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ZA(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Fi=!1;function I6(i,c){switch(i){case"compositionend":return ZA(c);case"keypress":return c.which!==32?null:(KA=!0,YA);case"textInput":return i=c.data,i===YA&&KA?null:i;default:return null}}function D6(i,c){if(Fi)return i==="compositionend"||!rg&&XA(i,c)?(i=GA(),hu=Qp=Ya=null,Fi=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:f,offset:c-i};i=h}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=o1(f)}}function s1(i,c){return i&&c?i===c?!0:i&&i.nodeType===3?!1:c&&c.nodeType===3?s1(i,c.parentNode):"contains"in i?i.contains(c):i.compareDocumentPosition?!!(i.compareDocumentPosition(c)&16):!1:!1}function l1(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var c=pu(i.document);c instanceof i.HTMLIFrameElement;){try{var f=typeof c.contentWindow.location.href=="string"}catch{f=!1}if(f)i=c.contentWindow;else break;c=pu(i.document)}return c}function ig(i){var c=i&&i.nodeName&&i.nodeName.toLowerCase();return c&&(c==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||c==="textarea"||i.contentEditable==="true")}function U6(i,c){var f=l1(c);c=i.focusedElem;var h=i.selectionRange;if(f!==c&&c&&c.ownerDocument&&s1(c.ownerDocument.documentElement,c)){if(h!==null&&ig(c)){if(i=h.start,f=h.end,f===void 0&&(f=i),"selectionStart"in c)c.selectionStart=i,c.selectionEnd=Math.min(f,c.value.length);else if(f=(i=c.ownerDocument||document)&&i.defaultView||window,f.getSelection){f=f.getSelection();var S=c.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=i1(c,T);var F=i1(c,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=c;f=f.parentNode;)f.nodeType===1&&i.push({element:f,left:f.scrollLeft,top:f.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,zi=null,sg=null,gl=null,lg=!1;function c1(i,c,f){var h=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;lg||zi==null||zi!==pu(h)||(h=zi,"selectionStart"in h&&ig(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=nd(sg,"onSelect"),0>=F,S-=F,ba=1<<32-wt(c)+S|f<Qe?(ln=Ye,Ye=null):ln=Ye.sibling;var kt=fe(le,Ye,ue[Qe],Ae);if(kt===null){Ye===null&&(Ye=ln);break}i&&Ye&&kt.alternate===null&&c(le,Ye),te=T(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt,Ye=ln}if(Qe===ue.length)return f(le,Ye),xt&&Go(le,Qe),Ge;if(Ye===null){for(;QeQe?(ln=Ye,Ye=null):ln=Ye.sibling;var ho=fe(le,Ye,kt.value,Ae);if(ho===null){Ye===null&&(Ye=ln);break}i&&Ye&&ho.alternate===null&&c(le,Ye),te=T(ho,te,Qe),ut===null?Ge=ho:ut.sibling=ho,ut=ho,Ye=ln}if(kt.done)return f(le,Ye),xt&&Go(le,Qe),Ge;if(Ye===null){for(;!kt.done;Qe++,kt=ue.next())kt=Ce(le,kt.value,Ae),kt!==null&&(te=T(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt);return xt&&Go(le,Qe),Ge}for(Ye=h(Ye);!kt.done;Qe++,kt=ue.next())kt=me(Ye,le,Qe,kt.value,Ae),kt!==null&&(i&&kt.alternate!==null&&Ye.delete(kt.key===null?Qe:kt.key),te=T(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt);return i&&Ye.forEach(function(oq){return c(le,oq)}),xt&&Go(le,Qe),Ge}function Vt(le,te,ue,Ae){if(typeof ue=="object"&&ue!==null&&ue.type===u&&ue.key===null&&(ue=ue.props.children),typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case s:e:{for(var Ge=ue.key;te!==null;){if(te.key===Ge){if(Ge=ue.type,Ge===u){if(te.tag===7){f(le,te.sibling),Ae=S(te,ue.props.children),Ae.return=le,le=Ae;break e}}else if(te.elementType===Ge||typeof Ge=="object"&&Ge!==null&&Ge.$$typeof===x&&A1(Ge)===te.type){f(le,te.sibling),Ae=S(te,ue.props),El(Ae,ue),Ae.return=le,le=Ae;break e}f(le,te);break}else c(le,te);te=te.sibling}ue.type===u?(Ae=Jo(ue.props.children,le.mode,Ae,ue.key),Ae.return=le,le=Ae):(Ae=Vu(ue.type,ue.key,ue.props,null,le.mode,Ae),El(Ae,ue),Ae.return=le,le=Ae)}return F(le);case l:e:{for(Ge=ue.key;te!==null;){if(te.key===Ge)if(te.tag===4&&te.stateNode.containerInfo===ue.containerInfo&&te.stateNode.implementation===ue.implementation){f(le,te.sibling),Ae=S(te,ue.children||[]),Ae.return=le,le=Ae;break e}else{f(le,te);break}else c(le,te);te=te.sibling}Ae=uh(ue,le.mode,Ae),Ae.return=le,le=Ae}return F(le);case x:return Ge=ue._init,ue=Ge(ue._payload),Vt(le,te,ue,Ae)}if(P(ue))return qe(le,te,ue,Ae);if(C(ue)){if(Ge=C(ue),typeof Ge!="function")throw Error(r(150));return ue=Ge.call(ue),rt(le,te,ue,Ae)}if(typeof ue.then=="function")return Vt(le,te,Ru(ue),Ae);if(ue.$$typeof===b)return Vt(le,te,Hu(le,ue),Ae);Cu(le,ue)}return typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint"?(ue=""+ue,te!==null&&te.tag===6?(f(le,te.sibling),Ae=S(te,ue),Ae.return=le,le=Ae):(f(le,te),Ae=ch(ue,le.mode,Ae),Ae.return=le,le=Ae),F(le)):f(le,te)}return function(le,te,ue,Ae){try{Sl=0;var Ge=Vt(le,te,ue,Ae);return $i=null,Ge}catch(Ye){if(Ye===yl)throw Ye;var ut=mr(29,Ye,null,le.mode);return ut.lanes=Ae,ut.return=le,ut}finally{}}}var $o=R1(!0),C1=R1(!1),qi=ce(null),_u=ce(0);function _1(i,c){i=_a,ie(_u,i),ie(qi,c),_a=i|c.baseLanes}function mg(){ie(_u,_a),ie(qi,qi.current)}function bg(){_a=_u.current,Re(qi),Re(_u)}var pr=ce(null),Yr=null;function Xa(i){var c=i.alternate;ie(en,en.current&1),ie(pr,i),Yr===null&&(c===null||qi.current!==null||c.memoizedState!==null)&&(Yr=i)}function N1(i){if(i.tag===22){if(ie(en,en.current),ie(pr,i),Yr===null){var c=i.alternate;c!==null&&c.memoizedState!==null&&(Yr=i)}}else Za()}function Za(){ie(en,en.current),ie(pr,pr.current)}function va(i){Re(pr),Yr===i&&(Yr=null),Re(en)}var en=ce(0);function Nu(i){for(var c=i;c!==null;){if(c.tag===13){var f=c.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||f.data==="$?"||f.data==="$!"))return c}else if(c.tag===19&&c.memoizedProps.revealOrder!==void 0){if(c.flags&128)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===i)break;for(;c.sibling===null;){if(c.return===null||c.return===i)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var V6=typeof AbortController<"u"?AbortController:function(){var i=[],c=this.signal={aborted:!1,addEventListener:function(f,h){i.push(h)}};this.abort=function(){c.aborted=!0,i.forEach(function(f){return f()})}},W6=e.unstable_scheduleCallback,Y6=e.unstable_NormalPriority,tn={$$typeof:b,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function yg(){return{controller:new V6,data:new Map,refCount:0}}function wl(i){i.refCount--,i.refCount===0&&W6(Y6,function(){i.controller.abort()})}var xl=null,vg=0,Vi=0,Wi=null;function K6(i,c){if(xl===null){var f=xl=[];vg=0,Vi=Th(),Wi={status:"pending",value:void 0,then:function(h){f.push(h)}}}return vg++,c.then(O1,O1),c}function O1(){if(--vg===0&&xl!==null){Wi!==null&&(Wi.status="fulfilled");var i=xl;xl=null,Vi=0,Wi=null;for(var c=0;cT?T:8;var F=I.T,q={};I.T=q,Pg(i,!1,c,f);try{var X=S(),re=I.S;if(re!==null&&re(q,X),X!==null&&typeof X=="object"&&typeof X.then=="function"){var ve=X6(X,h);Al(i,c,ve,Qn(i))}else Al(i,c,h,Qn(i))}catch(Ce){Al(i,c,{then:function(){},status:"rejected",reason:Ce},Qn())}finally{Z.p=T,I.T=F}}function t$(){}function Lg(i,c,f,h){if(i.tag!==5)throw Error(r(476));var S=lR(i).queue;sR(i,S,c,Q,f===null?t$:function(){return cR(i),f(h)})}function lR(i){var c=i.memoizedState;if(c!==null)return c;c={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Sa,lastRenderedState:Q},next:null};var f={};return c.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Sa,lastRenderedState:f},next:null},i.memoizedState=c,i=i.alternate,i!==null&&(i.memoizedState=c),c}function cR(i){var c=lR(i).next.queue;Al(i,c,{},Qn())}function Mg(){return En(Vl)}function uR(){return Xt().memoizedState}function dR(){return Xt().memoizedState}function n$(i){for(var c=i.return;c!==null;){switch(c.tag){case 24:case 3:var f=Qn();i=no(f);var h=ro(c,i,f);h!==null&&(On(h,c,f),_l(h,c,f)),c={cache:yg()},i.payload=c;return}c=c.return}}function r$(i,c,f){var h=Qn();f={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null},Bu(i)?pR(c,f):(f=dg(i,c,f,h),f!==null&&(On(f,i,h),gR(f,c,h)))}function fR(i,c,f){var h=Qn();Al(i,c,f,h)}function Al(i,c,f,h){var S={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null};if(Bu(i))pR(c,S);else{var T=i.alternate;if(i.lanes===0&&(T===null||T.lanes===0)&&(T=c.lastRenderedReducer,T!==null))try{var F=c.lastRenderedState,q=T(F,f);if(S.hasEagerState=!0,S.eagerState=q,Yn(q,F))return wu(i,c,S,0),Lt===null&&Eu(),!1}catch{}finally{}if(f=dg(i,c,S,h),f!==null)return On(f,i,h),gR(f,c,h),!0}return!1}function Pg(i,c,f,h){if(h={lane:2,revertLane:Th(),action:h,hasEagerState:!1,eagerState:null,next:null},Bu(i)){if(c)throw Error(r(479))}else c=dg(i,f,h,2),c!==null&&On(c,i,2)}function Bu(i){var c=i.alternate;return i===ct||c!==null&&c===ct}function pR(i,c){Yi=Iu=!0;var f=i.pending;f===null?c.next=c:(c.next=f.next,f.next=c),i.pending=c}function gR(i,c,f){if(f&4194176){var h=c.lanes;h&=i.pendingLanes,f|=h,c.lanes=f,_r(i,f)}}var Kr={readContext:En,use:Mu,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};Kr.useCacheRefresh=Wt,Kr.useMemoCache=Wt,Kr.useHostTransitionStatus=Wt,Kr.useFormState=Wt,Kr.useActionState=Wt,Kr.useOptimistic=Wt;var Wo={readContext:En,use:Mu,useCallback:function(i,c){return Bn().memoizedState=[i,c===void 0?null:c],i},useContext:En,useEffect:J1,useImperativeHandle:function(i,c,f){f=f!=null?f.concat([i]):null,Fu(4194308,4,nR.bind(null,c,i),f)},useLayoutEffect:function(i,c){return Fu(4194308,4,i,c)},useInsertionEffect:function(i,c){Fu(4,2,i,c)},useMemo:function(i,c){var f=Bn();c=c===void 0?null:c;var h=i();if(Vo){st(!0);try{i()}finally{st(!1)}}return f.memoizedState=[h,c],h},useReducer:function(i,c,f){var h=Bn();if(f!==void 0){var S=f(c);if(Vo){st(!0);try{f(c)}finally{st(!1)}}}else S=c;return h.memoizedState=h.baseState=S,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:S},h.queue=i,i=i.dispatch=r$.bind(null,ct,i),[h.memoizedState,i]},useRef:function(i){var c=Bn();return i={current:i},c.memoizedState=i},useState:function(i){i=_g(i);var c=i.queue,f=fR.bind(null,ct,c);return c.dispatch=f,[i.memoizedState,f]},useDebugValue:Ig,useDeferredValue:function(i,c){var f=Bn();return Dg(f,i,c)},useTransition:function(){var i=_g(!1);return i=sR.bind(null,ct,i.queue,!0,!1),Bn().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,c,f){var h=ct,S=Bn();if(xt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=c(),Lt===null)throw Error(r(349));vt&60||F1(h,c,f)}S.memoizedState=f;var T={value:f,getSnapshot:c};return S.queue=T,J1(B1.bind(null,h,T,i),[i]),h.flags|=2048,Xi(9,z1.bind(null,h,T,f,c),{destroy:void 0},null),f},useId:function(){var i=Bn(),c=Lt.identifierPrefix;if(xt){var f=ya,h=ba;f=(h&~(1<<32-wt(h)-1)).toString(32)+f,c=":"+c+"R"+f,f=Du++,0 title"))),mn(T,h,f),T[Sn]=i,an(T),h=T;break e;case"link":var F=UC("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]=c,i[Fn]=h;e:for(S=c.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===c)break e;for(;S.sibling===null;){if(S.return===null||S.return===c)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}c.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&&Ra(c)}}return Bt(c),c.flags&=-16777217,null;case 6:if(i&&c.stateNode!=null)i.memoizedProps!==h&&Ra(c);else{if(typeof h!="string"&&c.stateNode===null)throw Error(r(166));if(i=xe.current,hl(c)){if(i=c.stateNode,f=c.memoizedProps,h=null,S=Nn,S!==null)switch(S.tag){case 27:case 5:h=S.memoizedProps}i[Sn]=c,i=!!(i.nodeValue===f||h!==null&&h.suppressHydrationWarning===!0||_C(i.nodeValue,f)),i||Ho(c)}else i=ad(i).createTextNode(h),i[Sn]=c,c.stateNode=i}return Bt(c),null;case 13:if(h=c.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(S=hl(c),h!==null&&h.dehydrated!==null){if(i===null){if(!S)throw Error(r(318));if(S=c.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(r(317));S[Sn]=c}else ml(),!(c.flags&128)&&(c.memoizedState=null),c.flags|=4;Bt(c),S=!1}else Or!==null&&(yh(Or),Or=null),S=!0;if(!S)return c.flags&256?(va(c),c):(va(c),null)}if(va(c),c.flags&128)return c.lanes=f,c;if(f=h!==null,i=i!==null&&i.memoizedState!==null,f){h=c.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&&(c.child.flags|=8192),Wu(c,c.updateQueue),Bt(c),null;case 4:return J(),i===null&&_h(c.stateNode.containerInfo),Bt(c),null;case 10:return xa(c.type),Bt(c),null;case 19:if(Re(en),S=c.memoizedState,S===null)return Bt(c),null;if(h=(c.flags&128)!==0,T=S.rendering,T===null)if(h)Pl(S,!1);else{if(qt!==0||i!==null&&i.flags&128)for(i=c.child;i!==null;){if(T=Nu(i),T!==null){for(c.flags|=128,Pl(S,!1),i=T.updateQueue,c.updateQueue=i,Wu(c,i),c.subtreeFlags=0,i=f,f=c.child;f!==null;)rC(f,i),f=f.sibling;return ie(en,en.current&1|2),c.child}i=i.sibling}S.tail!==null&&ye()>Yu&&(c.flags|=128,h=!0,Pl(S,!1),c.lanes=4194304)}else{if(!h)if(i=Nu(T),i!==null){if(c.flags|=128,h=!0,i=i.updateQueue,c.updateQueue=i,Wu(c,i),Pl(S,!0),S.tail===null&&S.tailMode==="hidden"&&!T.alternate&&!xt)return Bt(c),null}else 2*ye()-S.renderingStartTime>Yu&&f!==536870912&&(c.flags|=128,h=!0,Pl(S,!1),c.lanes=4194304);S.isBackwards?(T.sibling=c.child,c.child=T):(i=S.last,i!==null?i.sibling=T:c.child=T,S.last=T)}return S.tail!==null?(c=S.tail,S.rendering=c,S.tail=c.sibling,S.renderingStartTime=ye(),c.sibling=null,i=en.current,ie(en,h?i&1|2:i&1),c):(Bt(c),null);case 22:case 23:return va(c),bg(),h=c.memoizedState!==null,i!==null?i.memoizedState!==null!==h&&(c.flags|=8192):h&&(c.flags|=8192),h?f&536870912&&!(c.flags&128)&&(Bt(c),c.subtreeFlags&6&&(c.flags|=8192)):Bt(c),f=c.updateQueue,f!==null&&Wu(c,f.retryQueue),f=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),h=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(h=c.memoizedState.cachePool.pool),h!==f&&(c.flags|=2048),i!==null&&Re(qo),null;case 24:return f=null,i!==null&&(f=i.memoizedState.cache),c.memoizedState.cache!==f&&(c.flags|=2048),xa(tn),Bt(c),null;case 25:return null}throw Error(r(156,c.tag))}function u$(i,c){switch(pg(c),c.tag){case 1:return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 3:return xa(tn),J(),i=c.flags,i&65536&&!(i&128)?(c.flags=i&-65537|128,c):null;case 26:case 27:case 5:return ke(c),null;case 13:if(va(c),i=c.memoizedState,i!==null&&i.dehydrated!==null){if(c.alternate===null)throw Error(r(340));ml()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 19:return Re(en),null;case 4:return J(),null;case 10:return xa(c.type),null;case 22:case 23:return va(c),bg(),i!==null&&Re(qo),i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 24:return xa(tn),null;case 25:return null;default:return null}}function iC(i,c){switch(pg(c),c.tag){case 3:xa(tn),J();break;case 26:case 27:case 5:ke(c);break;case 4:J();break;case 13:va(c);break;case 19:Re(en);break;case 10:xa(c.type);break;case 22:case 23:va(c),bg(),i!==null&&Re(qo);break;case 24:xa(tn)}}var d$={getCacheForType:function(i){var c=En(tn),f=c.data.get(i);return f===void 0&&(f=i(),c.data.set(i,f)),f}},f$=typeof WeakMap=="function"?WeakMap:Map,jt=0,Lt=null,ft=null,vt=0,Mt=0,Zn=null,Ca=!1,es=!1,dh=!1,_a=0,qt=0,lo=0,ei=0,fh=0,br=0,ts=0,Fl=null,Xr=null,ph=!1,gh=0,Yu=1/0,Ku=null,co=null,Xu=!1,ti=null,zl=0,hh=0,mh=null,Bl=0,bh=null;function Qn(){if(jt&2&&vt!==0)return vt&-vt;if(I.T!==null){var i=Vi;return i!==0?i:Th()}return RA()}function sC(){br===0&&(br=!(vt&536870912)||xt?Nt():536870912);var i=pr.current;return i!==null&&(i.flags|=32),br}function On(i,c,f){(i===Lt&&Mt===2||i.cancelPendingCommit!==null)&&(ns(i,0),Na(i,vt,br,!1)),Mn(i,f),(!(jt&2)||i!==Lt)&&(i===Lt&&(!(jt&2)&&(ei|=f),qt===4&&Na(i,vt,br,!1)),Zr(i))}function lC(i,c,f){if(jt&6)throw Error(r(327));var h=!f&&(c&60)===0&&(c&i.expiredLanes)===0||Xe(i,c),S=h?h$(i,c):Eh(i,c,!0),T=h;do{if(S===0){es&&!h&&Na(i,c,0,!1);break}else if(S===6)Na(i,c,0,!Ca);else{if(f=i.current.alternate,T&&!p$(f)){S=Eh(i,c,!1),T=!1;continue}if(S===2){if(T=c,i.errorRecoveryDisabledLanes&T)var F=0;else F=i.pendingLanes&-536870913,F=F!==0?F:F&536870912?536870912:0;if(F!==0){c=F;e:{var q=i;S=Fl;var X=q.current.memoizedState.isDehydrated;if(X&&(ns(q,F).flags|=256),F=Eh(q,F,!1),F!==2){if(dh&&!X){q.errorRecoveryDisabledLanes|=T,ei|=T,S=4;break e}T=Xr,Xr=S,T!==null&&yh(T)}S=F}if(T=!1,S!==2)continue}}if(S===1){ns(i,0),Na(i,c,0,!0);break}e:{switch(h=i,S){case 0:case 1:throw Error(r(345));case 4:if((c&4194176)===c){Na(h,c,br,!Ca);break e}break;case 2:Xr=null;break;case 3:case 5:break;default:throw Error(r(329))}if(h.finishedWork=f,h.finishedLanes=c,(c&62914560)===c&&(T=gh+300-ye(),10f?32:f,I.T=null,ti===null)var T=!1;else{f=mh,mh=null;var F=ti,q=zl;if(ti=null,zl=0,jt&6)throw Error(r(331));var X=jt;if(jt|=4,tC(F.current),QR(F,F.current,q,f),jt=X,jl(0,!1),et&&typeof et.onPostCommitFiberRoot=="function")try{et.onPostCommitFiberRoot(bt,F)}catch{}T=!0}return T}finally{Z.p=S,I.T=h,bC(i,c)}}return!1}function yC(i,c,f){c=ur(f,c),c=Bg(i.stateNode,c,2),i=ro(i,c,2),i!==null&&(Mn(i,2),Zr(i))}function Ot(i,c,f){if(i.tag===3)yC(i,i,f);else for(;c!==null;){if(c.tag===3){yC(c,i,f);break}else if(c.tag===1){var h=c.stateNode;if(typeof c.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(co===null||!co.has(h))){i=ur(f,i),f=ER(2),h=ro(c,f,2),h!==null&&(wR(f,h,c,i),Mn(h,2),Zr(h));break}}c=c.return}}function wh(i,c,f){var h=i.pingCache;if(h===null){h=i.pingCache=new f$;var S=new Set;h.set(c,S)}else S=h.get(c),S===void 0&&(S=new Set,h.set(c,S));S.has(f)||(dh=!0,S.add(f),i=y$.bind(null,i,c,f),c.then(i,i))}function y$(i,c,f){var h=i.pingCache;h!==null&&h.delete(c),i.pingedLanes|=i.suspendedLanes&f,i.warmLanes&=~f,Lt===i&&(vt&f)===f&&(qt===4||qt===3&&(vt&62914560)===vt&&300>ye()-gh?!(jt&2)&&ns(i,0):fh|=f,ts===vt&&(ts=0)),Zr(i)}function vC(i,c){c===0&&(c=Ln()),i=Ka(i,c),i!==null&&(Mn(i,c),Zr(i))}function v$(i){var c=i.memoizedState,f=0;c!==null&&(f=c.retryLane),vC(i,f)}function S$(i,c){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(c),vC(i,f)}function E$(i,c){return Ee(i,c)}var Ju=null,os=null,xh=!1,ed=!1,kh=!1,ni=0;function Zr(i){i!==os&&i.next===null&&(os===null?Ju=os=i:os=os.next=i),ed=!0,xh||(xh=!0,x$(w$))}function jl(i,c){if(!kh&&ed){kh=!0;do for(var f=!1,h=Ju;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-wt(42|i)+1)-1,T&=S&~(F&~q),T=T&201326677?T&201326677|1:T?T|2:0}T!==0&&(f=!0,wC(h,T))}else T=vt,T=pa(h,h===Lt?T:0),!(T&3)||Xe(h,T)||(f=!0,wC(h,T));h=h.next}while(f);kh=!1}}function w$(){ed=xh=!1;var i=0;ni!==0&&(O$()&&(i=ni),ni=0);for(var c=ye(),f=null,h=Ju;h!==null;){var S=h.next,T=SC(h,c);T===0?(h.next=null,f===null?Ju=S:f.next=S,S===null&&(os=f)):(f=h,(i!==0||T&3)&&(ed=!0)),h=S}jl(i)}function SC(i,c){for(var f=i.suspendedLanes,h=i.pingedLanes,S=i.expirationTimes,T=i.pendingLanes&-62914561;0"u"?null:document;function FC(i,c,f){var h=ss;if(h&&typeof c=="string"&&c){var S=lr(c);S='link[rel="'+i+'"][href="'+S+'"]',typeof f=="string"&&(S+='[crossorigin="'+f+'"]'),PC.has(S)||(PC.add(S),i={rel:i,crossOrigin:f,href:c},h.querySelector(S)===null&&(c=h.createElement("link"),mn(c,"link",i),an(c),h.head.appendChild(c)))}}function B$(i){Oa.D(i),FC("dns-prefetch",i,null)}function j$(i,c){Oa.C(i,c),FC("preconnect",i,c)}function U$(i,c,f){Oa.L(i,c,f);var h=ss;if(h&&i&&c){var S='link[rel="preload"][as="'+lr(c)+'"]';c==="image"&&f&&f.imageSrcSet?(S+='[imagesrcset="'+lr(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(S+='[imagesizes="'+lr(f.imageSizes)+'"]')):S+='[href="'+lr(i)+'"]';var T=S;switch(c){case"style":T=ls(i);break;case"script":T=cs(i)}yr.has(T)||(i=D({rel:"preload",href:c==="image"&&f&&f.imageSrcSet?void 0:i,as:c},f),yr.set(T,i),h.querySelector(S)!==null||c==="style"&&h.querySelector(Hl(T))||c==="script"&&h.querySelector($l(T))||(c=h.createElement("link"),mn(c,"link",i),an(c),h.head.appendChild(c)))}}function G$(i,c){Oa.m(i,c);var f=ss;if(f&&i){var h=c&&typeof c.as=="string"?c.as:"script",S='link[rel="modulepreload"][as="'+lr(h)+'"][href="'+lr(i)+'"]',T=S;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":T=cs(i)}if(!yr.has(T)&&(i=D({rel:"modulepreload",href:i},c),yr.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 H$(i,c,f){Oa.S(i,c,f);var h=ss;if(h&&i){var S=Oi(h).hoistableStyles,T=ls(i);c=c||"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=D({rel:"stylesheet",href:i,"data-precedence":c},f),(f=yr.get(T))&&zh(i,f);var X=F=h.createElement("link");an(X),mn(X,"link",i),X._p=new Promise(function(re,ve){X.onload=re,X.onerror=ve}),X.addEventListener("load",function(){q.loading|=1}),X.addEventListener("error",function(){q.loading|=2}),q.loading|=4,id(F,c,h)}F={type:"stylesheet",instance:F,count:1,state:q},S.set(T,F)}}}function $$(i,c){Oa.X(i,c);var f=ss;if(f&&i){var h=Oi(f).hoistableScripts,S=cs(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=D({src:i,async:!0},c),(c=yr.get(S))&&Bh(i,c),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 q$(i,c){Oa.M(i,c);var f=ss;if(f&&i){var h=Oi(f).hoistableScripts,S=cs(i),T=h.get(S);T||(T=f.querySelector($l(S)),T||(i=D({src:i,async:!0,type:"module"},c),(c=yr.get(S))&&Bh(i,c),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 zC(i,c,f,h){var S=(S=xe.current)?od(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"?(c=ls(f.href),f=Oi(S).hoistableStyles,h=f.get(c),h||(h={type:"style",instance:null,count:0,state:null},f.set(c,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=ls(f.href);var T=Oi(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),yr.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},yr.set(i,f),T||V$(S,i,f,F.state))),c&&h===null)throw Error(r(528,""));return F}if(c&&h!==null)throw Error(r(529,""));return null;case"script":return c=f.async,f=f.src,typeof f=="string"&&c&&typeof c!="function"&&typeof c!="symbol"?(c=cs(f),f=Oi(S).hoistableScripts,h=f.get(c),h||(h={type:"script",instance:null,count:0,state:null},f.set(c,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,i))}}function ls(i){return'href="'+lr(i)+'"'}function Hl(i){return'link[rel="stylesheet"]['+i+"]"}function BC(i){return D({},i,{"data-precedence":i.precedence,precedence:null})}function V$(i,c,f,h){i.querySelector('link[rel="preload"][as="style"]['+c+"]")?h.loading=1:(c=i.createElement("link"),h.preload=c,c.addEventListener("load",function(){return h.loading|=1}),c.addEventListener("error",function(){return h.loading|=2}),mn(c,"link",f),an(c),i.head.appendChild(c))}function cs(i){return'[src="'+lr(i)+'"]'}function $l(i){return"script[async]"+i}function jC(i,c,f){if(c.count++,c.instance===null)switch(c.type){case"style":var h=i.querySelector('style[data-href~="'+lr(f.href)+'"]');if(h)return c.instance=h,an(h),h;var S=D({},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),id(h,f.precedence,i),c.instance=h;case"stylesheet":S=ls(f.href);var T=i.querySelector(Hl(S));if(T)return c.state.loading|=4,c.instance=T,an(T),T;h=BC(f),(S=yr.get(S))&&zh(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),c.state.loading|=4,id(T,f.precedence,i),c.instance=T;case"script":return T=cs(f.src),(S=i.querySelector($l(T)))?(c.instance=S,an(S),S):(h=f,(S=yr.get(T))&&(h=D({},f),Bh(h,S)),i=i.ownerDocument||i,S=i.createElement("script"),an(S),mn(S,"link",h),i.head.appendChild(S),c.instance=S);case"void":return null;default:throw Error(r(443,c.type))}else c.type==="stylesheet"&&!(c.state.loading&4)&&(h=c.instance,c.state.loading|=4,id(h,f.precedence,i));return c.instance}function id(i,c,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 W$(i,c,f){if(f===1||c.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof c.precedence!="string"||typeof c.href!="string"||c.href==="")break;return!0;case"link":if(typeof c.rel!="string"||typeof c.href!="string"||c.href===""||c.onLoad||c.onError)break;switch(c.rel){case"stylesheet":return i=c.disabled,typeof c.precedence=="string"&&i==null;default:return!0}case"script":if(c.async&&typeof c.async!="function"&&typeof c.async!="symbol"&&!c.onLoad&&!c.onError&&c.src&&typeof c.src=="string")return!0}return!1}function HC(i){return!(i.type==="stylesheet"&&!(i.state.loading&3))}var ql=null;function Y$(){}function K$(i,c,f){if(ql===null)throw Error(r(475));var h=ql;if(c.type==="stylesheet"&&(typeof f.media!="string"||matchMedia(f.media).matches!==!1)&&!(c.state.loading&4)){if(c.instance===null){var S=ls(f.href),T=i.querySelector(Hl(S));if(T){i=T._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(h.count++,h=ld.bind(h),i.then(h,h)),c.state.loading|=4,c.instance=T,an(T);return}T=i.ownerDocument||i,f=BC(f),(S=yr.get(S))&&zh(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),c.instance=T}h.stylesheets===null&&(h.stylesheets=new Map),h.stylesheets.set(c,i),(i=c.state.preload)&&!(c.state.loading&3)&&(h.count++,c=ld.bind(h),i.addEventListener("load",c),i.addEventListener("error",c))}}function X$(){if(ql===null)throw Error(r(475));var i=ql;return i.stylesheets&&i.count===0&&jh(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(),Kh.exports=bq(),Kh.exports}var vq=yq(),Jl={},d_;function Sq(){if(d_)return Jl;d_=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 N=l(m,A,x),C=u(m,x,N),_=m.slice(N,C);if(v[_]===void 0){let M=l(m,x+1,O),I=u(m,O,M);const D=k(m.slice(M,I));v[_]=D}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}Sq();/** +`+f.stack}}function F(i){var c=i,f=i;if(i.alternate)for(;c.return;)c=c.return;else{i=c;do c=i,c.flags&4098&&(f=c.return),i=c.return;while(i)}return c.tag===3?f:null}function Y(i){if(i.tag===13){var c=i.memoizedState;if(c===null&&(i=i.alternate,i!==null&&(c=i.memoizedState)),c!==null)return c.dehydrated}return null}function L(i){if(F(i)!==i)throw Error(r(188))}function V(i){var c=i.alternate;if(!c){if(c=F(i),c===null)throw Error(r(188));return c!==i?null:i}for(var f=i,h=c;;){var S=f.return;if(S===null)break;var A=S.alternate;if(A===null){if(h=S.return,h!==null){f=h;continue}break}if(S.child===A.child){for(A=S.child;A;){if(A===f)return L(S),i;if(A===h)return L(S),c;A=A.sibling}throw Error(r(188))}if(f.return!==h.return)f=S,h=A;else{for(var z=!1,q=S.child;q;){if(q===f){z=!0,f=S,h=A;break}if(q===h){z=!0,h=S,f=A;break}q=q.sibling}if(!z){for(q=A.child;q;){if(q===f){z=!0,f=A,h=S;break}if(q===h){z=!0,h=A,f=S;break}q=q.sibling}if(!z)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:c}function j(i){var c=i.tag;if(c===5||c===26||c===27||c===6)return i;for(i=i.child;i!==null;){if(c=j(i),c!==null)return c;i=i.sibling}return null}var P=Array.isArray,Z=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q={pending:!1,data:null,method:null,action:null},oe=[],ae=-1;function ce(i){return{current:i}}function Re(i){0>ae||(i.current=oe[ae],oe[ae]=null,ae--)}function ie(i,c){ae++,oe[ae]=i.current,i.current=c}var Te=ce(null),ne=ce(null),xe=ce(null),Se=ce(null);function be(i,c){switch(ie(xe,c),ie(ne,i),ie(Te,null),i=c.nodeType,i){case 9:case 11:c=(c=c.documentElement)&&(c=c.namespaceURI)?NC(c):0;break;default:if(i=i===8?c.parentNode:c,c=i.tagName,i=i.namespaceURI)i=NC(i),c=OC(i,c);else switch(c){case"svg":c=1;break;case"math":c=2;break;default:c=0}}Re(Te),ie(Te,c)}function J(){Re(Te),Re(ne),Re(xe)}function pe(i){i.memoizedState!==null&&ie(Se,i);var c=Te.current,f=OC(c,i.type);c!==f&&(ie(ne,i),ie(Te,f))}function ke(i){ne.current===i&&(Re(Te),Re(ne)),Se.current===i&&(Re(Se),Vl._currentValue=Q)}var he=Object.prototype.hasOwnProperty,Ee=e.unstable_scheduleCallback,se=e.unstable_cancelCallback,Be=e.unstable_shouldYield,je=e.unstable_requestPaint,ye=e.unstable_now,Oe=e.unstable_getCurrentPriorityLevel,ee=e.unstable_ImmediatePriority,de=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,ze=e.unstable_LowPriority,We=e.unstable_IdlePriority,St=e.log,Tt=e.unstable_setDisableYieldValue,bt=null,et=null;function At(i){if(et&&typeof et.onCommitFiberRoot=="function")try{et.onCommitFiberRoot(bt,i,void 0,(i.current.flags&128)===128)}catch{}}function st(i){if(typeof St=="function"&&Tt(i),et&&typeof et.setStrictMode=="function")try{et.setStrictMode(bt,i)}catch{}}var wt=Math.clz32?Math.clz32:zt,Ht=Math.log,pn=Math.LN2;function zt(i){return i>>>=0,i===0?32:31-(Ht(i)/pn|0)|0}var sr=128,Vr=4194304;function Jt(i){var c=i&42;if(c!==0)return c;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 pa(i,c){var f=i.pendingLanes;if(f===0)return 0;var h=0,S=i.suspendedLanes,A=i.pingedLanes,z=i.warmLanes;i=i.finishedLanes!==0;var q=f&134217727;return q!==0?(f=q&~S,f!==0?h=Jt(f):(A&=q,A!==0?h=Jt(A):i||(z=q&~z,z!==0&&(h=Jt(z))))):(q=f&~S,q!==0?h=Jt(q):A!==0?h=Jt(A):i||(z=f&~z,z!==0&&(h=Jt(z)))),h===0?0:c!==0&&c!==h&&!(c&S)&&(S=h&-h,z=c&-c,S>=z||S===32&&(z&4194176)!==0)?c:h}function Xe(i,c){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&c)===0}function yt(i,c){switch(i){case 1:case 2:case 4:case 8:return c+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 c+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=sr;return sr<<=1,!(sr&4194176)&&(sr=128),i}function Dn(){var i=Vr;return Vr<<=1,!(Vr&62914560)&&(Vr=4194304),i}function _n(i){for(var c=[],f=0;31>f;f++)c.push(i);return c}function Ln(i,c){i.pendingLanes|=c,c!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function ga(i,c,f,h,S,A){var z=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,re=i.hiddenUpdates;for(f=z&~f;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),e$=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]*$"),OA={},IA={};function t$(i){return he.call(IA,i)?!0:he.call(OA,i)?!1:e$.test(i)?IA[i]=!0:(OA[i]=!0,!1)}function cu(i,c,f){if(t$(c))if(f===null)i.removeAttribute(c);else{switch(typeof f){case"undefined":case"function":case"symbol":i.removeAttribute(c);return;case"boolean":var h=c.toLowerCase().slice(0,5);if(h!=="data-"&&h!=="aria-"){i.removeAttribute(c);return}}i.setAttribute(c,""+f)}}function uu(i,c,f){if(f===null)i.removeAttribute(c);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(c);return}i.setAttribute(c,""+f)}}function ma(i,c,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(c,f,""+h)}}function lr(i){switch(typeof i){case"bigint":case"boolean":case"number":case"string":case"undefined":return i;case"object":return i;default:return""}}function DA(i){var c=i.type;return(i=i.nodeName)&&i.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function n$(i){var c=DA(i)?"checked":"value",f=Object.getOwnPropertyDescriptor(i.constructor.prototype,c),h=""+i[c];if(!i.hasOwnProperty(c)&&typeof f<"u"&&typeof f.get=="function"&&typeof f.set=="function"){var S=f.get,A=f.set;return Object.defineProperty(i,c,{configurable:!0,get:function(){return S.call(this)},set:function(z){h=""+z,A.call(this,z)}}),Object.defineProperty(i,c,{enumerable:f.enumerable}),{getValue:function(){return h},setValue:function(z){h=""+z},stopTracking:function(){i._valueTracker=null,delete i[c]}}}}function du(i){i._valueTracker||(i._valueTracker=n$(i))}function LA(i){if(!i)return!1;var c=i._valueTracker;if(!c)return!0;var f=c.getValue(),h="";return i&&(h=DA(i)?i.checked?"true":"false":i.value),i=h,i!==f?(c.setValue(i),!0):!1}function fu(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 r$=/[\n"\\]/g;function cr(i){return i.replace(r$,function(c){return"\\"+c.charCodeAt(0).toString(16)+" "})}function qp(i,c,f,h,S,A,z,q){i.name="",z!=null&&typeof z!="function"&&typeof z!="symbol"&&typeof z!="boolean"?i.type=z:i.removeAttribute("type"),c!=null?z==="number"?(c===0&&i.value===""||i.value!=c)&&(i.value=""+lr(c)):i.value!==""+lr(c)&&(i.value=""+lr(c)):z!=="submit"&&z!=="reset"||i.removeAttribute("value"),c!=null?Vp(i,z,lr(c)):f!=null?Vp(i,z,lr(f)):h!=null&&i.removeAttribute("value"),S==null&&A!=null&&(i.defaultChecked=!!A),S!=null&&(i.checked=S&&typeof S!="function"&&typeof S!="symbol"),q!=null&&typeof q!="function"&&typeof q!="symbol"&&typeof q!="boolean"?i.name=""+lr(q):i.removeAttribute("name")}function MA(i,c,f,h,S,A,z,q){if(A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(i.type=A),c!=null||f!=null){if(!(A!=="submit"&&A!=="reset"||c!=null))return;f=f!=null?""+lr(f):"",c=c!=null?""+lr(c):f,q||c===i.value||(i.value=c),i.defaultValue=c}h=h??S,h=typeof h!="function"&&typeof h!="symbol"&&!!h,i.checked=q?i.checked:!!h,i.defaultChecked=!!h,z!=null&&typeof z!="function"&&typeof z!="symbol"&&typeof z!="boolean"&&(i.name=z)}function Vp(i,c,f){c==="number"&&fu(i.ownerDocument)===i||i.defaultValue===""+f||(i.defaultValue=""+f)}function Di(i,c,f,h){if(i=i.options,c){c={};for(var S=0;S=ul),YA=" ",KA=!1;function XA(i,c){switch(i){case"keyup":return O$.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ZA(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Fi=!1;function D$(i,c){switch(i){case"compositionend":return ZA(c);case"keypress":return c.which!==32?null:(KA=!0,YA);case"textInput":return i=c.data,i===YA&&KA?null:i;default:return null}}function L$(i,c){if(Fi)return i==="compositionend"||!rg&&XA(i,c)?(i=GA(),gu=Qp=Ya=null,Fi=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:f,offset:c-i};i=h}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=o1(f)}}function s1(i,c){return i&&c?i===c?!0:i&&i.nodeType===3?!1:c&&c.nodeType===3?s1(i,c.parentNode):"contains"in i?i.contains(c):i.compareDocumentPosition?!!(i.compareDocumentPosition(c)&16):!1:!1}function l1(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var c=fu(i.document);c instanceof i.HTMLIFrameElement;){try{var f=typeof c.contentWindow.location.href=="string"}catch{f=!1}if(f)i=c.contentWindow;else break;c=fu(i.document)}return c}function ig(i){var c=i&&i.nodeName&&i.nodeName.toLowerCase();return c&&(c==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||c==="textarea"||i.contentEditable==="true")}function G$(i,c){var f=l1(c);c=i.focusedElem;var h=i.selectionRange;if(f!==c&&c&&c.ownerDocument&&s1(c.ownerDocument.documentElement,c)){if(h!==null&&ig(c)){if(i=h.start,f=h.end,f===void 0&&(f=i),"selectionStart"in c)c.selectionStart=i,c.selectionEnd=Math.min(f,c.value.length);else if(f=(i=c.ownerDocument||document)&&i.defaultView||window,f.getSelection){f=f.getSelection();var S=c.textContent.length,A=Math.min(h.start,S);h=h.end===void 0?A:Math.min(h.end,S),!f.extend&&A>h&&(S=h,h=A,A=S),S=i1(c,A);var z=i1(c,h);S&&z&&(f.rangeCount!==1||f.anchorNode!==S.node||f.anchorOffset!==S.offset||f.focusNode!==z.node||f.focusOffset!==z.offset)&&(i=i.createRange(),i.setStart(S.node,S.offset),f.removeAllRanges(),A>h?(f.addRange(i),f.extend(z.node,z.offset)):(i.setEnd(z.node,z.offset),f.addRange(i)))}}for(i=[],f=c;f=f.parentNode;)f.nodeType===1&&i.push({element:f,left:f.scrollLeft,top:f.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,zi=null,sg=null,gl=null,lg=!1;function c1(i,c,f){var h=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;lg||zi==null||zi!==fu(h)||(h=zi,"selectionStart"in h&&ig(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=td(sg,"onSelect"),0>=z,S-=z,ba=1<<32-wt(c)+S|f<Qe?(ln=Ye,Ye=null):ln=Ye.sibling;var kt=fe(le,Ye,ue[Qe],Ae);if(kt===null){Ye===null&&(Ye=ln);break}i&&Ye&&kt.alternate===null&&c(le,Ye),te=A(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt,Ye=ln}if(Qe===ue.length)return f(le,Ye),xt&&Ho(le,Qe),Ge;if(Ye===null){for(;QeQe?(ln=Ye,Ye=null):ln=Ye.sibling;var ho=fe(le,Ye,kt.value,Ae);if(ho===null){Ye===null&&(Ye=ln);break}i&&Ye&&ho.alternate===null&&c(le,Ye),te=A(ho,te,Qe),ut===null?Ge=ho:ut.sibling=ho,ut=ho,Ye=ln}if(kt.done)return f(le,Ye),xt&&Ho(le,Qe),Ge;if(Ye===null){for(;!kt.done;Qe++,kt=ue.next())kt=Ce(le,kt.value,Ae),kt!==null&&(te=A(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt);return xt&&Ho(le,Qe),Ge}for(Ye=h(Ye);!kt.done;Qe++,kt=ue.next())kt=me(Ye,le,Qe,kt.value,Ae),kt!==null&&(i&&kt.alternate!==null&&Ye.delete(kt.key===null?Qe:kt.key),te=A(kt,te,Qe),ut===null?Ge=kt:ut.sibling=kt,ut=kt);return i&&Ye.forEach(function(iq){return c(le,iq)}),xt&&Ho(le,Qe),Ge}function Vt(le,te,ue,Ae){if(typeof ue=="object"&&ue!==null&&ue.type===u&&ue.key===null&&(ue=ue.props.children),typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case s:e:{for(var Ge=ue.key;te!==null;){if(te.key===Ge){if(Ge=ue.type,Ge===u){if(te.tag===7){f(le,te.sibling),Ae=S(te,ue.props.children),Ae.return=le,le=Ae;break e}}else if(te.elementType===Ge||typeof Ge=="object"&&Ge!==null&&Ge.$$typeof===k&&A1(Ge)===te.type){f(le,te.sibling),Ae=S(te,ue.props),El(Ae,ue),Ae.return=le,le=Ae;break e}f(le,te);break}else c(le,te);te=te.sibling}ue.type===u?(Ae=ei(ue.props.children,le.mode,Ae,ue.key),Ae.return=le,le=Ae):(Ae=qu(ue.type,ue.key,ue.props,null,le.mode,Ae),El(Ae,ue),Ae.return=le,le=Ae)}return z(le);case l:e:{for(Ge=ue.key;te!==null;){if(te.key===Ge)if(te.tag===4&&te.stateNode.containerInfo===ue.containerInfo&&te.stateNode.implementation===ue.implementation){f(le,te.sibling),Ae=S(te,ue.children||[]),Ae.return=le,le=Ae;break e}else{f(le,te);break}else c(le,te);te=te.sibling}Ae=uh(ue,le.mode,Ae),Ae.return=le,le=Ae}return z(le);case k:return Ge=ue._init,ue=Ge(ue._payload),Vt(le,te,ue,Ae)}if(P(ue))return qe(le,te,ue,Ae);if(C(ue)){if(Ge=C(ue),typeof Ge!="function")throw Error(r(150));return ue=Ge.call(ue),rt(le,te,ue,Ae)}if(typeof ue.then=="function")return Vt(le,te,Au(ue),Ae);if(ue.$$typeof===b)return Vt(le,te,Gu(le,ue),Ae);Ru(le,ue)}return typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint"?(ue=""+ue,te!==null&&te.tag===6?(f(le,te.sibling),Ae=S(te,ue),Ae.return=le,le=Ae):(f(le,te),Ae=ch(ue,le.mode,Ae),Ae.return=le,le=Ae),z(le)):f(le,te)}return function(le,te,ue,Ae){try{Sl=0;var Ge=Vt(le,te,ue,Ae);return $i=null,Ge}catch(Ye){if(Ye===yl)throw Ye;var ut=br(29,Ye,null,le.mode);return ut.lanes=Ae,ut.return=le,ut}finally{}}}var qo=R1(!0),C1=R1(!1),qi=ce(null),Cu=ce(0);function _1(i,c){i=_a,ie(Cu,i),ie(qi,c),_a=i|c.baseLanes}function mg(){ie(Cu,_a),ie(qi,qi.current)}function bg(){_a=Cu.current,Re(qi),Re(Cu)}var gr=ce(null),Yr=null;function Xa(i){var c=i.alternate;ie(en,en.current&1),ie(gr,i),Yr===null&&(c===null||qi.current!==null||c.memoizedState!==null)&&(Yr=i)}function N1(i){if(i.tag===22){if(ie(en,en.current),ie(gr,i),Yr===null){var c=i.alternate;c!==null&&c.memoizedState!==null&&(Yr=i)}}else Za()}function Za(){ie(en,en.current),ie(gr,gr.current)}function va(i){Re(gr),Yr===i&&(Yr=null),Re(en)}var en=ce(0);function _u(i){for(var c=i;c!==null;){if(c.tag===13){var f=c.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||f.data==="$?"||f.data==="$!"))return c}else if(c.tag===19&&c.memoizedProps.revealOrder!==void 0){if(c.flags&128)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===i)break;for(;c.sibling===null;){if(c.return===null||c.return===i)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var W$=typeof AbortController<"u"?AbortController:function(){var i=[],c=this.signal={aborted:!1,addEventListener:function(f,h){i.push(h)}};this.abort=function(){c.aborted=!0,i.forEach(function(f){return f()})}},Y$=e.unstable_scheduleCallback,K$=e.unstable_NormalPriority,tn={$$typeof:b,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function yg(){return{controller:new W$,data:new Map,refCount:0}}function wl(i){i.refCount--,i.refCount===0&&Y$(K$,function(){i.controller.abort()})}var xl=null,vg=0,Vi=0,Wi=null;function X$(i,c){if(xl===null){var f=xl=[];vg=0,Vi=Th(),Wi={status:"pending",value:void 0,then:function(h){f.push(h)}}}return vg++,c.then(O1,O1),c}function O1(){if(--vg===0&&xl!==null){Wi!==null&&(Wi.status="fulfilled");var i=xl;xl=null,Vi=0,Wi=null;for(var c=0;cA?A:8;var z=D.T,q={};D.T=q,Pg(i,!1,c,f);try{var X=S(),re=D.S;if(re!==null&&re(q,X),X!==null&&typeof X=="object"&&typeof X.then=="function"){var ve=Z$(X,h);Al(i,c,ve,Zn(i))}else Al(i,c,h,Zn(i))}catch(Ce){Al(i,c,{then:function(){},status:"rejected",reason:Ce},Zn())}finally{Z.p=A,D.T=z}}function n6(){}function Lg(i,c,f,h){if(i.tag!==5)throw Error(r(476));var S=lR(i).queue;sR(i,S,c,Q,f===null?n6:function(){return cR(i),f(h)})}function lR(i){var c=i.memoizedState;if(c!==null)return c;c={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Sa,lastRenderedState:Q},next:null};var f={};return c.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Sa,lastRenderedState:f},next:null},i.memoizedState=c,i=i.alternate,i!==null&&(i.memoizedState=c),c}function cR(i){var c=lR(i).next.queue;Al(i,c,{},Zn())}function Mg(){return wn(Vl)}function uR(){return Xt().memoizedState}function dR(){return Xt().memoizedState}function r6(i){for(var c=i.return;c!==null;){switch(c.tag){case 24:case 3:var f=Zn();i=no(f);var h=ro(c,i,f);h!==null&&(On(h,c,f),_l(h,c,f)),c={cache:yg()},i.payload=c;return}c=c.return}}function a6(i,c,f){var h=Zn();f={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null},zu(i)?pR(c,f):(f=dg(i,c,f,h),f!==null&&(On(f,i,h),gR(f,c,h)))}function fR(i,c,f){var h=Zn();Al(i,c,f,h)}function Al(i,c,f,h){var S={lane:h,revertLane:0,action:f,hasEagerState:!1,eagerState:null,next:null};if(zu(i))pR(c,S);else{var A=i.alternate;if(i.lanes===0&&(A===null||A.lanes===0)&&(A=c.lastRenderedReducer,A!==null))try{var z=c.lastRenderedState,q=A(z,f);if(S.hasEagerState=!0,S.eagerState=q,Wn(q,z))return Eu(i,c,S,0),Lt===null&&Su(),!1}catch{}finally{}if(f=dg(i,c,S,h),f!==null)return On(f,i,h),gR(f,c,h),!0}return!1}function Pg(i,c,f,h){if(h={lane:2,revertLane:Th(),action:h,hasEagerState:!1,eagerState:null,next:null},zu(i)){if(c)throw Error(r(479))}else c=dg(i,f,h,2),c!==null&&On(c,i,2)}function zu(i){var c=i.alternate;return i===ct||c!==null&&c===ct}function pR(i,c){Yi=Ou=!0;var f=i.pending;f===null?c.next=c:(c.next=f.next,f.next=c),i.pending=c}function gR(i,c,f){if(f&4194176){var h=c.lanes;h&=i.pendingLanes,f|=h,c.lanes=f,_r(i,f)}}var Kr={readContext:wn,use:Lu,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};Kr.useCacheRefresh=Wt,Kr.useMemoCache=Wt,Kr.useHostTransitionStatus=Wt,Kr.useFormState=Wt,Kr.useActionState=Wt,Kr.useOptimistic=Wt;var Yo={readContext:wn,use:Lu,useCallback:function(i,c){return zn().memoizedState=[i,c===void 0?null:c],i},useContext:wn,useEffect:J1,useImperativeHandle:function(i,c,f){f=f!=null?f.concat([i]):null,Pu(4194308,4,nR.bind(null,c,i),f)},useLayoutEffect:function(i,c){return Pu(4194308,4,i,c)},useInsertionEffect:function(i,c){Pu(4,2,i,c)},useMemo:function(i,c){var f=zn();c=c===void 0?null:c;var h=i();if(Wo){st(!0);try{i()}finally{st(!1)}}return f.memoizedState=[h,c],h},useReducer:function(i,c,f){var h=zn();if(f!==void 0){var S=f(c);if(Wo){st(!0);try{f(c)}finally{st(!1)}}}else S=c;return h.memoizedState=h.baseState=S,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:S},h.queue=i,i=i.dispatch=a6.bind(null,ct,i),[h.memoizedState,i]},useRef:function(i){var c=zn();return i={current:i},c.memoizedState=i},useState:function(i){i=_g(i);var c=i.queue,f=fR.bind(null,ct,c);return c.dispatch=f,[i.memoizedState,f]},useDebugValue:Ig,useDeferredValue:function(i,c){var f=zn();return Dg(f,i,c)},useTransition:function(){var i=_g(!1);return i=sR.bind(null,ct,i.queue,!0,!1),zn().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,c,f){var h=ct,S=zn();if(xt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=c(),Lt===null)throw Error(r(349));vt&60||F1(h,c,f)}S.memoizedState=f;var A={value:f,getSnapshot:c};return S.queue=A,J1(B1.bind(null,h,A,i),[i]),h.flags|=2048,Xi(9,z1.bind(null,h,A,f,c),{destroy:void 0},null),f},useId:function(){var i=zn(),c=Lt.identifierPrefix;if(xt){var f=ya,h=ba;f=(h&~(1<<32-wt(h)-1)).toString(32)+f,c=":"+c+"R"+f,f=Iu++,0 title"))),mn(A,h,f),A[En]=i,an(A),h=A;break e;case"link":var z=UC("link","href",S).get(h+(f.href||""));if(z){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[En]=c,i[Pn]=h;e:for(S=c.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===c)break e;for(;S.sibling===null;){if(S.return===null||S.return===c)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}c.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&&Ra(c)}}return Bt(c),c.flags&=-16777217,null;case 6:if(i&&c.stateNode!=null)i.memoizedProps!==h&&Ra(c);else{if(typeof h!="string"&&c.stateNode===null)throw Error(r(166));if(i=xe.current,hl(c)){if(i=c.stateNode,f=c.memoizedProps,h=null,S=Nn,S!==null)switch(S.tag){case 27:case 5:h=S.memoizedProps}i[En]=c,i=!!(i.nodeValue===f||h!==null&&h.suppressHydrationWarning===!0||_C(i.nodeValue,f)),i||$o(c)}else i=rd(i).createTextNode(h),i[En]=c,c.stateNode=i}return Bt(c),null;case 13:if(h=c.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(S=hl(c),h!==null&&h.dehydrated!==null){if(i===null){if(!S)throw Error(r(318));if(S=c.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(r(317));S[En]=c}else ml(),!(c.flags&128)&&(c.memoizedState=null),c.flags|=4;Bt(c),S=!1}else Or!==null&&(yh(Or),Or=null),S=!0;if(!S)return c.flags&256?(va(c),c):(va(c),null)}if(va(c),c.flags&128)return c.lanes=f,c;if(f=h!==null,i=i!==null&&i.memoizedState!==null,f){h=c.child,S=null,h.alternate!==null&&h.alternate.memoizedState!==null&&h.alternate.memoizedState.cachePool!==null&&(S=h.alternate.memoizedState.cachePool.pool);var A=null;h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(A=h.memoizedState.cachePool.pool),A!==S&&(h.flags|=2048)}return f!==i&&f&&(c.child.flags|=8192),Vu(c,c.updateQueue),Bt(c),null;case 4:return J(),i===null&&_h(c.stateNode.containerInfo),Bt(c),null;case 10:return xa(c.type),Bt(c),null;case 19:if(Re(en),S=c.memoizedState,S===null)return Bt(c),null;if(h=(c.flags&128)!==0,A=S.rendering,A===null)if(h)Pl(S,!1);else{if(qt!==0||i!==null&&i.flags&128)for(i=c.child;i!==null;){if(A=_u(i),A!==null){for(c.flags|=128,Pl(S,!1),i=A.updateQueue,c.updateQueue=i,Vu(c,i),c.subtreeFlags=0,i=f,f=c.child;f!==null;)rC(f,i),f=f.sibling;return ie(en,en.current&1|2),c.child}i=i.sibling}S.tail!==null&&ye()>Wu&&(c.flags|=128,h=!0,Pl(S,!1),c.lanes=4194304)}else{if(!h)if(i=_u(A),i!==null){if(c.flags|=128,h=!0,i=i.updateQueue,c.updateQueue=i,Vu(c,i),Pl(S,!0),S.tail===null&&S.tailMode==="hidden"&&!A.alternate&&!xt)return Bt(c),null}else 2*ye()-S.renderingStartTime>Wu&&f!==536870912&&(c.flags|=128,h=!0,Pl(S,!1),c.lanes=4194304);S.isBackwards?(A.sibling=c.child,c.child=A):(i=S.last,i!==null?i.sibling=A:c.child=A,S.last=A)}return S.tail!==null?(c=S.tail,S.rendering=c,S.tail=c.sibling,S.renderingStartTime=ye(),c.sibling=null,i=en.current,ie(en,h?i&1|2:i&1),c):(Bt(c),null);case 22:case 23:return va(c),bg(),h=c.memoizedState!==null,i!==null?i.memoizedState!==null!==h&&(c.flags|=8192):h&&(c.flags|=8192),h?f&536870912&&!(c.flags&128)&&(Bt(c),c.subtreeFlags&6&&(c.flags|=8192)):Bt(c),f=c.updateQueue,f!==null&&Vu(c,f.retryQueue),f=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),h=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(h=c.memoizedState.cachePool.pool),h!==f&&(c.flags|=2048),i!==null&&Re(Vo),null;case 24:return f=null,i!==null&&(f=i.memoizedState.cache),c.memoizedState.cache!==f&&(c.flags|=2048),xa(tn),Bt(c),null;case 25:return null}throw Error(r(156,c.tag))}function d6(i,c){switch(pg(c),c.tag){case 1:return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 3:return xa(tn),J(),i=c.flags,i&65536&&!(i&128)?(c.flags=i&-65537|128,c):null;case 26:case 27:case 5:return ke(c),null;case 13:if(va(c),i=c.memoizedState,i!==null&&i.dehydrated!==null){if(c.alternate===null)throw Error(r(340));ml()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 19:return Re(en),null;case 4:return J(),null;case 10:return xa(c.type),null;case 22:case 23:return va(c),bg(),i!==null&&Re(Vo),i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 24:return xa(tn),null;case 25:return null;default:return null}}function iC(i,c){switch(pg(c),c.tag){case 3:xa(tn),J();break;case 26:case 27:case 5:ke(c);break;case 4:J();break;case 13:va(c);break;case 19:Re(en);break;case 10:xa(c.type);break;case 22:case 23:va(c),bg(),i!==null&&Re(Vo);break;case 24:xa(tn)}}var f6={getCacheForType:function(i){var c=wn(tn),f=c.data.get(i);return f===void 0&&(f=i(),c.data.set(i,f)),f}},p6=typeof WeakMap=="function"?WeakMap:Map,jt=0,Lt=null,ft=null,vt=0,Mt=0,Xn=null,Ca=!1,es=!1,dh=!1,_a=0,qt=0,lo=0,ti=0,fh=0,yr=0,ts=0,Fl=null,Xr=null,ph=!1,gh=0,Wu=1/0,Yu=null,co=null,Ku=!1,ni=null,zl=0,hh=0,mh=null,Bl=0,bh=null;function Zn(){if(jt&2&&vt!==0)return vt&-vt;if(D.T!==null){var i=Vi;return i!==0?i:Th()}return RA()}function sC(){yr===0&&(yr=!(vt&536870912)||xt?Nt():536870912);var i=gr.current;return i!==null&&(i.flags|=32),yr}function On(i,c,f){(i===Lt&&Mt===2||i.cancelPendingCommit!==null)&&(ns(i,0),Na(i,vt,yr,!1)),Ln(i,f),(!(jt&2)||i!==Lt)&&(i===Lt&&(!(jt&2)&&(ti|=f),qt===4&&Na(i,vt,yr,!1)),Zr(i))}function lC(i,c,f){if(jt&6)throw Error(r(327));var h=!f&&(c&60)===0&&(c&i.expiredLanes)===0||Xe(i,c),S=h?m6(i,c):Eh(i,c,!0),A=h;do{if(S===0){es&&!h&&Na(i,c,0,!1);break}else if(S===6)Na(i,c,0,!Ca);else{if(f=i.current.alternate,A&&!g6(f)){S=Eh(i,c,!1),A=!1;continue}if(S===2){if(A=c,i.errorRecoveryDisabledLanes&A)var z=0;else z=i.pendingLanes&-536870913,z=z!==0?z:z&536870912?536870912:0;if(z!==0){c=z;e:{var q=i;S=Fl;var X=q.current.memoizedState.isDehydrated;if(X&&(ns(q,z).flags|=256),z=Eh(q,z,!1),z!==2){if(dh&&!X){q.errorRecoveryDisabledLanes|=A,ti|=A,S=4;break e}A=Xr,Xr=S,A!==null&&yh(A)}S=z}if(A=!1,S!==2)continue}}if(S===1){ns(i,0),Na(i,c,0,!0);break}e:{switch(h=i,S){case 0:case 1:throw Error(r(345));case 4:if((c&4194176)===c){Na(h,c,yr,!Ca);break e}break;case 2:Xr=null;break;case 3:case 5:break;default:throw Error(r(329))}if(h.finishedWork=f,h.finishedLanes=c,(c&62914560)===c&&(A=gh+300-ye(),10f?32:f,D.T=null,ni===null)var A=!1;else{f=mh,mh=null;var z=ni,q=zl;if(ni=null,zl=0,jt&6)throw Error(r(331));var X=jt;if(jt|=4,tC(z.current),QR(z,z.current,q,f),jt=X,jl(0,!1),et&&typeof et.onPostCommitFiberRoot=="function")try{et.onPostCommitFiberRoot(bt,z)}catch{}A=!0}return A}finally{Z.p=S,D.T=h,bC(i,c)}}return!1}function yC(i,c,f){c=dr(f,c),c=Bg(i.stateNode,c,2),i=ro(i,c,2),i!==null&&(Ln(i,2),Zr(i))}function Ot(i,c,f){if(i.tag===3)yC(i,i,f);else for(;c!==null;){if(c.tag===3){yC(c,i,f);break}else if(c.tag===1){var h=c.stateNode;if(typeof c.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(co===null||!co.has(h))){i=dr(f,i),f=ER(2),h=ro(c,f,2),h!==null&&(wR(f,h,c,i),Ln(h,2),Zr(h));break}}c=c.return}}function wh(i,c,f){var h=i.pingCache;if(h===null){h=i.pingCache=new p6;var S=new Set;h.set(c,S)}else S=h.get(c),S===void 0&&(S=new Set,h.set(c,S));S.has(f)||(dh=!0,S.add(f),i=v6.bind(null,i,c,f),c.then(i,i))}function v6(i,c,f){var h=i.pingCache;h!==null&&h.delete(c),i.pingedLanes|=i.suspendedLanes&f,i.warmLanes&=~f,Lt===i&&(vt&f)===f&&(qt===4||qt===3&&(vt&62914560)===vt&&300>ye()-gh?!(jt&2)&&ns(i,0):fh|=f,ts===vt&&(ts=0)),Zr(i)}function vC(i,c){c===0&&(c=Dn()),i=Ka(i,c),i!==null&&(Ln(i,c),Zr(i))}function S6(i){var c=i.memoizedState,f=0;c!==null&&(f=c.retryLane),vC(i,f)}function E6(i,c){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(c),vC(i,f)}function w6(i,c){return Ee(i,c)}var Qu=null,os=null,xh=!1,Ju=!1,kh=!1,ri=0;function Zr(i){i!==os&&i.next===null&&(os===null?Qu=os=i:os=os.next=i),Ju=!0,xh||(xh=!0,k6(x6))}function jl(i,c){if(!kh&&Ju){kh=!0;do for(var f=!1,h=Qu;h!==null;){if(i!==0){var S=h.pendingLanes;if(S===0)var A=0;else{var z=h.suspendedLanes,q=h.pingedLanes;A=(1<<31-wt(42|i)+1)-1,A&=S&~(z&~q),A=A&201326677?A&201326677|1:A?A|2:0}A!==0&&(f=!0,wC(h,A))}else A=vt,A=pa(h,h===Lt?A:0),!(A&3)||Xe(h,A)||(f=!0,wC(h,A));h=h.next}while(f);kh=!1}}function x6(){Ju=xh=!1;var i=0;ri!==0&&(I6()&&(i=ri),ri=0);for(var c=ye(),f=null,h=Qu;h!==null;){var S=h.next,A=SC(h,c);A===0?(h.next=null,f===null?Qu=S:f.next=S,S===null&&(os=f)):(f=h,(i!==0||A&3)&&(Ju=!0)),h=S}jl(i)}function SC(i,c){for(var f=i.suspendedLanes,h=i.pingedLanes,S=i.expirationTimes,A=i.pendingLanes&-62914561;0"u"?null:document;function FC(i,c,f){var h=ss;if(h&&typeof c=="string"&&c){var S=cr(c);S='link[rel="'+i+'"][href="'+S+'"]',typeof f=="string"&&(S+='[crossorigin="'+f+'"]'),PC.has(S)||(PC.add(S),i={rel:i,crossOrigin:f,href:c},h.querySelector(S)===null&&(c=h.createElement("link"),mn(c,"link",i),an(c),h.head.appendChild(c)))}}function j6(i){Oa.D(i),FC("dns-prefetch",i,null)}function U6(i,c){Oa.C(i,c),FC("preconnect",i,c)}function G6(i,c,f){Oa.L(i,c,f);var h=ss;if(h&&i&&c){var S='link[rel="preload"][as="'+cr(c)+'"]';c==="image"&&f&&f.imageSrcSet?(S+='[imagesrcset="'+cr(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(S+='[imagesizes="'+cr(f.imageSizes)+'"]')):S+='[href="'+cr(i)+'"]';var A=S;switch(c){case"style":A=ls(i);break;case"script":A=cs(i)}vr.has(A)||(i=I({rel:"preload",href:c==="image"&&f&&f.imageSrcSet?void 0:i,as:c},f),vr.set(A,i),h.querySelector(S)!==null||c==="style"&&h.querySelector(Hl(A))||c==="script"&&h.querySelector($l(A))||(c=h.createElement("link"),mn(c,"link",i),an(c),h.head.appendChild(c)))}}function H6(i,c){Oa.m(i,c);var f=ss;if(f&&i){var h=c&&typeof c.as=="string"?c.as:"script",S='link[rel="modulepreload"][as="'+cr(h)+'"][href="'+cr(i)+'"]',A=S;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":A=cs(i)}if(!vr.has(A)&&(i=I({rel:"modulepreload",href:i},c),vr.set(A,i),f.querySelector(S)===null)){switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector($l(A)))return}h=f.createElement("link"),mn(h,"link",i),an(h),f.head.appendChild(h)}}}function $6(i,c,f){Oa.S(i,c,f);var h=ss;if(h&&i){var S=Oi(h).hoistableStyles,A=ls(i);c=c||"default";var z=S.get(A);if(!z){var q={loading:0,preload:null};if(z=h.querySelector(Hl(A)))q.loading=5;else{i=I({rel:"stylesheet",href:i,"data-precedence":c},f),(f=vr.get(A))&&zh(i,f);var X=z=h.createElement("link");an(X),mn(X,"link",i),X._p=new Promise(function(re,ve){X.onload=re,X.onerror=ve}),X.addEventListener("load",function(){q.loading|=1}),X.addEventListener("error",function(){q.loading|=2}),q.loading|=4,od(z,c,h)}z={type:"stylesheet",instance:z,count:1,state:q},S.set(A,z)}}}function q6(i,c){Oa.X(i,c);var f=ss;if(f&&i){var h=Oi(f).hoistableScripts,S=cs(i),A=h.get(S);A||(A=f.querySelector($l(S)),A||(i=I({src:i,async:!0},c),(c=vr.get(S))&&Bh(i,c),A=f.createElement("script"),an(A),mn(A,"link",i),f.head.appendChild(A)),A={type:"script",instance:A,count:1,state:null},h.set(S,A))}}function V6(i,c){Oa.M(i,c);var f=ss;if(f&&i){var h=Oi(f).hoistableScripts,S=cs(i),A=h.get(S);A||(A=f.querySelector($l(S)),A||(i=I({src:i,async:!0,type:"module"},c),(c=vr.get(S))&&Bh(i,c),A=f.createElement("script"),an(A),mn(A,"link",i),f.head.appendChild(A)),A={type:"script",instance:A,count:1,state:null},h.set(S,A))}}function zC(i,c,f,h){var S=(S=xe.current)?ad(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"?(c=ls(f.href),f=Oi(S).hoistableStyles,h=f.get(c),h||(h={type:"style",instance:null,count:0,state:null},f.set(c,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=ls(f.href);var A=Oi(S).hoistableStyles,z=A.get(i);if(z||(S=S.ownerDocument||S,z={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},A.set(i,z),(A=S.querySelector(Hl(i)))&&!A._p&&(z.instance=A,z.state.loading=5),vr.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},vr.set(i,f),A||W6(S,i,f,z.state))),c&&h===null)throw Error(r(528,""));return z}if(c&&h!==null)throw Error(r(529,""));return null;case"script":return c=f.async,f=f.src,typeof f=="string"&&c&&typeof c!="function"&&typeof c!="symbol"?(c=cs(f),f=Oi(S).hoistableScripts,h=f.get(c),h||(h={type:"script",instance:null,count:0,state:null},f.set(c,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,i))}}function ls(i){return'href="'+cr(i)+'"'}function Hl(i){return'link[rel="stylesheet"]['+i+"]"}function BC(i){return I({},i,{"data-precedence":i.precedence,precedence:null})}function W6(i,c,f,h){i.querySelector('link[rel="preload"][as="style"]['+c+"]")?h.loading=1:(c=i.createElement("link"),h.preload=c,c.addEventListener("load",function(){return h.loading|=1}),c.addEventListener("error",function(){return h.loading|=2}),mn(c,"link",f),an(c),i.head.appendChild(c))}function cs(i){return'[src="'+cr(i)+'"]'}function $l(i){return"script[async]"+i}function jC(i,c,f){if(c.count++,c.instance===null)switch(c.type){case"style":var h=i.querySelector('style[data-href~="'+cr(f.href)+'"]');if(h)return c.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),od(h,f.precedence,i),c.instance=h;case"stylesheet":S=ls(f.href);var A=i.querySelector(Hl(S));if(A)return c.state.loading|=4,c.instance=A,an(A),A;h=BC(f),(S=vr.get(S))&&zh(h,S),A=(i.ownerDocument||i).createElement("link"),an(A);var z=A;return z._p=new Promise(function(q,X){z.onload=q,z.onerror=X}),mn(A,"link",h),c.state.loading|=4,od(A,f.precedence,i),c.instance=A;case"script":return A=cs(f.src),(S=i.querySelector($l(A)))?(c.instance=S,an(S),S):(h=f,(S=vr.get(A))&&(h=I({},f),Bh(h,S)),i=i.ownerDocument||i,S=i.createElement("script"),an(S),mn(S,"link",h),i.head.appendChild(S),c.instance=S);case"void":return null;default:throw Error(r(443,c.type))}else c.type==="stylesheet"&&!(c.state.loading&4)&&(h=c.instance,c.state.loading|=4,od(h,f.precedence,i));return c.instance}function od(i,c,f){for(var h=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),S=h.length?h[h.length-1]:null,A=S,z=0;z title"):null)}function Y6(i,c,f){if(f===1||c.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof c.precedence!="string"||typeof c.href!="string"||c.href==="")break;return!0;case"link":if(typeof c.rel!="string"||typeof c.href!="string"||c.href===""||c.onLoad||c.onError)break;switch(c.rel){case"stylesheet":return i=c.disabled,typeof c.precedence=="string"&&i==null;default:return!0}case"script":if(c.async&&typeof c.async!="function"&&typeof c.async!="symbol"&&!c.onLoad&&!c.onError&&c.src&&typeof c.src=="string")return!0}return!1}function HC(i){return!(i.type==="stylesheet"&&!(i.state.loading&3))}var ql=null;function K6(){}function X6(i,c,f){if(ql===null)throw Error(r(475));var h=ql;if(c.type==="stylesheet"&&(typeof f.media!="string"||matchMedia(f.media).matches!==!1)&&!(c.state.loading&4)){if(c.instance===null){var S=ls(f.href),A=i.querySelector(Hl(S));if(A){i=A._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(h.count++,h=sd.bind(h),i.then(h,h)),c.state.loading|=4,c.instance=A,an(A);return}A=i.ownerDocument||i,f=BC(f),(S=vr.get(S))&&zh(f,S),A=A.createElement("link"),an(A);var z=A;z._p=new Promise(function(q,X){z.onload=q,z.onerror=X}),mn(A,"link",f),c.instance=A}h.stylesheets===null&&(h.stylesheets=new Map),h.stylesheets.set(c,i),(i=c.state.preload)&&!(c.state.loading&3)&&(h.count++,c=sd.bind(h),i.addEventListener("load",c),i.addEventListener("error",c))}}function Z6(){if(ql===null)throw Error(r(475));var i=ql;return i.stylesheets&&i.count===0&&jh(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(),Kh.exports=yq(),Kh.exports}var Sq=vq(),Jl={},d_;function Eq(){if(d_)return Jl;d_=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 T=0;do{const k=m.indexOf("=",T);if(k===-1)break;const R=m.indexOf(";",T),O=R===-1?v:R;if(k>O){T=m.lastIndexOf(";",k-1)+1;continue}const N=l(m,T,k),C=u(m,k,N),_=m.slice(N,C);if(y[_]===void 0){let M=l(m,k+1,O),D=u(m,O,M);const I=x(m.slice(M,D));y[_]=I}T=O+1}while(Ty;){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 T=m+"="+x;if(!y)return T;if(y.maxAge!==void 0){if(!Number.isInteger(y.maxAge))throw new TypeError(`option maxAge is invalid: ${y.maxAge}`);T+="; Max-Age="+y.maxAge}if(y.domain){if(!n.test(y.domain))throw new TypeError(`option domain is invalid: ${y.domain}`);T+="; Domain="+y.domain}if(y.path){if(!r.test(y.path))throw new TypeError(`option path is invalid: ${y.path}`);T+="; Path="+y.path}if(y.expires){if(!g(y.expires)||!Number.isFinite(y.expires.valueOf()))throw new TypeError(`option expires is invalid: ${y.expires}`);T+="; Expires="+y.expires.toUTCString()}if(y.httpOnly&&(T+="; HttpOnly"),y.secure&&(T+="; Secure"),y.partitioned&&(T+="; Partitioned"),y.priority)switch(typeof y.priority=="string"?y.priority.toLowerCase():void 0){case"low":T+="; Priority=Low";break;case"medium":T+="; Priority=Medium";break;case"high":T+="; 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":T+="; SameSite=Strict";break;case"lax":T+="; SameSite=Lax";break;case"none":T+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${y.sameSite}`)}return T}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}Eq();/** * react-router v7.3.0 * * Copyright (c) Remix Software Inc. @@ -55,19 +55,20 @@ Error generating stack: `+f.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */var f_="popstate";function Eq(e={}){function t(a,o){let{pathname:s="/",search:l="",hash:u=""}=xi(a.location.hash.substring(1));return!s.startsWith("/")&&!s.startsWith(".")&&(s="/"+s),c0("",{pathname:s,search:l,hash:u},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(a,o){let s=a.document.querySelector("base"),l="";if(s&&s.getAttribute("href")){let u=a.location.href,d=u.indexOf("#");l=d===-1?u:u.slice(0,d)}return l+"#"+(typeof o=="string"?o:Ec(o))}function r(a,o){jr(a.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(o)})`)}return xq(t,n,r,e)}function Gt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function jr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function wq(){return Math.random().toString(36).substring(2,10)}function p_(e,t){return{usr:e.state,key:e.key,idx:t}}function c0(e,t,n=null,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?xi(t):t,state:n,key:t&&t.key||r||wq()}}function Ec({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 xi(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 xq(e,t,n,r={}){let{window:a=document.defaultView,v5Compat:o=!1}=r,s=a.history,l="POP",u=null,d=p();d==null&&(d=0,s.replaceState({...s.state,idx:d},""));function p(){return(s.state||{idx:null}).idx}function g(){l="POP";let k=p(),A=k==null?null:k-d;d=k,u&&u({action:l,location:y.location,delta:A})}function m(k,A){l="PUSH";let x=c0(y.location,k,A);n&&n(x,k),d=p()+1;let R=p_(x,d),O=y.createHref(x);try{s.pushState(R,"",O)}catch(N){if(N instanceof DOMException&&N.name==="DataCloneError")throw N;a.location.assign(O)}o&&u&&u({action:l,location:y.location,delta:1})}function b(k,A){l="REPLACE";let x=c0(y.location,k,A);n&&n(x,k),d=p();let R=p_(x,d),O=y.createHref(x);s.replaceState(R,"",O),o&&u&&u({action:l,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:Ec(k);return x=x.replace(/ $/,"%20"),Gt(A,`No window.location.(origin|href) available to create URL for href: ${x}`),new URL(x,A)}let y={get action(){return l},get location(){return e(a,s)},listen(k){if(u)throw new Error("A history only accepts one active listener");return a.addEventListener(f_,g),u=k,()=>{a.removeEventListener(f_,g),u=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 Yz(e,t,n="/"){return kq(e,t,n,!1)}function kq(e,t,n,r){let a=typeof t=="string"?xi(t):t,o=Ba(a.pathname||"/",n);if(o==null)return null;let s=Kz(e);Tq(s);let l=null;for(let u=0;l==null&&u{let u={relativePath:l===void 0?o.path||"":l,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};u.relativePath.startsWith("/")&&(Gt(u.relativePath.startsWith(r),`Absolute route path "${u.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),u.relativePath=u.relativePath.slice(r.length));let d=Fa([r,u.relativePath]),p=n.concat(u);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}".`),Kz(o.children,t,p,d)),!(o.path==null&&!o.index)&&t.push({path:d,score:Iq(d,o.index),routesMeta:p})};return e.forEach((o,s)=>{var l;if(o.path===""||!((l=o.path)!=null&&l.includes("?")))a(o,s);else for(let u of Xz(o.path))a(o,s,u)}),t}function Xz(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=Xz(r.join("/")),l=[];return l.push(...s.map(u=>u===""?o:[o,u].join("/"))),a&&l.push(...s),l.map(u=>e.startsWith("/")&&u===""?"/":u)}function Tq(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Dq(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var Aq=/^:[\w-]+$/,Rq=3,Cq=2,_q=1,Nq=10,Oq=-2,g_=e=>e==="*";function Iq(e,t){let n=e.split("/"),r=n.length;return n.some(g_)&&(r+=Oq),t&&(r+=Cq),n.filter(a=>!g_(a)).reduce((a,o)=>a+(Aq.test(o)?Rq:o===""?_q:Nq),r)}function Dq(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 Lq(e,t,n=!1){let{routesMeta:r}=e,a={},o="/",s=[];for(let l=0;l{if(p==="*"){let v=l[m]||"";s=o.slice(0,o.length-v.length).replace(/(.)\/+$/,"$1")}const b=l[m];return g&&!b?d[p]=void 0:d[p]=(b||"").replace(/%2F/g,"/"),d},{}),pathname:o,pathnameBase:s,pattern:e}}function Mq(e,t=!1,n=!0){jr(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,l,u)=>(r.push({paramName:l,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),r]}function Pq(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return jr(!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 Ba(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 Fq(e,t="/"){let{pathname:n,search:r="",hash:a=""}=typeof e=="string"?xi(e):e;return{pathname:n?n.startsWith("/")?n:zq(n,t):t,search:Uq(r),hash:Gq(a)}}function zq(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 Jh(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 Bq(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Zz(e){let t=Bq(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function Qz(e,t,n,r=!1){let a;typeof e=="string"?a=xi(e):(a={...e},Gt(!a.pathname||!a.pathname.includes("?"),Jh("?","pathname","search",a)),Gt(!a.pathname||!a.pathname.includes("#"),Jh("#","pathname","hash",a)),Gt(!a.search||!a.search.includes("#"),Jh("#","search","hash",a)));let o=e===""||a.pathname==="",s=o?"/":a.pathname,l;if(s==null)l=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("/")}l=g>=0?t[g]:"/"}let u=Fq(a,l),d=s&&s!=="/"&&s.endsWith("/"),p=(o||s===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(d||p)&&(u.pathname+="/"),u}var Fa=e=>e.join("/").replace(/\/\/+/g,"/"),jq=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Uq=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Gq=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Hq(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}var Jz=["POST","PUT","PATCH","DELETE"];new Set(Jz);var $q=["GET",...Jz];new Set($q);var Us=w.createContext(null);Us.displayName="DataRouter";var Vf=w.createContext(null);Vf.displayName="DataRouterState";var eB=w.createContext({isTransitioning:!1});eB.displayName="ViewTransition";var qq=w.createContext(new Map);qq.displayName="Fetchers";var Vq=w.createContext(null);Vq.displayName="Await";var sa=w.createContext(null);sa.displayName="Navigation";var Bc=w.createContext(null);Bc.displayName="Location";var Ha=w.createContext({outlet:null,matches:[],isDataRoute:!1});Ha.displayName="Route";var Nk=w.createContext(null);Nk.displayName="RouteError";function Wq(e,{relative:t}={}){Gt(jc(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(sa),{hash:a,pathname:o,search:s}=Uc(e,{relative:t}),l=o;return n!=="/"&&(l=o==="/"?n:Fa([n,o])),r.createHref({pathname:l,search:s,hash:a})}function jc(){return w.useContext(Bc)!=null}function ki(){return Gt(jc(),"useLocation() may be used only in the context of a component."),w.useContext(Bc).location}var tB="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function nB(e){w.useContext(sa).static||w.useLayoutEffect(e)}function Ok(){let{isDataRoute:e}=w.useContext(Ha);return e?i9():Yq()}function Yq(){Gt(jc(),"useNavigate() may be used only in the context of a component.");let e=w.useContext(Us),{basename:t,navigator:n}=w.useContext(sa),{matches:r}=w.useContext(Ha),{pathname:a}=ki(),o=JSON.stringify(Zz(r)),s=w.useRef(!1);return nB(()=>{s.current=!0}),w.useCallback((u,d={})=>{if(jr(s.current,tB),!s.current)return;if(typeof u=="number"){n.go(u);return}let p=Qz(u,JSON.parse(o),a,d.relative==="path");e==null&&t!=="/"&&(p.pathname=p.pathname==="/"?t:Fa([t,p.pathname])),(d.replace?n.replace:n.push)(p,d.state,d)},[t,n,o,a,e])}w.createContext(null);function Uc(e,{relative:t}={}){let{matches:n}=w.useContext(Ha),{pathname:r}=ki(),a=JSON.stringify(Zz(n));return w.useMemo(()=>Qz(e,JSON.parse(a),r,t==="path"),[e,a,r,t])}function Kq(e,t){return rB(e,t)}function rB(e,t,n,r){var x;Gt(jc(),"useRoutes() may be used only in the context of a component.");let{navigator:a,static:o}=w.useContext(sa),{matches:s}=w.useContext(Ha),l=s[s.length-1],u=l?l.params:{},d=l?l.pathname:"/",p=l?l.pathnameBase:"/",g=l&&l.route;{let R=g&&g.path||"";aB(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 f_="popstate";function wq(e={}){function t(a,o){let{pathname:s="/",search:l="",hash:u=""}=ki(a.location.hash.substring(1));return!s.startsWith("/")&&!s.startsWith(".")&&(s="/"+s),c0("",{pathname:s,search:l,hash:u},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(a,o){let s=a.document.querySelector("base"),l="";if(s&&s.getAttribute("href")){let u=a.location.href,d=u.indexOf("#");l=d===-1?u:u.slice(0,d)}return l+"#"+(typeof o=="string"?o:Sc(o))}function r(a,o){jr(a.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(o)})`)}return kq(t,n,r,e)}function Gt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function jr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function xq(){return Math.random().toString(36).substring(2,10)}function p_(e,t){return{usr:e.state,key:e.key,idx:t}}function c0(e,t,n=null,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?ki(t):t,state:n,key:t&&t.key||r||xq()}}function Sc({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 ki(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 kq(e,t,n,r={}){let{window:a=document.defaultView,v5Compat:o=!1}=r,s=a.history,l="POP",u=null,d=p();d==null&&(d=0,s.replaceState({...s.state,idx:d},""));function p(){return(s.state||{idx:null}).idx}function g(){l="POP";let x=p(),T=x==null?null:x-d;d=x,u&&u({action:l,location:v.location,delta:T})}function m(x,T){l="PUSH";let k=c0(v.location,x,T);n&&n(k,x),d=p()+1;let R=p_(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&&u&&u({action:l,location:v.location,delta:1})}function b(x,T){l="REPLACE";let k=c0(v.location,x,T);n&&n(k,x),d=p();let R=p_(k,d),O=v.createHref(k);s.replaceState(R,"",O),o&&u&&u({action:l,location:v.location,delta:0})}function y(x){let T=a.location.origin!=="null"?a.location.origin:a.location.href,k=typeof x=="string"?x:Sc(x);return k=k.replace(/ $/,"%20"),Gt(T,`No window.location.(origin|href) available to create URL for href: ${k}`),new URL(k,T)}let v={get action(){return l},get location(){return e(a,s)},listen(x){if(u)throw new Error("A history only accepts one active listener");return a.addEventListener(f_,g),u=x,()=>{a.removeEventListener(f_,g),u=null}},createHref(x){return t(a,x)},createURL:y,encodeLocation(x){let T=y(x);return{pathname:T.pathname,search:T.search,hash:T.hash}},push:m,replace:b,go(x){return s.go(x)}};return v}function Kz(e,t,n="/"){return Tq(e,t,n,!1)}function Tq(e,t,n,r){let a=typeof t=="string"?ki(t):t,o=Ba(a.pathname||"/",n);if(o==null)return null;let s=Xz(e);Aq(s);let l=null;for(let u=0;l==null&&u{let u={relativePath:l===void 0?o.path||"":l,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};u.relativePath.startsWith("/")&&(Gt(u.relativePath.startsWith(r),`Absolute route path "${u.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),u.relativePath=u.relativePath.slice(r.length));let d=Fa([r,u.relativePath]),p=n.concat(u);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}".`),Xz(o.children,t,p,d)),!(o.path==null&&!o.index)&&t.push({path:d,score:Dq(d,o.index),routesMeta:p})};return e.forEach((o,s)=>{var l;if(o.path===""||!((l=o.path)!=null&&l.includes("?")))a(o,s);else for(let u of Zz(o.path))a(o,s,u)}),t}function Zz(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=Zz(r.join("/")),l=[];return l.push(...s.map(u=>u===""?o:[o,u].join("/"))),a&&l.push(...s),l.map(u=>e.startsWith("/")&&u===""?"/":u)}function Aq(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Lq(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var Rq=/^:[\w-]+$/,Cq=3,_q=2,Nq=1,Oq=10,Iq=-2,g_=e=>e==="*";function Dq(e,t){let n=e.split("/"),r=n.length;return n.some(g_)&&(r+=Iq),t&&(r+=_q),n.filter(a=>!g_(a)).reduce((a,o)=>a+(Rq.test(o)?Cq:o===""?Nq:Oq),r)}function Lq(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 Mq(e,t,n=!1){let{routesMeta:r}=e,a={},o="/",s=[];for(let l=0;l{if(p==="*"){let y=l[m]||"";s=o.slice(0,o.length-y.length).replace(/(.)\/+$/,"$1")}const b=l[m];return g&&!b?d[p]=void 0:d[p]=(b||"").replace(/%2F/g,"/"),d},{}),pathname:o,pathnameBase:s,pattern:e}}function Pq(e,t=!1,n=!0){jr(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,l,u)=>(r.push({paramName:l,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),r]}function Fq(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return jr(!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 Ba(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 zq(e,t="/"){let{pathname:n,search:r="",hash:a=""}=typeof e=="string"?ki(e):e;return{pathname:n?n.startsWith("/")?n:Bq(n,t):t,search:Gq(r),hash:Hq(a)}}function Bq(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 Jh(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 jq(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Qz(e){let t=jq(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function Jz(e,t,n,r=!1){let a;typeof e=="string"?a=ki(e):(a={...e},Gt(!a.pathname||!a.pathname.includes("?"),Jh("?","pathname","search",a)),Gt(!a.pathname||!a.pathname.includes("#"),Jh("#","pathname","hash",a)),Gt(!a.search||!a.search.includes("#"),Jh("#","search","hash",a)));let o=e===""||a.pathname==="",s=o?"/":a.pathname,l;if(s==null)l=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("/")}l=g>=0?t[g]:"/"}let u=zq(a,l),d=s&&s!=="/"&&s.endsWith("/"),p=(o||s===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(d||p)&&(u.pathname+="/"),u}var Fa=e=>e.join("/").replace(/\/\/+/g,"/"),Uq=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Gq=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Hq=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function $q(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}var eB=["POST","PUT","PATCH","DELETE"];new Set(eB);var qq=["GET",...eB];new Set(qq);var Us=w.createContext(null);Us.displayName="DataRouter";var qf=w.createContext(null);qf.displayName="DataRouterState";var tB=w.createContext({isTransitioning:!1});tB.displayName="ViewTransition";var Vq=w.createContext(new Map);Vq.displayName="Fetchers";var Wq=w.createContext(null);Wq.displayName="Await";var sa=w.createContext(null);sa.displayName="Navigation";var zc=w.createContext(null);zc.displayName="Location";var Ha=w.createContext({outlet:null,matches:[],isDataRoute:!1});Ha.displayName="Route";var _k=w.createContext(null);_k.displayName="RouteError";function Yq(e,{relative:t}={}){Gt(Bc(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=w.useContext(sa),{hash:a,pathname:o,search:s}=jc(e,{relative:t}),l=o;return n!=="/"&&(l=o==="/"?n:Fa([n,o])),r.createHref({pathname:l,search:s,hash:a})}function Bc(){return w.useContext(zc)!=null}function Ti(){return Gt(Bc(),"useLocation() may be used only in the context of a component."),w.useContext(zc).location}var nB="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function rB(e){w.useContext(sa).static||w.useLayoutEffect(e)}function Nk(){let{isDataRoute:e}=w.useContext(Ha);return e?s9():Kq()}function Kq(){Gt(Bc(),"useNavigate() may be used only in the context of a component.");let e=w.useContext(Us),{basename:t,navigator:n}=w.useContext(sa),{matches:r}=w.useContext(Ha),{pathname:a}=Ti(),o=JSON.stringify(Qz(r)),s=w.useRef(!1);return rB(()=>{s.current=!0}),w.useCallback((u,d={})=>{if(jr(s.current,nB),!s.current)return;if(typeof u=="number"){n.go(u);return}let p=Jz(u,JSON.parse(o),a,d.relative==="path");e==null&&t!=="/"&&(p.pathname=p.pathname==="/"?t:Fa([t,p.pathname])),(d.replace?n.replace:n.push)(p,d.state,d)},[t,n,o,a,e])}w.createContext(null);function jc(e,{relative:t}={}){let{matches:n}=w.useContext(Ha),{pathname:r}=Ti(),a=JSON.stringify(Qz(n));return w.useMemo(()=>Jz(e,JSON.parse(a),r,t==="path"),[e,a,r,t])}function Xq(e,t){return aB(e,t)}function aB(e,t,n,r){var k;Gt(Bc(),"useRoutes() may be used only in the context of a component.");let{navigator:a,static:o}=w.useContext(sa),{matches:s}=w.useContext(Ha),l=s[s.length-1],u=l?l.params:{},d=l?l.pathname:"/",p=l?l.pathnameBase:"/",g=l&&l.route;{let R=g&&g.path||"";oB(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=ki(),b;if(t){let R=typeof t=="string"?xi(t):t;Gt(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:Yz(e,{pathname:y});jr(g||k!=null,`No routes matched location "${b.pathname}${b.search}${b.hash}" `),jr(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=e9(k&&k.map(R=>Object.assign({},R,{params:Object.assign({},u,R.params),pathname:Fa([p,a.encodeLocation?a.encodeLocation(R.pathname).pathname:R.pathname]),pathnameBase:R.pathnameBase==="/"?p:Fa([p,a.encodeLocation?a.encodeLocation(R.pathnameBase).pathname:R.pathnameBase])})),s,n,r);return t&&A?w.createElement(Bc.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...b},navigationType:"POP"}},A):A}function Xq(){let e=o9(),t=Hq(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 Zq=w.createElement(Xq,null),Qq=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(Nk.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Jq({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 e9(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 u=a.findIndex(d=>d.route.id&&(o==null?void 0:o[d.route.id])!==void 0);Gt(u>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),a=a.slice(0,Math.min(a.length,u+1))}let s=!1,l=-1;if(n)for(let u=0;u=0?a=a.slice(0,l+1):a=[a[0]];break}}}return a.reduceRight((u,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||Zq,s&&(l<0&&p===0?(aB("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),m=!0,v=null):l===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=u,w.createElement(Jq,{match:d,routeContext:{outlet:u,matches:y,isDataRoute:n!=null},children:A})};return n&&(d.route.ErrorBoundary||d.route.errorElement||p===0)?w.createElement(Qq,{location:n.location,revalidation:n.revalidation,component:b,error:g,children:k(),routeContext:{outlet:null,matches:y,isDataRoute:!0}}):k()},null)}function Ik(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function t9(e){let t=w.useContext(Us);return Gt(t,Ik(e)),t}function n9(e){let t=w.useContext(Vf);return Gt(t,Ik(e)),t}function r9(e){let t=w.useContext(Ha);return Gt(t,Ik(e)),t}function Dk(e){let t=r9(e),n=t.matches[t.matches.length-1];return Gt(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function a9(){return Dk("useRouteId")}function o9(){var r;let e=w.useContext(Nk),t=n9("useRouteError"),n=Dk("useRouteError");return e!==void 0?e:(r=t.errors)==null?void 0:r[n]}function i9(){let{router:e}=t9("useNavigate"),t=Dk("useNavigate"),n=w.useRef(!1);return nB(()=>{n.current=!0}),w.useCallback(async(a,o={})=>{jr(n.current,tB),n.current&&(typeof a=="number"?e.navigate(a):await e.navigate(a,{fromRouteId:t,...o}))},[e,t])}var h_={};function aB(e,t,n){!t&&!h_[e]&&(h_[e]=!0,jr(!1,n))}w.memo(s9);function s9({routes:e,future:t,state:n}){return rB(e,void 0,n,t)}function u0(e){Gt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function l9({basename:e="/",children:t=null,location:n,navigationType:r="POP",navigator:a,static:o=!1}){Gt(!jc(),"You cannot render a inside another . You should never have more than one in your app.");let s=e.replace(/^\/*/,"/"),l=w.useMemo(()=>({basename:s,navigator:a,static:o,future:{}}),[s,a,o]);typeof n=="string"&&(n=xi(n));let{pathname:u="/",search:d="",hash:p="",state:g=null,key:m="default"}=n,b=w.useMemo(()=>{let v=Ba(u,s);return v==null?null:{location:{pathname:v,search:d,hash:p,state:g,key:m},navigationType:r}},[s,u,d,p,g,m,r]);return jr(b!=null,` is not able to match the URL "${u}${d}${p}" because it does not start with the basename, so the won't render anything.`),b==null?null:w.createElement(sa.Provider,{value:l},w.createElement(Bc.Provider,{children:t,value:b}))}function c9({children:e,location:t}){return Kq(d0(e),t)}function d0(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,d0(r.props.children,o));return}Gt(r.type===u0,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Gt(!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=d0(r.props.children,o)),n.push(s)}),n}var Yd="get",Kd="application/x-www-form-urlencoded";function Wf(e){return e!=null&&typeof e.tagName=="string"}function u9(e){return Wf(e)&&e.tagName.toLowerCase()==="button"}function d9(e){return Wf(e)&&e.tagName.toLowerCase()==="form"}function f9(e){return Wf(e)&&e.tagName.toLowerCase()==="input"}function p9(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function g9(e,t){return e.button===0&&(!t||t==="_self")&&!p9(e)}var bd=null;function h9(){if(bd===null)try{new FormData(document.createElement("form"),0),bd=!1}catch{bd=!0}return bd}var m9=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function em(e){return e!=null&&!m9.has(e)?(jr(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Kd}"`),null):e}function b9(e,t){let n,r,a,o,s;if(d9(e)){let l=e.getAttribute("action");r=l?Ba(l,t):null,n=e.getAttribute("method")||Yd,a=em(e.getAttribute("enctype"))||Kd,o=new FormData(e)}else if(u9(e)||f9(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a - className="ml-2" + className="min-w-[300px]" triggerClassName="max-h-8" searchInputClassName="max-h-8" triggerTooltip={t('graphPanel.graphLabels.selectTooltip')} diff --git a/lightrag_webui/src/components/graph/GraphSearch.tsx b/lightrag_webui/src/components/graph/GraphSearch.tsx index 51e76a0b..40840f59 100644 --- a/lightrag_webui/src/components/graph/GraphSearch.tsx +++ b/lightrag_webui/src/components/graph/GraphSearch.tsx @@ -123,13 +123,42 @@ export const GraphSearchInput = ({ } // If has query, search nodes and verify they still exist - const result: OptionItem[] = searchEngine.search(query) + let result: OptionItem[] = searchEngine.search(query) .filter((r: { id: string }) => graph.hasNode(r.id)) .map((r: { id: string }) => ({ id: r.id, type: 'nodes' })) + // Add middle-content matching if results are few + // This enables matching content in the middle of text, not just from the beginning + if (result.length < 5) { + // Get already matched IDs to avoid duplicates + const matchedIds = new Set(result.map(item => item.id)) + + // Perform middle-content matching on all nodes + const middleMatchResults = graph.nodes() + .filter(id => { + // Skip already matched nodes + if (matchedIds.has(id)) return false + + // Get node label + const label = graph.getNodeAttribute(id, 'label') + // Match if label contains query string but doesn't start with it + return label && + typeof label === 'string' && + !label.toLowerCase().startsWith(query.toLowerCase()) && + label.toLowerCase().includes(query.toLowerCase()) + }) + .map(id => ({ + id, + type: 'nodes' as const + })) + + // Merge results + result = [...result, ...middleMatchResults] + } + // prettier-ignore return result.length <= searchResultLimit ? result diff --git a/lightrag_webui/src/components/graph/LayoutsControl.tsx b/lightrag_webui/src/components/graph/LayoutsControl.tsx index 1933ce19..c4ec67be 100644 --- a/lightrag_webui/src/components/graph/LayoutsControl.tsx +++ b/lightrag_webui/src/components/graph/LayoutsControl.tsx @@ -289,7 +289,7 @@ const LayoutsControl = () => { ) return ( - <> +
{layouts[layout] && 'worker' in layouts[layout] && ( { - + @@ -331,7 +338,7 @@ const LayoutsControl = () => {
- +
) } diff --git a/lightrag_webui/src/components/graph/Legend.tsx b/lightrag_webui/src/components/graph/Legend.tsx index a99378f9..d26d11a3 100644 --- a/lightrag_webui/src/components/graph/Legend.tsx +++ b/lightrag_webui/src/components/graph/Legend.tsx @@ -4,21 +4,6 @@ import { useGraphStore } from '@/stores/graph' import { Card } from '@/components/ui/Card' import { ScrollArea } from '@/components/ui/ScrollArea' -// Predefined node types list -const PREDEFINED_TYPES = [ - 'person', - 'category', - 'geo', - 'location', - 'organization', - 'event', - 'equipment', - 'weapon', - 'animal', - 'unknown', - 'technology' -] - interface LegendProps { className?: string } @@ -34,7 +19,7 @@ const Legend: React.FC = ({ className }) => { return (

{t('graphPanel.legend')}

- +
{Array.from(typeColorMap.entries()).map(([type, color]) => (
@@ -43,9 +28,7 @@ const Legend: React.FC = ({ className }) => { style={{ backgroundColor: color }} /> - {PREDEFINED_TYPES.includes(type.toLowerCase()) - ? t(`graphPanel.nodeTypes.${type.toLowerCase()}`) - : type} + {t(`graphPanel.nodeTypes.${type.toLowerCase()}`, type)}
))} diff --git a/lightrag_webui/src/components/graph/Settings.tsx b/lightrag_webui/src/components/graph/Settings.tsx index 5f541e3d..758f6d58 100644 --- a/lightrag_webui/src/components/graph/Settings.tsx +++ b/lightrag_webui/src/components/graph/Settings.tsx @@ -245,8 +245,10 @@ export default function Settings() { e.preventDefault()} >
diff --git a/lightrag_webui/src/components/retrieval/QuerySettings.tsx b/lightrag_webui/src/components/retrieval/QuerySettings.tsx index 9fca1782..f5e17cc1 100644 --- a/lightrag_webui/src/components/retrieval/QuerySettings.tsx +++ b/lightrag_webui/src/components/retrieval/QuerySettings.tsx @@ -55,6 +55,7 @@ export default function QuerySettings() { {t('retrievePanel.querySettings.queryModeOptions.global')} {t('retrievePanel.querySettings.queryModeOptions.hybrid')} {t('retrievePanel.querySettings.queryModeOptions.mix')} + {t('retrievePanel.querySettings.queryModeOptions.bypass')} diff --git a/lightrag_webui/src/components/ui/AsyncSelect.tsx b/lightrag_webui/src/components/ui/AsyncSelect.tsx index badcfe29..c42d60b7 100644 --- a/lightrag_webui/src/components/ui/AsyncSelect.tsx +++ b/lightrag_webui/src/components/ui/AsyncSelect.tsx @@ -210,7 +210,13 @@ export function AsyncSelect({ - e.preventDefault()}> + e.preventDefault()} + align="start" + sideOffset={8} + collisionPadding={5} + >
& { + collisionPadding?: number | Partial>; + sticky?: 'partial' | 'always'; + avoidCollisions?: boolean; +}; + const PopoverContent = React.forwardRef< React.ComponentRef, - React.ComponentPropsWithoutRef ->(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( - + PopoverContentProps +>(({ className, align = 'center', sideOffset = 4, collisionPadding, sticky, avoidCollisions = false, ...props }, ref) => ( + + + )) PopoverContent.displayName = PopoverPrimitive.Content.displayName diff --git a/lightrag_webui/src/features/DocumentManager.tsx b/lightrag_webui/src/features/DocumentManager.tsx index ecb163c1..1ed54b5a 100644 --- a/lightrag_webui/src/features/DocumentManager.tsx +++ b/lightrag_webui/src/features/DocumentManager.tsx @@ -158,7 +158,7 @@ export default function DocumentManager() { }, []); const [showPipelineStatus, setShowPipelineStatus] = useState(false) - const { t } = useTranslation() + const { t, i18n } = useTranslation() const health = useBackendState.use.health() const pipelineBusy = useBackendState.use.pipelineBusy() const [docs, setDocs] = useState(null) @@ -216,33 +216,42 @@ export default function DocumentManager() { }); }, [sortField, sortDirection, showFileName]); + // Define a new type that includes status information + type DocStatusWithStatus = DocStatusResponse & { status: DocStatus }; + const filteredAndSortedDocs = useMemo(() => { if (!docs) return null; - let filteredDocs = { ...docs }; + // Create a flat array of documents with status information + const allDocuments: DocStatusWithStatus[] = []; - if (statusFilter !== 'all') { - filteredDocs = { - ...docs, - statuses: { - pending: [], - processing: [], - processed: [], - failed: [], - [statusFilter]: docs.statuses[statusFilter] || [] - } - }; + if (statusFilter === 'all') { + // When filter is 'all', include documents from all statuses + Object.entries(docs.statuses).forEach(([status, documents]) => { + documents.forEach(doc => { + allDocuments.push({ + ...doc, + status: status as DocStatus + }); + }); + }); + } else { + // When filter is specific status, only include documents from that status + const documents = docs.statuses[statusFilter] || []; + documents.forEach(doc => { + allDocuments.push({ + ...doc, + status: statusFilter + }); + }); } - if (!sortField || !sortDirection) return filteredDocs; + // Sort all documents together if sort field and direction are specified + if (sortField && sortDirection) { + return sortDocuments(allDocuments); + } - const sortedStatuses = Object.entries(filteredDocs.statuses).reduce((acc, [status, documents]) => { - const sortedDocuments = sortDocuments(documents); - acc[status as DocStatus] = sortedDocuments; - return acc; - }, {} as DocsStatusesResponse['statuses']); - - return { ...filteredDocs, statuses: sortedStatuses }; + return allDocuments; }, [docs, sortField, sortDirection, statusFilter, sortDocuments]); // Calculate document counts for each status @@ -499,7 +508,7 @@ export default function DocumentManager() { {t('documentPanel.documentManager.uploadedTitle')}
-
+
diff --git a/lightrag_webui/src/features/RetrievalTesting.tsx b/lightrag_webui/src/features/RetrievalTesting.tsx index 1c3fb2db..a2d82b47 100644 --- a/lightrag_webui/src/features/RetrievalTesting.tsx +++ b/lightrag_webui/src/features/RetrievalTesting.tsx @@ -60,6 +60,7 @@ export default function RetrievalTesting() { } return newMessages }) + scrollToBottom() } // Prepare query parameters @@ -69,6 +70,7 @@ export default function RetrievalTesting() { query: userMessage.content, conversation_history: prevMessages .filter((m) => m.isError !== true) + .slice(-(state.querySettings.history_turns || 0) * 2) .map((m) => ({ role: m.role, content: m.content })) } diff --git a/lightrag_webui/src/hooks/useLightragGraph.tsx b/lightrag_webui/src/hooks/useLightragGraph.tsx index 5f35014c..cb497d62 100644 --- a/lightrag_webui/src/hooks/useLightragGraph.tsx +++ b/lightrag_webui/src/hooks/useLightragGraph.tsx @@ -11,112 +11,146 @@ import { useSettingsStore } from '@/stores/settings' import seedrandom from 'seedrandom' -// Predefined node colors - Primary colors -const NODE_COLORS = [ - '#fdd868', // Yellow - UNKNOWN - '#e3493b', // Google Red - geo - '#1212a1', // Deep Cyan - weapon - '#0f705d', // Green - organization - '#a64dff', // Purple - technology - '#f46a9b', // Magenta - '#00bfa0', // Turquoise - '#fdcce5', // Pale Pink - '#0f558a', // Blue - location - '#b2e061', // Yellow Green - '#bd7ebe', // Light Violet - event - '#439bd6', // Cyan - person - '#094338', // Deep Green - '#dc0ab4', // Pink Red - '#fd7f6f', // Light Red - category - '#b04238', // Brown -]; +const TYPE_SYNONYMS: Record = { + 'unknown': 'unknown', + '未知': 'unknown', + 'other': 'unknown', -// Extended colors - Used when node types exceed primary colors + 'category': 'category', + '类别': 'category', + 'type': 'category', + '分类': 'category', + + 'organization': 'organization', + '组织': 'organization', + 'org': 'organization', + 'company': 'organization', + '公司': 'organization', + '机构': 'organization', + + 'event': 'event', + '事件': 'event', + 'activity': 'event', + '活动': 'event', + + 'person': 'person', + '人物': 'person', + 'people': 'person', + 'human': 'person', + '人': 'person', + + 'animal': 'animal', + '动物': 'animal', + 'creature': 'animal', + '生物': 'animal', + + 'geo': 'geo', + '地理': 'geo', + 'geography': 'geo', + '地域': 'geo', + + 'location': 'location', + '地点': 'location', + 'place': 'location', + 'address': 'location', + '位置': 'location', + '地址': 'location', + + 'technology': 'technology', + '技术': 'technology', + 'tech': 'technology', + '科技': 'technology', + + 'equipment': 'equipment', + '设备': 'equipment', + 'device': 'equipment', + '装备': 'equipment', + + 'weapon': 'weapon', + '武器': 'weapon', + 'arms': 'weapon', + '军火': 'weapon', + + 'object': 'object', + '物品': 'object', + 'stuff': 'object', + '物体': 'object', + + 'group': 'group', + '群组': 'group', + 'community': 'group', + '社区': 'group' +}; + +// 节点类型到颜色的映射 +const NODE_TYPE_COLORS: Record = { + 'unknown': '#f4d371', // Yellow + 'category': '#e3493b', // GoogleRed + 'organization': '#0f705d', // Green + 'event': '#00bfa0', // Turquoise + 'person': '#4169E1', // RoyalBlue + 'animal': '#84a3e1', // SkyBlue + 'geo': '#ff99cc', // Pale Pink + 'location': '#cf6d17', // Carrot + 'technology': '#b300b3', // Purple + 'equipment': '#2F4F4F', // DarkSlateGray + 'weapon': '#4421af', // DeepPurple + 'object': '#00cc00', // Green + 'group': '#0f558a', // NavyBlue +}; + +// Extended colors pool - Used for unknown node types const EXTENDED_COLORS = [ - '#5ad45a', // Light Green - '#5a2c6d', // Deep Violet - '#6c1313', // Dark Red - '#184868', // Dark Cyan - '#996600', // Yellow Brown - '#4421af', // Deep Purple - '#E67E22', // Carrot - '#ff1a1a', // Pure Red + '#5a2c6d', // DeepViolet + '#0000ff', // Blue + '#cd071e', // ChinaRed + '#00CED1', // DarkTurquoise + '#9b3a31', // DarkBrown + '#b2e061', // YellowGreen + '#bd7ebe', // LightViolet + '#6ef7b3', // LightGreen + '#003366', // DarkBlue + '#DEB887', // BurlyWood ]; -// All available colors combined -const ALL_COLORS = [...NODE_COLORS, ...EXTENDED_COLORS]; - -// Helper function to get color based on node type +// Select color based on node type const getNodeColorByType = (nodeType: string | undefined): string => { - const defaultColor = '#5D6D7E'; // Default color for nodes without a type or undefined type - // Return default color if node type is undefined - if (!nodeType) { - return defaultColor; - } + const defaultColor = '#5D6D7E'; - // Get type color map from store + const normalizedType = nodeType ? nodeType.toLowerCase() : 'unknown'; const typeColorMap = useGraphStore.getState().typeColorMap; - // If this type already has an assigned color, return it - if (typeColorMap.has(nodeType)) { - return typeColorMap.get(nodeType) || defaultColor; + // Return previous color if already mapped + if (typeColorMap.has(normalizedType)) { + return typeColorMap.get(normalizedType) || defaultColor; } - // Get all currently used colors - const usedColors = new Set(); - typeColorMap.forEach(color => { - usedColors.add(color); - }); - - // Assign color for new node type - // Use a simple hash function to map node type to color index - const getColorIndex = (str: string): number => { - let hash = 0; - for (let i = 0; i < str.length; i++) { - hash = ((hash << 5) - hash) + str.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - // Ensure result is positive and within NODE_COLORS range only - return Math.abs(hash) % NODE_COLORS.length; - }; - - // Get initial color index from hash - const colorIndex = getColorIndex(nodeType); - let newColor = NODE_COLORS[colorIndex]; - - // If the color is already used, find the next available color - if (usedColors.has(newColor) && usedColors.size < ALL_COLORS.length) { - // First try to find an unused color in NODE_COLORS - let foundUnused = false; - for (let i = 0; i < NODE_COLORS.length; i++) { - const candidateColor = NODE_COLORS[i]; - if (!usedColors.has(candidateColor)) { - newColor = candidateColor; - foundUnused = true; - break; - } - } - - // If all NODE_COLORS are used, then try EXTENDED_COLORS - if (!foundUnused) { - newColor = defaultColor; - for (let i = 0; i < EXTENDED_COLORS.length; i++) { - const candidateColor = EXTENDED_COLORS[i]; - if (!usedColors.has(candidateColor)) { - newColor = candidateColor; - break; - } - } - } + const standardType = TYPE_SYNONYMS[normalizedType]; + if (standardType) { + const color = NODE_TYPE_COLORS[standardType]; + // Update color mapping + const newMap = new Map(typeColorMap); + newMap.set(normalizedType, color); + useGraphStore.setState({ typeColorMap: newMap }); + return color; } - // If all colors are used, we'll still use the hashed color - // In a more advanced implementation, we could create color variants here + // For unpredefind nodeTypes, use extended colors + // Find used extended colors + const usedExtendedColors = new Set( + Array.from(typeColorMap.entries()) + .filter(([, color]) => !Object.values(NODE_TYPE_COLORS).includes(color)) + .map(([, color]) => color) + ); + + // Find and use the first unused extended color + const unusedColor = EXTENDED_COLORS.find(color => !usedExtendedColors.has(color)); + const newColor = unusedColor || defaultColor; // Update color mapping const newMap = new Map(typeColorMap); - newMap.set(nodeType, newColor); + newMap.set(normalizedType, newColor); useGraphStore.setState({ typeColorMap: newMap }); return newColor; diff --git a/lightrag_webui/src/i18n.ts b/lightrag_webui/src/i18n.ts index d2753a0e..15978ebe 100644 --- a/lightrag_webui/src/i18n.ts +++ b/lightrag_webui/src/i18n.ts @@ -29,11 +29,14 @@ i18n fr: { translation: fr }, ar: { translation: ar } }, - lng: getStoredLanguage(), // 使用存储的语言设置 + lng: getStoredLanguage(), // Use stored language settings fallbackLng: 'en', interpolation: { escapeValue: false - } + }, + // Configuration to handle missing translations + returnEmptyString: false, + returnNull: false, }) // Subscribe to language changes diff --git a/lightrag_webui/src/locales/ar.json b/lightrag_webui/src/locales/ar.json index 952dbef0..641315ee 100644 --- a/lightrag_webui/src/locales/ar.json +++ b/lightrag_webui/src/locales/ar.json @@ -155,6 +155,8 @@ "weapon": "سلاح", "animal": "حيوان", "unknown": "غير معروف", + "object": "مصنوع", + "group": "مجموعة", "technology": "العلوم" }, "sideBar": { @@ -294,13 +296,14 @@ "parametersTitle": "المعلمات", "parametersDescription": "تكوين معلمات الاستعلام الخاص بك", "queryMode": "وضع الاستعلام", - "queryModeTooltip": "حدد استراتيجية الاسترجاع:\n• ساذج: بحث أساسي بدون تقنيات متقدمة\n• محلي: استرجاع معلومات يعتمد على السياق\n• عالمي: يستخدم قاعدة المعرفة العالمية\n• مختلط: يجمع بين الاسترجاع المحلي والعالمي\n• مزيج: يدمج شبكة المعرفة مع الاسترجاع المتجهي", + "queryModeTooltip": "حدد استراتيجية الاسترجاع:\n• ساذج: بحث أساسي بدون تقنيات متقدمة\n• محلي: استرجاع معلومات يعتمد على السياق\n• عالمي: يستخدم قاعدة المعرفة العالمية\n• مختلط: يجمع بين الاسترجاع المحلي والعالمي\n• مزيج: يدمج شبكة المعرفة مع الاسترجاع المتجهي\n• تجاوز: يمرر الاستعلام مباشرة إلى LLM بدون استرجاع", "queryModeOptions": { "naive": "ساذج", "local": "محلي", "global": "عالمي", "hybrid": "مختلط", - "mix": "مزيج" + "mix": "مزيج", + "bypass": "تجاوز" }, "responseFormat": "تنسيق الرد", "responseFormatTooltip": "يحدد تنسيق الرد. أمثلة:\n• فقرات متعددة\n• فقرة واحدة\n• نقاط نقطية", diff --git a/lightrag_webui/src/locales/en.json b/lightrag_webui/src/locales/en.json index 18fea5e3..ff20528d 100644 --- a/lightrag_webui/src/locales/en.json +++ b/lightrag_webui/src/locales/en.json @@ -155,6 +155,7 @@ "weapon": "Weapon", "animal": "Animal", "unknown": "Unknown", + "object": "Object", "technology": "Technology" }, "sideBar": { @@ -294,13 +295,14 @@ "parametersTitle": "Parameters", "parametersDescription": "Configure your query parameters", "queryMode": "Query Mode", - "queryModeTooltip": "Select the retrieval strategy:\n• Naive: Basic search without advanced techniques\n• Local: Context-dependent information retrieval\n• Global: Utilizes global knowledge base\n• Hybrid: Combines local and global retrieval\n• Mix: Integrates knowledge graph with vector retrieval", + "queryModeTooltip": "Select the retrieval strategy:\n• Naive: Basic search without advanced techniques\n• Local: Context-dependent information retrieval\n• Global: Utilizes global knowledge base\n• Hybrid: Combines local and global retrieval\n• Mix: Integrates knowledge graph with vector retrieval\n• Bypass: Passes query directly to LLM without retrieval", "queryModeOptions": { "naive": "Naive", "local": "Local", "global": "Global", "hybrid": "Hybrid", - "mix": "Mix" + "mix": "Mix", + "bypass": "Bypass" }, "responseFormat": "Response Format", "responseFormatTooltip": "Defines the response format. Examples:\n• Multiple Paragraphs\n• Single Paragraph\n• Bullet Points", diff --git a/lightrag_webui/src/locales/fr.json b/lightrag_webui/src/locales/fr.json index 92be4835..e35f744a 100644 --- a/lightrag_webui/src/locales/fr.json +++ b/lightrag_webui/src/locales/fr.json @@ -155,6 +155,8 @@ "weapon": "Arme", "animal": "Animal", "unknown": "Inconnu", + "object": "Objet", + "group": "Groupe", "technology": "Technologie" }, "sideBar": { @@ -294,13 +296,14 @@ "parametersTitle": "Paramètres", "parametersDescription": "Configurez vos paramètres de requête", "queryMode": "Mode de requête", - "queryModeTooltip": "Sélectionnez la stratégie de récupération :\n• Naïf : Recherche de base sans techniques avancées\n• Local : Récupération d'informations dépendante du contexte\n• Global : Utilise une base de connaissances globale\n• Hybride : Combine récupération locale et globale\n• Mixte : Intègre le graphe de connaissances avec la récupération vectorielle", + "queryModeTooltip": "Sélectionnez la stratégie de récupération :\n• Naïf : Recherche de base sans techniques avancées\n• Local : Récupération d'informations dépendante du contexte\n• Global : Utilise une base de connaissances globale\n• Hybride : Combine récupération locale et globale\n• Mixte : Intègre le graphe de connaissances avec la récupération vectorielle\n• Bypass : Transmet directement la requête au LLM sans récupération", "queryModeOptions": { "naive": "Naïf", "local": "Local", "global": "Global", "hybrid": "Hybride", - "mix": "Mixte" + "mix": "Mixte", + "bypass": "Bypass" }, "responseFormat": "Format de réponse", "responseFormatTooltip": "Définit le format de la réponse. Exemples :\n• Plusieurs paragraphes\n• Paragraphe unique\n• Points à puces", diff --git a/lightrag_webui/src/locales/zh.json b/lightrag_webui/src/locales/zh.json index 9df6c86e..60e2b7c8 100644 --- a/lightrag_webui/src/locales/zh.json +++ b/lightrag_webui/src/locales/zh.json @@ -145,8 +145,8 @@ }, "legend": "图例", "nodeTypes": { - "person": "人物", - "category": "类别", + "person": "人物角色", + "category": "分类", "geo": "地理名称", "location": "位置", "organization": "组织机构", @@ -155,6 +155,8 @@ "weapon": "武器", "animal": "动物", "unknown": "未知", + "object": "物品", + "group": "群组", "technology": "技术" }, "sideBar": { @@ -294,13 +296,14 @@ "parametersTitle": "参数", "parametersDescription": "配置查询参数", "queryMode": "查询模式", - "queryModeTooltip": "选择检索策略:\n• Naive:基础搜索,无高级技术\n• Local:上下文相关信息检索\n• Global:利用全局知识库\n• Hybrid:结合本地和全局检索\n• Mix:整合知识图谱和向量检索", + "queryModeTooltip": "选择检索策略:\n• Naive:基础搜索,无高级技术\n• Local:上下文相关信息检索\n• Global:利用全局知识库\n• Hybrid:结合本地和全局检索\n• Mix:整合知识图谱和向量检索\n• Bypass:直接传递查询到LLM,不进行检索", "queryModeOptions": { "naive": "Naive", "local": "Local", "global": "Global", "hybrid": "Hybrid", - "mix": "Mix" + "mix": "Mix", + "bypass": "Bypass" }, "responseFormat": "响应格式", "responseFormatTooltip": "定义响应格式。例如:\n• 多段落\n• 单段落\n• 要点",