diff --git a/.vitepress/cache/deps/_metadata.json b/.vitepress/cache/deps/_metadata.json index fc31e02..24bdc19 100644 --- a/.vitepress/cache/deps/_metadata.json +++ b/.vitepress/cache/deps/_metadata.json @@ -1,25 +1,25 @@ { - "hash": "08caf282", - "configHash": "6337dd35", + "hash": "fd744d6e", + "configHash": "f73de511", "lockfileHash": "5344cd3e", - "browserHash": "89c2052f", + "browserHash": "25f5b819", "optimized": { "vue": { "src": "../../../node_modules/.pnpm/vue@3.5.26/node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "450708e5", + "fileHash": "420d640f", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../node_modules/.pnpm/@vue+devtools-api@8.0.5/node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "107c6593", + "fileHash": "b88b7e99", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../node_modules/.pnpm/@vueuse+core@14.1.0_vue@3.5.26/node_modules/@vueuse/core/dist/index.js", "file": "vitepress___@vueuse_core.js", - "fileHash": "c6610847", + "fileHash": "2f71f1c1", "needsInterop": false } }, diff --git a/.vitepress/config.js b/.vitepress/config.js index 5e9157e..41b8198 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -11,6 +11,10 @@ export default defineConfig({ ['link', { rel: 'icon', href: '/favicon.png' }] ], + ignoreDeadLinks: [ + /^http:\/\/localhost/ + ], + themeConfig: { nav: [ { text: '首页', link: '/' }, @@ -22,6 +26,7 @@ export default defineConfig({ { text: '入门指南', items: [ + { text: '项目介绍', link: '/guide/introduction' }, { text: '环境要求', link: '/guide/requirements' }, { text: '快速部署', link: '/guide/deployment' }, { text: '首次使用', link: '/guide/first-use' } diff --git a/.vitepress/dist/404.html b/.vitepress/dist/404.html new file mode 100644 index 0000000..4012648 --- /dev/null +++ b/.vitepress/dist/404.html @@ -0,0 +1,23 @@ + + + + + + 404 | WebAI2API + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/admin/linux.html b/.vitepress/dist/admin/linux.html new file mode 100644 index 0000000..88b4195 --- /dev/null +++ b/.vitepress/dist/admin/linux.html @@ -0,0 +1,33 @@ + + + + + + Linux 部署 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

Linux 部署

在 Linux 服务器上运行 WebAI2API 的特殊配置说明。

显示方式选择

在 Linux 服务器上运行非无头模式时,需要配置显示环境。

方式一:Xvfb + VNC (推荐)

使用虚拟显示器运行程序,通过 VNC 远程查看。

使用内置命令

bash
npm start -- -xvfb -vnc

这会自动:

  • 启动 Xvfb 虚拟显示器
  • 启动 x11vnc 服务器
  • 可通过 WebUI 直接查看 VNC 画面

手动配置

如果内置命令无法满足需求:

  1. 启动虚拟显示器
bash
xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start
  1. 映射到 VNC
bash
x11vnc -display :99 -localhost -nopw -forever -noxdamage

VNC 连接

通过 SSH 隧道 (推荐)

bash
# 本地终端
+ssh -L 5900:127.0.0.1:5900 root@服务器IP

然后使用 VNC 客户端连接 127.0.0.1:5900

通过 WebUI

服务启动后,访问 WebUI 的「VNC 显示」页面即可直接查看。

安装依赖

Ubuntu/Debian

bash
sudo apt-get update
+sudo apt-get install xvfb x11vnc

CentOS/RHEL

bash
sudo yum install xorg-x11-server-Xvfb x11vnc

Arch Linux

bash
sudo pacman -S xorg-server-xvfb x11vnc

方式二:X11 转发

适用于通过 SSH 连接服务器的场景。

  1. 在本地安装 X Server(如 VcXsrv、Xming)
  2. 使用支持 X11 转发的终端(如 WindTerm)
  3. 在 SSH 会话中启用 X11 转发
bash
ssh -X user@server

Docker 部署

Docker 镜像已内置 Xvfb 和 VNC 支持:

bash
docker run -d --name webai2api \
+  -p 3000:3000 -p 5900:5900 \
+  -v "$(pwd)/data:/app/data" \
+  -e LOGIN_MODE=true \
+  --shm-size=2gb \
+  foxhui/lmarena-imagen-automator:latest

通过 VNC 客户端连接 localhost:5900 完成登录。

常见问题

端口被占用

如果 5900 端口已被占用,VNC 服务器会自动查找 5901-5999 范围内可用的端口。

显示号冲突

Xvfb 会自动从 50 开始查找可用的显示号,避免与现有 X 服务器冲突。

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/admin/troubleshooting.html b/.vitepress/dist/admin/troubleshooting.html new file mode 100644 index 0000000..771c94d --- /dev/null +++ b/.vitepress/dist/admin/troubleshooting.html @@ -0,0 +1,27 @@ + + + + + + 故障排查 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

故障排查

常见问题的诊断和解决方法。

请求相关

请求被拒绝 (429 Too Many Requests)

问题:并发请求过多,队列已满。

解决方案

  • 启用流式模式 (stream: true),可无限排队
  • 减少并发请求数量
  • 增加 queue.queueBuffer 配置值

请求超时

问题:任务超过 120 秒未完成。

解决方案

  • 启用流式模式,利用心跳保活
  • 检查网络连接是否稳定
  • 某些复杂提示词可能需要更长时间

验证相关

reCAPTCHA 验证失败

问题:返回 recaptcha validation failed

解决方案

  • 降低请求频率
  • 进入登录模式手动完成验证
  • 使用稳定纯净的 IP 地址
  • 检查 IP 纯净度:ping0.cc

CloudFlare 挑战

问题:浏览器卡在 CloudFlare 验证页面。

解决方案

  • 进入 VNC 手动完成验证
  • 更换 IP 地址
  • 避免使用数据中心 IP

登录相关

登录状态丢失

问题:服务重启后需要重新登录。

解决方案

  • 确保 data 目录持久化
  • 检查 userDataMark 配置是否正确
  • 避免删除浏览器数据目录

OAuth 登录失败

问题:Google 等 OAuth 登录跳转失败。

解决方案

  • 确保可以访问 accounts.google.com
  • 检查代理配置是否正确
  • 尝试更换 IP 地址

浏览器相关

浏览器启动失败

问题:Camoufox 无法启动。

解决方案

bash
# 重新初始化 Camoufox
+npm run init

内存不足

问题:浏览器因内存不足崩溃。

解决方案

  • 增加服务器内存(建议 2GB+)
  • 减少同时运行的浏览器实例数量
  • Docker 环境确保设置 --shm-size=2gb

网络相关

代理连接失败

问题:无法连接到代理服务器。

解决方案

  • 检查代理服务器地址和端口
  • 验证代理认证信息
  • 测试代理服务器是否正常

目标网站不可访问

问题:无法访问 LMArena/Gemini 等网站。

解决方案

  • 检查网络连接
  • 尝试使用代理
  • 确认目标网站未被封禁

日志诊断

查看详细日志

config.yaml 中设置日志等级:

yaml
logLevel: debug

常见日志信息

日志内容说明
工作池初始化失败检查配置文件和网络
Worker 不支持模型检查模型名称是否正确
验证超时需要手动完成验证
页面已关闭浏览器可能崩溃

获取帮助

如果以上方法无法解决问题:

  1. 查看 GitHub Issues
  2. 提交 Issue 并附上:
    • 日志输出(设置 logLevel: debug
    • 配置文件(隐藏敏感信息)
    • 操作系统和 Node.js 版本
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/admin/webui.html b/.vitepress/dist/admin/webui.html new file mode 100644 index 0000000..db3eed1 --- /dev/null +++ b/.vitepress/dist/admin/webui.html @@ -0,0 +1,26 @@ + + + + + + Web 管理界面 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

Web 管理界面

WebAI2API 提供了内置的 Web 管理界面,用于监控和管理服务。

注意

WebUI 以及管理接口仅在握手阶段使用 API Token 验证,传输阶段无任何加密,如果您在公网环境使用,请使用 Caddy 或 Nginx 等专业的网站服务器对连接进行 HTTPS 加密!

访问地址

http://localhost:3000

首次访问需要输入配置文件中设置的 API Token 进行认证。

功能模块

仪表盘

仪表盘页面显示系统运行状态:

  • 系统状态:版本、运行时间、运行模式
  • 业务统计:窗口数量、实例数量
  • 队列状态:处理中/等待中的任务列表

系统管理

系统管理页面提供:

  • 服务控制

    • 普通重启
    • 登录模式重启
    • 指定 Worker 登录
    • 停止服务
  • 缓存管理

    • 查看临时文件
    • 清理缓存
  • 数据管理

    • 查看浏览器数据目录
    • 删除未使用的数据目录

VNC 显示

在 Linux 环境下使用 -xvfb -vnc 启动时,可以通过 WebUI 直接查看和操作虚拟显示器:

  • 连接/断开 VNC
  • 全屏显示
  • 查看 VNC 状态信息

说明

VNC 显示功能需要服务以 Xvfb + VNC 模式运行。

配置管理

  • 服务器配置:端口、认证、心跳设置
  • 适配器配置:各后端的专属配置
  • 浏览器设置:路径、无头模式、代理

实例管理

管理浏览器实例和 Worker 配置(需要重启生效)。

快捷操作

登录模式重启

  1. 进入「缓存与重启」页面
  2. 点击「重启」按钮旁的下拉箭头
  3. 选择重启模式:
    • 普通重启:正常模式重启
    • 登录模式重启:以 -login 参数重启
    • 指定 Worker 登录:选择特定 Worker 进入登录模式

清理缓存

  1. 进入「缓存与重启」页面
  2. 找到「缓存管理」区域
  3. 点击「清理缓存」按钮
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/api/chat.html b/.vitepress/dist/api/chat.html new file mode 100644 index 0000000..42b6bdd --- /dev/null +++ b/.vitepress/dist/api/chat.html @@ -0,0 +1,109 @@ + + + + + + Chat Completions | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

Chat Completions

对话生成接口,兼容 OpenAI Chat Completions API。

端点

POST /v1/chat/completions

请求参数

参数类型必填说明
modelstring模型名称
messagesarray消息列表
streamboolean是否启用流式响应(推荐开启)

messages 格式

json
{
+  "messages": [
+    {
+      "role": "user",
+      "content": "生成一只可爱的猫"
+    }
+  ]
+}

多模态请求(图生图)

json
{
+  "messages": [
+    {
+      "role": "user",
+      "content": [
+        {
+          "type": "text",
+          "text": "让这张图片更加鲜艳"
+        },
+        {
+          "type": "image_url",
+          "image_url": {
+            "url": "data:image/jpeg;base64,/9j/4AAQ..."
+          }
+        }
+      ]
+    }
+  ]
+}

图片限制

限制项说明
支持格式PNG, JPEG, GIF, WebP
数量限制默认 5 张,最大 10 张
数据格式Base64 Data URL (data:image/jpeg;base64,...)
自动转换服务器会自动转换为 JPG 格式

非流式响应

请求示例

bash
curl -X POST http://localhost:3000/v1/chat/completions \
+  -H "Content-Type: application/json" \
+  -H "Authorization: Bearer sk-your-key" \
+  -d '{
+    "model": "gemini-3-pro-image-preview",
+    "messages": [
+      {
+        "role": "user",
+        "content": "generate a cat"
+      }
+    ]
+  }'

响应示例

json
{
+  "id": "chatcmpl-1732374740123",
+  "object": "chat.completion",
+  "created": 1732374740,
+  "model": "gemini-3-pro-image-preview",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": "![generated](data:image/jpeg;base64,/9j/4AAQ...)"
+      },
+      "finish_reason": "stop"
+    }
+  ]
+}

流式响应

推荐使用

流式模式包含心跳保活机制,可以避免长时间生成导致的连接超时。

请求示例

bash
curl -X POST http://localhost:3000/v1/chat/completions \
+  -H "Content-Type: application/json" \
+  -H "Authorization: Bearer sk-your-key" \
+  -d '{
+    "model": "gemini-3-pro-image-preview",
+    "stream": true,
+    "messages": [
+      {
+        "role": "user",
+        "content": "generate a cat"
+      }
+    ]
+  }'

响应示例

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
+
+: keep-alive
+
+: keep-alive
+
+data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"content":"![generated](data:image/jpeg;base64,/9j/4AAQ...)"},"finish_reason":"stop"}]}
+
+data: [DONE]

错误处理

队列已满 (429)

json
{
+  "error": {
+    "message": "队列已满",
+    "type": "rate_limit_exceeded",
+    "code": "QUEUE_FULL"
+  }
+}

解决方案

启用流式模式 (stream: true) 可以无限排队,避免 429 错误。

模型不支持 (400)

json
{
+  "error": {
+    "message": "没有 Worker 支持模型: invalid-model",
+    "type": "invalid_request_error",
+    "code": "MODEL_NOT_FOUND"
+  }
+}
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/api/cookies.html b/.vitepress/dist/api/cookies.html new file mode 100644 index 0000000..efff4b5 --- /dev/null +++ b/.vitepress/dist/api/cookies.html @@ -0,0 +1,52 @@ + + + + + + Cookies API | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

Cookies API

获取浏览器实例的 Cookie,可用于其他工具。

端点

GET /v1/cookies

查询参数

参数类型必填说明
namestring浏览器实例名称
domainstring过滤指定域名的 Cookie

请求示例

bash
curl -X GET http://localhost:3000/v1/cookies \
+  -H "Authorization: Bearer sk-your-key"

指定实例和域名

bash
curl -X GET "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \
+  -H "Authorization: Bearer sk-your-key"

响应格式

json
{
+  "instance": "browser_default",
+  "cookies": [
+    {
+      "name": "_GRECAPTCHA",
+      "value": "09ADxxxxxx",
+      "domain": "www.google.com",
+      "path": "/recaptcha",
+      "expires": 1780000000,
+      "httpOnly": true,
+      "secure": true,
+      "sameSite": "None"
+    },
+    {
+      "name": "OTZ",
+      "value": "8888888_24_24__24_",
+      "domain": "accounts.google.com",
+      "path": "/",
+      "expires": 1760000000,
+      "httpOnly": false,
+      "secure": true,
+      "sameSite": "None"
+    }
+  ]
+}

使用场景

应用场景

  • 将 Cookie 导出给其他自动化工具使用
  • 利用本项目的自动续登功能保持 Cookie 新鲜
  • 调试登录状态问题
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/api/models.html b/.vitepress/dist/api/models.html new file mode 100644 index 0000000..a81de95 --- /dev/null +++ b/.vitepress/dist/api/models.html @@ -0,0 +1,50 @@ + + + + + + Models API | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

Models API

获取当前可用的模型列表。

端点

GET /v1/models

请求示例

bash
curl -X GET http://localhost:3000/v1/models \
+  -H "Authorization: Bearer sk-your-key"

响应格式

json
{
+  "object": "list",
+  "data": [
+    {
+      "id": "gemini-3-pro-image-preview",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "internal_server"
+    },
+    {
+      "id": "lmarena/gemini-3-pro-image-preview",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "lmarena"
+    },
+    {
+      "id": "seedream-4-high-res-fal",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "internal_server"
+    }
+  ]
+}

模型命名规则

简写形式

直接使用模型 ID:

gemini-3-pro-image-preview

系统会自动匹配到支持该模型的 Worker。

指定后端形式

使用 backend/model 格式:

lmarena/gemini-3-pro-image-preview
+gemini_biz/gemini-3-pro-image-preview

强制使用指定后端处理请求。

模型类型

类型说明
image图片生成模型
text文本生成模型

说明

返回的模型列表取决于当前配置的 Worker 和适配器类型。

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/api/overview.html b/.vitepress/dist/api/overview.html new file mode 100644 index 0000000..383f9f4 --- /dev/null +++ b/.vitepress/dist/api/overview.html @@ -0,0 +1,39 @@ + + + + + + API 概览 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

API 概览

WebAI2API 提供兼容 OpenAI 格式的 RESTful API。

基础信息

  • Base URL: http://localhost:3000
  • 认证方式: Bearer Token

请求头

http
Authorization: Bearer sk-your-secret-key
+Content-Type: application/json

API 端点列表

OpenAI 兼容接口

方法端点说明
POST/v1/chat/completions对话生成
GET/v1/models获取模型列表
GET/v1/cookies获取 Cookie

管理接口

方法端点说明
GET/admin/status服务状态
GET/admin/stats统计信息
GET/admin/queue队列状态
POST/admin/restart重启服务
POST/admin/stop停止服务
GET/admin/vnc/statusVNC 状态
POST/admin/cache/clear清理缓存

错误响应

所有 API 错误返回统一格式:

json
{
+  "error": {
+    "message": "错误描述",
+    "type": "error_type",
+    "code": "ERROR_CODE"
+  }
+}

常见错误码

HTTP 状态码错误类型说明
401unauthorized认证失败
400invalid_request请求参数错误
404not_found资源不存在
429rate_limit请求过多
500internal_error服务器内部错误
503service_unavailable服务不可用

流式响应

对于 stream: true 的请求,响应使用 Server-Sent Events (SSE) 格式:

data: {"id":"...","object":"chat.completion.chunk",...}
+
+: keep-alive
+
+data: {"id":"...","object":"chat.completion.chunk",...}
+
+data: [DONE]

心跳保活

流式请求会自动发送心跳包防止连接超时,格式取决于配置的 keepalive.mode

相关文档

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/assets/admin_linux.md.C4pirr1w.js b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.js new file mode 100644 index 0000000..7941ad6 --- /dev/null +++ b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.js @@ -0,0 +1,8 @@ +import{_ as s,c as a,o as h,ah as e}from"./chunks/framework.BJEpWshW.js";const F=JSON.parse('{"title":"Linux 部署","description":"","frontmatter":{},"headers":[],"relativePath":"admin/linux.md","filePath":"admin/linux.md"}'),l={name:"admin/linux.md"};function n(t,i,k,r,p,d){return h(),a("div",null,[...i[0]||(i[0]=[e(`

Linux 部署

在 Linux 服务器上运行 WebAI2API 的特殊配置说明。

显示方式选择

在 Linux 服务器上运行非无头模式时,需要配置显示环境。

方式一:Xvfb + VNC (推荐)

使用虚拟显示器运行程序,通过 VNC 远程查看。

使用内置命令

bash
npm start -- -xvfb -vnc

这会自动:

手动配置

如果内置命令无法满足需求:

  1. 启动虚拟显示器
bash
xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start
  1. 映射到 VNC
bash
x11vnc -display :99 -localhost -nopw -forever -noxdamage

VNC 连接

通过 SSH 隧道 (推荐)

bash
# 本地终端
+ssh -L 5900:127.0.0.1:5900 root@服务器IP

然后使用 VNC 客户端连接 127.0.0.1:5900

通过 WebUI

服务启动后,访问 WebUI 的「VNC 显示」页面即可直接查看。

安装依赖

Ubuntu/Debian

bash
sudo apt-get update
+sudo apt-get install xvfb x11vnc

CentOS/RHEL

bash
sudo yum install xorg-x11-server-Xvfb x11vnc

Arch Linux

bash
sudo pacman -S xorg-server-xvfb x11vnc

方式二:X11 转发

适用于通过 SSH 连接服务器的场景。

  1. 在本地安装 X Server(如 VcXsrv、Xming)
  2. 使用支持 X11 转发的终端(如 WindTerm)
  3. 在 SSH 会话中启用 X11 转发
bash
ssh -X user@server

Docker 部署

Docker 镜像已内置 Xvfb 和 VNC 支持:

bash
docker run -d --name webai2api \\
+  -p 3000:3000 -p 5900:5900 \\
+  -v "$(pwd)/data:/app/data" \\
+  -e LOGIN_MODE=true \\
+  --shm-size=2gb \\
+  foxhui/lmarena-imagen-automator:latest

通过 VNC 客户端连接 localhost:5900 完成登录。

常见问题

端口被占用

如果 5900 端口已被占用,VNC 服务器会自动查找 5901-5999 范围内可用的端口。

显示号冲突

Xvfb 会自动从 50 开始查找可用的显示号,避免与现有 X 服务器冲突。

`,42)])])}const o=s(l,[["render",n]]);export{F as __pageData,o as default}; diff --git a/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js new file mode 100644 index 0000000..6ed52f3 --- /dev/null +++ b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as h,ah as e}from"./chunks/framework.BJEpWshW.js";const F=JSON.parse('{"title":"Linux 部署","description":"","frontmatter":{},"headers":[],"relativePath":"admin/linux.md","filePath":"admin/linux.md"}'),l={name:"admin/linux.md"};function n(t,i,k,r,p,d){return h(),a("div",null,[...i[0]||(i[0]=[e("",42)])])}const o=s(l,[["render",n]]);export{F as __pageData,o as default}; diff --git a/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js new file mode 100644 index 0000000..89f827c --- /dev/null +++ b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js @@ -0,0 +1,2 @@ +import{_ as e,c as i,o as l,ah as r}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"故障排查","description":"","frontmatter":{},"headers":[],"relativePath":"admin/troubleshooting.md","filePath":"admin/troubleshooting.md"}'),t={name:"admin/troubleshooting.md"};function s(o,a,n,h,d,c){return l(),i("div",null,[...a[0]||(a[0]=[r(`

故障排查

常见问题的诊断和解决方法。

请求相关

请求被拒绝 (429 Too Many Requests)

问题:并发请求过多,队列已满。

解决方案

请求超时

问题:任务超过 120 秒未完成。

解决方案

验证相关

reCAPTCHA 验证失败

问题:返回 recaptcha validation failed

解决方案

CloudFlare 挑战

问题:浏览器卡在 CloudFlare 验证页面。

解决方案

登录相关

登录状态丢失

问题:服务重启后需要重新登录。

解决方案

OAuth 登录失败

问题:Google 等 OAuth 登录跳转失败。

解决方案

浏览器相关

浏览器启动失败

问题:Camoufox 无法启动。

解决方案

bash
# 重新初始化 Camoufox
+npm run init

内存不足

问题:浏览器因内存不足崩溃。

解决方案

网络相关

代理连接失败

问题:无法连接到代理服务器。

解决方案

目标网站不可访问

问题:无法访问 LMArena/Gemini 等网站。

解决方案

日志诊断

查看详细日志

config.yaml 中设置日志等级:

yaml
logLevel: debug

常见日志信息

日志内容说明
工作池初始化失败检查配置文件和网络
Worker 不支持模型检查模型名称是否正确
验证超时需要手动完成验证
页面已关闭浏览器可能崩溃

获取帮助

如果以上方法无法解决问题:

  1. 查看 GitHub Issues
  2. 提交 Issue 并附上:
`,56)])])}const b=e(t,[["render",s]]);export{g as __pageData,b as default}; diff --git a/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.lean.js b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.lean.js new file mode 100644 index 0000000..b21581b --- /dev/null +++ b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as l,ah as r}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"故障排查","description":"","frontmatter":{},"headers":[],"relativePath":"admin/troubleshooting.md","filePath":"admin/troubleshooting.md"}'),t={name:"admin/troubleshooting.md"};function s(o,a,n,h,d,c){return l(),i("div",null,[...a[0]||(a[0]=[r("",56)])])}const b=e(t,[["render",s]]);export{g as __pageData,b as default}; diff --git a/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.js b/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.js new file mode 100644 index 0000000..c79baad --- /dev/null +++ b/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.js @@ -0,0 +1 @@ +import{_ as l,c as i,o as e,ah as r}from"./chunks/framework.BJEpWshW.js";const b=JSON.parse('{"title":"Web 管理界面","description":"","frontmatter":{},"headers":[],"relativePath":"admin/webui.md","filePath":"admin/webui.md"}'),t={name:"admin/webui.md"};function s(n,a,o,h,d,c){return e(),i("div",null,[...a[0]||(a[0]=[r('

Web 管理界面

WebAI2API 提供了内置的 Web 管理界面,用于监控和管理服务。

注意

WebUI 以及管理接口仅在握手阶段使用 API Token 验证,传输阶段无任何加密,如果您在公网环境使用,请使用 Caddy 或 Nginx 等专业的网站服务器对连接进行 HTTPS 加密!

访问地址

http://localhost:3000

首次访问需要输入配置文件中设置的 API Token 进行认证。

功能模块

仪表盘

仪表盘页面显示系统运行状态:

系统管理

系统管理页面提供:

VNC 显示

在 Linux 环境下使用 -xvfb -vnc 启动时,可以通过 WebUI 直接查看和操作虚拟显示器:

说明

VNC 显示功能需要服务以 Xvfb + VNC 模式运行。

配置管理

实例管理

管理浏览器实例和 Worker 配置(需要重启生效)。

快捷操作

登录模式重启

  1. 进入「缓存与重启」页面
  2. 点击「重启」按钮旁的下拉箭头
  3. 选择重启模式:

清理缓存

  1. 进入「缓存与重启」页面
  2. 找到「缓存管理」区域
  3. 点击「清理缓存」按钮
',26)])])}const g=l(t,[["render",s]]);export{b as __pageData,g as default}; diff --git a/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.lean.js b/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.lean.js new file mode 100644 index 0000000..8a25193 --- /dev/null +++ b/.vitepress/dist/assets/admin_webui.md.C6OfyL7c.lean.js @@ -0,0 +1 @@ +import{_ as l,c as i,o as e,ah as r}from"./chunks/framework.BJEpWshW.js";const b=JSON.parse('{"title":"Web 管理界面","description":"","frontmatter":{},"headers":[],"relativePath":"admin/webui.md","filePath":"admin/webui.md"}'),t={name:"admin/webui.md"};function s(n,a,o,h,d,c){return e(),i("div",null,[...a[0]||(a[0]=[r("",26)])])}const g=l(t,[["render",s]]);export{b as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_chat.md.CVfvhFz2.js b/.vitepress/dist/assets/api_chat.md.CVfvhFz2.js new file mode 100644 index 0000000..cfddce4 --- /dev/null +++ b/.vitepress/dist/assets/api_chat.md.CVfvhFz2.js @@ -0,0 +1,84 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Chat Completions","description":"","frontmatter":{},"headers":[],"relativePath":"api/chat.md","filePath":"api/chat.md"}'),l={name:"api/chat.md"};function h(e,s,p,k,o,d){return t(),a("div",null,[...s[0]||(s[0]=[n(`

Chat Completions

对话生成接口,兼容 OpenAI Chat Completions API。

端点

POST /v1/chat/completions

请求参数

参数类型必填说明
modelstring模型名称
messagesarray消息列表
streamboolean是否启用流式响应(推荐开启)

messages 格式

json
{
+  "messages": [
+    {
+      "role": "user",
+      "content": "生成一只可爱的猫"
+    }
+  ]
+}

多模态请求(图生图)

json
{
+  "messages": [
+    {
+      "role": "user",
+      "content": [
+        {
+          "type": "text",
+          "text": "让这张图片更加鲜艳"
+        },
+        {
+          "type": "image_url",
+          "image_url": {
+            "url": "data:image/jpeg;base64,/9j/4AAQ..."
+          }
+        }
+      ]
+    }
+  ]
+}

图片限制

限制项说明
支持格式PNG, JPEG, GIF, WebP
数量限制默认 5 张,最大 10 张
数据格式Base64 Data URL (data:image/jpeg;base64,...)
自动转换服务器会自动转换为 JPG 格式

非流式响应

请求示例

bash
curl -X POST http://localhost:3000/v1/chat/completions \\
+  -H "Content-Type: application/json" \\
+  -H "Authorization: Bearer sk-your-key" \\
+  -d '{
+    "model": "gemini-3-pro-image-preview",
+    "messages": [
+      {
+        "role": "user",
+        "content": "generate a cat"
+      }
+    ]
+  }'

响应示例

json
{
+  "id": "chatcmpl-1732374740123",
+  "object": "chat.completion",
+  "created": 1732374740,
+  "model": "gemini-3-pro-image-preview",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": "![generated](data:image/jpeg;base64,/9j/4AAQ...)"
+      },
+      "finish_reason": "stop"
+    }
+  ]
+}

流式响应

推荐使用

流式模式包含心跳保活机制,可以避免长时间生成导致的连接超时。

请求示例

bash
curl -X POST http://localhost:3000/v1/chat/completions \\
+  -H "Content-Type: application/json" \\
+  -H "Authorization: Bearer sk-your-key" \\
+  -d '{
+    "model": "gemini-3-pro-image-preview",
+    "stream": true,
+    "messages": [
+      {
+        "role": "user",
+        "content": "generate a cat"
+      }
+    ]
+  }'

响应示例

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
+
+: keep-alive
+
+: keep-alive
+
+data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"content":"![generated](data:image/jpeg;base64,/9j/4AAQ...)"},"finish_reason":"stop"}]}
+
+data: [DONE]

错误处理

队列已满 (429)

json
{
+  "error": {
+    "message": "队列已满",
+    "type": "rate_limit_exceeded",
+    "code": "QUEUE_FULL"
+  }
+}

解决方案

启用流式模式 (stream: true) 可以无限排队,避免 429 错误。

模型不支持 (400)

json
{
+  "error": {
+    "message": "没有 Worker 支持模型: invalid-model",
+    "type": "invalid_request_error",
+    "code": "MODEL_NOT_FOUND"
+  }
+}
`,29)])])}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_chat.md.CVfvhFz2.lean.js b/.vitepress/dist/assets/api_chat.md.CVfvhFz2.lean.js new file mode 100644 index 0000000..4a239eb --- /dev/null +++ b/.vitepress/dist/assets/api_chat.md.CVfvhFz2.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Chat Completions","description":"","frontmatter":{},"headers":[],"relativePath":"api/chat.md","filePath":"api/chat.md"}'),l={name:"api/chat.md"};function h(e,s,p,k,o,d){return t(),a("div",null,[...s[0]||(s[0]=[n("",29)])])}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_cookies.md.BngFs3oo.js b/.vitepress/dist/assets/api_cookies.md.BngFs3oo.js new file mode 100644 index 0000000..eef1735 --- /dev/null +++ b/.vitepress/dist/assets/api_cookies.md.BngFs3oo.js @@ -0,0 +1,27 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Cookies API","description":"","frontmatter":{},"headers":[],"relativePath":"api/cookies.md","filePath":"api/cookies.md"}'),h={name:"api/cookies.md"};function l(k,s,e,p,r,o){return t(),a("div",null,[...s[0]||(s[0]=[n(`

Cookies API

获取浏览器实例的 Cookie,可用于其他工具。

端点

GET /v1/cookies

查询参数

参数类型必填说明
namestring浏览器实例名称
domainstring过滤指定域名的 Cookie

请求示例

bash
curl -X GET http://localhost:3000/v1/cookies \\
+  -H "Authorization: Bearer sk-your-key"

指定实例和域名

bash
curl -X GET "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \\
+  -H "Authorization: Bearer sk-your-key"

响应格式

json
{
+  "instance": "browser_default",
+  "cookies": [
+    {
+      "name": "_GRECAPTCHA",
+      "value": "09ADxxxxxx",
+      "domain": "www.google.com",
+      "path": "/recaptcha",
+      "expires": 1780000000,
+      "httpOnly": true,
+      "secure": true,
+      "sameSite": "None"
+    },
+    {
+      "name": "OTZ",
+      "value": "8888888_24_24__24_",
+      "domain": "accounts.google.com",
+      "path": "/",
+      "expires": 1760000000,
+      "httpOnly": false,
+      "secure": true,
+      "sameSite": "None"
+    }
+  ]
+}

使用场景

应用场景

`,15)])])}const g=i(h,[["render",l]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_cookies.md.BngFs3oo.lean.js b/.vitepress/dist/assets/api_cookies.md.BngFs3oo.lean.js new file mode 100644 index 0000000..f15eaa9 --- /dev/null +++ b/.vitepress/dist/assets/api_cookies.md.BngFs3oo.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Cookies API","description":"","frontmatter":{},"headers":[],"relativePath":"api/cookies.md","filePath":"api/cookies.md"}'),h={name:"api/cookies.md"};function l(k,s,e,p,r,o){return t(),a("div",null,[...s[0]||(s[0]=[n("",15)])])}const g=i(h,[["render",l]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_models.md.BmD2H_2d.js b/.vitepress/dist/assets/api_models.md.BmD2H_2d.js new file mode 100644 index 0000000..e201d7c --- /dev/null +++ b/.vitepress/dist/assets/api_models.md.BmD2H_2d.js @@ -0,0 +1,25 @@ +import{_ as i,c as a,o as n,ah as t}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Models API","description":"","frontmatter":{},"headers":[],"relativePath":"api/models.md","filePath":"api/models.md"}'),e={name:"api/models.md"};function l(h,s,p,k,d,r){return n(),a("div",null,[...s[0]||(s[0]=[t(`

Models API

获取当前可用的模型列表。

端点

GET /v1/models

请求示例

bash
curl -X GET http://localhost:3000/v1/models \\
+  -H "Authorization: Bearer sk-your-key"

响应格式

json
{
+  "object": "list",
+  "data": [
+    {
+      "id": "gemini-3-pro-image-preview",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "internal_server"
+    },
+    {
+      "id": "lmarena/gemini-3-pro-image-preview",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "lmarena"
+    },
+    {
+      "id": "seedream-4-high-res-fal",
+      "object": "model",
+      "created": 1732456789,
+      "owned_by": "internal_server"
+    }
+  ]
+}

模型命名规则

简写形式

直接使用模型 ID:

gemini-3-pro-image-preview

系统会自动匹配到支持该模型的 Worker。

指定后端形式

使用 backend/model 格式:

lmarena/gemini-3-pro-image-preview
+gemini_biz/gemini-3-pro-image-preview

强制使用指定后端处理请求。

模型类型

类型说明
image图片生成模型
text文本生成模型

说明

返回的模型列表取决于当前配置的 Worker 和适配器类型。

`,20)])])}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_models.md.BmD2H_2d.lean.js b/.vitepress/dist/assets/api_models.md.BmD2H_2d.lean.js new file mode 100644 index 0000000..18db9b3 --- /dev/null +++ b/.vitepress/dist/assets/api_models.md.BmD2H_2d.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ah as t}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"Models API","description":"","frontmatter":{},"headers":[],"relativePath":"api/models.md","filePath":"api/models.md"}'),e={name:"api/models.md"};function l(h,s,p,k,d,r){return n(),a("div",null,[...s[0]||(s[0]=[t("",20)])])}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/.vitepress/dist/assets/api_overview.md.BJJapNOd.js b/.vitepress/dist/assets/api_overview.md.BJJapNOd.js new file mode 100644 index 0000000..a9d4b55 --- /dev/null +++ b/.vitepress/dist/assets/api_overview.md.BJJapNOd.js @@ -0,0 +1,14 @@ +import{_ as a,c as s,o as i,ah as e}from"./chunks/framework.BJEpWshW.js";const k=JSON.parse('{"title":"API 概览","description":"","frontmatter":{},"headers":[],"relativePath":"api/overview.md","filePath":"api/overview.md"}'),d={name:"api/overview.md"};function n(l,t,h,o,r,p){return i(),s("div",null,[...t[0]||(t[0]=[e(`

API 概览

WebAI2API 提供兼容 OpenAI 格式的 RESTful API。

基础信息

请求头

http
Authorization: Bearer sk-your-secret-key
+Content-Type: application/json

API 端点列表

OpenAI 兼容接口

方法端点说明
POST/v1/chat/completions对话生成
GET/v1/models获取模型列表
GET/v1/cookies获取 Cookie

管理接口

方法端点说明
GET/admin/status服务状态
GET/admin/stats统计信息
GET/admin/queue队列状态
POST/admin/restart重启服务
POST/admin/stop停止服务
GET/admin/vnc/statusVNC 状态
POST/admin/cache/clear清理缓存

错误响应

所有 API 错误返回统一格式:

json
{
+  "error": {
+    "message": "错误描述",
+    "type": "error_type",
+    "code": "ERROR_CODE"
+  }
+}

常见错误码

HTTP 状态码错误类型说明
401unauthorized认证失败
400invalid_request请求参数错误
404not_found资源不存在
429rate_limit请求过多
500internal_error服务器内部错误
503service_unavailable服务不可用

流式响应

对于 stream: true 的请求,响应使用 Server-Sent Events (SSE) 格式:

data: {"id":"...","object":"chat.completion.chunk",...}
+
+: keep-alive
+
+data: {"id":"...","object":"chat.completion.chunk",...}
+
+data: [DONE]

心跳保活

流式请求会自动发送心跳包防止连接超时,格式取决于配置的 keepalive.mode

相关文档

`,22)])])}const u=a(d,[["render",n]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/api_overview.md.BJJapNOd.lean.js b/.vitepress/dist/assets/api_overview.md.BJJapNOd.lean.js new file mode 100644 index 0000000..75cb350 --- /dev/null +++ b/.vitepress/dist/assets/api_overview.md.BJJapNOd.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,ah as e}from"./chunks/framework.BJEpWshW.js";const k=JSON.parse('{"title":"API 概览","description":"","frontmatter":{},"headers":[],"relativePath":"api/overview.md","filePath":"api/overview.md"}'),d={name:"api/overview.md"};function n(l,t,h,o,r,p){return i(),s("div",null,[...t[0]||(t[0]=[e("",22)])])}const u=a(d,[["render",n]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/app.D6bDUwdY.js b/.vitepress/dist/assets/app.D6bDUwdY.js new file mode 100644 index 0000000..82c404e --- /dev/null +++ b/.vitepress/dist/assets/app.D6bDUwdY.js @@ -0,0 +1 @@ +import{t as p}from"./chunks/theme.f90DuY8d.js";import{C as o,a3 as i,a4 as u,a5 as c,a6 as l,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,d as y,u as C,p as v,y as P,ad as b,ae as w,af as E,ag as R}from"./chunks/framework.BJEpWshW.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=y({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=C();return v(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),n.setup&&n.setup(),()=>R(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=L(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function L(){let e=o;return h(a=>{let t=g(a),s=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),s=import(t)),o&&(e=!1),s},n.NotFound)}o&&T().then(({app:e,router:a,data:t})=>{a.go(location.href,{initialLoad:!0}).then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/.vitepress/dist/assets/chunks/framework.BJEpWshW.js b/.vitepress/dist/assets/chunks/framework.BJEpWshW.js new file mode 100644 index 0000000..0a2faba --- /dev/null +++ b/.vitepress/dist/assets/chunks/framework.BJEpWshW.js @@ -0,0 +1,4 @@ +function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ne={},Ot=[],Be=()=>{},zr=()=>!1,sn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),ue=Object.assign,js=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ho=Object.prototype.hasOwnProperty,ee=(e,t)=>Ho.call(e,t),B=Array.isArray,Lt=e=>Nn(e)==="[object Map]",Jr=e=>Nn(e)==="[object Set]",X=e=>typeof e=="function",ce=e=>typeof e=="string",et=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",Qr=e=>(se(e)||X(e))&&X(e.then)&&X(e.catch),Zr=Object.prototype.toString,Nn=e=>Zr.call(e),$o=e=>Nn(e).slice(8,-1),ei=e=>Nn(e)==="[object Object]",Fn=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Pt=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Dn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},jo=/-\w/g,Ne=Dn(e=>e.replace(jo,t=>t.slice(1).toUpperCase())),Vo=/\B([A-Z])/g,ft=Dn(e=>e.replace(Vo,"-$1").toLowerCase()),Hn=Dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),bn=Dn(e=>e?`on${Hn(e)}`:""),ct=(e,t)=>!Object.is(e,t),ss=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ko=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Wo=e=>{const t=ce(e)?Number(e):NaN;return isNaN(t)?e:t};let or;const $n=()=>or||(or=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(B(e)){const t={};for(let n=0;n{if(n){const s=n.split(Bo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ks(e){let t="";if(ce(e))t=e;else if(B(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Yo=e=>ce(e)?e:e==null?"":B(e)||se(e)&&(e.toString===Zr||!X(e.toString))?si(e)?Yo(e.value):JSON.stringify(e,ri,2):String(e),ri=(e,t)=>si(t)?ri(e,t.value):Lt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[rs(s,i)+" =>"]=r,n),{})}:Jr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>rs(n))}:et(t)?rs(t):se(t)&&!B(t)&&!ei(t)?String(t):t,rs=(e,t="")=>{var n;return et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let pe;class zo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=pe,!t&&pe&&(this.index=(pe.scopes||(pe.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(pe=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Kt){let t=Kt;for(Kt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Bt;){let t=Bt;for(Bt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function ci(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ai(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ks(s),Qo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ss(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ui(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ui(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Yt)||(e.globalVersion=Yt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ss(e))))return;e.flags|=2;const t=e.dep,n=ie,s=De;ie=e,De=!0;try{ci(e);const r=e.fn(e._value);(t.version===0||ct(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ie=n,De=s,ai(e),e.flags&=-3}}function Ks(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ks(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Qo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let De=!0;const fi=[];function Je(){fi.push(De),De=!1}function Qe(){const e=fi.pop();De=e===void 0?!0:e}function lr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ie;ie=void 0;try{t()}finally{ie=n}}}let Yt=0;class Zo{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class jn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ie||!De||ie===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ie)n=this.activeLink=new Zo(ie,this),ie.deps?(n.prevDep=ie.depsTail,ie.depsTail.nextDep=n,ie.depsTail=n):ie.deps=ie.depsTail=n,di(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ie.depsTail,n.nextDep=void 0,ie.depsTail.nextDep=n,ie.depsTail=n,ie.deps===n&&(ie.deps=s)}return n}trigger(t){this.version++,Yt++,this.notify(t)}notify(t){Us();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Bs()}}}function di(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)di(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Tn=new WeakMap,bt=Symbol(""),xs=Symbol(""),zt=Symbol("");function me(e,t,n){if(De&&ie){let s=Tn.get(e);s||Tn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new jn),r.map=s,r.key=n),r.track()}}function ze(e,t,n,s,r,i){const o=Tn.get(e);if(!o){Yt++;return}const l=c=>{c&&c.trigger()};if(Us(),t==="clear")o.forEach(l);else{const c=B(e),f=c&&Fn(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,v)=>{(v==="length"||v===zt||!et(v)&&v>=a)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(zt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(bt)),Lt(e)&&l(o.get(xs)));break;case"delete":c||(l(o.get(bt)),Lt(e)&&l(o.get(xs)));break;case"set":Lt(e)&&l(o.get(bt));break}}Bs()}function el(e,t){const n=Tn.get(e);return n&&n.get(t)}function At(e){const t=Q(e);return t===e?t:(me(t,"iterate",zt),Me(e)?t:t.map(He))}function Vn(e){return me(e=Q(e),"iterate",zt),e}function st(e,t){return Ze(e)?at(e)?Ht(He(t)):Ht(t):He(t)}const tl={__proto__:null,[Symbol.iterator](){return os(this,Symbol.iterator,e=>st(this,e))},concat(...e){return At(this).concat(...e.map(t=>B(t)?At(t):t))},entries(){return os(this,"entries",e=>(e[1]=st(this,e[1]),e))},every(e,t){return qe(this,"every",e,t,void 0,arguments)},filter(e,t){return qe(this,"filter",e,t,n=>n.map(s=>st(this,s)),arguments)},find(e,t){return qe(this,"find",e,t,n=>st(this,n),arguments)},findIndex(e,t){return qe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return qe(this,"findLast",e,t,n=>st(this,n),arguments)},findLastIndex(e,t){return qe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return qe(this,"forEach",e,t,void 0,arguments)},includes(...e){return ls(this,"includes",e)},indexOf(...e){return ls(this,"indexOf",e)},join(e){return At(this).join(e)},lastIndexOf(...e){return ls(this,"lastIndexOf",e)},map(e,t){return qe(this,"map",e,t,void 0,arguments)},pop(){return kt(this,"pop")},push(...e){return kt(this,"push",e)},reduce(e,...t){return cr(this,"reduce",e,t)},reduceRight(e,...t){return cr(this,"reduceRight",e,t)},shift(){return kt(this,"shift")},some(e,t){return qe(this,"some",e,t,void 0,arguments)},splice(...e){return kt(this,"splice",e)},toReversed(){return At(this).toReversed()},toSorted(e){return At(this).toSorted(e)},toSpliced(...e){return At(this).toSpliced(...e)},unshift(...e){return kt(this,"unshift",e)},values(){return os(this,"values",e=>st(this,e))}};function os(e,t,n){const s=Vn(e),r=s[t]();return s!==e&&!Me(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const nl=Array.prototype;function qe(e,t,n,s,r,i){const o=Vn(e),l=o!==e&&!Me(e),c=o[t];if(c!==nl[t]){const h=c.apply(e,i);return l?He(h):h}let f=n;o!==e&&(l?f=function(h,v){return n.call(this,st(e,h),v,e)}:n.length>2&&(f=function(h,v){return n.call(this,h,v,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function cr(e,t,n,s){const r=Vn(e);let i=n;return r!==e&&(Me(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,st(e,l),c,e)}),r[t](i,...s)}function ls(e,t,n){const s=Q(e);me(s,"iterate",zt);const r=s[t](...n);return(r===-1||r===!1)&&Un(n[0])?(n[0]=Q(n[0]),s[t](...n)):r}function kt(e,t,n=[]){Je(),Us();const s=Q(e)[t].apply(e,n);return Bs(),Qe(),s}const sl=Hs("__proto__,__v_isRef,__isVue"),hi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(et));function rl(e){et(e)||(e=String(e));const t=Q(this);return me(t,"has",e),t.hasOwnProperty(e)}class pi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?_i:bi:i?yi:vi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=B(t);if(!r){let c;if(o&&(c=tl[n]))return c;if(n==="hasOwnProperty")return rl}const l=Reflect.get(t,n,ae(t)?t:s);if((et(n)?hi.has(n):sl(n))||(r||me(t,"get",n),i))return l;if(ae(l)){const c=o&&Fn(n)?l:l.value;return r&&se(c)?Dt(c):c}return se(l)?r?Dt(l):Ft(l):l}}class gi extends pi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=B(t)&&Fn(n);if(!this._isShallow){const f=Ze(i);if(!Me(s)&&!Ze(s)&&(i=Q(i),s=Q(s)),!o&&ae(i)&&!ae(s))return f||(i.value=s),!0}const l=o?Number(n)e,cn=e=>Reflect.getPrototypeOf(e);function al(e,t,n){return function(...s){const r=this.__v_raw,i=Q(r),o=Lt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Es:t?Ht:He;return!t&&me(i,"iterate",c?xs:bt),{next(){const{value:h,done:v}=f.next();return v?{value:h,done:v}:{value:l?[a(h[0]),a(h[1])]:a(h),done:v}},[Symbol.iterator](){return this}}}}function an(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ul(e,t){const n={get(r){const i=this.__v_raw,o=Q(i),l=Q(r);e||(ct(r,l)&&me(o,"get",r),me(o,"get",l));const{has:c}=cn(o),f=t?Es:e?Ht:He;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&me(Q(r),"iterate",bt),r.size},has(r){const i=this.__v_raw,o=Q(i),l=Q(r);return e||(ct(r,l)&&me(o,"has",r),me(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=Q(l),f=t?Es:e?Ht:He;return!e&&me(c,"iterate",bt),l.forEach((a,h)=>r.call(i,f(a),f(h),o))}};return ue(n,e?{add:an("add"),set:an("set"),delete:an("delete"),clear:an("clear")}:{add(r){!t&&!Me(r)&&!Ze(r)&&(r=Q(r));const i=Q(this);return cn(i).has.call(i,r)||(i.add(r),ze(i,"add",r,r)),this},set(r,i){!t&&!Me(i)&&!Ze(i)&&(i=Q(i));const o=Q(this),{has:l,get:c}=cn(o);let f=l.call(o,r);f||(r=Q(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?ct(i,a)&&ze(o,"set",r,i):ze(o,"add",r,i),this},delete(r){const i=Q(this),{has:o,get:l}=cn(i);let c=o.call(i,r);c||(r=Q(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&ze(i,"delete",r,void 0),f},clear(){const r=Q(this),i=r.size!==0,o=r.clear();return i&&ze(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=al(r,e,t)}),n}function kn(e,t){const n=ul(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(ee(n,r)&&r in s?n:s,r,i)}const fl={get:kn(!1,!1)},dl={get:kn(!1,!0)},hl={get:kn(!0,!1)},pl={get:kn(!0,!0)},vi=new WeakMap,yi=new WeakMap,bi=new WeakMap,_i=new WeakMap;function gl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ml(e){return e.__v_skip||!Object.isExtensible(e)?0:gl($o(e))}function Ft(e){return Ze(e)?e:Wn(e,!1,il,fl,vi)}function vl(e){return Wn(e,!1,ll,dl,yi)}function Dt(e){return Wn(e,!0,ol,hl,bi)}function Mu(e){return Wn(e,!0,cl,pl,_i)}function Wn(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=ml(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function at(e){return Ze(e)?at(e.__v_raw):!!(e&&e.__v_isReactive)}function Ze(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function Un(e){return e?!!e.__v_raw:!1}function Q(e){const t=e&&e.__v_raw;return t?Q(t):e}function _n(e){return!ee(e,"__v_skip")&&Object.isExtensible(e)&&ti(e,"__v_skip",!0),e}const He=e=>se(e)?Ft(e):e,Ht=e=>se(e)?Dt(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function _t(e){return wi(e,!1)}function xe(e){return wi(e,!0)}function wi(e,t){return ae(e)?e:new yl(e,t)}class yl{constructor(t,n){this.dep=new jn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Q(t),this._value=n?t:He(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Me(t)||Ze(t);t=s?t:Q(t),ct(t,n)&&(this._rawValue=t,this._value=s?t:He(t),this.dep.trigger())}}function Bn(e){return ae(e)?e.value:e}function le(e){return X(e)?e():Bn(e)}const bl={get:(e,t,n)=>t==="__v_raw"?e:Bn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Si(e){return at(e)?e:new Proxy(e,bl)}class _l{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new jn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function wl(e){return new _l(e)}class Sl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=Q(t);let r=!0,i=t;if(!B(t)||!Fn(String(n)))do r=!Un(i)||Me(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=Bn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ae(this._raw[this._key])){const n=this._object[this._key];if(ae(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return el(this._raw,this._key)}}class xl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function El(e,t,n){return ae(e)?e:X(e)?new xl(e):se(e)&&arguments.length>1?Tl(e,t,n):_t(e)}function Tl(e,t,n){return new Sl(e,t,n)}class Cl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new jn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Yt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ie!==this)return li(this,!0),!0}get value(){const t=this.dep.track();return ui(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Al(e,t,n=!1){let s,r;return X(e)?s=e:(s=e.get,r=e.set),new Cl(s,r,n)}const un={},Cn=new WeakMap;let vt;function Rl(e,t=!1,n=vt){if(n){let s=Cn.get(n);s||Cn.set(n,s=[]),s.push(e)}}function Ml(e,t,n=ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=p=>r?p:Me(p)||r===!1||r===0?ot(p,1):ot(p);let a,h,v,y,L=!1,I=!1;if(ae(e)?(h=()=>e.value,L=Me(e)):at(e)?(h=()=>f(e),L=!0):B(e)?(I=!0,L=e.some(p=>at(p)||Me(p)),h=()=>e.map(p=>{if(ae(p))return p.value;if(at(p))return f(p);if(X(p))return c?c(p,2):p()})):X(e)?t?h=c?()=>c(e,2):e:h=()=>{if(v){Je();try{v()}finally{Qe()}}const p=vt;vt=a;try{return c?c(e,3,[y]):e(y)}finally{vt=p}}:h=Be,t&&r){const p=h,R=r===!0?1/0:r;h=()=>ot(p(),R)}const Y=Ws(),j=()=>{a.stop(),Y&&Y.active&&js(Y.effects,a)};if(i&&t){const p=t;t=(...R)=>{p(...R),j()}}let K=I?new Array(e.length).fill(un):un;const g=p=>{if(!(!(a.flags&1)||!a.dirty&&!p))if(t){const R=a.run();if(r||L||(I?R.some((W,V)=>ct(W,K[V])):ct(R,K))){v&&v();const W=vt;vt=a;try{const V=[R,K===un?void 0:I&&K[0]===un?[]:K,y];K=R,c?c(t,3,V):t(...V)}finally{vt=W}}}else a.run()};return l&&l(g),a=new ii(h),a.scheduler=o?()=>o(g,!1):g,y=p=>Rl(p,!1,a),v=a.onStop=()=>{const p=Cn.get(a);if(p){if(c)c(p,4);else for(const R of p)R();Cn.delete(a)}},t?s?g(!0):K=a.run():o?o(g.bind(null,!0),!0):a.run(),j.pause=a.pause.bind(a),j.resume=a.resume.bind(a),j.stop=j,j}function ot(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))ot(e.value,t,n);else if(B(e))for(let s=0;s{ot(s,t,n)});else if(ei(e)){for(const s in e)ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ot(e[s],t,n)}return e}function rn(e,t,n,s){try{return s?e(...s):e()}catch(r){Kn(r,t,n)}}function $e(e,t,n,s){if(X(e)){const r=rn(e,t,n,s);return r&&Qr(r)&&r.catch(i=>{Kn(i,t,n)}),r}if(B(e)){const r=[];for(let i=0;i>>1,r=_e[s],i=Jt(r);i=Jt(n)?_e.push(e):_e.splice(Ll(t),0,e),e.flags|=1,Ei()}}function Ei(){An||(An=xi.then(Ti))}function Pl(e){B(e)?It.push(...e):rt&&e.id===-1?rt.splice(Mt+1,0,e):e.flags&1||(It.push(e),e.flags|=1),Ei()}function ar(e,t,n=We+1){for(;n<_e.length;n++){const s=_e[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;_e.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function Rn(e){if(It.length){const t=[...new Set(It)].sort((n,s)=>Jt(n)-Jt(s));if(It.length=0,rt){rt.push(...t);return}for(rt=t,Mt=0;Mte.id==null?e.flags&2?-1:1/0:e.id;function Ti(e){try{for(We=0;We<_e.length;We++){const t=_e[We];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),rn(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;We<_e.length;We++){const t=_e[We];t&&(t.flags&=-2)}We=-1,_e.length=0,Rn(),An=null,(_e.length||It.length)&&Ti()}}let we=null,Ci=null;function Mn(e){const t=we;return we=e,Ci=e&&e.type.__scopeId||null,t}function Il(e,t=we,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Pn(-1);const i=Mn(t);let o;try{o=e(...r)}finally{Mn(i),s._d&&Pn(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Ue(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o1)return n&&X(t)?t.call(s&&s.proxy):t}}function Ai(){return!!(dt()||xt)}const Fl=Symbol.for("v-scx"),Dl=()=>wt(Fl);function Ri(e,t){return Gn(e,null,t)}function Ou(e,t){return Gn(e,null,{flush:"post"})}function Oe(e,t,n){return Gn(e,t,n)}function Gn(e,t,n=ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=ue({},n),c=t&&s||!t&&i!=="post";let f;if(tn){if(i==="sync"){const y=Dl();f=y.__watcherHandles||(y.__watcherHandles=[])}else if(!c){const y=()=>{};return y.stop=Be,y.resume=Be,y.pause=Be,y}}const a=ye;l.call=(y,L,I)=>$e(y,a,L,I);let h=!1;i==="post"?l.scheduler=y=>{Ce(y,a&&a.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(y,L)=>{L?y():qs(y)}),l.augmentJob=y=>{t&&(y.flags|=4),h&&(y.flags|=2,a&&(y.id=a.uid,y.i=a))};const v=Ml(e,t,l);return tn&&(f?f.push(v):c&&v()),v}function Hl(e,t,n){const s=this.proxy,r=ce(e)?e.includes(".")?Mi(s,e):()=>s[e]:e.bind(s,s);let i;X(t)?i=t:(i=t.handler,n=t);const o=on(this),l=Gn(r,i.bind(s),n);return o(),l}function Mi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Ye=Symbol("_leaveCb"),fn=Symbol("_enterCb");function jl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return $t(()=>{e.isMounted=!0}),ji(()=>{e.isUnmounting=!0}),e}const Le=[Function,Array],Li={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Le,onEnter:Le,onAfterEnter:Le,onEnterCancelled:Le,onBeforeLeave:Le,onLeave:Le,onAfterLeave:Le,onLeaveCancelled:Le,onBeforeAppear:Le,onAppear:Le,onAfterAppear:Le,onAppearCancelled:Le},Pi=e=>{const t=e.subTree;return t.component?Pi(t.component):t},Vl={name:"BaseTransition",props:Li,setup(e,{slots:t}){const n=dt(),s=jl();return()=>{const r=t.default&&Fi(t.default(),!0);if(!r||!r.length)return;const i=Ii(r),o=Q(e),{mode:l}=o;if(s.isLeaving)return cs(i);const c=ur(i);if(!c)return cs(i);let f=Ts(c,o,s,n,h=>f=h);c.type!==fe&&Qt(c,f);let a=n.subTree&&ur(n.subTree);if(a&&a.type!==fe&&!yt(a,c)&&Pi(n).type!==fe){let h=Ts(a,o,s,n);if(Qt(a,h),l==="out-in"&&c.type!==fe)return s.isLeaving=!0,h.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete h.afterLeave,a=void 0},cs(i);l==="in-out"&&c.type!==fe?h.delayLeave=(v,y,L)=>{const I=Ni(s,a);I[String(a.key)]=a,v[Ye]=()=>{y(),v[Ye]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{L(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Ii(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==fe){t=n;break}}return t}const kl=Vl;function Ni(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ts(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:v,onLeave:y,onAfterLeave:L,onLeaveCancelled:I,onBeforeAppear:Y,onAppear:j,onAfterAppear:K,onAppearCancelled:g}=t,p=String(e.key),R=Ni(n,e),W=(b,T)=>{b&&$e(b,s,9,T)},V=(b,T)=>{const F=T[1];W(b,T),B(b)?b.every(w=>w.length<=1)&&F():b.length<=1&&F()},G={mode:o,persisted:l,beforeEnter(b){let T=c;if(!n.isMounted)if(i)T=Y||c;else return;b[Ye]&&b[Ye](!0);const F=R[p];F&&yt(e,F)&&F.el[Ye]&&F.el[Ye](),W(T,[b])},enter(b){let T=f,F=a,w=h;if(!n.isMounted)if(i)T=j||f,F=K||a,w=g||h;else return;let H=!1;const N=b[fn]=k=>{H||(H=!0,k?W(w,[b]):W(F,[b]),G.delayedLeave&&G.delayedLeave(),b[fn]=void 0)};T?V(T,[b,N]):N()},leave(b,T){const F=String(e.key);if(b[fn]&&b[fn](!0),n.isUnmounting)return T();W(v,[b]);let w=!1;const H=b[Ye]=N=>{w||(w=!0,T(),N?W(I,[b]):W(L,[b]),b[Ye]=void 0,R[F]===e&&delete R[F])};R[F]=e,y?V(y,[b,H]):H()},clone(b){const T=Ts(b,t,n,s,r);return r&&r(T),T}};return G}function cs(e){if(Xn(e))return e=ut(e),e.children=null,e}function ur(e){if(!Xn(e))return Oi(e.type)&&e.children?Ii(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&X(n.default))return n.default()}}function Qt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Qt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Fi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;in.value,set:i=>n.value=i})}return n}const On=new WeakMap;function Nt(e,t,n,s,r=!1){if(B(e)){e.forEach((L,I)=>Nt(L,t&&(B(t)?t[I]:t),n,s,r));return}if(St(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Nt(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?zs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===ne?l.refs={}:l.refs,h=l.setupState,v=Q(h),y=h===ne?zr:L=>ee(v,L);if(f!=null&&f!==c){if(fr(t),ce(f))a[f]=null,y(f)&&(h[f]=null);else if(ae(f)){f.value=null;const L=t;L.k&&(a[L.k]=null)}}if(X(c))rn(c,l,12,[o,a]);else{const L=ce(c),I=ae(c);if(L||I){const Y=()=>{if(e.f){const j=L?y(c)?h[c]:a[c]:c.value;if(r)B(j)&&js(j,i);else if(B(j))j.includes(i)||j.push(i);else if(L)a[c]=[i],y(c)&&(h[c]=a[c]);else{const K=[i];c.value=K,e.k&&(a[e.k]=K)}}else L?(a[c]=o,y(c)&&(h[c]=o)):I&&(c.value=o,e.k&&(a[e.k]=o))};if(o){const j=()=>{Y(),On.delete(e)};j.id=-1,On.set(e,j),Ce(j,n)}else fr(e),Y()}}}function fr(e){const t=On.get(e);t&&(t.flags|=8,On.delete(e))}let dr=!1;const Rt=()=>{dr||(console.error("Hydration completed but contains mismatches."),dr=!0)},Wl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Ul=e=>e.namespaceURI.includes("MathML"),dn=e=>{if(e.nodeType===1){if(Wl(e))return"svg";if(Ul(e))return"mathml"}},hn=e=>e.nodeType===8;function Bl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(g,p)=>{if(!p.hasChildNodes()){n(null,g,p),Rn(),p._vnode=g;return}h(p.firstChild,g,null,null,null),Rn(),p._vnode=g},h=(g,p,R,W,V,G=!1)=>{G=G||!!p.dynamicChildren;const b=hn(g)&&g.data==="[",T=()=>I(g,p,R,W,V,b),{type:F,ref:w,shapeFlag:H,patchFlag:N}=p;let k=g.nodeType;p.el=g,N===-2&&(G=!1,p.dynamicChildren=null);let M=null;switch(F){case Et:k!==3?p.children===""?(c(p.el=r(""),o(g),g),M=g):M=T():(g.data!==p.children&&(Rt(),g.data=p.children),M=i(g));break;case fe:K(g)?(M=i(g),j(p.el=g.content.firstChild,g,R)):k!==8||b?M=T():M=i(g);break;case Gt:if(b&&(g=i(g),k=g.nodeType),k===1||k===3){M=g;const z=!p.children.length;for(let D=0;D{G=G||!!p.dynamicChildren;const{type:b,props:T,patchFlag:F,shapeFlag:w,dirs:H,transition:N}=p,k=b==="input"||b==="option";if(k||F!==-1){H&&Ue(p,null,R,"created");let M=!1;if(K(g)){M=so(null,N)&&R&&R.vnode.props&&R.vnode.props.appear;const D=g.content.firstChild;if(M){const Z=D.getAttribute("class");Z&&(D.$cls=Z),N.beforeEnter(D)}j(D,g,R),p.el=g=D}if(w&16&&!(T&&(T.innerHTML||T.textContent))){let D=y(g.firstChild,p,g,R,W,V,G);for(;D;){pn(g,1)||Rt();const Z=D;D=D.nextSibling,l(Z)}}else if(w&8){let D=p.children;D[0]===` +`&&(g.tagName==="PRE"||g.tagName==="TEXTAREA")&&(D=D.slice(1));const{textContent:Z}=g;Z!==D&&Z!==D.replace(/\r\n|\r/g,` +`)&&(pn(g,0)||Rt(),g.textContent=p.children)}if(T){if(k||!G||F&48){const D=g.tagName.includes("-");for(const Z in T)(k&&(Z.endsWith("value")||Z==="indeterminate")||sn(Z)&&!Pt(Z)||Z[0]==="."||D)&&s(g,Z,null,T[Z],void 0,R)}else if(T.onClick)s(g,"onClick",null,T.onClick,void 0,R);else if(F&4&&at(T.style))for(const D in T.style)T.style[D]}let z;(z=T&&T.onVnodeBeforeMount)&&Pe(z,R,p),H&&Ue(p,null,R,"beforeMount"),((z=T&&T.onVnodeMounted)||H||M)&&co(()=>{z&&Pe(z,R,p),M&&N.enter(g),H&&Ue(p,null,R,"mounted")},W)}return g.nextSibling},y=(g,p,R,W,V,G,b)=>{b=b||!!p.dynamicChildren;const T=p.children,F=T.length;for(let w=0;w{const{slotScopeIds:b}=p;b&&(V=V?V.concat(b):b);const T=o(g),F=y(i(g),p,T,R,W,V,G);return F&&hn(F)&&F.data==="]"?i(p.anchor=F):(Rt(),c(p.anchor=f("]"),T,F),F)},I=(g,p,R,W,V,G)=>{if(pn(g.parentElement,1)||Rt(),p.el=null,G){const F=Y(g);for(;;){const w=i(g);if(w&&w!==F)l(w);else break}}const b=i(g),T=o(g);return l(g),n(null,p,T,b,R,W,dn(T),V),R&&(R.vnode.el=p.el,Xi(R,p.el)),b},Y=(g,p="[",R="]")=>{let W=0;for(;g;)if(g=i(g),g&&hn(g)&&(g.data===p&&W++,g.data===R)){if(W===0)return i(g);W--}return g},j=(g,p,R)=>{const W=p.parentNode;W&&W.replaceChild(g,p);let V=R;for(;V;)V.vnode.el===p&&(V.vnode.el=V.subTree.el=g),V=V.parent},K=g=>g.nodeType===1&&g.tagName==="TEMPLATE";return[a,h]}const hr="data-allow-mismatch",Kl={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function pn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(hr);)e=e.parentElement;const n=e&&e.getAttribute(hr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Kl[t])}}$n().requestIdleCallback;$n().cancelIdleCallback;const St=e=>!!e.type.__asyncLoader,Xn=e=>e.type.__isKeepAlive;function ql(e,t){$i(e,"a",t)}function Gl(e,t){$i(e,"da",t)}function $i(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Yn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Xn(r.parent.vnode)&&Xl(s,t,n,r),r=r.parent}}function Xl(e,t,n,s){const r=Yn(t,e,s,!0);zn(()=>{js(s[t],r)},n)}function Yn(e,t,n=ye,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Je();const l=on(n),c=$e(t,n,e,o);return l(),Qe(),c});return s?r.unshift(i):r.push(i),i}}const tt=e=>(t,n=ye)=>{(!tn||e==="sp")&&Yn(e,(...s)=>t(...s),n)},Yl=tt("bm"),$t=tt("m"),zl=tt("bu"),Jl=tt("u"),ji=tt("bum"),zn=tt("um"),Ql=tt("sp"),Zl=tt("rtg"),ec=tt("rtc");function tc(e,t=ye){Yn("ec",e,t)}const Vi="components";function Pu(e,t){return Wi(Vi,e,!0,t)||e}const ki=Symbol.for("v-ndc");function Iu(e){return ce(e)?Wi(Vi,e,!1)||e:e||ki}function Wi(e,t,n=!0,s=!1){const r=we||ye;if(r){const i=r.type;{const l=Dc(i,!1);if(l&&(l===t||l===Ne(t)||l===Hn(Ne(t))))return i}const o=pr(r[e]||i[e],t)||pr(r.appContext[e],t);return!o&&s?i:o}}function pr(e,t){return e&&(e[t]||e[Ne(t)]||e[Hn(Ne(t))])}function Nu(e,t,n,s){let r;const i=n,o=B(e);if(o||ce(e)){const l=o&&at(e);let c=!1,f=!1;l&&(c=!Me(e),f=Ze(e),e=Vn(e)),r=new Array(e.length);for(let a=0,h=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;c0;return t!=="default"&&(n.name=t),Os(),Ls(ve,null,[de("slot",n,s&&s())],f?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Os();const o=i&&Ui(i(n)),l=n.key||o&&o.key,c=Ls(ve,{key:(l&&!et(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Ui(e){return e.some(t=>en(t)?!(t.type===fe||t.type===ve&&!Ui(t.children)):!0)?e:null}function Du(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:bn(s)]=e[s];return n}const Cs=e=>e?po(e)?zs(e):Cs(e.parent):null,qt=ue(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Cs(e.parent),$root:e=>Cs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ki(e),$forceUpdate:e=>e.f||(e.f=()=>{qs(e.update)}),$nextTick:e=>e.n||(e.n=qn.bind(e.proxy)),$watch:e=>Hl.bind(e)}),as=(e,t)=>e!==ne&&!e.__isScriptSetup&&ee(e,t),nc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(as(s,t))return o[t]=1,s[t];if(r!==ne&&ee(r,t))return o[t]=2,r[t];if(ee(i,t))return o[t]=3,i[t];if(n!==ne&&ee(n,t))return o[t]=4,n[t];As&&(o[t]=0)}}const f=qt[t];let a,h;if(f)return t==="$attrs"&&me(e.attrs,"get",""),f(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==ne&&ee(n,t))return o[t]=4,n[t];if(h=c.config.globalProperties,ee(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return as(r,t)?(r[t]=n,!0):s!==ne&&ee(s,t)?(s[t]=n,!0):ee(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==ne&&l[0]!=="$"&&ee(e,l)||as(t,l)||ee(i,l)||ee(s,l)||ee(qt,l)||ee(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ee(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Hu(){return sc().slots}function sc(e){const t=dt();return t.setupContext||(t.setupContext=mo(t))}function gr(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let As=!0;function rc(e){const t=Ki(e),n=e.proxy,s=e.ctx;As=!1,t.beforeCreate&&mr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:v,beforeUpdate:y,updated:L,activated:I,deactivated:Y,beforeDestroy:j,beforeUnmount:K,destroyed:g,unmounted:p,render:R,renderTracked:W,renderTriggered:V,errorCaptured:G,serverPrefetch:b,expose:T,inheritAttrs:F,components:w,directives:H,filters:N}=t;if(f&&ic(f,s,null),o)for(const z in o){const D=o[z];X(D)&&(s[z]=D.bind(n))}if(r){const z=r.call(n,n);se(z)&&(e.data=Ft(z))}if(As=!0,i)for(const z in i){const D=i[z],Z=X(D)?D.bind(n,n):X(D.get)?D.get.bind(n,n):Be,ht=!X(D)&&X(D.set)?D.set.bind(n):Be,je=oe({get:Z,set:ht});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>je.value,set:Ve=>je.value=Ve})}if(l)for(const z in l)Bi(l[z],s,n,z);if(c){const z=X(c)?c.call(n):c;Reflect.ownKeys(z).forEach(D=>{Nl(D,z[D])})}a&&mr(a,e,"c");function M(z,D){B(D)?D.forEach(Z=>z(Z.bind(n))):D&&z(D.bind(n))}if(M(Yl,h),M($t,v),M(zl,y),M(Jl,L),M(ql,I),M(Gl,Y),M(tc,G),M(ec,W),M(Zl,V),M(ji,K),M(zn,p),M(Ql,b),B(T))if(T.length){const z=e.exposed||(e.exposed={});T.forEach(D=>{Object.defineProperty(z,D,{get:()=>n[D],set:Z=>n[D]=Z,enumerable:!0})})}else e.exposed||(e.exposed={});R&&e.render===Be&&(e.render=R),F!=null&&(e.inheritAttrs=F),w&&(e.components=w),H&&(e.directives=H),b&&Hi(e)}function ic(e,t,n=Be){B(e)&&(e=Rs(e));for(const s in e){const r=e[s];let i;se(r)?"default"in r?i=wt(r.from||s,r.default,!0):i=wt(r.from||s):i=wt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function mr(e,t,n){$e(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Bi(e,t,n,s){let r=s.includes(".")?Mi(n,s):()=>n[s];if(ce(e)){const i=t[e];X(i)&&Oe(r,i)}else if(X(e))Oe(r,e.bind(n));else if(se(e))if(B(e))e.forEach(i=>Bi(i,t,n,s));else{const i=X(e.handler)?e.handler.bind(n):t[e.handler];X(i)&&Oe(r,i,e)}}function Ki(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Ln(c,f,o,!0)),Ln(c,t,o)),se(t)&&i.set(t,c),c}function Ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Ln(e,i,n,!0),r&&r.forEach(o=>Ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=oc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const oc={data:vr,props:yr,emits:yr,methods:Ut,computed:Ut,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Ut,directives:Ut,watch:cc,provide:vr,inject:lc};function vr(e,t){return t?e?function(){return ue(X(e)?e.call(this,this):e,X(t)?t.call(this,this):t)}:t:e}function lc(e,t){return Ut(Rs(e),Rs(t))}function Rs(e){if(B(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${ft(t)}Modifiers`];function dc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ne;let r=n;const i=t.startsWith("update:"),o=i&&fc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ce(a)?a.trim():a)),o.number&&(r=n.map(ko)));let l,c=s[l=bn(t)]||s[l=bn(Ne(t))];!c&&i&&(c=s[l=bn(ft(t))]),c&&$e(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,$e(f,e,6,r)}}const hc=new WeakMap;function Gi(e,t,n=!1){const s=n?hc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!X(e)){const c=f=>{const a=Gi(f,t,!0);a&&(l=!0,ue(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(se(e)&&s.set(e,null),null):(B(i)?i.forEach(c=>o[c]=null):ue(o,i),se(e)&&s.set(e,o),o)}function Jn(e,t){return!e||!sn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ee(e,t[0].toLowerCase()+t.slice(1))||ee(e,ft(t))||ee(e,t))}function us(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:v,setupState:y,ctx:L,inheritAttrs:I}=e,Y=Mn(e);let j,K;try{if(n.shapeFlag&4){const p=r||s,R=p;j=Ie(f.call(R,p,a,h,y,v,L)),K=l}else{const p=t;j=Ie(p.length>1?p(h,{attrs:l,slots:o,emit:c}):p(h,null)),K=t.props?l:pc(l)}}catch(p){Xt.length=0,Kn(p,e,1),j=de(fe)}let g=j;if(K&&I!==!1){const p=Object.keys(K),{shapeFlag:R}=g;p.length&&R&7&&(i&&p.some($s)&&(K=gc(K,i)),g=ut(g,K,!1,!0))}return n.dirs&&(g=ut(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Qt(g,n.transition),j=g,Mn(Y),j}const pc=e=>{let t;for(const n in e)(n==="class"||n==="style"||sn(n))&&((t||(t={}))[n]=e[n]);return t},gc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function mc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?br(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;hObject.create(Yi),Ji=e=>Object.getPrototypeOf(e)===Yi;function vc(e,t,n,s=!1){const r={},i=zi();e.propsDefaults=Object.create(null),Qi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:vl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function yc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=Q(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[v,y]=Zi(h,t,!0);ue(o,v),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return se(e)&&s.set(e,Ot),Ot;if(B(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",Xs=e=>B(e)?e.map(Ie):[Ie(e)],_c=(e,t,n)=>{if(t._n)return t;const s=Il((...r)=>Xs(t(...r)),n);return s._c=!1,s},eo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Gs(r))continue;const i=e[r];if(X(i))t[r]=_c(r,i,s);else if(i!=null){const o=Xs(i);t[r]=()=>o}}},to=(e,t)=>{const n=Xs(t);e.slots.default=()=>n},no=(e,t,n)=>{for(const s in t)(n||!Gs(s))&&(e[s]=t[s])},wc=(e,t,n)=>{const s=e.slots=zi();if(e.vnode.shapeFlag&32){const r=t._;r?(no(s,t,n),n&&ti(s,"_",r,!0)):eo(t,s)}else t&&to(e,t)},Sc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:no(r,t,n):(i=!t.$stable,eo(t,r)),o=t}else t&&(to(e,t),o={default:1});if(i)for(const l in r)!Gs(l)&&o[l]==null&&delete r[l]},Ce=co;function xc(e){return Ec(e,Bl)}function Ec(e,t){const n=$n();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:v,setScopeId:y=Be,insertStaticContent:L}=e,I=(u,d,m,E=null,_=null,S=null,O=void 0,A=null,C=!!d.dynamicChildren)=>{if(u===d)return;u&&!yt(u,d)&&(E=ln(u),Ve(u,_,S,!0),u=null),d.patchFlag===-2&&(C=!1,d.dynamicChildren=null);const{type:x,ref:U,shapeFlag:P}=d;switch(x){case Et:Y(u,d,m,E);break;case fe:j(u,d,m,E);break;case Gt:u==null&&K(d,m,E,O);break;case ve:w(u,d,m,E,_,S,O,A,C);break;default:P&1?R(u,d,m,E,_,S,O,A,C):P&6?H(u,d,m,E,_,S,O,A,C):(P&64||P&128)&&x.process(u,d,m,E,_,S,O,A,C,Ct)}U!=null&&_?Nt(U,u&&u.ref,S,d||u,!d):U==null&&u&&u.ref!=null&&Nt(u.ref,null,S,u,!0)},Y=(u,d,m,E)=>{if(u==null)s(d.el=l(d.children),m,E);else{const _=d.el=u.el;d.children!==u.children&&f(_,d.children)}},j=(u,d,m,E)=>{u==null?s(d.el=c(d.children||""),m,E):d.el=u.el},K=(u,d,m,E)=>{[u.el,u.anchor]=L(u.children,d,m,E,u.el,u.anchor)},g=({el:u,anchor:d},m,E)=>{let _;for(;u&&u!==d;)_=v(u),s(u,m,E),u=_;s(d,m,E)},p=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=v(u),r(u),u=m;r(d)},R=(u,d,m,E,_,S,O,A,C)=>{if(d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null)W(d,m,E,_,S,O,A,C);else{const x=u.el&&u.el._isVueCE?u.el:null;try{x&&x._beginPatch(),b(u,d,_,S,O,A,C)}finally{x&&x._endPatch()}}},W=(u,d,m,E,_,S,O,A)=>{let C,x;const{props:U,shapeFlag:P,transition:$,dirs:q}=u;if(C=u.el=o(u.type,S,U&&U.is,U),P&8?a(C,u.children):P&16&&G(u.children,C,null,E,_,fs(u,S),O,A),q&&Ue(u,null,E,"created"),V(C,u,u.scopeId,O,E),U){for(const re in U)re!=="value"&&!Pt(re)&&i(C,re,null,U[re],S,E);"value"in U&&i(C,"value",null,U.value,S),(x=U.onVnodeBeforeMount)&&Pe(x,E,u)}q&&Ue(u,null,E,"beforeMount");const J=so(_,$);J&&$.beforeEnter(C),s(C,d,m),((x=U&&U.onVnodeMounted)||J||q)&&Ce(()=>{x&&Pe(x,E,u),J&&$.enter(C),q&&Ue(u,null,E,"mounted")},_)},V=(u,d,m,E,_)=>{if(m&&y(u,m),E)for(let S=0;S{for(let x=C;x{const A=d.el=u.el;let{patchFlag:C,dynamicChildren:x,dirs:U}=d;C|=u.patchFlag&16;const P=u.props||ne,$=d.props||ne;let q;if(m&&pt(m,!1),(q=$.onVnodeBeforeUpdate)&&Pe(q,m,d,u),U&&Ue(d,u,m,"beforeUpdate"),m&&pt(m,!0),(P.innerHTML&&$.innerHTML==null||P.textContent&&$.textContent==null)&&a(A,""),x?T(u.dynamicChildren,x,A,m,E,fs(d,_),S):O||D(u,d,A,null,m,E,fs(d,_),S,!1),C>0){if(C&16)F(A,P,$,m,_);else if(C&2&&P.class!==$.class&&i(A,"class",null,$.class,_),C&4&&i(A,"style",P.style,$.style,_),C&8){const J=d.dynamicProps;for(let re=0;re{q&&Pe(q,m,d,u),U&&Ue(d,u,m,"updated")},E)},T=(u,d,m,E,_,S,O)=>{for(let A=0;A{if(d!==m){if(d!==ne)for(const S in d)!Pt(S)&&!(S in m)&&i(u,S,d[S],null,_,E);for(const S in m){if(Pt(S))continue;const O=m[S],A=d[S];O!==A&&S!=="value"&&i(u,S,A,O,_,E)}"value"in m&&i(u,"value",d.value,m.value,_)}},w=(u,d,m,E,_,S,O,A,C)=>{const x=d.el=u?u.el:l(""),U=d.anchor=u?u.anchor:l("");let{patchFlag:P,dynamicChildren:$,slotScopeIds:q}=d;q&&(A=A?A.concat(q):q),u==null?(s(x,m,E),s(U,m,E),G(d.children||[],m,U,_,S,O,A,C)):P>0&&P&64&&$&&u.dynamicChildren&&u.dynamicChildren.length===$.length?(T(u.dynamicChildren,$,m,_,S,O,A),(d.key!=null||_&&d===_.subTree)&&ro(u,d,!0)):D(u,d,m,U,_,S,O,A,C)},H=(u,d,m,E,_,S,O,A,C)=>{d.slotScopeIds=A,u==null?d.shapeFlag&512?_.ctx.activate(d,m,E,O,C):N(d,m,E,_,S,O,C):k(u,d,C)},N=(u,d,m,E,_,S,O)=>{const A=u.component=Pc(u,E,_);if(Xn(u)&&(A.ctx.renderer=Ct),Ic(A,!1,O),A.asyncDep){if(_&&_.registerDep(A,M,O),!u.el){const C=A.subTree=de(fe);j(null,C,d,m),u.placeholder=C.el}}else M(A,u,d,m,_,S,O)},k=(u,d,m)=>{const E=d.component=u.component;if(mc(u,d,m))if(E.asyncDep&&!E.asyncResolved){z(E,d,m);return}else E.next=d,E.update();else d.el=u.el,E.vnode=d},M=(u,d,m,E,_,S,O)=>{const A=()=>{if(u.isMounted){let{next:P,bu:$,u:q,parent:J,vnode:re}=u;{const Ee=io(u);if(Ee){P&&(P.el=re.el,z(u,P,O)),Ee.asyncDep.then(()=>{u.isUnmounted||A()});return}}let te=P,Se;pt(u,!1),P?(P.el=re.el,z(u,P,O)):P=re,$&&ss($),(Se=P.props&&P.props.onVnodeBeforeUpdate)&&Pe(Se,J,P,re),pt(u,!0);const he=us(u),Fe=u.subTree;u.subTree=he,I(Fe,he,h(Fe.el),ln(Fe),u,_,S),P.el=he.el,te===null&&Xi(u,he.el),q&&Ce(q,_),(Se=P.props&&P.props.onVnodeUpdated)&&Ce(()=>Pe(Se,J,P,re),_)}else{let P;const{el:$,props:q}=d,{bm:J,m:re,parent:te,root:Se,type:he}=u,Fe=St(d);if(pt(u,!1),J&&ss(J),!Fe&&(P=q&&q.onVnodeBeforeMount)&&Pe(P,te,d),pt(u,!0),$&&ns){const Ee=()=>{u.subTree=us(u),ns($,u.subTree,u,_,null)};Fe&&he.__asyncHydrate?he.__asyncHydrate($,u,Ee):Ee()}else{Se.ce&&Se.ce._def.shadowRoot!==!1&&Se.ce._injectChildStyle(he);const Ee=u.subTree=us(u);I(null,Ee,m,E,u,_,S),d.el=Ee.el}if(re&&Ce(re,_),!Fe&&(P=q&&q.onVnodeMounted)){const Ee=d;Ce(()=>Pe(P,te,Ee),_)}(d.shapeFlag&256||te&&St(te.vnode)&&te.vnode.shapeFlag&256)&&u.a&&Ce(u.a,_),u.isMounted=!0,d=m=E=null}};u.scope.on();const C=u.effect=new ii(A);u.scope.off();const x=u.update=C.run.bind(C),U=u.job=C.runIfDirty.bind(C);U.i=u,U.id=u.uid,C.scheduler=()=>qs(U),pt(u,!0),x()},z=(u,d,m)=>{d.component=u;const E=u.vnode.props;u.vnode=d,u.next=null,yc(u,d.props,E,m),Sc(u,d.children,m),Je(),ar(u),Qe()},D=(u,d,m,E,_,S,O,A,C=!1)=>{const x=u&&u.children,U=u?u.shapeFlag:0,P=d.children,{patchFlag:$,shapeFlag:q}=d;if($>0){if($&128){ht(x,P,m,E,_,S,O,A,C);return}else if($&256){Z(x,P,m,E,_,S,O,A,C);return}}q&8?(U&16&&jt(x,_,S),P!==x&&a(m,P)):U&16?q&16?ht(x,P,m,E,_,S,O,A,C):jt(x,_,S,!0):(U&8&&a(m,""),q&16&&G(P,m,E,_,S,O,A,C))},Z=(u,d,m,E,_,S,O,A,C)=>{u=u||Ot,d=d||Ot;const x=u.length,U=d.length,P=Math.min(x,U);let $;for($=0;$U?jt(u,_,S,!0,!1,P):G(d,m,E,_,S,O,A,C,P)},ht=(u,d,m,E,_,S,O,A,C)=>{let x=0;const U=d.length;let P=u.length-1,$=U-1;for(;x<=P&&x<=$;){const q=u[x],J=d[x]=C?it(d[x]):Ie(d[x]);if(yt(q,J))I(q,J,m,null,_,S,O,A,C);else break;x++}for(;x<=P&&x<=$;){const q=u[P],J=d[$]=C?it(d[$]):Ie(d[$]);if(yt(q,J))I(q,J,m,null,_,S,O,A,C);else break;P--,$--}if(x>P){if(x<=$){const q=$+1,J=q$)for(;x<=P;)Ve(u[x],_,S,!0),x++;else{const q=x,J=x,re=new Map;for(x=J;x<=$;x++){const Te=d[x]=C?it(d[x]):Ie(d[x]);Te.key!=null&&re.set(Te.key,x)}let te,Se=0;const he=$-J+1;let Fe=!1,Ee=0;const Vt=new Array(he);for(x=0;x=he){Ve(Te,_,S,!0);continue}let ke;if(Te.key!=null)ke=re.get(Te.key);else for(te=J;te<=$;te++)if(Vt[te-J]===0&&yt(Te,d[te])){ke=te;break}ke===void 0?Ve(Te,_,S,!0):(Vt[ke-J]=x+1,ke>=Ee?Ee=ke:Fe=!0,I(Te,d[ke],m,null,_,S,O,A,C),Se++)}const sr=Fe?Tc(Vt):Ot;for(te=sr.length-1,x=he-1;x>=0;x--){const Te=J+x,ke=d[Te],rr=d[Te+1],ir=Te+1{const{el:S,type:O,transition:A,children:C,shapeFlag:x}=u;if(x&6){je(u.component.subTree,d,m,E);return}if(x&128){u.suspense.move(d,m,E);return}if(x&64){O.move(u,d,m,Ct);return}if(O===ve){s(S,d,m);for(let P=0;PA.enter(S),_);else{const{leave:P,delayLeave:$,afterLeave:q}=A,J=()=>{u.ctx.isUnmounted?r(S):s(S,d,m)},re=()=>{S._isLeaving&&S[Ye](!0),P(S,()=>{J(),q&&q()})};$?$(S,J,re):re()}else s(S,d,m)},Ve=(u,d,m,E=!1,_=!1)=>{const{type:S,props:O,ref:A,children:C,dynamicChildren:x,shapeFlag:U,patchFlag:P,dirs:$,cacheIndex:q}=u;if(P===-2&&(_=!1),A!=null&&(Je(),Nt(A,null,m,u,!0),Qe()),q!=null&&(d.renderCache[q]=void 0),U&256){d.ctx.deactivate(u);return}const J=U&1&&$,re=!St(u);let te;if(re&&(te=O&&O.onVnodeBeforeUnmount)&&Pe(te,d,u),U&6)Do(u.component,m,E);else{if(U&128){u.suspense.unmount(m,E);return}J&&Ue(u,null,d,"beforeUnmount"),U&64?u.type.remove(u,d,m,Ct,E):x&&!x.hasOnce&&(S!==ve||P>0&&P&64)?jt(x,d,m,!1,!0):(S===ve&&P&384||!_&&U&16)&&jt(C,d,m),E&&tr(u)}(re&&(te=O&&O.onVnodeUnmounted)||J)&&Ce(()=>{te&&Pe(te,d,u),J&&Ue(u,null,d,"unmounted")},m)},tr=u=>{const{type:d,el:m,anchor:E,transition:_}=u;if(d===ve){Fo(m,E);return}if(d===Gt){p(u);return}const S=()=>{r(m),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(u.shapeFlag&1&&_&&!_.persisted){const{leave:O,delayLeave:A}=_,C=()=>O(m,S);A?A(u.el,S,C):C()}else S()},Fo=(u,d)=>{let m;for(;u!==d;)m=v(u),r(u),u=m;r(d)},Do=(u,d,m)=>{const{bum:E,scope:_,job:S,subTree:O,um:A,m:C,a:x}=u;wr(C),wr(x),E&&ss(E),_.stop(),S&&(S.flags|=8,Ve(O,u,d,m)),A&&Ce(A,d),Ce(()=>{u.isUnmounted=!0},d)},jt=(u,d,m,E=!1,_=!1,S=0)=>{for(let O=S;O{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=v(u.anchor||u.el),m=d&&d[$l];return m?v(m):d};let es=!1;const nr=(u,d,m)=>{let E;u==null?d._vnode&&(Ve(d._vnode,null,null,!0),E=d._vnode.component):I(d._vnode||null,u,d,null,null,null,m),d._vnode=u,es||(es=!0,ar(E),Rn(),es=!1)},Ct={p:I,um:Ve,m:je,r:tr,mt:N,mc:G,pc:D,pbc:T,n:ln,o:e};let ts,ns;return t&&([ts,ns]=t(Ct)),{render:nr,hydrate:ts,createApp:uc(nr,ts)}}function fs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function pt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function so(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ro(e,t,n=!1){const s=e.children,r=t.children;if(B(s)&&B(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function io(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:io(t)}function wr(e){if(e)for(let t=0;te.__isSuspense;function co(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Pl(e)}const ve=Symbol.for("v-fgt"),Et=Symbol.for("v-txt"),fe=Symbol.for("v-cmt"),Gt=Symbol.for("v-stc"),Xt=[];let Ae=null;function Os(e=!1){Xt.push(Ae=e?null:[])}function Cc(){Xt.pop(),Ae=Xt[Xt.length-1]||null}let Zt=1;function Pn(e,t=!1){Zt+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function ao(e){return e.dynamicChildren=Zt>0?Ae||Ot:null,Cc(),Zt>0&&Ae&&Ae.push(e),e}function $u(e,t,n,s,r,i){return ao(fo(e,t,n,s,r,i,!0))}function Ls(e,t,n,s,r){return ao(de(e,t,n,s,r,!0))}function en(e){return e?e.__v_isVNode===!0:!1}function yt(e,t){return e.type===t.type&&e.key===t.key}const uo=({key:e})=>e??null,wn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ce(e)||ae(e)||X(e)?{i:we,r:e,k:t,f:!!n}:e:null);function fo(e,t=null,n=null,s=0,r=null,i=e===ve?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&uo(t),ref:t&&wn(t),scopeId:Ci,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:we};return l?(Ys(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ce(n)?8:16),Zt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const de=Ac;function Ac(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===ki)&&(e=fe),en(e)){const l=ut(e,t,!0);return n&&Ys(l,n),Zt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(Hc(e)&&(e=e.__vccOpts),t){t=Rc(t);let{class:l,style:c}=t;l&&!ce(l)&&(t.class=ks(l)),se(c)&&(Un(c)&&!B(c)&&(c=ue({},c)),t.style=Vs(c))}const o=ce(e)?1:lo(e)?128:Oi(e)?64:se(e)?4:X(e)?2:0;return fo(e,t,n,s,r,o,i,!0)}function Rc(e){return e?Un(e)||Ji(e)?ue({},e):e:null}function ut(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Mc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&uo(f),ref:t&&t.ref?n&&i?B(i)?i.concat(wn(t)):[i,wn(t)]:wn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ut(e.ssContent),ssFallback:e.ssFallback&&ut(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Qt(a,c.clone(a)),a}function ho(e=" ",t=0){return de(Et,null,e,t)}function ju(e,t){const n=de(Gt,null,e);return n.staticCount=t,n}function Vu(e="",t=!1){return t?(Os(),Ls(fe,null,e)):de(fe,null,e)}function Ie(e){return e==null||typeof e=="boolean"?de(fe):B(e)?de(ve,null,e.slice()):en(e)?it(e):de(Et,null,String(e))}function it(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ut(e)}function Ys(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ys(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Ji(t)?t._ctx=we:r===3&&we&&(we.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else X(t)?(t={default:t,_ctx:we},n=32):(t=String(t),s&64?(n=16,t=[ho(t)]):n=8);e.children=t,e.shapeFlag|=n}function Mc(...e){const t={};for(let n=0;nye||we;let In,Ps;{const e=$n(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};In=t("__VUE_INSTANCE_SETTERS__",n=>ye=n),Ps=t("__VUE_SSR_SETTERS__",n=>tn=n)}const on=e=>{const t=ye;return In(e),e.scope.on(),()=>{e.scope.off(),In(t)}},Sr=()=>{ye&&ye.scope.off(),In(null)};function po(e){return e.vnode.shapeFlag&4}let tn=!1;function Ic(e,t=!1,n=!1){t&&Ps(t);const{props:s,children:r}=e.vnode,i=po(e);vc(e,s,i,t),wc(e,r,n||t);const o=i?Nc(e,t):void 0;return t&&Ps(!1),o}function Nc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,nc);const{setup:s}=n;if(s){Je();const r=e.setupContext=s.length>1?mo(e):null,i=on(e),o=rn(s,e,0,[e.props,r]),l=Qr(o);if(Qe(),i(),(l||e.sp)&&!St(e)&&Hi(e),l){if(o.then(Sr,Sr),t)return o.then(c=>{xr(e,c)}).catch(c=>{Kn(c,e,0)});e.asyncDep=o}else xr(e,o)}else go(e)}function xr(e,t,n){X(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=Si(t)),go(e)}function go(e,t,n){const s=e.type;e.render||(e.render=s.render||Be);{const r=on(e);Je();try{rc(e)}finally{Qe(),r()}}}const Fc={get(e,t){return me(e,"get",""),e[t]}};function mo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Fc),slots:e.slots,emit:e.emit,expose:t}}function zs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Si(_n(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in qt)return qt[n](e)},has(t,n){return n in t||n in qt}})):e.proxy}function Dc(e,t=!0){return X(e)?e.displayName||e.name:e.name||t&&e.__name}function Hc(e){return X(e)&&"__vccOpts"in e}const oe=(e,t)=>Al(e,t,tn);function Is(e,t,n){try{Pn(-1);const s=arguments.length;return s===2?se(t)&&!B(t)?en(t)?de(e,null,[t]):de(e,t):de(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&en(n)&&(n=[n]),de(e,t,n))}finally{Pn(1)}}const $c="3.5.26";let Ns;const Er=typeof window<"u"&&window.trustedTypes;if(Er)try{Ns=Er.createPolicy("vue",{createHTML:e=>e})}catch{}const vo=Ns?e=>Ns.createHTML(e):e=>e,jc="http://www.w3.org/2000/svg",Vc="http://www.w3.org/1998/Math/MathML",Xe=typeof document<"u"?document:null,Tr=Xe&&Xe.createElement("template"),kc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Xe.createElementNS(jc,e):t==="mathml"?Xe.createElementNS(Vc,e):n?Xe.createElement(e,{is:n}):Xe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Xe.createTextNode(e),createComment:e=>Xe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Tr.innerHTML=vo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Tr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},nt="transition",Wt="animation",nn=Symbol("_vtc"),yo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wc=ue({},Li,yo),Uc=e=>(e.displayName="Transition",e.props=Wc,e),ku=Uc((e,{slots:t})=>Is(kl,Bc(e),t)),gt=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cr=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function Bc(e){const t={};for(const w in e)w in yo||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,L=Kc(r),I=L&&L[0],Y=L&&L[1],{onBeforeEnter:j,onEnter:K,onEnterCancelled:g,onLeave:p,onLeaveCancelled:R,onBeforeAppear:W=j,onAppear:V=K,onAppearCancelled:G=g}=t,b=(w,H,N,k)=>{w._enterCancelled=k,mt(w,H?a:l),mt(w,H?f:o),N&&N()},T=(w,H)=>{w._isLeaving=!1,mt(w,h),mt(w,y),mt(w,v),H&&H()},F=w=>(H,N)=>{const k=w?V:K,M=()=>b(H,w,N);gt(k,[H,M]),Ar(()=>{mt(H,w?c:i),Ge(H,w?a:l),Cr(k)||Rr(H,s,I,M)})};return ue(t,{onBeforeEnter(w){gt(j,[w]),Ge(w,i),Ge(w,o)},onBeforeAppear(w){gt(W,[w]),Ge(w,c),Ge(w,f)},onEnter:F(!1),onAppear:F(!0),onLeave(w,H){w._isLeaving=!0;const N=()=>T(w,H);Ge(w,h),w._enterCancelled?(Ge(w,v),Lr(w)):(Lr(w),Ge(w,v)),Ar(()=>{w._isLeaving&&(mt(w,h),Ge(w,y),Cr(p)||Rr(w,s,Y,N))}),gt(p,[w,N])},onEnterCancelled(w){b(w,!1,void 0,!0),gt(g,[w])},onAppearCancelled(w){b(w,!0,void 0,!0),gt(G,[w])},onLeaveCancelled(w){T(w),gt(R,[w])}})}function Kc(e){if(e==null)return null;if(se(e))return[ds(e.enter),ds(e.leave)];{const t=ds(e);return[t,t]}}function ds(e){return Wo(e)}function Ge(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[nn]||(e[nn]=new Set)).add(t)}function mt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[nn];n&&(n.delete(t),n.size||(e[nn]=void 0))}function Ar(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let qc=0;function Rr(e,t,n,s){const r=e._endId=++qc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Gc(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,v),i()},v=y=>{y.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[L]||"").split(", "),r=s(`${nt}Delay`),i=s(`${nt}Duration`),o=Mr(r,i),l=s(`${Wt}Delay`),c=s(`${Wt}Duration`),f=Mr(l,c);let a=null,h=0,v=0;t===nt?o>0&&(a=nt,h=o,v=i.length):t===Wt?f>0&&(a=Wt,h=f,v=c.length):(h=Math.max(o,f),a=h>0?o>f?nt:Wt:null,v=a?a===nt?i.length:c.length:0);const y=a===nt&&/\b(?:transform|all)(?:,|$)/.test(s(`${nt}Property`).toString());return{type:a,timeout:h,propCount:v,hasTransform:y}}function Mr(e,t){for(;e.lengthOr(n)+Or(e[s])))}function Or(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Lr(e){return(e?e.ownerDocument:document).body.offsetHeight}function Xc(e,t,n){const s=e[nn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Pr=Symbol("_vod"),Yc=Symbol("_vsh"),zc=Symbol(""),Jc=/(?:^|;)\s*display\s*:/;function Qc(e,t,n){const s=e.style,r=ce(n);let i=!1;if(n&&!r){if(t)if(ce(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Sn(s,l,"")}else for(const o in t)n[o]==null&&Sn(s,o,"");for(const o in n)o==="display"&&(i=!0),Sn(s,o,n[o])}else if(r){if(t!==n){const o=s[zc];o&&(n+=";"+o),s.cssText=n,i=Jc.test(n)}}else t&&e.removeAttribute("style");Pr in e&&(e[Pr]=i?s.display:"",e[Yc]&&(s.display="none"))}const Ir=/\s*!important$/;function Sn(e,t,n){if(B(n))n.forEach(s=>Sn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Zc(e,t);Ir.test(n)?e.setProperty(ft(s),n.replace(Ir,""),"important"):e[s]=n}}const Nr=["Webkit","Moz","ms"],hs={};function Zc(e,t){const n=hs[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return hs[t]=s;s=Hn(s);for(let r=0;rps||(ra.then(()=>ps=0),ps=Date.now());function oa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;$e(la(s,n.value),t,5,[s])};return n.value=e,n.attached=ia(),n}function la(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ca=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Xc(e,s,o):t==="style"?Qc(e,n,s):sn(t)?$s(t)||na(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):aa(e,t,s,o))?(Hr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Dr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ce(s))?Hr(e,Ne(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Dr(e,t,s,o))};function aa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Vr(t)&&X(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Vr(t)&&ce(n)?!1:t in e}const ua=["ctrl","shift","alt","meta"],fa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ua.some(n=>e[`${n}Key`]&&!t.includes(n))},Wu=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const i=ft(r.key);if(t.some(o=>o===i||da[o]===i))return e(r)}))},ha=ue({patchProp:ca},kc);let gs,kr=!1;function pa(){return gs=kr?gs:xc(ha),kr=!0,gs}const Bu=((...e)=>{const t=pa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=ma(s);if(r)return n(r,!0,ga(r))},t});function ga(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ma(e){return ce(e)?document.querySelector(e):e}const Ku=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},va=window.__VP_SITE_DATA__;function bo(e,t){return Ws()?(Jo(e,t),!0):!1}const ms=new WeakMap,ya=(...e)=>{var t;const n=e[0],s=(t=dt())===null||t===void 0?void 0:t.proxy,r=s??Ws();if(r==null&&!Ai())throw new Error("injectLocal must be called in setup");return r&&ms.has(r)&&n in ms.get(r)?ms.get(r)[n]:wt(...e)},_o=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ba=e=>e!=null,_a=Object.prototype.toString,wa=e=>_a.call(e)==="[object Object]",Tt=()=>{},Wr=Sa();function Sa(){var e,t,n;return _o&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function Js(...e){if(e.length!==1)return El(...e);const t=e[0];return typeof t=="function"?Dt(wl(()=>({get:t,set:Tt}))):_t(t)}function Qs(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const wo=e=>e();function xa(e,t={}){let n,s,r=Tt;const i=c=>{clearTimeout(c),r(),r=Tt};let o;return c=>{const f=le(e),a=le(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=void 0),Promise.resolve(c())):new Promise((h,v)=>{r=t.rejectOnCancel?v:h,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=void 0,h(o())},a)),n=setTimeout(()=>{s&&i(s),s=void 0,h(c())},f)})}}function Ea(...e){let t=0,n,s=!0,r=Tt,i,o,l,c,f;!ae(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[o,l=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=Tt)};return v=>{const y=le(o),L=Date.now()-t,I=()=>i=v();return a(),y<=0?(t=Date.now(),I()):(L>y?(t=Date.now(),(c||!s)&&I()):l&&(i=new Promise((Y,j)=>{r=f?j:Y,n=setTimeout(()=>{t=Date.now(),s=!0,Y(I()),a()},Math.max(0,y-L))})),!c&&!n&&(n=setTimeout(()=>s=!0,y)),s=!1,i)}}function Ta(e=wo,t={}){const{initialState:n="active"}=t,s=Js(n==="active");function r(){s.value=!1}function i(){s.value=!0}const o=(...l)=>{s.value&&e(...l)};return{isActive:Dt(s),pause:r,resume:i,eventFilter:o}}function Ur(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function xn(e){return Array.isArray(e)?e:[e]}function So(e){return dt()}function Ca(e,t=200,n={}){return Qs(xa(t,n),e)}function Aa(e,t=200,n=!1,s=!0,r=!1){return Qs(Ea(t,n,s,r),e)}function Ra(e,t,n={}){const{eventFilter:s=wo,...r}=n;return Oe(e,Qs(s,t),r)}function Ma(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:f}=Ta(s,{initialState:r});return{stop:Ra(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:f}}const Oa=Ma;function Qn(e,t=!0,n){So()?$t(e,n):t?e():qn(e)}function La(e,t){So()&&zn(e,t)}function Pa(e,t,n){return Oe(e,t,{...n,immediate:!0})}const Re=_o?window:void 0;function Zn(e){var t;const n=le(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function Ke(...e){const t=(s,r,i,o)=>(s.addEventListener(r,i,o),()=>s.removeEventListener(r,i,o)),n=oe(()=>{const s=xn(le(e[0])).filter(r=>r!=null);return s.every(r=>typeof r!="string")?s:void 0});return Pa(()=>{var s,r;return[(s=(r=n.value)===null||r===void 0?void 0:r.map(i=>Zn(i)))!==null&&s!==void 0?s:[Re].filter(i=>i!=null),xn(le(n.value?e[1]:e[0])),xn(Bn(n.value?e[2]:e[1])),le(n.value?e[3]:e[2])]},([s,r,i,o],l,c)=>{if(!s?.length||!r?.length||!i?.length)return;const f=wa(o)?{...o}:o,a=s.flatMap(h=>r.flatMap(v=>i.map(y=>t(h,v,y,f))));c(()=>{a.forEach(h=>h())})},{flush:"post"})}function Ia(){const e=xe(!1),t=dt();return t&&$t(()=>{e.value=!0},t),e}function Zs(e){const t=Ia();return oe(()=>(t.value,!!e()))}function Na(e,t,n={}){const{window:s=Re,...r}=n;let i;const o=Zs(()=>s&&"MutationObserver"in s),l=()=>{i&&(i.disconnect(),i=void 0)},c=Oe(oe(()=>{const h=xn(le(e)).map(Zn).filter(ba);return new Set(h)}),h=>{l(),o.value&&h.size&&(i=new MutationObserver(t),h.forEach(v=>i.observe(v,r)))},{immediate:!0,flush:"post"}),f=()=>i?.takeRecords(),a=()=>{c(),l()};return bo(a),{isSupported:o,stop:a,takeRecords:f}}function Fa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function qu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Re,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Fa(t);return Ke(r,i,a=>{a.repeat&&le(l)||c(a)&&n(a)},o)}const Da=Symbol("vueuse-ssr-width");function Ha(){const e=Ai()?ya(Da,null):null;return typeof e=="number"?e:void 0}function xo(e,t={}){const{window:n=Re,ssrWidth:s=Ha()}=t,r=Zs(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=xe(typeof s=="number"),o=xe(),l=xe(!1),c=f=>{l.value=f.matches};return Ri(()=>{if(i.value){i.value=!r.value,l.value=le(e).split(",").some(f=>{const a=f.includes("not all"),h=f.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),v=f.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let y=!!(h||v);return h&&y&&(y=s>=Ur(h[1])),v&&y&&(y=s<=Ur(v[1])),a?!y:y});return}r.value&&(o.value=n.matchMedia(le(e)),l.value=o.value.matches)}),Ke(o,"change",c,{passive:!0}),oe(()=>l.value)}const gn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},mn="__vueuse_ssr_handlers__",$a=ja();function ja(){return mn in gn||(gn[mn]=gn[mn]||{}),gn[mn]}function Eo(e,t){return $a[e]||t}function To(e){return xo("(prefers-color-scheme: dark)",e)}function Va(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ka={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Br="vueuse-storage";function Wa(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=Re,eventFilter:v,onError:y=N=>{console.error(N)},initOnMounted:L}=s,I=(a?xe:_t)(typeof t=="function"?t():t),Y=oe(()=>le(e));if(!n)try{n=Eo("getDefaultStorage",()=>Re?.localStorage)()}catch(N){y(N)}if(!n)return I;const j=le(t),K=Va(j),g=(r=s.serializer)!==null&&r!==void 0?r:ka[K],{pause:p,resume:R}=Oa(I,N=>T(N),{flush:i,deep:o,eventFilter:v});Oe(Y,()=>w(),{flush:i});let W=!1;const V=N=>{L&&!W||w(N)},G=N=>{L&&!W||H(N)};h&&l&&(n instanceof Storage?Ke(h,"storage",V,{passive:!0}):Ke(h,Br,G)),L?Qn(()=>{W=!0,w()}):w();function b(N,k){if(h){const M={key:Y.value,oldValue:N,newValue:k,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",M):new CustomEvent(Br,{detail:M}))}}function T(N){try{const k=n.getItem(Y.value);if(N==null)b(k,null),n.removeItem(Y.value);else{const M=g.write(N);k!==M&&(n.setItem(Y.value,M),b(k,M))}}catch(k){y(k)}}function F(N){const k=N?N.newValue:n.getItem(Y.value);if(k==null)return c&&j!=null&&n.setItem(Y.value,g.write(j)),j;if(!N&&f){const M=g.read(k);return typeof f=="function"?f(M,j):K==="object"&&!Array.isArray(M)?{...j,...M}:M}else return typeof k!="string"?k:g.read(k)}function w(N){if(!(N&&N.storageArea!==n)){if(N&&N.key==null){I.value=j;return}if(!(N&&N.key!==Y.value)){p();try{const k=g.write(I.value);(N===void 0||N?.newValue!==k)&&(I.value=F(N))}catch(k){y(k)}finally{N?qn(R):R()}}}}function H(N){w(N.detail)}return I}const Ua="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Ba(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Re,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},v=To({window:r}),y=oe(()=>v.value?"dark":"light"),L=c||(o==null?Js(s):Wa(o,s,i,{window:r,listenToStorageChanges:l})),I=oe(()=>L.value==="auto"?y.value:L.value),Y=Eo("updateHTMLAttrs",(p,R,W)=>{const V=typeof p=="string"?r?.document.querySelector(p):Zn(p);if(!V)return;const G=new Set,b=new Set;let T=null;if(R==="class"){const w=W.split(/\s/g);Object.values(h).flatMap(H=>(H||"").split(/\s/g)).filter(Boolean).forEach(H=>{w.includes(H)?G.add(H):b.add(H)})}else T={key:R,value:W};if(G.size===0&&b.size===0&&T===null)return;let F;a&&(F=r.document.createElement("style"),F.appendChild(document.createTextNode(Ua)),r.document.head.appendChild(F));for(const w of G)V.classList.add(w);for(const w of b)V.classList.remove(w);T&&V.setAttribute(T.key,T.value),a&&(r.getComputedStyle(F).opacity,document.head.removeChild(F))});function j(p){var R;Y(t,n,(R=h[p])!==null&&R!==void 0?R:p)}function K(p){e.onChanged?e.onChanged(p,j):j(p)}Oe(I,K,{flush:"post",immediate:!0}),Qn(()=>K(I.value));const g=oe({get(){return f?L.value:I.value},set(p){L.value=p}});return Object.assign(g,{store:L,system:y,state:I})}function Ka(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Ba({...e,onChanged:(i,o)=>{var l;e.onChanged?(l=e.onChanged)===null||l===void 0||l.call(e,i==="dark",o,i):o(i)},modes:{dark:t,light:n}}),r=oe(()=>s.system.value);return oe({get(){return s.value==="dark"},set(i){const o=i?"dark":"light";r.value===o?s.value="auto":s.value=o}})}function vs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const Kr=1;function qa(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=Tt,onScroll:i=Tt,offset:o={left:0,right:0,top:0,bottom:0},observe:l={mutation:!1},eventListenerOptions:c={capture:!1,passive:!0},behavior:f="auto",window:a=Re,onError:h=b=>{console.error(b)}}=t,v=typeof l=="boolean"?{mutation:l}:l,y=xe(0),L=xe(0),I=oe({get(){return y.value},set(b){j(b,void 0)}}),Y=oe({get(){return L.value},set(b){j(void 0,b)}});function j(b,T){var F,w,H,N;if(!a)return;const k=le(e);if(!k)return;(F=k instanceof Document?a.document.body:k)===null||F===void 0||F.scrollTo({top:(w=le(T))!==null&&w!==void 0?w:Y.value,left:(H=le(b))!==null&&H!==void 0?H:I.value,behavior:le(f)});const M=(k==null||(N=k.document)===null||N===void 0?void 0:N.documentElement)||k?.documentElement||k;I!=null&&(y.value=M.scrollLeft),Y!=null&&(L.value=M.scrollTop)}const K=xe(!1),g=Ft({left:!0,right:!1,top:!0,bottom:!1}),p=Ft({left:!1,right:!1,top:!1,bottom:!1}),R=b=>{K.value&&(K.value=!1,p.left=!1,p.right=!1,p.top=!1,p.bottom=!1,r(b))},W=Ca(R,n+s),V=b=>{var T;if(!a)return;const F=(b==null||(T=b.document)===null||T===void 0?void 0:T.documentElement)||b?.documentElement||Zn(b),{display:w,flexDirection:H,direction:N}=a.getComputedStyle(F),k=N==="rtl"?-1:1,M=F.scrollLeft;p.left=My.value;const z=Math.abs(M*k)<=(o.left||0),D=Math.abs(M*k)+F.clientWidth>=F.scrollWidth-(o.right||0)-Kr;w==="flex"&&H==="row-reverse"?(g.left=D,g.right=z):(g.left=z,g.right=D),y.value=M;let Z=F.scrollTop;b===a.document&&!Z&&(Z=a.document.body.scrollTop),p.top=ZL.value;const ht=Math.abs(Z)<=(o.top||0),je=Math.abs(Z)+F.clientHeight>=F.scrollHeight-(o.bottom||0)-Kr;w==="flex"&&H==="column-reverse"?(g.top=je,g.bottom=ht):(g.top=ht,g.bottom=je),L.value=Z},G=b=>{var T;a&&(V((T=b.target.documentElement)!==null&&T!==void 0?T:b.target),K.value=!0,W(b),i(b))};return Ke(e,"scroll",n?Aa(G,n,!0,!1):G,c),Qn(()=>{try{const b=le(e);if(!b)return;V(b)}catch(b){h(b)}}),v?.mutation&&e!=null&&e!==a&&e!==document&&Na(e,()=>{const b=le(e);b&&V(b)},{attributes:!0,childList:!0,subtree:!0}),Ke(e,"scrollend",R,c),{x:I,y:Y,isScrolling:K,arrivedState:g,directions:p,measure(){const b=le(e);a&&b&&V(b)}}}function Gu(e={}){const{window:t=Re}=e,n=t?.navigator,s=Zs(()=>n&&"language"in n),r=xe(n?.language);return Ke(t,"languagechange",()=>{n&&(r.value=n.language)},{passive:!0}),{isSupported:s,language:r}}function Co(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const ys=new WeakMap;function Xu(e,t=!1){const n=xe(t);let s=null,r="";Oe(Js(e),l=>{const c=vs(le(l));if(c){const f=c;if(ys.get(f)||ys.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=vs(le(e));!l||n.value||(Wr&&(s=Ke(l,"touchmove",c=>{Ga(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=vs(le(e));!l||!n.value||(Wr&&s?.(),l.style.overflow=r,ys.delete(l),n.value=!1)};return bo(o),oe({get(){return n.value},set(l){l?i():o()}})}function Yu(e={}){const{window:t=Re,...n}=e;return qa(t,n)}function zu(e={}){const{window:t=Re,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=xe(n),c=xe(s),f=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:h,height:v,scale:y}=t.visualViewport;l.value=Math.round(h*y),c.value=Math.round(v*y)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),Qn(f);const a={passive:!0};return Ke("resize",f,a),t&&o==="visual"&&t.visualViewport&&Ke(t.visualViewport,"resize",f,a),r&&Oe(xo("(orientation: portrait)"),()=>f()),{width:l,height:c}}const Xa={};var Ya={};const Ao=/^(?:[a-z]+:|\/\/)/i,za="vitepress-theme-appearance",Ro=Symbol("stack-view:unpack"),Ja=/#.*$/,Qa=/[?#].*$/,Za=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Mo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function eu(e,t,n=!1){if(t===void 0)return!1;if(e=qr(`/${e}`),n)return new RegExp(t).test(e);if(qr(t)!==e)return!1;const s=t.match(Ja);return s?(ge?location.hash:"")===s[0]:!0}function qr(e){return decodeURI(e).replace(Qa,"").replace(Za,"$1")}function tu(e){return Ao.test(e)}function nu(e,t){return Object.keys(e?.locales||{}).find(n=>n!=="root"&&!tu(n)&&eu(t,`^/${n}/`,!0))||"root"}function su(e,t){const n=nu(e,t),{label:s,link:r,...i}=e.locales[n]??{};Object.assign(i,{localeIndex:n});const o=cu(e,t),l={head:Lo(e.head??[],i.head??[],...o.map(c=>c.head??[]).reverse())};return er(l,...o,i,e)}function Oo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ru(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ru(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Lo(...e){const t=[],n=new Map;for(const s of e)for(const r of s){const[i,o]=r,l=Object.entries(o)[0];if(i!=="meta"||!l){t.push(r);continue}const c=`${l[0]}=${l[1]}`,f=n.get(c);f!=null?t[f]=r:(n.set(c,t.length),t.push(r))}return t}const iu=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ou=/^[a-z]:/i;function Gr(e){const t=ou.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(iu,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const bs=new Set;function lu(e){if(bs.size===0){const n=typeof process=="object"&&Ya?.VITE_EXTRA_EXTENSIONS||Xa?.VITE_EXTRA_EXTENSIONS||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>bs.add(s))}const t=e.split(".").pop();return t==null||!bs.has(t.toLowerCase())}function cu({additionalConfig:e},t){if(e===void 0)return[];if(typeof e=="function")return e(t)??[];const n=[],s=t.split("/").slice(0,-1);for(;s.length;){const r=`/${s.join("/")}/`;n.push(e[r]),s.pop()}return n.push(e["/"]),n.filter(r=>r!==void 0)}function er(...e){const t=e.filter(r=>au(r));if(t.length<=1)return e[0];const n=new Set(t.flatMap(r=>Reflect.ownKeys(r))),s=[...n];return new Proxy({},{get(r,i){return i===Ro?t:er(...t.map(o=>o[i]).filter(o=>o!==void 0))},set(){throw new Error("StackView is read-only and cannot be mutated.")},has(r,i){return n.has(i)},ownKeys(){return s},getOwnPropertyDescriptor(r,i){for(const o of t){const l=Object.getOwnPropertyDescriptor(o,i);if(l)return l}}})}er.unpack=function(e){return e?.[Ro]};function au(e){return Object.prototype.toString.call(e)==="[object Object]"}const uu=["shellscript","shell","bash","sh","zsh"];function fu(e){return uu.includes(e)}const du=Symbol(),lt=xe(Dt(va));function Ju(e){const t=oe(()=>su(lt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?_t(!0):n==="force-auto"?To():n?Ka({storageKey:za,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):_t(!1),r=_t(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Oe(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:oe(()=>t.value.themeConfig),page:oe(()=>e.data),frontmatter:oe(()=>e.data.frontmatter),params:oe(()=>e.data.params),lang:oe(()=>t.value.lang),dir:oe(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:oe(()=>t.value.localeIndex||"root"),title:oe(()=>Oo(t.value,e.data)),description:oe(()=>e.data.description||t.value.description),isDark:s,hash:oe(()=>r.value)}}function hu(){const e=wt(du);if(!e)throw new Error("vitepress data not properly injected in app");return e}function pu(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Xr(e){return Ao.test(e)||!e.startsWith("/")?e:pu(lt.value.base,e)}function gu(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){t=Gr(t.slice(1).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`/assets/${t}.${s}.js`}else t=`./${Gr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let En=[];function Qu(e){En.push(e),La(()=>{En=En.filter(t=>t!==e)})}function mu(){let e=lt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Yr(e,n);else if(Array.isArray(e))for(const s of e){const r=Yr(s,n);if(r){t=r;break}}return t}function Yr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const vu=Symbol(),Po="http://a.com",yu=()=>({path:"/",hash:"",query:"",component:null,data:Mo});function Zu(e,t){const n=Ft(yu()),s={route:n,async go(l,c){l=Ds(l),await s.onBeforeRouteChange?.(l)!==!1&&((!ge||await _u(l,c))&&await i(l),o(),await s.onAfterRouteChange?.(l))}};let r=null;async function i(l,c=0,f=!1){if(await s.onBeforePageLoad?.(l)===!1)return;const a=new URL(l,Po),h=r=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(r===h){r=null;const{default:y,__pageData:L}=v;if(!y)throw new Error(`Invalid route component: ${y}`);await s.onAfterPageLoad?.(l),n.path=ge?h:Xr(h),n.component=_n(y),n.data=_n(L),o(a),ge&&qn(()=>{let I=lt.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");return!lt.value.cleanUrls&&!I.endsWith("/")&&(I+=".html"),I!==a.pathname&&(a.pathname=I,l=I+a.search+a.hash,history.replaceState({},"",l)),Fs(a.hash,!1,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const y=await fetch(lt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await y.json(),await i(l,c,!0);return}catch{}if(r===h){r=null,n.path=ge?h:Xr(h),n.component=t?_n(t):null;const y=ge?n.path.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").slice(lt.value.base.length):"404.md";n.data={...Mo,relativePath:y},o(a)}}}function o(l=ge?location:{search:"",hash:""}){n.query=l.search,n.hash=decodeURIComponent(l.hash)}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:v}=new URL(f,c.baseURI),y=new URL(location.href);h===y.origin&&lu(v)&&(l.preventDefault(),s.go(a,{smoothScroll:c.classList.contains("header-anchor")}))},{capture:!0}),window.addEventListener("popstate",async l=>{if(l.state===null)return;const c=Ds(location.href);await i(c,l.state&&l.state.scrollPosition||0),o(),await s.onAfterRouteChange?.(c)}),window.addEventListener("hashchange",l=>{l.preventDefault(),o()})),s}function bu(){const e=wt(vu);if(!e)throw new Error("useRouter() is called without provider.");return e}function Io(){return bu().route}function Fs(e,t=!1,n=0){if(!e||n){window.scrollTo(0,n);return}let s=null;try{s=document.getElementById(decodeURIComponent(e).slice(1))}catch(l){console.warn(l)}if(!s)return;const r=window.scrollY+s.getBoundingClientRect().top-mu()+Number.parseInt(window.getComputedStyle(s).paddingTop,10)||0,i=window.matchMedia("(prefers-reduced-motion)").matches?"instant":t&&Math.abs(r-window.scrollY)<=window.innerHeight?"smooth":"auto";requestAnimationFrame(()=>{if(window.scrollTo({left:0,top:r,behavior:i}),s.focus({preventScroll:!0}),document.activeElement===s||s.hasAttribute("tabindex"))return;const l=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",l)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",l),s.focus({preventScroll:!0}),document.activeElement!==s&&l()})}function Ds(e){const t=new URL(e,Po);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),lt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}async function _u(e,{smoothScroll:t=!1,initialLoad:n=!1,replace:s=!1}={}){const r=Ds(location.href),i=new URL(e,location.origin),o=new URL(r,location.origin);if(e===r){if(!n)return Fs(i.hash,t),!1}else if(s?history.replaceState({},"",e):(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",e)),i.pathname===o.pathname)return i.hash!==o.hash&&(window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:o.href,newURL:i.href})),Fs(i.hash,t)),!1;return!0}const vn=()=>En.forEach(e=>e()),ef=Di({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Io(),{frontmatter:n,site:s}=hu();return Oe(n,vn,{deep:!0,flush:"post"}),()=>Is(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Is(t.component,{onVnodeMounted:vn,onVnodeUpdated:vn,onVnodeUnmounted:vn}):"404 Page Not Found"])}}),tf=Di({setup(e,{slots:t}){const n=_t(!1);return $t(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function nf(){ge&&window.addEventListener("click",e=>{const t=e.target;if(t.matches(".vp-code-group input")){const n=t.parentElement?.parentElement;if(!n)return;const s=Array.from(n.querySelectorAll("input")).indexOf(t);if(s<0)return;const r=n.querySelector(".blocks");if(!r)return;const i=Array.from(r.children).find(c=>c.classList.contains("active"));if(!i)return;const o=r.children[s];if(!o||i===o)return;i.classList.remove("active"),wu(o),n?.querySelector(`label[for="${t.id}"]`)?.scrollIntoView({block:"nearest"})}})}function wu(e){e.classList.add("active"),window.dispatchEvent(new CustomEvent("vitepress:codeGroupTabActivate",{detail:e}))}const Su=[".vp-copy-ignore",".diff.remove"].join(", ");function sf(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,r=n.nextElementSibling?.nextElementSibling;if(!s||!r)return;const i=r.cloneNode(!0);i.querySelectorAll(Su).forEach(c=>c.remove()),i.innerHTML=i.innerHTML.replace(/\n+/g,` +`);let o=i.textContent||"";const l=/language-(\w+)/.exec(s.className)?.[1]||"";fu(l)&&(o=o.replace(/^ *(\$|>) /gm,"").trim()),xu(o).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function xu(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function rf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=_s(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(_s);s.forEach((l,c)=>{const f=o.findIndex(a=>a?.isEqualNode(l??null));f!==-1?delete o[f]:(l?.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};Ri(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Oo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):_s(["meta",{name:"description",content:a}]),r(Lo(o.head,Tu(c)))})}function _s([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function Eu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Tu(e){return e.filter(t=>!Eu(t))}const ws=new Set,No=()=>document.createElement("link"),Cu=e=>{const t=No();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Au=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let yn;const Ru=ge&&(yn=No())&&yn.relList&&yn.relList.supports&&yn.relList.supports("prefetch")?Cu:Au;function of(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ws.has(c)){ws.add(c);const f=gu(c);f&&Ru(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ws.add(l))})})};$t(s);const r=Io();Oe(()=>r.path,s),zn(()=>{n&&n.disconnect()})}export{Uu as $,Ou as A,xe as B,ge as C,Io as D,Mu as E,Qu as F,ve as G,Nu as H,Pu as I,de as J,Iu as K,Ao as L,Lu as M,Gu as N,Mc as O,wt as P,Vs as Q,zu as R,qu as S,ku as T,qn as U,Yu as V,Dt as W,Xu as X,Nl as Y,Du as Z,Ku as _,ho as a,ji as a0,Wu as a1,Hu as a2,rf as a3,vu as a4,Ju as a5,du as a6,ef as a7,tf as a8,lt as a9,Zu as aa,gu as ab,Bu as ac,of as ad,sf as ae,nf as af,Is as ag,ju as ah,Ls as b,$u as c,Di as d,Vu as e,lu as f,Xr as g,oe as h,tu as i,fo as j,Bn as k,eu as l,xo as m,ks as n,Os as o,$t as p,Jl as q,Fu as r,zn as s,Yo as t,hu as u,mu as v,Il as w,_t as x,Ri as y,Oe as z}; diff --git a/.vitepress/dist/assets/chunks/theme.f90DuY8d.js b/.vitepress/dist/assets/chunks/theme.f90DuY8d.js new file mode 100644 index 0000000..13981f2 --- /dev/null +++ b/.vitepress/dist/assets/chunks/theme.f90DuY8d.js @@ -0,0 +1 @@ +import{d as m,c as u,r as c,n as T,o as s,a as R,t as S,b as g,w as f,T as ce,e as h,_,u as Ee,i as De,f as Fe,g as ue,h as b,j as v,k as i,l as U,m as be,p as O,q as Oe,s as de,v as Ge,x as L,y as X,z as E,A as ve,B as Z,C as K,D as ee,E as $e,F as Pe,G as N,H as w,I as j,J as p,K as H,L as Le,M as Re,N as Ue,O as C,P as te,Q as Ve,R as je,S as We,U as Se,V as Te,W as ze,X as Ne,Y as Me,Z as qe,$ as Ke,a0 as Je,a1 as Ye,a2 as Qe}from"./framework.BJEpWshW.js";const Xe=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(s(),u("span",{class:T(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[R(S(e.text),1)])],2))}}),Ze={key:0,class:"VPBackdrop"},et=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(s(),g(ce,{name:"fade"},{default:f(()=>[e.show?(s(),u("div",Ze)):h("",!0)]),_:1}))}}),tt=_(et,[["__scopeId","data-v-7dc602af"]]),$=Ee;function nt(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function oe(e){return e.startsWith("/")?e:`/${e}`}function fe(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(De(e)||e.startsWith("#")||!o.startsWith("http")||!Fe(t))return e;const{site:r}=$(),d=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return ue(d)}function J({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:r}=$(),d=b(()=>({label:t.value.locales[n.value]?.label,link:t.value.locales[n.value]?.link||(n.value==="root"?"/":`/${n.value}/`)}));return{localeLinks:b(()=>Object.entries(t.value.locales).flatMap(([k,y])=>d.value.label===y.label?[]:{text:y.label,link:at(y.link||(k==="root"?"/":`/${k}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)+r.value,lang:y.lang,dir:y.dir})),currentLang:d}}function at(e,t,n,a){return t?e.replace(/\/$/,"")+oe(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const ot={class:"NotFound"},st={class:"code"},it={class:"title"},rt={class:"quote"},lt={class:"action"},ct=["href","aria-label"],ut=m({__name:"NotFound",setup(e){const{theme:t}=$(),{currentLang:n}=J();return(a,o)=>(s(),u("div",ot,[v("p",st,S(i(t).notFound?.code??"404"),1),v("h1",it,S(i(t).notFound?.title??"PAGE NOT FOUND"),1),o[0]||(o[0]=v("div",{class:"divider"},null,-1)),v("blockquote",rt,S(i(t).notFound?.quote??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",lt,[v("a",{class:"link",href:i(ue)(i(t).notFound?.link??i(n).link),"aria-label":i(t).notFound?.linkLabel??"go to home"},S(i(t).notFound?.linkText??"Take me home"),9,ct)])]))}}),dt=_(ut,[["__scopeId","data-v-e04599fa"]]);function we(e,t){if(Array.isArray(e))return Y(e);if(e==null)return[];t=oe(t);const n=Object.keys(e).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>t.startsWith(oe(o))),a=n?e[n]:[];return Array.isArray(a)?Y(a):Y(a.items,a.base)}function vt(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function ft(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function se(e,t){return Array.isArray(t)?t.some(n=>se(e,n)):U(e,t.link)?!0:t.items?se(e,t.items):!1}function Y(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link.replace(/^\//,o.endsWith("/")?"":"/")),a.items&&(a.items=Y(a.items,o)),a})}function ht(){const{hasSidebar:e}=D(),t=be("(min-width: 960px)"),n=be("(min-width: 1280px)");return{isAsideEnabled:b(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const mt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ie=[];function Ie(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function pt(e){const t=[...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:kt(n),link:"#"+n.id,level:a}});return gt(t,e)}function kt(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(mt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function gt(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return $t(e,a,o)}function _t(e,t){const{isAsideEnabled:n}=ht(),a=nt(r,100);let o=null;O(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),Oe(()=>{d(location.hash)}),de(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const l=window.scrollY,k=window.innerHeight,y=document.body.offsetHeight,P=Math.abs(l+k-y)<1,V=ie.map(({element:I,link:x})=>({link:x,top:bt(I)})).filter(({top:I})=>!Number.isNaN(I)).sort((I,x)=>I.top-x.top);if(!V.length){d(null);return}if(l<1){d(null);return}if(P){d(V[V.length-1].link);return}let M=null;for(const{link:I,top:x}of V){if(x>l+Ge()+4)break;M=I}d(M)}function d(l){o&&o.classList.remove("active"),l==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const k=o;k?(k.classList.add("active"),t.value.style.top=k.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function bt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function $t(e,t,n){ie.length=0;const a=[],o=[];return e.forEach(r=>{const d={...r,children:[]};let l=o[o.length-1];for(;l&&l.level>=d.level;)o.pop(),l=o[o.length-1];if(d.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){o.push({level:d.level,shouldIgnore:!0});return}d.level>n||d.level{t=W.value?document.activeElement:void 0}),O(()=>{window.addEventListener("keyup",n)}),de(()=>{window.removeEventListener("keyup",n)});function n(a){a.key==="Escape"&&W.value&&(e(),t?.focus())}}function Pt(){function e(){W.value=!0}function t(){W.value=!1}function n(){W.value?t():e()}return{isOpen:W,open:e,close:t,toggle:n}}function Lt(e){const{page:t,hash:n}=$(),a=L(!1),o=b(()=>e.value.collapsed!=null),r=b(()=>!!e.value.link),d=L(!1),l=()=>{d.value=U(t.value.relativePath,e.value.link)};E([t,e,n],l),O(l);const k=b(()=>d.value?!0:e.value.items?se(t.value.relativePath,e.value.items):!1),y=b(()=>!!(e.value.items&&e.value.items.length));X(()=>{a.value=!!(o.value&&e.value.collapsed)}),ve(()=>{(d.value||k.value)&&(a.value=!1)});function P(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:r,isActiveLink:d,hasActiveLink:k,hasChildren:y,toggle:P}}const re=Z([]),q=Z([]),le=Z(!1);function D(){const{frontmatter:e,theme:t}=$(),n=b(()=>!!(e.value.isHome??e.value.layout==="home")),a=b(()=>e.value.sidebar!==!1&&q.value.length>0&&!n.value),o=b(()=>a.value&&le.value),r=b(()=>a.value?vt(q.value):[]),d=b(()=>n.value?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),l=b(()=>d.value?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),k=b(()=>re.value.length>0);return{isHome:n,sidebar:$e(q),sidebarGroups:r,hasSidebar:a,isSidebarEnabled:o,hasAside:d,leftAside:l,headers:$e(re),hasLocalNav:k}}function Vt({closeSidebar:e}){const{frontmatter:t,page:n,theme:a}=$();E(()=>[n.value.relativePath,a.value.sidebar],([r,d])=>{const l=d?we(d,r):[];JSON.stringify(l)!==JSON.stringify(q.value)&&(q.value=l)},{immediate:!0,deep:!0,flush:"sync"}),Pe(()=>{re.value=pt(t.value.outline??a.value.outline)}),K&&(le.value=window.innerWidth>=960,window.addEventListener("resize",()=>{le.value=window.innerWidth>=960},{passive:!0}));const o=ee();E(()=>o.path,e),yt(e)}const xe=Symbol("layout-info"),St=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){return(t,n)=>{const a=j("VPDocOutlineItem",!0);return s(),u("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(s(!0),u(N,null,w(e.headers,({children:o,link:r,title:d})=>(s(),u("li",null,[v("a",{class:"outline-link",href:r,title:d},S(d),9,St),o?.length?(s(),g(a,{key:0,headers:o},null,8,["headers"])):h("",!0)]))),256))],2)}}}),He=_(Tt,[["__scopeId","data-v-24ee4c62"]]),Nt={class:"content"},Mt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=m({__name:"VPDocAsideOutline",setup(e){const{theme:t}=$(),n=L(),a=L(),{headers:o,hasLocalNav:r}=D();return _t(n,a),(d,l)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":i(r)}]),ref_key:"container",ref:n},[v("div",Nt,[v("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),v("div",Mt,S(i(Ie)(i(t))),1),p(He,{headers:i(o),root:!0},null,8,["headers"])])],2))}}),It=_(wt,[["__scopeId","data-v-3dd37849"]]),xt={class:"VPDocAsideCarbonAds"},Ht=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(s(),u("div",xt,[p(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},At=m({__name:"VPDocAside",setup(e){const{theme:t}=$();return(n,a)=>(s(),u("div",Bt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),p(It),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=v("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(s(),g(Ht,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):h("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Ct=_(At,[["__scopeId","data-v-21b7d62c"]]);function Et(){const{theme:e,page:t}=$();return b(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function Dt(){const{page:e,theme:t,frontmatter:n}=$();return b(()=>{const a=we(t.value.sidebar,e.value.relativePath),o=ft(a),r=Ft(o,y=>y.link.replace(/[?#].*$/,"")),d=r.findIndex(y=>U(e.value.relativePath,y.link)),l=t.value.docFooter?.prev===!1&&!n.value.prev||n.value.prev===!1,k=t.value.docFooter?.next===!1&&!n.value.next||n.value.next===!1;return{prev:l?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??r[d-1]?.docFooterText??r[d-1]?.text,link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??r[d-1]?.link},next:k?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??r[d+1]?.docFooterText??r[d+1]?.text,link:(typeof n.value.next=="object"?n.value.next.link:void 0)??r[d+1]?.link}}})}function Ft(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const B=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=b(()=>t.tag??(t.href?"a":"span")),a=b(()=>t.href&&Le.test(t.href)||t.target==="_blank");return(o,r)=>(s(),g(H(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(fe)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:f(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ot={class:"VPLastUpdated"},Gt=["datetime"],Rt=m({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=$(),{language:o}=Ue(),r=Re("timeRef"),d=b(()=>new Date(n.value.lastUpdated)),l=b(()=>d.value.toISOString()),k=Z("");return O(()=>{X(()=>{const y=t.value.lastUpdated?.formatOptions?.forceLocale?a.value:o.value;k.value=new Intl.DateTimeFormat(y,t.value.lastUpdated?.formatOptions??{dateStyle:"medium",timeStyle:"medium"}).format(d.value),y&&a.value!==y?r.value?.setAttribute("lang",y):r.value?.removeAttribute("lang")})}),(y,P)=>(s(),u("p",Ot,[R(S(i(t).lastUpdated?.text||i(t).lastUpdatedText||"Last updated")+": ",1),v("time",{ref_key:"timeRef",ref:r,datetime:l.value},S(k.value),9,Gt)]))}}),Ut=_(Rt,[["__scopeId","data-v-63306b0b"]]),jt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},zt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Kt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Jt={class:"pager"},Yt=["innerHTML"],Qt=["innerHTML"],Xt={class:"pager"},Zt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=$(),o=Et(),r=Dt(),d=b(()=>t.value.editLink&&a.value.editLink!==!1),l=b(()=>n.value.lastUpdated),k=b(()=>d.value||l.value||r.value.prev||r.value.next);return(y,P)=>k.value?(s(),u("footer",jt,[c(y.$slots,"doc-footer-before",{},void 0,!0),d.value||l.value?(s(),u("div",Wt,[d.value?(s(),u("div",zt,[p(B,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:f(()=>[P[0]||(P[0]=v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),R(" "+S(i(o).text),1)]),_:1},8,["href"])])):h("",!0),l.value?(s(),u("div",qt,[p(Ut)])):h("",!0)])):h("",!0),i(r).prev?.link||i(r).next?.link?(s(),u("nav",Kt,[P[1]||(P[1]=v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),v("div",Jt,[i(r).prev?.link?(s(),g(B,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:f(()=>[v("span",{class:"desc",innerHTML:i(t).docFooter?.prev||"Previous page"},null,8,Yt),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,Qt)]),_:1},8,["href"])):h("",!0)]),v("div",Xt,[i(r).next?.link?(s(),g(B,{key:0,class:"pager-link next",href:i(r).next.link},{default:f(()=>[v("span",{class:"desc",innerHTML:i(t).docFooter?.next||"Next page"},null,8,Zt),v("span",{class:"title",innerHTML:i(r).next.text},null,8,en)]),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}),nn=_(tn,[["__scopeId","data-v-84b12b97"]]),an={class:"container"},on={class:"aside-container"},sn={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(e){const{theme:t}=$(),n=ee(),{hasSidebar:a,hasAside:o,leftAside:r}=D(),d=b(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,k)=>{const y=j("Content");return s(),u("div",{class:T(["VPDoc",{"has-sidebar":i(a),"has-aside":i(o)}])},[c(l.$slots,"doc-top",{},void 0,!0),v("div",an,[i(o)?(s(),u("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[k[0]||(k[0]=v("div",{class:"aside-curtain"},null,-1)),v("div",on,[v("div",sn,[p(Ct,null,{"aside-top":f(()=>[c(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),v("div",rn,[v("div",ln,[c(l.$slots,"doc-before",{},void 0,!0),v("main",cn,[p(y,{class:T(["vp-doc",[d.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),p(nn,null,{"doc-footer-before":f(()=>[c(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(l.$slots,"doc-after",{},void 0,!0)])])]),c(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=_(un,[["__scopeId","data-v-9a3aec1d"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=b(()=>t.href&&Le.test(t.href)),a=b(()=>t.tag||(t.href?"a":"button"));return(o,r)=>(s(),g(H(a.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?i(fe)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:f(()=>[c(o.$slots,"default",{},()=>[R(S(e.text),1)],!0)]),_:3},8,["class","href","target","rel"]))}}),fn=_(vn,[["__scopeId","data-v-1aa86037"]]),hn=["src","alt"],mn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=j("VPImage",!0);return e.image?(s(),u(N,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",C({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(ue)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,hn)):(s(),u(N,{key:1},[p(a,C({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),p(a,C({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=_(mn,[["__scopeId","data-v-737f6904"]]),pn={class:"container"},kn={class:"main"},gn={class:"heading"},_n=["innerHTML"],bn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Ln={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const{heroImageSlotExists:t}=te(xe);return(n,a)=>(s(),u("div",{class:T(["VPHero",{"has-image":e.image||i(t)}])},[v("div",pn,[v("div",kn,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[v("h1",gn,[e.name?(s(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,_n)):h("",!0),e.text?(s(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,bn)):h("",!0)]),e.tagline?(s(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(s(),u("div",yn,[(s(!0),u(N,null,w(e.actions,o=>(s(),u("div",{key:o.link,class:"action"},[p(fn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(s(),u("div",Pn,[v("div",Ln,[a[0]||(a[0]=v("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(s(),g(Q,{key:0,class:"image-src",image:e.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Sn=_(Vn,[["__scopeId","data-v-70010e3d"]]),Tn=m({__name:"VPHomeHero",setup(e){const{frontmatter:t}=$();return(n,a)=>i(t).hero?(s(),g(Sn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},Mn={key:0,class:"icon"},wn=["innerHTML"],In=["innerHTML"],xn=["innerHTML"],Hn={key:4,class:"link-text"},Bn={class:"link-text-value"},An=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(s(),g(B,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[v("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",Mn,[p(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),g(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,wn)):h("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,In),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,xn)):h("",!0),e.linkText?(s(),u("div",Hn,[v("p",Bn,[R(S(e.linkText)+" ",1),n[0]||(n[0]=v("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Cn=_(An,[["__scopeId","data-v-1b730767"]]),En={key:0,class:"VPFeatures"},Dn={class:"container"},Fn={class:"items"},On=m({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=b(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(s(),u("div",En,[v("div",Dn,[v("div",Fn,[(s(!0),u(N,null,w(e.features,r=>(s(),u("div",{key:r.title,class:T(["item",[n.value]])},[p(Cn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Gn=_(On,[["__scopeId","data-v-72a5b475"]]),Rn=m({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=$();return(n,a)=>i(t).features?(s(),g(Gn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):h("",!0)}}),Un=m({__name:"VPHomeContent",setup(e){const{width:t}=je({initialWidth:0,includeScrollbar:!1});return(n,a)=>(s(),u("div",{class:"vp-doc container",style:Ve(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),jn=_(Un,[["__scopeId","data-v-608c700d"]]),Wn=m({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=$();return(a,o)=>{const r=j("Content");return s(),u("div",{class:T(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),p(Tn,null,{"home-hero-info-before":f(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),p(Rn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(s(),g(jn,{key:0},{default:f(()=>[p(r)]),_:1})):(s(),g(r,{key:1}))],2)}}}),zn=_(Wn,[["__scopeId","data-v-44622c33"]]),qn={},Kn={class:"VPPage"};function Jn(e,t){const n=j("Content");return s(),u("div",Kn,[c(e.$slots,"page-top"),p(n),c(e.$slots,"page-bottom")])}const Yn=_(qn,[["render",Jn]]),Qn=m({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=$(),{isHome:a,hasSidebar:o}=D();return(r,d)=>(s(),u("div",{class:T(["VPContent",{"has-sidebar":i(o),"is-home":i(a)}]),id:"VPContent"},[i(t).isNotFound?c(r.$slots,"not-found",{key:0},()=>[p(dt)],!0):i(n).layout==="page"?(s(),g(Yn,{key:1},{"page-top":f(()=>[c(r.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(r.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(s(),g(zn,{key:2},{"home-hero-before":f(()=>[c(r.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(r.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(r.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(r.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(r.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(r.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(r.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(r.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(r.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(s(),g(H(i(n).layout),{key:3})):(s(),g(dn,{key:4},{"doc-top":f(()=>[c(r.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(r.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(r.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(r.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(r.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(r.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(r.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(r.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Xn=_(Qn,[["__scopeId","data-v-f1c8b00b"]]),Zn={class:"container"},ea=["innerHTML"],ta=["innerHTML"],na=m({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=$(),{hasSidebar:a}=D();return(o,r)=>i(t).footer&&i(n).footer!==!1?(s(),u("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(a)}])},[v("div",Zn,[i(t).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,ea)):h("",!0),i(t).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,ta)):h("",!0)])],2)):h("",!0)}}),aa=_(na,[["__scopeId","data-v-59801706"]]),oa={class:"menu-text"},sa={class:"header"},ia={class:"outline"},ra=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=$(),a=L(!1),o=L(0),r=L(),d=L();function l(V){r.value?.contains(V.target)||(a.value=!1)}E(a,V=>{if(V){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),We("Escape",()=>{a.value=!1}),Pe(()=>{a.value=!1});function k(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y(V){V.target.classList.contains("outline-link")&&(d.value&&(d.value.style.transition="none"),Se(()=>{a.value=!1}))}function P(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(V,M)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(s(),u("button",{key:0,onClick:k,class:T({open:a.value})},[v("span",oa,S(i(Ie)(i(n))),1),M[0]||(M[0]=v("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:P},S(i(n).returnToTopLabel||"Return to top"),1)),p(ce,{name:"flyout"},{default:f(()=>[a.value?(s(),u("div",{key:0,ref_key:"items",ref:d,class:"items",onClick:y},[v("div",sa,[v("a",{class:"top-link",href:"#",onClick:P},S(i(n).returnToTopLabel||"Return to top"),1)]),v("div",ia,[p(He,{headers:e.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),la=_(ra,[["__scopeId","data-v-85ddaa89"]]),ca={class:"container"},ua=["aria-expanded"],da={class:"menu-text"},va=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=$(),{isHome:n,hasSidebar:a,headers:o,hasLocalNav:r}=D(),{y:d}=Te(),l=L(0);O(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))});const k=b(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:!r.value,fixed:!r.value&&!a.value}));return(y,P)=>!i(n)&&(i(r)||i(a)||i(d)>=l.value)?(s(),u("div",{key:0,class:T(k.value)},[v("div",ca,[i(a)?(s(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=V=>y.$emit("open-menu"))},[P[1]||(P[1]=v("span",{class:"vpi-align-left menu-icon"},null,-1)),v("span",da,S(i(t).sidebarMenuLabel||"Menu"),1)],8,ua)):h("",!0),p(la,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),fa=_(va,[["__scopeId","data-v-1924e3fd"]]);function ha(){const e=L(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const r=ee();return E(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const he=Symbol("nav"),ma={},pa={class:"VPSwitch",type:"button",role:"switch"},ka={class:"check"},ga={key:0,class:"icon"};function _a(e,t){return s(),u("button",pa,[v("span",ka,[e.$slots.default?(s(),u("span",ga,[c(e.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ba=_(ma,[["render",_a],["__scopeId","data-v-54855812"]]),$a=m({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=$(),a=te("toggle-appearance",()=>{t.value=!t.value}),o=L("");return ve(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,d)=>(s(),g(ba,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:f(()=>[...d[0]||(d[0]=[v("span",{class:"vpi-sun sun"},null,-1),v("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),me=_($a,[["__scopeId","data-v-c6d441d6"]]),ya={key:0,class:"VPNavBarAppearance"},Pa=m({__name:"VPNavBarAppearance",setup(e){const{site:t}=$();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",ya,[p(me)])):h("",!0)}}),La=_(Pa,[["__scopeId","data-v-9cde98c8"]]),pe=L();let Be=!1,ae=0;function Va(e){const t=L(!1);if(K){!Be&&Sa(),ae++;const n=E(pe,a=>{a===e.el.value||e.el.value?.contains(a)?(t.value=!0,e.onFocus?.()):(t.value=!1,e.onBlur?.())});de(()=>{n(),ae--,ae||Ta()})}return ze(t)}function Sa(){document.addEventListener("focusin",Ae),Be=!0,pe.value=document.activeElement}function Ta(){document.removeEventListener("focusin",Ae)}function Ae(){pe.value=document.activeElement}const Na={class:"VPMenuLink"},Ma=["innerHTML"],wa=m({inheritAttrs:!1,__name:"VPMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=b(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,r)=>(s(),u("div",Na,[p(B,C(o.$attrs,{class:{active:i(U)(i(n).relativePath,e.item.activeMatch||a.value,!!e.item.activeMatch)},href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon}),{default:f(()=>[v("span",{innerHTML:e.item.text},null,8,Ma)]),_:1},16,["class","href","target","rel","no-icon"])]))}}),ne=_(wa,[["__scopeId","data-v-6f095817"]]),Ia={class:"VPMenuGroup"},xa={key:0,class:"title"},Ha=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Ia,[e.text?(s(),u("p",xa,S(e.text),1)):h("",!0),(s(!0),u(N,null,w(e.items,a=>(s(),u(N,{key:JSON.stringify(a)},["link"in a?(s(),g(ne,{key:0,item:a},null,8,["item"])):h("",!0)],64))),128))]))}}),Ba=_(Ha,[["__scopeId","data-v-8b568562"]]),Aa={class:"VPMenu"},Ca={key:0,class:"items"},Ea=m({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(s(),u("div",Aa,[e.items?(s(),u("div",Ca,[(s(!0),u(N,null,w(e.items,a=>(s(),u(N,{key:JSON.stringify(a)},["link"in a?(s(),g(ne,{key:0,item:a},null,8,["item"])):"component"in a?(s(),g(H(a.component),C({key:1,ref_for:!0},a.props),null,16)):(s(),g(Ba,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),Da=_(Ea,[["__scopeId","data-v-76c0c713"]]),Fa=["aria-expanded","aria-label"],Oa={key:0,class:"text"},Ga=["innerHTML"],Ra={key:1,class:"vpi-more-horizontal icon"},Ua={class:"menu"},ja=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=L(!1),n=L();Va({el:n,onBlur:a});function a(){t.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=d=>t.value=!0),onMouseleave:r[2]||(r[2]=d=>t.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=d=>t.value=!t.value)},[e.button||e.icon?(s(),u("span",Oa,[e.icon?(s(),u("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):h("",!0),e.button?(s(),u("span",{key:1,innerHTML:e.button},null,8,Ga)):h("",!0),r[3]||(r[3]=v("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",Ra))],8,Fa),v("div",Ua,[p(Da,{items:e.items},{default:f(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=_(ja,[["__scopeId","data-v-6d4d2382"]]),Wa=["href","aria-label","rel","innerHTML"],za=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{},me:{type:Boolean}},setup(e){const t=e,n=L();O(async()=>{await Se();const o=n.value?.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=b(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:e.me?"me noopener":"noopener",innerHTML:a.value},null,8,Wa))}}),qa=_(za,[["__scopeId","data-v-9015c34a"]]),Ka={class:"VPSocialLinks"},Ja=m({__name:"VPSocialLinks",props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(t,n)=>(s(),u("div",Ka,[(s(!0),u(N,null,w(e.links,({link:a,icon:o,ariaLabel:r})=>(s(),g(qa,{key:a,icon:o,link:a,ariaLabel:r,me:e.me},null,8,["icon","link","ariaLabel","me"]))),128))]))}}),ge=_(Ja,[["__scopeId","data-v-6e5e7bc9"]]),Ya={key:0,class:"group translations"},Qa={class:"trans-title"},Xa={key:1,class:"group"},Za={class:"item appearance"},eo={class:"label"},to={class:"appearance-action"},no={key:2,class:"group"},ao={class:"item social-links"},oo=m({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=$(),{localeLinks:a,currentLang:o}=J({correspondingLink:!0}),r=b(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(d,l)=>r.value?(s(),g(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[i(a).length&&i(o).label?(s(),u("div",Ya,[v("p",Qa,S(i(o).label),1),(s(!0),u(N,null,w(i(a),k=>(s(),g(ne,{key:k.link,item:k,lang:k.lang,dir:k.dir},null,8,["item","lang","dir"]))),128))])):h("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Xa,[v("div",Za,[v("p",eo,S(i(n).darkModeSwitchLabel||"Appearance"),1),v("div",to,[p(me)])])])):h("",!0),i(n).socialLinks?(s(),u("div",no,[v("div",ao,[p(ge,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),so=_(oo,[["__scopeId","data-v-392c0efd"]]),io=["aria-expanded"],ro=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(s(),u("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)])],10,io))}}),lo=_(ro,[["__scopeId","data-v-6ffe035d"]]),co=["innerHTML"],uo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=b(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,r)=>(s(),g(B,{class:T({VPNavBarMenuLink:!0,active:i(U)(i(n).relativePath,e.item.activeMatch||a.value,!!e.item.activeMatch)}),href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:f(()=>[v("span",{innerHTML:e.item.text},null,8,co)]),_:1},8,["class","href","target","rel","no-icon"]))}}),vo=_(uo,[["__scopeId","data-v-1494679c"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=r=>"component"in r?!1:"link"in r?U(n.value.relativePath,typeof r.link=="function"?r.link(n.value):r.link,!!t.item.activeMatch):r.items.some(a),o=b(()=>a(t.item));return(r,d)=>(s(),g(ke,{class:T({VPNavBarMenuGroup:!0,active:i(U)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(e){const{theme:t}=$();return(n,a)=>i(t).nav?(s(),u("nav",ho,[a[0]||(a[0]=v("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(N,null,w(i(t).nav,o=>(s(),u(N,{key:JSON.stringify(o)},["link"in o?(s(),g(vo,{key:0,item:o},null,8,["item"])):"component"in o?(s(),g(H(o.component),C({key:1,ref_for:!0},o.props),null,16)):(s(),g(fo,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),po=_(mo,[["__scopeId","data-v-138a1628"]]);function ko(e){const{localeIndex:t,theme:n}=$();function a(o){const r=o.split("."),d=n.value.search?.options,l=d&&typeof d=="object",k=l&&d.locales?.[t.value]?.translations||null,y=l&&d.translations||null;let P=k,V=y,M=e;const I=r.pop();for(const x of r){let A=null;const G=M?.[x];G&&(A=M=G);const F=V?.[x];F&&(A=V=F);const z=P?.[x];z&&(A=P=z),G||(M=A),F||(V=A),z||(P=A)}return P?.[I]??V?.[I]??M?.[I]??""}return a}const go=["aria-label"],_o={class:"DocSearch-Button-Container"},bo={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(e){const n=ko({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(s(),u("button",{type:"button","aria-label":i(n)("button.buttonAriaLabel"),"aria-keyshortcuts":"/ control+k meta+k",class:"DocSearch DocSearch-Button"},[v("span",_o,[o[0]||(o[0]=v("span",{class:"vpi-search DocSearch-Search-Icon"},null,-1)),v("span",bo,S(i(n)("button.buttonText")),1)]),o[1]||(o[1]=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"})],-1))],8,go))}}),$o={class:"VPNavBarSearch"},yo={id:"local-search"},Po={key:1,id:"docsearch"},Lo=m({__name:"VPNavBarSearch",setup(e){const t=()=>null,n=()=>null,{theme:a}=$(),o=L(!1),r=L(!1);O(()=>{});function d(){o.value||(o.value=!0,setTimeout(l,16))}function l(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||l()},16)}const k=L(!1),y="";return(P,V)=>(s(),u("div",$o,[i(y)==="local"?(s(),u(N,{key:0},[k.value?(s(),g(i(t),{key:0,onClose:V[0]||(V[0]=M=>k.value=!1)})):h("",!0),v("div",yo,[p(ye,{onClick:V[1]||(V[1]=M=>k.value=!0)})])],64)):i(y)==="algolia"?(s(),u(N,{key:1},[o.value?(s(),g(i(n),{key:0,algolia:i(a).search?.options??i(a).algolia,onVnodeBeforeMount:V[2]||(V[2]=M=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(s(),u("div",Po,[p(ye,{onClick:d})]))],64)):h("",!0)]))}}),Vo=m({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=$();return(n,a)=>i(t).socialLinks?(s(),g(ge,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):h("",!0)}}),So=_(Vo,[["__scopeId","data-v-a0cc7756"]]),To=["href","rel","target"],No=["innerHTML"],Mo={key:2},wo=m({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=$(),{hasSidebar:a}=D(),{currentLang:o}=J(),r=b(()=>typeof n.value.logoLink=="string"?n.value.logoLink:n.value.logoLink?.link),d=b(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.rel),l=b(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.target);return(k,y)=>(s(),u("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(a)}])},[v("a",{class:"title",href:r.value??i(fe)(i(o).link),rel:d.value,target:l.value},[c(k.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(s(),g(Q,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):h("",!0),i(n).siteTitle?(s(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,No)):i(n).siteTitle===void 0?(s(),u("span",Mo,S(i(t).title),1)):h("",!0),c(k.$slots,"nav-bar-title-after",{},void 0,!0)],8,To)],2))}}),Io=_(wo,[["__scopeId","data-v-16a8c3d8"]]),xo={class:"items"},Ho={class:"title"},Bo=m({__name:"VPNavBarTranslations",setup(e){const{theme:t}=$(),{localeLinks:n,currentLang:a}=J({correspondingLink:!0});return(o,r)=>i(n).length&&i(a).label?(s(),g(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:f(()=>[v("div",xo,[v("p",Ho,S(i(a).label),1),(s(!0),u(N,null,w(i(n),d=>(s(),g(ne,{key:d.link,item:d,lang:d.lang,dir:d.dir},null,8,["item","lang","dir"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ao=_(Bo,[["__scopeId","data-v-10e66b35"]]),Co={class:"wrapper"},Eo={class:"container"},Do={class:"title"},Fo={class:"content"},Oo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=Te(),{isHome:a,hasSidebar:o}=D(),r=L({});return ve(()=>{r.value={"has-sidebar":o.value,home:a.value,top:n.value===0,"screen-open":t.isScreenOpen}}),(d,l)=>(s(),u("div",{class:T(["VPNavBar",r.value])},[v("div",Co,[v("div",Eo,[v("div",Do,[p(Io,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",Fo,[v("div",Oo,[c(d.$slots,"nav-bar-content-before",{},void 0,!0),p(Lo,{class:"search"}),p(po,{class:"menu"}),p(Ao,{class:"translations"}),p(La,{class:"appearance"}),p(So,{class:"social-links"}),p(so,{class:"extra"}),c(d.$slots,"nav-bar-content-after",{},void 0,!0),p(lo,{class:"hamburger",active:e.isScreenOpen,onClick:l[0]||(l[0]=k=>d.$emit("toggle-screen"))},null,8,["active"])])])])]),l[1]||(l[1]=v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1))],2))}}),Ro=_(Go,[["__scopeId","data-v-edbf9404"]]),Uo={key:0,class:"VPNavScreenAppearance"},jo={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=$();return(a,o)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Uo,[v("p",jo,S(i(n).darkModeSwitchLabel||"Appearance"),1),p(me)])):h("",!0)}}),zo=_(Wo,[["__scopeId","data-v-0f7922c3"]]),qo=["innerHTML"],Ko=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=b(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=te(he);return(r,d)=>(s(),g(B,{class:"VPNavScreenMenuLink",href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(o)},{default:f(()=>[v("span",{innerHTML:e.item.text},null,8,qo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Jo=_(Ko,[["__scopeId","data-v-82fb7219"]]),Yo=["innerHTML"],Qo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=b(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=te(he);return(r,d)=>(s(),g(B,{class:"VPNavScreenMenuGroupLink",href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(o)},{default:f(()=>[v("span",{innerHTML:e.item.text},null,8,Yo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ce=_(Qo,[["__scopeId","data-v-26b11f1e"]]),Xo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},es=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Xo,[e.text?(s(),u("p",Zo,S(e.text),1)):h("",!0),(s(!0),u(N,null,w(e.items,a=>(s(),g(Ce,{key:a.text,item:a},null,8,["item"]))),128))]))}}),ts=_(es,[["__scopeId","data-v-762f1acc"]]),ns=["aria-controls","aria-expanded"],as=["innerHTML"],os=["id"],ss={key:0,class:"item"},is={key:1,class:"item"},rs={key:2,class:"group"},ls=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=L(!1),a=b(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,d)=>(s(),u("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[v("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[v("span",{class:"button-text",innerHTML:e.text},null,8,as),d[0]||(d[0]=v("span",{class:"vpi-plus button-icon"},null,-1))],8,ns),v("div",{id:a.value,class:"items"},[(s(!0),u(N,null,w(e.items,l=>(s(),u(N,{key:JSON.stringify(l)},["link"in l?(s(),u("div",ss,[p(Ce,{item:l},null,8,["item"])])):"component"in l?(s(),u("div",is,[(s(),g(H(l.component),C({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(s(),u("div",rs,[p(ts,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,os)],2))}}),cs=_(ls,[["__scopeId","data-v-beec6482"]]),us={key:0,class:"VPNavScreenMenu"},ds=m({__name:"VPNavScreenMenu",setup(e){const{theme:t}=$();return(n,a)=>i(t).nav?(s(),u("nav",us,[(s(!0),u(N,null,w(i(t).nav,o=>(s(),u(N,{key:JSON.stringify(o)},["link"in o?(s(),g(Jo,{key:0,item:o},null,8,["item"])):"component"in o?(s(),g(H(o.component),C({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),g(cs,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),vs=m({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=$();return(n,a)=>i(t).socialLinks?(s(),g(ge,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):h("",!0)}}),fs={class:"list"},hs=m({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=J({correspondingLink:!0}),a=L(!1);function o(){a.value=!a.value}return(r,d)=>i(t).length&&i(n).label?(s(),u("div",{key:0,class:T(["VPNavScreenTranslations",{open:a.value}])},[v("button",{class:"title",onClick:o},[d[0]||(d[0]=v("span",{class:"vpi-languages icon lang"},null,-1)),R(" "+S(i(n).label)+" ",1),d[1]||(d[1]=v("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),v("ul",fs,[(s(!0),u(N,null,w(i(t),l=>(s(),u("li",{key:l.link,class:"item"},[p(B,{class:"link",href:l.link,lang:l.lang,dir:l.dir},{default:f(()=>[R(S(l.text),1)]),_:2},1032,["href","lang","dir"])]))),128))])],2)):h("",!0)}}),ms=_(hs,[["__scopeId","data-v-e1ea5f7c"]]),ps={class:"container"},ks=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=L(null),n=Ne(K?document.body:null);return(a,o)=>(s(),g(ce,{name:"fade",onEnter:o[0]||(o[0]=r=>n.value=!0),onAfterLeave:o[1]||(o[1]=r=>n.value=!1)},{default:f(()=>[e.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[v("div",ps,[c(a.$slots,"nav-screen-content-before",{},void 0,!0),p(ds,{class:"menu"}),p(ms,{class:"translations"}),p(zo,{class:"appearance"}),p(vs,{class:"social-links"}),c(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),gs=_(ks,[["__scopeId","data-v-786ada9e"]]),_s={key:0,class:"VPNav"},bs=m({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=ha(),{frontmatter:o}=$(),r=b(()=>o.value.navbar!==!1);return Me(he,{closeScreen:n}),X(()=>{K&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(d,l)=>r.value?(s(),u("header",_s,[p(Ro,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),p(gs,{open:i(t)},{"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),$s=_(bs,[["__scopeId","data-v-21e98c69"]]),ys=["role","tabindex"],Ps={key:1,class:"items"},Ls=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:r,hasActiveLink:d,hasChildren:l,toggle:k}=Lt(b(()=>t.item)),y=b(()=>l.value?"section":"div"),P=b(()=>o.value?"a":"div"),V=b(()=>l.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),M=b(()=>o.value?void 0:"button"),I=b(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":d.value}]);function x(G){"key"in G&&G.key!=="Enter"||!t.item.link&&k()}function A(){t.item.link&&k()}return(G,F)=>{const z=j("VPSidebarItem",!0);return s(),g(H(y.value),{class:T(["VPSidebarItem",I.value])},{default:f(()=>[e.item.text?(s(),u("div",C({key:0,class:"item",role:M.value},qe(e.item.items?{click:x,keydown:x}:{},!0),{tabindex:e.item.items&&0}),[F[1]||(F[1]=v("div",{class:"indicator"},null,-1)),e.item.link?(s(),g(B,{key:0,tag:P.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:f(()=>[(s(),g(H(V.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),g(H(V.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:Ke(A,["enter"]),tabindex:"0"},[...F[0]||(F[0]=[v("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):h("",!0)],16,ys)):h("",!0),e.item.items&&e.item.items.length?(s(),u("div",Ps,[e.depth<5?(s(!0),u(N,{key:0},w(e.item.items,_e=>(s(),g(z,{key:_e.text,item:_e,depth:e.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Vs=_(Ls,[["__scopeId","data-v-15093875"]]),Ss=m({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=L(!0);let n=null;return O(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),Je(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(s(!0),u(N,null,w(e.items,r=>(s(),u("div",{key:r.text,class:T(["group",{"no-transition":t.value}])},[p(Vs,{item:r,depth:0},null,8,["item"])],2))),128))}}),Ts=_(Ss,[["__scopeId","data-v-c8cf511c"]]),Ns={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ms=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=D(),a=e,o=L(null),r=Ne(K?document.body:null);E([a,o],()=>{a.open?(r.value=!0,o.value?.focus()):r.value=!1},{immediate:!0,flush:"post"});const d=L(0);return E(t,()=>{d.value+=1},{deep:!0}),(l,k)=>i(n)?(s(),u("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:k[0]||(k[0]=Ye(()=>{},["stop"]))},[k[2]||(k[2]=v("div",{class:"curtain"},null,-1)),v("nav",Ns,[k[1]||(k[1]=v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(l.$slots,"sidebar-nav-before",{},void 0,!0),(s(),g(Ts,{items:i(t),key:d.value},null,8,["items"])),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),ws=_(Ms,[["__scopeId","data-v-01266c03"]]),Is={href:"#VPContent",class:"VPSkipLink visually-hidden"},xs=m({__name:"VPSkipLink",setup(e){const{theme:t}=$(),n=ee(),a=L();return E(()=>n.path,()=>a.value.focus()),(o,r)=>(s(),u(N,null,[v("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),v("a",Is,S(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Hs=_(xs,[["__scopeId","data-v-451012a8"]]),Bs=m({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=Pt();Vt({closeSidebar:a});const{frontmatter:o}=$(),r=Qe(),d=b(()=>!!r["home-hero-image"]);return Me(xe,{heroImageSlotExists:d}),(l,k)=>{const y=j("Content");return i(o).layout!==!1?(s(),u("div",{key:0,class:T(["Layout",i(o).pageClass])},[c(l.$slots,"layout-top",{},void 0,!0),p(Hs),p(tt,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),p($s,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),p(fa,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),p(ws,{open:i(t)},{"sidebar-nav-before":f(()=>[c(l.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(l.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),p(Xn,null,{"page-top":f(()=>[c(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(l.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(l.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(l.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(l.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(l.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(l.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(l.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(l.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),p(aa),c(l.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),g(y,{key:1}))}}}),As=_(Bs,[["__scopeId","data-v-170c53fe"]]),Es={Layout:As,enhanceApp:({app:e})=>{e.component("Badge",Xe)}};export{Es as t}; diff --git a/.vitepress/dist/assets/config_instances.md.CvnejDKP.js b/.vitepress/dist/assets/config_instances.md.CvnejDKP.js new file mode 100644 index 0000000..22ad518 --- /dev/null +++ b/.vitepress/dist/assets/config_instances.md.CvnejDKP.js @@ -0,0 +1,52 @@ +import{_ as i,c as a,o as n,ah as t}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"实例配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/instances.md","filePath":"config/instances.md"}'),h={name:"config/instances.md"};function l(e,s,k,p,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

实例配置

实例 (Instance) 和工作者 (Worker) 是 WebAI2API 的核心配置概念。

概念说明

Instance (浏览器实例)

一个 Instance 代表一个独立的浏览器进程,具有:

  • 独立的用户数据目录
  • 独立的 Cookie 和登录状态
  • 可选的专属代理配置

Worker (工作者)

Worker 是 Instance 内的一个标签页,负责与特定平台交互。同一 Instance 下的多个 Worker:

  • 共享浏览器数据和登录状态
  • 共享代理配置
  • 可以是不同的适配器类型

配置结构

yaml
backend:
+  pool:
+    instances:
+      - name: "browser_default"    # 实例 ID
+        userDataMark: "01"         # 数据目录标识 (可选)
+        proxy:                      # 实例级代理 (可选)
+          enable: true
+          type: socks5
+          host: 127.0.0.1
+          port: 1080
+        workers:                    # Worker 列表
+          - name: "worker1"
+            type: lmarena
+          - name: "worker2"
+            type: zai_is

Instance 配置项

配置项类型必填说明
namestring实例唯一标识,用于日志和 Cookie 获取
userDataMarkstring数据目录标识,留空使用默认目录
proxyobject实例级代理配置,参见代理设置
workersarrayWorker 配置列表

数据目录

  • 默认位置: data/camoufoxUserData
  • 设置 userDataMark 后: data/camoufoxUserData_{mark}

Worker 配置项

配置项类型必填说明
namestringWorker 唯一标识(全局唯一)
typestring适配器类型
mergeTypesarray聚合模式的适配器列表 (type=merge 时必填)
mergeMonitorstring空闲时监控的后端 (可选)

适配器类型

类型说明
lmarenaLMArena 图片生成
lmarena_textLMArena 文本生成
gemini_bizGemini Business 图片生成
gemini_biz_textGemini Business 文本生成
geminiGoogle Gemini
zai_iszAI 图片生成
nanobananafree_aiNano Banana Free
merge聚合模式(单标签多后端)

聚合模式 (Merge)

聚合模式允许在单个标签页中支持多个后端,实现故障转移:

yaml
workers:
+  - name: "merged_worker"
+    type: merge
+    mergeTypes: [gemini_biz, lmarena, zai_is]
+    mergeMonitor: gemini_biz  # 空闲时挂机监控的后端

聚合模式优势

  • 节省浏览器资源
  • 自动故障转移
  • 统一登录状态

配置示例

单实例单 Worker

yaml
instances:
+  - name: "default"
+    workers:
+      - name: "worker1"
+        type: lmarena

多实例隔离

yaml
instances:
+  # 实例 1: 美国代理
+  - name: "browser_us"
+    userDataMark: "us"
+    proxy:
+      enable: true
+      type: socks5
+      host: us-proxy.example.com
+      port: 1080
+    workers:
+      - name: "us_worker"
+        type: lmarena
+
+  # 实例 2: 日本代理
+  - name: "browser_jp"
+    userDataMark: "jp"
+    proxy:
+      enable: true
+      type: socks5
+      host: jp-proxy.example.com
+      port: 1080
+    workers:
+      - name: "jp_worker"
+        type: lmarena

聚合模式

yaml
instances:
+  - name: "browser_merged"
+    workers:
+      - name: "all_in_one"
+        type: merge
+        mergeTypes: [gemini_biz, lmarena, zai_is]
+        mergeMonitor: gemini_biz
`,30)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; diff --git a/.vitepress/dist/assets/config_instances.md.CvnejDKP.lean.js b/.vitepress/dist/assets/config_instances.md.CvnejDKP.lean.js new file mode 100644 index 0000000..7bceb1f --- /dev/null +++ b/.vitepress/dist/assets/config_instances.md.CvnejDKP.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ah as t}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"实例配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/instances.md","filePath":"config/instances.md"}'),h={name:"config/instances.md"};function l(e,s,k,p,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",30)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; diff --git a/.vitepress/dist/assets/config_overview.md.-rOn3l_p.js b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.js new file mode 100644 index 0000000..853fd50 --- /dev/null +++ b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.js @@ -0,0 +1,37 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"配置文件概览、","description":"","frontmatter":{},"headers":[],"relativePath":"config/overview.md","filePath":"config/overview.md"}'),e={name:"config/overview.md"};function l(h,s,d,p,k,r){return t(),a("div",null,[...s[0]||(s[0]=[n(`

配置文件概览、

WebAI2API 使用 YAML 格式的配置文件 config.yaml 进行配置。

注意

项目的配置问价已可以完全使用 WebUI 进行配置,若您不了解 YAML 文件,请直接略过该板块访问 WebUI 修改配置!

配置文件结构

yaml
# 日志等级
+logLevel: info
+
+# 服务器配置
+server:
+  port: 3000
+  auth: sk-your-key
+  keepalive:
+    mode: "comment"
+
+# 后端配置
+backend:
+  pool:
+    strategy: least_busy
+    failover:
+      enabled: true
+      maxRetries: 2
+    instances:
+      - name: "browser_default"
+        workers:
+          - name: "default"
+            type: lmarena
+  adapter:
+    gemini_biz:
+      entryUrl: ""
+
+# 队列配置
+queue:
+  queueBuffer: 2
+  imageLimit: 5
+
+# 浏览器配置
+browser:
+  path: ""
+  headless: false
+  proxy:
+    enable: false

配置项说明

日志配置

配置项类型默认值说明
logLevelstringinfo日志等级:debuginfowarnerror

服务器配置 (server)

配置项类型默认值说明
portnumber3000HTTP 服务监听端口
authstring-API 鉴权 Token (Bearer Token)
keepalive.modestringcomment心跳模式:commentcontent

心跳模式说明

  • comment: 发送 :keepalive 注释,不污染数据(推荐)
  • content: 发送空 delta,用于必须收到 JSON 才重置超时的客户端

队列配置 (queue)

配置项类型默认值说明
queueBuffernumber2非流式请求的额外排队数,0 表示不限制
imageLimitnumber5单次请求最大图片数量 (最大 10)

浏览器配置 (browser)

配置项类型默认值说明
pathstring""Camoufox 可执行文件路径,留空使用默认
headlessbooleanfalse是否启用无头模式
proxyobject-全局代理配置

相关文档

`,17)])])}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js new file mode 100644 index 0000000..a97526a --- /dev/null +++ b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"配置文件概览、","description":"","frontmatter":{},"headers":[],"relativePath":"config/overview.md","filePath":"config/overview.md"}'),e={name:"config/overview.md"};function l(h,s,d,p,k,r){return t(),a("div",null,[...s[0]||(s[0]=[n("",17)])])}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js new file mode 100644 index 0000000..cc2f7c2 --- /dev/null +++ b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js @@ -0,0 +1,28 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const o=JSON.parse('{"title":"代理设置","description":"","frontmatter":{},"headers":[],"relativePath":"config/proxy.md","filePath":"config/proxy.md"}'),l={name:"config/proxy.md"};function h(e,s,k,p,r,d){return t(),a("div",null,[...s[0]||(s[0]=[n(`

代理设置

WebAI2API 支持全局代理和实例级代理配置。

代理优先级

  1. 实例级代理 - 如果 Instance 配置了代理,使用该代理
  2. 全局代理 - 如果实例未配置,使用全局代理
  3. 直连 - 如果都未配置,直接连接

全局代理配置

browser.proxy 中配置全局代理:

yaml
browser:
+  proxy:
+    enable: true
+    type: http          # http 或 socks5
+    host: 127.0.0.1
+    port: 7890
+    # 可选认证
+    user: username
+    passwd: password

实例级代理配置

在 Instance 中配置专属代理:

yaml
backend:
+  pool:
+    instances:
+      - name: "browser_us"
+        proxy:
+          enable: true
+          type: socks5
+          host: us-proxy.example.com
+          port: 1080
+          user: myuser
+          passwd: mypassword
+        workers:
+          - name: "us_worker"
+            type: lmarena

配置项说明

配置项类型必填说明
enableboolean是否启用代理
typestring代理类型:httpsocks5
hoststring代理服务器地址
portnumber代理服务器端口
userstring代理认证用户名
passwdstring代理认证密码

强制直连

如果需要某个实例强制直连,即使配置了全局代理:

yaml
instances:
+  - name: "browser_direct"
+    proxy:
+      enable: false    # 显式禁用代理
+    workers:
+      - name: "direct_worker"
+        type: lmarena

代理选型建议

推荐配置

  • 类型: SOCKS5 代理通常比 HTTP 代理更通用
  • 稳定性: 选择稳定可靠的代理服务商
  • IP 纯净度: 使用 ping0.cc 等工具检查 IP 纯净度

注意事项

  • 代理质量会影响验证码触发频率
  • 频繁更换 IP 可能导致账号风控
  • 建议使用住宅 IP 或数据中心静态 IP
`,18)])])}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.lean.js b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.lean.js new file mode 100644 index 0000000..bd07e0d --- /dev/null +++ b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const o=JSON.parse('{"title":"代理设置","description":"","frontmatter":{},"headers":[],"relativePath":"config/proxy.md","filePath":"config/proxy.md"}'),l={name:"config/proxy.md"};function h(e,s,k,p,r,d){return t(),a("div",null,[...s[0]||(s[0]=[n("",18)])])}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/.vitepress/dist/assets/guide_deployment.md.Browh70b.js b/.vitepress/dist/assets/guide_deployment.md.Browh70b.js new file mode 100644 index 0000000..8e42d17 --- /dev/null +++ b/.vitepress/dist/assets/guide_deployment.md.Browh70b.js @@ -0,0 +1,26 @@ +import{_ as i,c as a,o as n,ah as h}from"./chunks/framework.BJEpWshW.js";const o=JSON.parse('{"title":"快速部署","description":"","frontmatter":{},"headers":[],"relativePath":"guide/deployment.md","filePath":"guide/deployment.md"}'),l={name:"guide/deployment.md"};function e(t,s,k,p,r,d){return n(),a("div",null,[...s[0]||(s[0]=[h(`

快速部署

本项目支持 手动部署(推荐)Docker 容器化部署 两种方式。

手动部署

1. 克隆项目

bash
git clone https://github.com/foxhui/WebAI2API.git
+cd WebAI2API

2. 复制配置文件

bash
cp config.example.yaml config.yaml

3. 安装依赖

bash
# 安装 Node.js 依赖
+pnpm install
+
+# 初始化预编译依赖
+npm run init

注意

npm run init 需要从 GitHub 下载文件,请确保网络畅通。

4. 编辑配置

编辑 config.yaml 文件,设置鉴权密钥等配置:

yaml
server:
+  port: 3000
+  auth: sk-your-secret-key  # 修改为你的密钥

5. 启动服务

bash
# 标准运行
+npm start
+
+# Linux 命令行启动
+npm start -- -xvfb -vnc

Docker 部署

特别说明

登录相关操作可以在 WebUI 的虚拟显示器板块进行,也可通过 RealVNC 等工具连接(需添加映射 VNC 端口,默认非被占用的情况下为 5900)

Docker CLI

bash
docker run -d --name webai-2api \\
+  -p 3000:3000 \\
+  -v "$(pwd)/data:/app/data" \\
+  --shm-size=2gb \\
+  foxhui/webai-2api:latest

Docker Compose

yaml
services:
+  webai-2api:
+    image: foxhui/webai-2api:latest
+    container_name: webai-2api
+    restart: unless-stopped
+    ports:
+      - "3000:3000"
+    volumes:
+      - ./data:/app/data
+    shm_size: '2gb'
+    init: true

启动服务:

bash
docker compose up -d

验证安装

服务启动后,访问以下地址验证:

下一步

部署完成后,请阅读 首次使用 完成登录初始化。

`,28)])])}const c=i(l,[["render",e]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/guide_deployment.md.Browh70b.lean.js b/.vitepress/dist/assets/guide_deployment.md.Browh70b.lean.js new file mode 100644 index 0000000..f5fbf7a --- /dev/null +++ b/.vitepress/dist/assets/guide_deployment.md.Browh70b.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ah as h}from"./chunks/framework.BJEpWshW.js";const o=JSON.parse('{"title":"快速部署","description":"","frontmatter":{},"headers":[],"relativePath":"guide/deployment.md","filePath":"guide/deployment.md"}'),l={name:"guide/deployment.md"};function e(t,s,k,p,r,d){return n(),a("div",null,[...s[0]||(s[0]=[h("",28)])])}const c=i(l,[["render",e]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.js b/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.js new file mode 100644 index 0000000..91a2d80 --- /dev/null +++ b/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.js @@ -0,0 +1,8 @@ +import{_ as s,c as a,o as l,ah as e}from"./chunks/framework.BJEpWshW.js";const c=JSON.parse('{"title":"首次使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/first-use.md","filePath":"guide/first-use.md"}'),t={name:"guide/first-use.md"};function n(h,i,r,k,p,o){return l(),a("div",null,[...i[0]||(i[0]=[e(`

首次使用

首次使用 WebAI2API 时,需要完成登录初始化才能正常使用。

登录模式

启动登录模式

登录模式会强制关闭无头模式

bash
# 启动第一个 Worker 进行登录
+npm start -- -login
+
+# 启动指定 Worker 进行登录
+npm start -- -login=workerName

Linux 用户特殊说明

Linux 服务器用户可以使用 Xvfb + VNC 方式:

bash
npm start -- -xvfb -vnc

然后通过 VNC 客户端连接 :5900 端口进行操作(也可使用 WebUI 中的虚拟显示器板块)

初始化步骤

  1. 登录账号

    • Linux 用户使用 npm start -- -xvfb -vnc 启动程序,然后使用 WebUI 或者第三方工具连接 VNC
    • 在打开的浏览器中登录相应平台的账号
    • 例如:Google 账号用于 Gemini,GitHub 账号用于 LMArena
  2. 完成验证

    • 在输入框发送任意消息
    • 触发并完成 CloudFlare/reCAPTCHA 验证
    • 同意服务条款
  3. 验证成功

    • 确认可以正常发送消息和接收回复
    • 关闭浏览器或按 Ctrl+C 退出登录模式

运行建议

  • 初始化完成后可使用无头模式运行,为降低风控风险,强烈建议长期保持非无头模式运行
  • WebUI 和 VNC 传输过程均未加密,若在公网环境运行请走 SSH 隧道或者使用 Caddy/Nginx 为 WebUI 添加 HTTPS 连接
    bash
    # SSH隧道方法:在本地终端运行,将服务器 5900 端口映射到本地
    +ssh -L 5900:127.0.0.1:5900 root@服务器IP

多 Worker 登录

如果配置了多个 Worker,需要分别为每个 Worker 完成登录:

bash
# 依次登录各个 Worker
+npm start -- -login=worker1
+npm start -- -login=worker2

共享登录状态

同一 Instance(浏览器实例)下的多个 Worker 共享登录状态。如果使用 Google OAuth 等统一登录方式,只需登录一次即可。

WebUI 登录模式

服务运行后,也可以通过 WebUI 切换到登录模式:

  1. 访问 http://localhost:3000
  2. 进入「系统管理」页面
  3. 点击「重启」按钮的下拉箭头
  4. 选择「登录模式重启」或指定 Worker 登录

下一步

登录完成后,请阅读以下内容:

`,23)])])}const g=s(t,[["render",n]]);export{c as __pageData,g as default}; diff --git a/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.lean.js b/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.lean.js new file mode 100644 index 0000000..463eece --- /dev/null +++ b/.vitepress/dist/assets/guide_first-use.md.C0Hv5lBx.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as l,ah as e}from"./chunks/framework.BJEpWshW.js";const c=JSON.parse('{"title":"首次使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/first-use.md","filePath":"guide/first-use.md"}'),t={name:"guide/first-use.md"};function n(h,i,r,k,p,o){return l(),a("div",null,[...i[0]||(i[0]=[e("",23)])])}const g=s(t,[["render",n]]);export{c as __pageData,g as default}; diff --git a/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.js b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.js new file mode 100644 index 0000000..ad6ee3e --- /dev/null +++ b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.js @@ -0,0 +1 @@ +import{_ as e,c as r,o as a,ah as n}from"./chunks/framework.BJEpWshW.js";const f=JSON.parse('{"title":"WebAI2API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction.md","filePath":"guide/introduction.md"}'),l={name:"guide/introduction.md"};function s(i,t,o,d,g,c){return a(),r("div",null,[...t[0]||(t[0]=[n('

WebAI2API

Image

📝 项目简介

WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发多账号管理(浏览器实例数据隔离)。

📋 当前支持列表

网站名称文本支持图片支持
LMArena
Gemini Enterprise Business
Nano Banana Free
zAI
Google Gemini

未来可能会支持更多网站...

',7)])])}const b=e(l,[["render",s]]);export{f as __pageData,b as default}; diff --git a/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js new file mode 100644 index 0000000..390ca16 --- /dev/null +++ b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,o as a,ah as n}from"./chunks/framework.BJEpWshW.js";const f=JSON.parse('{"title":"WebAI2API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction.md","filePath":"guide/introduction.md"}'),l={name:"guide/introduction.md"};function s(i,t,o,d,g,c){return a(),r("div",null,[...t[0]||(t[0]=[n("",7)])])}const b=e(l,[["render",s]]);export{f as __pageData,b as default}; diff --git a/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js new file mode 100644 index 0000000..99b7dbd --- /dev/null +++ b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js @@ -0,0 +1,14 @@ +import{_ as i,c as a,o as t,ah as e}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/requirements.md","filePath":"guide/requirements.md"}'),l={name:"guide/requirements.md"};function n(h,s,r,d,p,k){return t(),a("div",null,[...s[0]||(s[0]=[e(`

环境要求

在开始部署 WebAI2API 之前,请确保您的环境满足以下要求。

系统要求

操作系统

  • Windows: Windows 10/11 或 Windows Server 2016+
  • Linux: Ubuntu 18.04+, Debian 10+, CentOS 7+ 或其他主流发行版
  • macOS: macOS 10.15 (Catalina) 或更高版本

硬件配置

资源最低配置推荐配置(单实例)推荐配置(多实例)
CPU1 核2 核及以上2 核及以上
内存1 GB2 GB 及以上4 GB 及以上
磁盘2 GB 可用空间5 GB 及以上7 GB 及以上

实测环境表现

  • Oracle 免费机 (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用
  • 阿里云轻量云 (2C2G, Debian 11):运行流畅,项目开发测试所用机型

软件依赖

Node.js

  • 版本要求: v20.0.0 或更高版本 (ABI 115+)
  • 包管理器: pnpm (推荐) 或 npm
bash
# 检查 Node.js 版本
+node --version
+
+# 安装 pnpm (如未安装)
+npm install -g pnpm

Camoufox

Camoufox 是本项目的核心依赖,会在安装过程中自动下载。

网络要求

安装过程需要从 GitHub 下载 Camoufox 等预编译依赖,请确保网络能够正常访问 GitHub。

Docker 环境 (可选)

如果选择 Docker 部署方式,需要安装:

  • Docker: 20.10.0 或更高版本
  • Docker Compose: 2.0.0 或更高版本 (可选)
bash
# 检查 Docker 版本
+docker --version
+docker compose version

Linux 特殊依赖

在 Linux 环境下运行非无头模式时,可能需要额外安装:

bash
# Ubuntu/Debian
+sudo apt-get install xvfb x11vnc
+
+# CentOS/RHEL
+sudo yum install xorg-x11-server-Xvfb x11vnc
+
+# Arch Linux
+sudo pacman -S xorg-server-xvfb x11vnc

下一步

环境准备就绪后,请继续阅读 快速部署 开始安装。

`,24)])])}const c=i(l,[["render",n]]);export{g as __pageData,c as default}; diff --git a/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.lean.js b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.lean.js new file mode 100644 index 0000000..24c7f1b --- /dev/null +++ b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ah as e}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/requirements.md","filePath":"guide/requirements.md"}'),l={name:"guide/requirements.md"};function n(h,s,r,d,p,k){return t(),a("div",null,[...s[0]||(s[0]=[e("",24)])])}const c=i(l,[["render",n]]);export{g as __pageData,c as default}; diff --git a/.vitepress/dist/assets/index.md.C3b48Ls9.js b/.vitepress/dist/assets/index.md.C3b48Ls9.js new file mode 100644 index 0000000..0a4ed2b --- /dev/null +++ b/.vitepress/dist/assets/index.md.C3b48Ls9.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BJEpWshW.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"WebAI2API","text":"网页版 AI 服务转 OpenAI 兼容 API","tagline":"基于 Camoufox (Playwright),模拟人类操作与 LMArena、Gemini 等网站交互","actions":[{"theme":"brand","text":"快速开始","link":"/guide/deployment"},{"theme":"alt","text":"项目介绍","link":"/guide/introduction"},{"theme":"alt","text":"GitHub","link":"https://github.com/foxhui/WebAI2API"}],"image":{"src":"/favicon.png"}},"features":[{"icon":"🤖","title":"拟人交互","details":"模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测"},{"icon":"🔄","title":"接口兼容","details":"提供标准 OpenAI 格式接口,支持流式响应与心跳保活"},{"icon":"🚀","title":"并发隔离","details":"支持多窗口并发执行,实现多账号浏览器实例级数据隔离"},{"icon":"🛡️","title":"稳定防护","details":"内置任务队列、负载均衡、故障转移、错误重试"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function a(o,r,c,l,s,d){return i(),t("div")}const h=e(n,[["render",a]]);export{p as __pageData,h as default}; diff --git a/.vitepress/dist/assets/index.md.C3b48Ls9.lean.js b/.vitepress/dist/assets/index.md.C3b48Ls9.lean.js new file mode 100644 index 0000000..0a4ed2b --- /dev/null +++ b/.vitepress/dist/assets/index.md.C3b48Ls9.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BJEpWshW.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"WebAI2API","text":"网页版 AI 服务转 OpenAI 兼容 API","tagline":"基于 Camoufox (Playwright),模拟人类操作与 LMArena、Gemini 等网站交互","actions":[{"theme":"brand","text":"快速开始","link":"/guide/deployment"},{"theme":"alt","text":"项目介绍","link":"/guide/introduction"},{"theme":"alt","text":"GitHub","link":"https://github.com/foxhui/WebAI2API"}],"image":{"src":"/favicon.png"}},"features":[{"icon":"🤖","title":"拟人交互","details":"模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测"},{"icon":"🔄","title":"接口兼容","details":"提供标准 OpenAI 格式接口,支持流式响应与心跳保活"},{"icon":"🚀","title":"并发隔离","details":"支持多窗口并发执行,实现多账号浏览器实例级数据隔离"},{"icon":"🛡️","title":"稳定防护","details":"内置任务队列、负载均衡、故障转移、错误重试"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function a(o,r,c,l,s,d){return i(),t("div")}const h=e(n,[["render",a]]);export{p as __pageData,h as default}; diff --git a/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 0000000..b6b603d Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 0000000..def40a4 Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 0000000..e070c3d Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 0000000..a3c16ca Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 0000000..2210a89 Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 b/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 0000000..790d62d Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 0000000..1eec077 Binary files /dev/null and b/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 0000000..2cfe615 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 0000000..e3886dd Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 0000000..36d6748 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 b/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 0000000..2bed1e8 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 0000000..9a8d1e2 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 b/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 0000000..07d3c53 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 0000000..57bdc22 Binary files /dev/null and b/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/.vitepress/dist/assets/style.BZs0Eodj.css b/.vitepress/dist/assets/style.BZs0Eodj.css new file mode 100644 index 0000000..569a960 --- /dev/null +++ b/.vitepress/dist/assets/style.BZs0Eodj.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media(min-width:960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-2);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-2);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media(prefers-reduced-motion:reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 12H3m14 6H3M21 6H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14m-7-7l7 7l-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z'/%3E%3C/g%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14m-7-7v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/g%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3a6 6 0 0 0 9 9a9 9 0 1 1-9-9'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/g%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 8l6 6m-7 0l6-6l2-3M2 5h12M7 2h1m14 20l-5-10l-5 10m2-4h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2c-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.6'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8' stroke-width='1.4'/%3E%3C/g%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7m-7 5h7m-7 6h7m-7 5h7'/%3E%3C/g%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm2 4l6 6m0-6l-6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3Cpath d='m9 10l-5 5l5 5'/%3E%3C/g%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/g%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14l2 2l4-4'/%3E%3C/g%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .shiki span{color:var(--shiki-dark, inherit)}html:not(.dark) .shiki span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media(min-width:640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media(min-width:768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0!important;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media(min-width:640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media(max-width:639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto;text-align:left}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;white-space:nowrap;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-7dc602af]{position:fixed;inset:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-7dc602af],.VPBackdrop.fade-leave-to[data-v-7dc602af]{opacity:0}.VPBackdrop.fade-leave-active[data-v-7dc602af]{transition-duration:.25s}@media(min-width:1280px){.VPBackdrop[data-v-7dc602af]{display:none}}.NotFound[data-v-e04599fa]{padding:64px 24px 96px;text-align:center}@media(min-width:768px){.NotFound[data-v-e04599fa]{padding:96px 32px 168px}}.code[data-v-e04599fa]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-e04599fa]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-e04599fa]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-e04599fa]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-e04599fa]{padding-top:20px}.link[data-v-e04599fa]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-e04599fa]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-24ee4c62]{position:relative;z-index:1}.nested[data-v-24ee4c62]{padding-right:16px;padding-left:16px}.outline-link[data-v-24ee4c62]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-24ee4c62]:hover,.outline-link.active[data-v-24ee4c62]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-24ee4c62]{padding-left:13px}.VPDocAsideOutline[data-v-3dd37849]{display:none}.VPDocAsideOutline.has-outline[data-v-3dd37849]{display:block}.content[data-v-3dd37849]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-3dd37849]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-3dd37849]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-21b7d62c]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-21b7d62c]{flex-grow:1}.VPDocAside[data-v-21b7d62c] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-21b7d62c] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-21b7d62c] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-63306b0b]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media(min-width:640px){.VPLastUpdated[data-v-63306b0b]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-84b12b97]{margin-top:64px}.edit-info[data-v-84b12b97]{padding-bottom:18px}@media(min-width:640px){.edit-info[data-v-84b12b97]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-84b12b97]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-84b12b97]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-84b12b97]{margin-right:8px}.prev-next[data-v-84b12b97]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media(min-width:640px){.prev-next[data-v-84b12b97]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-84b12b97]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-84b12b97]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-84b12b97]{margin-left:auto;text-align:right}.desc[data-v-84b12b97]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-84b12b97]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-9a3aec1d]{padding:32px 24px 96px;width:100%}@media(min-width:768px){.VPDoc[data-v-9a3aec1d]{padding:48px 32px 128px}}@media(min-width:960px){.VPDoc[data-v-9a3aec1d]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-9a3aec1d]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-9a3aec1d]{max-width:752px}}@media(min-width:1280px){.VPDoc .container[data-v-9a3aec1d]{display:flex;justify-content:center}.VPDoc .aside[data-v-9a3aec1d]{display:block}}@media(min-width:1440px){.VPDoc:not(.has-sidebar) .content[data-v-9a3aec1d]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-9a3aec1d]{max-width:1104px}}.container[data-v-9a3aec1d]{margin:0 auto;width:100%}.aside[data-v-9a3aec1d]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-9a3aec1d]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-9a3aec1d]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-9a3aec1d]::-webkit-scrollbar{display:none}.aside-curtain[data-v-9a3aec1d]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%);pointer-events:none}.aside-content[data-v-9a3aec1d]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-9a3aec1d]{position:relative;margin:0 auto;width:100%}@media(min-width:960px){.content[data-v-9a3aec1d]{padding:0 32px 128px}}@media(min-width:1280px){.content[data-v-9a3aec1d]{order:1;margin:0;min-width:640px}}.content-container[data-v-9a3aec1d]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-9a3aec1d]{max-width:688px}.VPButton[data-v-1aa86037]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-1aa86037]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-1aa86037]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-1aa86037]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-1aa86037]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-1aa86037]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-1aa86037]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-1aa86037]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-1aa86037]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-1aa86037]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-1aa86037]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-1aa86037]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-1aa86037]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-737f6904]{display:none}.dark .VPImage.light[data-v-737f6904]{display:none}.VPHero[data-v-70010e3d]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media(min-width:640px){.VPHero[data-v-70010e3d]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media(min-width:960px){.VPHero[data-v-70010e3d]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-70010e3d]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media(min-width:960px){.container[data-v-70010e3d]{flex-direction:row}}.main[data-v-70010e3d]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-70010e3d]{text-align:center}@media(min-width:960px){.VPHero.has-image .container[data-v-70010e3d]{text-align:left}}@media(min-width:960px){.main[data-v-70010e3d]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-70010e3d]{max-width:592px}}.heading[data-v-70010e3d]{display:flex;flex-direction:column}.name[data-v-70010e3d],.text[data-v-70010e3d]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-70010e3d],.VPHero.has-image .text[data-v-70010e3d]{margin:0 auto}.name[data-v-70010e3d]{color:var(--vp-home-hero-name-color)}.clip[data-v-70010e3d]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media(min-width:640px){.name[data-v-70010e3d],.text[data-v-70010e3d]{max-width:576px;line-height:56px;font-size:48px}}@media(min-width:960px){.name[data-v-70010e3d],.text[data-v-70010e3d]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-70010e3d],.VPHero.has-image .text[data-v-70010e3d]{margin:0}}.tagline[data-v-70010e3d]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-70010e3d]{margin:0 auto}@media(min-width:640px){.tagline[data-v-70010e3d]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media(min-width:960px){.tagline[data-v-70010e3d]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-70010e3d]{margin:0}}.actions[data-v-70010e3d]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-70010e3d]{justify-content:center}@media(min-width:640px){.actions[data-v-70010e3d]{padding-top:32px}}@media(min-width:960px){.VPHero.has-image .actions[data-v-70010e3d]{justify-content:flex-start}}.action[data-v-70010e3d]{flex-shrink:0;padding:6px}.image[data-v-70010e3d]{order:1;margin:-76px -24px -48px}@media(min-width:640px){.image[data-v-70010e3d]{margin:-108px -24px -48px}}@media(min-width:960px){.image[data-v-70010e3d]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-70010e3d]{position:relative;margin:0 auto;width:320px;height:320px}@media(min-width:640px){.image-container[data-v-70010e3d]{width:392px;height:392px}}@media(min-width:960px){.image-container[data-v-70010e3d]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-70010e3d]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media(min-width:640px){.image-bg[data-v-70010e3d]{width:256px;height:256px}}@media(min-width:960px){.image-bg[data-v-70010e3d]{width:320px;height:320px}}[data-v-70010e3d] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;width:100%;height:100%;object-fit:contain;transform:translate(-50%,-50%)}@media(min-width:640px){[data-v-70010e3d] .image-src{max-width:256px;max-height:256px}}@media(min-width:960px){[data-v-70010e3d] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-1b730767]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-1b730767]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-1b730767]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-1b730767]>.VPImage{margin-bottom:20px}.icon[data-v-1b730767]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-1b730767]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-1b730767]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-1b730767]{padding-top:8px}.link-text-value[data-v-1b730767]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-1b730767]{margin-left:6px}.VPFeatures[data-v-72a5b475]{position:relative;padding:0 24px}@media(min-width:640px){.VPFeatures[data-v-72a5b475]{padding:0 48px}}@media(min-width:960px){.VPFeatures[data-v-72a5b475]{padding:0 64px}}.container[data-v-72a5b475]{margin:0 auto;max-width:1152px}.items[data-v-72a5b475]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-72a5b475]{padding:8px;width:100%}@media(min-width:640px){.item.grid-2[data-v-72a5b475],.item.grid-4[data-v-72a5b475],.item.grid-6[data-v-72a5b475]{width:50%}}@media(min-width:768px){.item.grid-2[data-v-72a5b475],.item.grid-4[data-v-72a5b475]{width:50%}.item.grid-3[data-v-72a5b475],.item.grid-6[data-v-72a5b475]{width:calc(100% / 3)}}@media(min-width:960px){.item.grid-4[data-v-72a5b475]{width:25%}}.container[data-v-608c700d]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media(min-width:640px){.container[data-v-608c700d]{padding:0 48px}}@media(min-width:960px){.container[data-v-608c700d]{width:100%;padding:0 64px}}.vp-doc[data-v-608c700d] .VPHomeSponsors,.vp-doc[data-v-608c700d] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-608c700d] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-608c700d] .VPHomeSponsors a,.vp-doc[data-v-608c700d] .VPTeamPage a{text-decoration:none}.VPHome[data-v-44622c33]{margin-bottom:96px}@media(min-width:768px){.VPHome[data-v-44622c33]{margin-bottom:128px}}.VPContent[data-v-f1c8b00b]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-f1c8b00b]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-f1c8b00b]{margin:0}@media(min-width:960px){.VPContent[data-v-f1c8b00b]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-f1c8b00b]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media(min-width:1440px){.VPContent.has-sidebar[data-v-f1c8b00b]{padding-right:calc((100% - var(--vp-layout-max-width)) / 2);padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-59801706]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-59801706]{display:none}.VPFooter[data-v-59801706] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-59801706] a:hover{color:var(--vp-c-text-1)}@media(min-width:768px){.VPFooter[data-v-59801706]{padding:32px}}.container[data-v-59801706]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-59801706],.copyright[data-v-59801706]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown button[data-v-85ddaa89]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-85ddaa89]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-85ddaa89]{color:var(--vp-c-text-1)}.icon[data-v-85ddaa89]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media(min-width:960px){.VPLocalNavOutlineDropdown button[data-v-85ddaa89]{font-size:14px}.icon[data-v-85ddaa89]{font-size:16px}}.open>.icon[data-v-85ddaa89]{transform:rotate(90deg)}.items[data-v-85ddaa89]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media(min-width:960px){.items[data-v-85ddaa89]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-85ddaa89]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-85ddaa89]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-85ddaa89]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-85ddaa89]{transition:all .2s ease-out}.flyout-leave-active[data-v-85ddaa89]{transition:all .15s ease-in}.flyout-enter-from[data-v-85ddaa89],.flyout-leave-to[data-v-85ddaa89]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-1924e3fd]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-1924e3fd]{position:fixed}@media(min-width:960px){.VPLocalNav[data-v-1924e3fd]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-1924e3fd]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-1924e3fd]{display:none}}@media(min-width:1280px){.VPLocalNav[data-v-1924e3fd]{display:none}}.container[data-v-1924e3fd]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-1924e3fd]{display:flex;align-items:center;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-1924e3fd]:hover{color:var(--vp-c-text-1);transition:color .25s}@media(min-width:960px){.menu[data-v-1924e3fd]{display:none}}.menu-icon[data-v-1924e3fd]{margin-right:8px;font-size:14px}.menu[data-v-1924e3fd],[data-v-1924e3fd] .VPLocalNavOutlineDropdown>button{padding:12px 24px 11px}@media(min-width:768px){.menu[data-v-1924e3fd],[data-v-1924e3fd] .VPLocalNavOutlineDropdown>button{padding:12px 32px 11px}}.VPSwitch[data-v-54855812]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-54855812]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-54855812]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-54855812]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-54855812] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-54855812] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-c6d441d6]{opacity:1}.moon[data-v-c6d441d6],.dark .sun[data-v-c6d441d6]{opacity:0}.dark .moon[data-v-c6d441d6]{opacity:1}.dark .VPSwitchAppearance[data-v-c6d441d6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-9cde98c8]{display:none}@media(min-width:1280px){.VPNavBarAppearance[data-v-9cde98c8]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-6f095817]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-6f095817]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);text-align:left;white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-6f095817]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-6f095817]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-8b568562]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-8b568562]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-8b568562]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-8b568562]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-76c0c713]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-76c0c713] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-76c0c713] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-76c0c713] .group:last-child{padding-bottom:0}.VPMenu[data-v-76c0c713] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-76c0c713] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-76c0c713] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-76c0c713] .action{padding-left:24px}.VPFlyout[data-v-6d4d2382]{position:relative}.VPFlyout[data-v-6d4d2382]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-6d4d2382]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-6d4d2382]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-6d4d2382]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-6d4d2382]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-6d4d2382]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-6d4d2382],.button[aria-expanded=true]+.menu[data-v-6d4d2382]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-6d4d2382]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-6d4d2382]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-6d4d2382]{margin-right:0;font-size:16px}.text-icon[data-v-6d4d2382]{margin-left:4px;font-size:14px}.icon[data-v-6d4d2382]{font-size:20px;transition:fill .25s}.menu[data-v-6d4d2382]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-9015c34a]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-9015c34a]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-9015c34a]>svg,.VPSocialLink[data-v-9015c34a]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-6e5e7bc9]{display:flex;justify-content:center}.VPNavBarExtra[data-v-392c0efd]{display:none;margin-right:-12px}@media(min-width:768px){.VPNavBarExtra[data-v-392c0efd]{display:block}}@media(min-width:1280px){.VPNavBarExtra[data-v-392c0efd]{display:none}}.trans-title[data-v-392c0efd]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-392c0efd],.item.social-links[data-v-392c0efd]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-392c0efd]{min-width:176px}.appearance-action[data-v-392c0efd]{margin-right:-2px}.social-links-list[data-v-392c0efd]{margin:-4px -8px}.VPNavBarHamburger[data-v-6ffe035d]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media(min-width:768px){.VPNavBarHamburger[data-v-6ffe035d]{display:none}}.container[data-v-6ffe035d]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6ffe035d]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6ffe035d]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6ffe035d]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6ffe035d]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6ffe035d]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6ffe035d]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6ffe035d],.VPNavBarHamburger.active:hover .middle[data-v-6ffe035d],.VPNavBarHamburger.active:hover .bottom[data-v-6ffe035d]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6ffe035d],.middle[data-v-6ffe035d],.bottom[data-v-6ffe035d]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6ffe035d]{top:0;left:0;transform:translate(0)}.middle[data-v-6ffe035d]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6ffe035d]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-1494679c]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-1494679c],.VPNavBarMenuLink[data-v-1494679c]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-138a1628]{display:none}@media(min-width:768px){.VPNavBarMenu[data-v-138a1628]{display:flex}}:root{--docsearch-primary-color:#003dff;--docsearch-soft-primary-color:rgba(0,61,255,.1);--docsearch-subtle-color:#d6d6e7;--docsearch-text-color:#36395a;--docsearch-error-color:#ef5350;--docsearch-success-color:#e8f5e9;--docsearch-secondary-text-color:#5a5e9a;--docsearch-background-color:#f5f5fa;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-focus-color:#005fcc;--docsearch-highlight-color:#003dff;--docsearch-muted-color:#9698c3;--docsearch-muted-color-darker:rgba(120,122,165,.25);--docsearch-icon-color:#5a5e9a;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#003dff;--docsearch-border-radius:4px;--docsearch-modal-width:800px;--docsearch-modal-height:600px;--docsearch-modal-variable-height:60dvh;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:rgba(0,0,0,.2) 0px 12px 28px 0px,rgba(0,0,0,.1) 0px 2px 4px 0px,hsla(0,0%,100%,.05) 0px 0px 0px 1px inset;--docsearch-searchbox-height:56px;--docsearch-searchbox-initial-height:56px;--docsearch-searchbox-background:#ffffffa6;--docsearch-searchbox-focus-background:#ffffffa6;--docsearch-actions-width:99px;--docsearch-actions-height:44px;--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-highlight-color:rgba(0,61,255,.1);--docsearch-hit-background:#fff;--docsearch-key-background:#f5f5fa;--docsearch-key-color:#5a5e9a;--docsearch-key-pressed-shadow:inset 0 2px 4px rgba(120,122,165,.25);--docsearch-footer-height:52px;--docsearch-footer-background:#ffffffa6;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--fav-out-dur:.16s;--del-dur:.15s;--ease-smooth:cubic-bezier(.25,.8,.4,1);--ease-fast:cubic-bezier(.45,.15,.6,.9);--shadow-pop:0 4px 12px rgba(0,0,0,.06);--shimmer-bg:linear-gradient(90deg,#e0e3e8 0%,var(--docsearch-muted-color) 20%,var(--docsearch-muted-color) 60%,#e0e3e8 95%);--docsearch-dropdown-menu-background:var(--docsearch-hit-background);--docsearch-dropdown-menu-item-hover-background:var(--docsearch-modal-background)}html.dark{--docsearch-text-color:#c4c7dc;--docsearch-secondary-text-color:#b6b7d5;--docsearch-subtle-color:#212139;--docsearch-error-color:#ef5350;--docsearch-success-color:rgba(67,160,71,.2);--docsearch-highlight-color:#457aff;--docsearch-focus-color:#9ac8ff;--docsearch-background-color:#36395a;--docsearch-icon-color:#b6b7d5;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#000000a6;--docsearch-searchbox-focus-background:#000000a6;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-background:#36395a;--docsearch-key-color:#b6b7d5;--docsearch-key-pressed-shadow:inset 0 2px 4px rgba(12,13,20,.4);--docsearch-footer-background:#000000a6;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497;--shimmer-bg:linear-gradient(90deg,#e0e3e8 0%,var(--docsearch-muted-color) 20%,var(--docsearch-muted-color) 60%,#e0e3e8 95%);--docsearch-dropdown-menu-item-hover-background:#10121e}.DocSearch-Button{all:unset;align-items:center;background-color:var(--docsearch-searchbox-background);border:1px solid var(--docsearch-subtle-color);border-radius:4px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button-Container{align-items:center;display:flex;height:100%}.DocSearch-Button-Container svg{color:var(--docsearch-muted-color)}.DocSearch-Back-Icon,.DocSearch-Search-Icon{color:var(--docsearch-highlight-color);stroke-width:1.6}.DocSearch-Button-Placeholder{color:var(--docsearch-muted-color);display:inline-block;font-size:1rem;line-height:normal;padding:0 12px 0 8px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-background);border:0;border:1px solid color-mix(in srgb,var(--docsearch-subtle-color) 20%,transparent);border-radius:4px;box-shadow:none!important;color:var(--docsearch-key-color);display:flex;font-size:14px;height:24px;justify-content:center;position:relative;transition-duration:.1s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:24px}.DocSearch-Button-Key--ctrl{width:33px}.DocSearch-Button-Key:first-child{margin-right:.4em}@media(prefers-reduced-motion){.DocSearch-Button-Key{transition:none}}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow)!important;transform:translateY(1px)}@media(max-width:768px){.DocSearch-Button{width:auto}.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:400}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:4px;box-shadow:var(--docsearch-modal-shadow);display:flex;flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex}.DocSearch-SearchBar-Magnifier{color:var(--docsearch-highlight-color)}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-bottom:1px solid var(--docsearch-subtle-color);border-radius:4px 4px 0 0;display:flex;height:var( --docsearch-searchbox-height,var(--docsearch-searchbox-initial-height) );margin:0;min-height:var(--docsearch-searchbox-initial-height);padding-block:var(--docsearch-spacing);padding-inline:16px;position:relative;width:100%}.DocSearch-Input,.DocSearch-Modal-heading{appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;font-weight:300;height:100%;line-height:1.4;outline:none;overflow-y:hidden;padding-block-start:4px;padding-inline-start:8px;resize:none;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-Actions{align-items:center;display:flex;gap:8px;height:var(--docsearch-actions-height);justify-content:flex-end;padding:0 2px;width:var(--docsearch-actions-width)}.DocSearch-Divider{border-left:1px solid var(--docsearch-subtle-color);height:16px}.DocSearch-Action{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center;min-height:24px;min-width:24px}.DocSearch-Action,.DocSearch-AskAi-Return,.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel{margin:0;padding:0}.DocSearch-AskAi-Return{cursor:pointer}.DocSearch-AskAi-Return,.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Action{animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Action,.DocSearch-AskAi-Return{animation:fade-in .1s ease-in forwards;appearance:none;background:none;border:none;border-radius:var(--docsearch-border-radius);color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-AskAi-Return[hidden],.DocSearch-Close[hidden],.DocSearch-Input[hidden],.DocSearch-StreamingIndicator[hidden]{display:none}.DocSearch-Action:hover,.DocSearch-AskAi-Return:hover{background:var(--docsearch-soft-primary-color);color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{color:var(--docsearch-icon-color);height:24px;width:24px}.DocSearch-Form:focus-within .DocSearch-MagnifierLabel svg{color:var(--docsearch-highlight-color)}.DocSearch-Clear{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;flex:none;font:inherit;font-size:.9em;font-weight:300;height:28px;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Clear:focus-visible,.DocSearch-Close:focus-visible{border-radius:4px;outline:2px solid var(--docsearch-focus-color);outline-offset:1px}.DocSearch-Dropdown{height:var(--docsearch-modal-variable-height);max-height:calc(var(--docsearch-modal-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown-Container ul{list-style:none;margin:0;padding:0}.DocSearch-Label{color:var(--docsearch-secondary-text-color);font-size:.875em;font-weight:400;line-height:1.6em}.DocSearch-Help,.DocSearch-NoResults-Help{color:var(--docsearch-secondary-text-color);font-size:.8em;font-weight:300;line-height:1.5em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{color:var(--docsearch-text-color);font-size:1.1em;font-weight:300;line-height:.5em;vertical-align:middle}.DocSearch-Title strong{font-weight:500}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative;scroll-margin-top:40px}.DocSearch-Hit:first-of-type{margin-top:4px}.DocSearch-Hit a,.DocSearch-Hit--AskAI{background:var(--docsearch-hit-background);border-radius:4px;cursor:pointer;display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-text-color);font-size:.9em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 4px;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit--AskAI,.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-hit-highlight-color)}.DocSearch-Conversation-History .DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-hit-background)}.DocSearch-Hit mark{color:var(--docsearch-highlight-color);text-decoration:underline;text-underline-offset:.3em}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-text-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{color:var(--docsearch-secondary-text-color);height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;color:var(--docsearch-muted-color);display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:400;gap:4px;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-secondary-text-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title{color:var(--docsearch-text-color)}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-highlight-color)}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-AskAiScreen,.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{align-items:center;color:var(--docsearch-secondary-text-color);display:flex;flex-direction:column;font-size:1.25em;font-weight:400;justify-content:center;margin:0 auto;text-align:center;width:80%}.DocSearch-AskAiScreen,.DocSearch-ErrorScreen,.DocSearch-NoResults{max-height:80%}.DocSearch-StartScreen{height:100%}.DocSearch-NoResults{gap:.8em;margin-top:2em}.DocSearch-NoResults--withAskAi{justify-content:flex-start;margin-top:0}.DocSearch-AskAiScreen,.DocSearch-ErrorScreen,.DocSearch-StartScreen{gap:24px}.DocSearch-StartScreen-Icon{height:64px;stroke:var(--docsearch-icon-color);width:64px}.DocSearch-Screen-Icon{color:var(--docsearch-icon-color)}.DocSearch-NoResults-Prefill-List{display:flex;flex-direction:column;gap:12px;text-align:center}.DocSearch-NoResults-Prefill-List-Items{display:flex;flex-direction:column;gap:2px}.DocSearch-NoResults-Prefill-List-Items p{align-items:center;display:flex;margin:0;text-align:left}.DocSearch-Prefill{align-items:center;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-flex;font-size:.8em;font-weight:300;gap:4px;height:40px;padding:0 4px}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 4px 4px;border-top:1px solid var(--docsearch-subtle-color);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;gap:16px;list-style:none;margin:0;padding:0}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands-Key{background-color:var(--docsearch-background-color);border:0;border-radius:2px;box-shadow:none!important;color:var(--docsearch-icon-color);height:24px;justify-content:center;margin-right:4px;width:24px}.DocSearch-Commands-Key:last-of-type{margin-right:8px}.DocSearch-Escape-Key{font-size:10px;font-weight:300;letter-spacing:normal;line-height:16px;text-align:center;text-transform:uppercase}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.DocSearch-AskAi-Section{display:flex;flex-direction:column;gap:8px;padding:12px 0}.DocSearch-Hit-AskAIButton{align-items:center;color:var(--docsearch-text-color);display:flex;flex-direction:row}.DocSearch-Hit-AskAIButton-icon{color:var(--docsearch-icon-color);flex-shrink:0;margin-right:12px}.DocSearch-Hit-AskAIButton-title{color:var(--docsearch-hit-color);display:flex;flex:1 1 auto;font-weight:400;gap:4px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-AskAIButton-title-query{background:none;margin-left:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.DocSearch-Hit-AskAIButton-title mark{text-decoration:none}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch-AskAiScreen-Container{display:flex;flex-direction:column;gap:0;height:100%;justify-content:flex-start;padding:0;text-align:left;width:100%}.DocSearch-AskAiScreen-Disclaimer{align-self:flex-start;display:flex;font-size:.6em;font-weight:300;margin:0;padding:1.5em 0 .5em;text-align:left}.DocSearch-AskAiScreen-Body{gap:24px;width:100%}.DocSearch-AskAiScreen-Body,.DocSearch-AskAiScreen-Response,.DocSearch-AskAiScreen-Response-Container{display:flex;flex-direction:column}.DocSearch-AskAiScreen-Response{align-self:flex-start;background:var(--docsearch-hit-background);border-radius:4px;color:var(--docsearch-text-color);font-size:.8em;gap:1em;margin-bottom:8px;padding:24px;width:100%}.DocSearch-AskAiScreen-Query{font-size:1.25em;font-weight:600;line-break:loose;line-height:1.4;margin:0}.DocSearch-AskAiScreen-Answer{line-height:1.5}.DocSearch-AskAiScreen-Answer,.DocSearch-AskAiScreen-ThinkingDots{color:var(--docsearch-secondary-text-color);font-weight:400;margin:0}.DocSearch-AskAiScreen-ThinkingDots{font-size:.8em}.DocSearch-AskAiScreen-Answer-Footer{align-items:center;display:flex;flex-direction:row;gap:8px;justify-content:space-between}.DocSearch-AskAiScreen-Actions{align-items:center;display:flex;flex-direction:row;gap:12px;margin-left:auto}.DocSearch-AskAiScreen-ActionButton{align-items:center;background:none;border:none;border-radius:4px;cursor:pointer;display:flex;justify-content:center;margin:0;padding:4px;transition:background-color .2s ease;width:24px}.DocSearch-AskAiScreen-ActionButton:hover{background:var(--docsearch-hit-highlight-color)}.DocSearch-AskAiScreen-ActionButton svg{color:var(--docsearch-icon-color);height:20px;stroke-width:1.5;width:20px}.DocSearch-AskAiScreen-CopyButton--copied{background-color:var(--docsearch-success-color);cursor:default}.DocSearch-AskAiScreen-Error{align-items:baseline;background-color:#ef53501a;border-radius:4px;color:var(--docsearch-error-color);display:flex;font-size:1em;font-weight:400;gap:8px;padding:1em}.DocSearch-AskAiScreen-MessageContent{display:flex;flex-direction:column;row-gap:1em}.DocSearch-AskAiScreen-Error svg,.DocSearch-AskAiScreen-MessageContent-Tool svg{flex-shrink:0;height:16px;width:16px}.DocSearch-AskAiScreen-Error p{margin:0}.DocSearch-AskAiScreen-Error .DocSearch-Markdown-Content{color:var(--docsearch-error-color)}.DocSearch-AskAiScreen-FeedbackText{color:var(--docsearch-muted-color);font-size:.7em;font-weight:400;margin:0}.DocSearch-AskAiScreen-FeedbackText--visible{animation:fade-in .3s ease-in forwards}.DocSearch-AskAiScreen-RelatedSources{display:flex;flex-direction:column;gap:4px;width:100%}.DocSearch-AskAiScreen-RelatedSources-List{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px;width:100%}.DocSearch-AskAiScreen-RelatedSources-Title{color:var(--docsearch-secondary-color);font-size:.7em;font-weight:400;margin:0;padding:6px 0}.DocSearch-AskAiScreen-RelatedSources-NoResults{color:var(--docsearch-text-color);font-size:.8rem;font-weight:400;margin:0}.DocSearch-AskAiScreen-RelatedSources-Error{color:var(--docsearch-error-color);font-size:.8rem;font-weight:400;margin:0}.DocSearch-AskAiScreen-RelatedSources-Item-Link{align-items:center;background:var(--docsearch-hit-background);border-radius:4px;color:var(--docsearch-text-color);display:flex;font-size:.75em;gap:6px;max-width:70%;padding:12px 8px;text-decoration:none;transition:background-color .2s ease}.DocSearch-AskAiScreen-RelatedSources-Item-Link svg{color:var(--docsearch-icon-color);flex-shrink:0;stroke-width:1.2}.DocSearch-AskAiScreen-RelatedSources-Item-Link span{flex:1 1 0;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.DocSearch-AskAiScreen-ExchangesList{display:flex;flex-direction:column;gap:24px;margin:8px 0}.DocSearch-AskAiScreen-RelatedSources-Item-Link:hover{background:var(--docsearch-hit-highlight-color)}.DocSearch-Markdown-Content{color:var(--docsearch-text-color);font-size:.9355em;line-height:1.6;word-wrap:break-word}.DocSearch-Markdown-Content--streaming{animation:fade-in .3s ease-in-out both}.DocSearch-Markdown-Content p{margin:1em 0}.DocSearch-Markdown-Content p:last-child{margin-bottom:0}.DocSearch-Markdown-Content p:first-child{margin-top:0}.DocSearch-Markdown-Content code{border-radius:3px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.9em;letter-spacing:normal;margin:0;padding:.2em 0}.DocSearch-Markdown-Content code,.DocSearch-Markdown-Content pre{background-color:var(--docsearch-key-background);color:var(--docsearch-text-color)}.DocSearch-Markdown-Content pre{border-radius:6px;margin:1.5em 0;overflow-x:auto;padding:1.2em}.DocSearch-Markdown-Content pre code{background-color:transparent;border-radius:0;color:inherit;font-size:.8em;margin:0;padding:0;white-space:pre-wrap;word-wrap:break-word;line-height:1.5}.DocSearch-Markdown-Content h1,.DocSearch-Markdown-Content h2,.DocSearch-Markdown-Content h3,.DocSearch-Markdown-Content h4,.DocSearch-Markdown-Content h5,.DocSearch-Markdown-Content h6{color:var(--docsearch-text-color);font-weight:600;letter-spacing:-.02em;line-height:1.3;margin:1em 0}.DocSearch-Markdown-Content h1{font-size:1.5em}.DocSearch-Markdown-Content h2{font-size:1.2em}.DocSearch-Markdown-Content h3{font-size:1em}.DocSearch-Markdown-Content h4{font-size:.9em}.DocSearch-Markdown-Content h5,.DocSearch-Markdown-Content h6{font-size:.8em}.DocSearch-Markdown-Content ol,.DocSearch-Markdown-Content ul{color:var(--docsearch-text-color);margin:1.2em 0;padding-left:1.5em}.DocSearch-Markdown-Content ul{list-style-type:disc}.DocSearch-Markdown-Content ol{list-style-type:decimal}.DocSearch-Markdown-Content li{color:var(--docsearch-text-color);line-height:1.6;margin:.8em 0;padding-left:.3em}.DocSearch-Markdown-Content li>ol,.DocSearch-Markdown-Content li>ul{margin:.5em}.DocSearch-Markdown-Content li::marker{color:var(--docsearch-muted-color)}.DocSearch-Markdown-Content a{color:var(--docsearch-highlight-color);text-decoration:none;transition:all .2s ease}.DocSearch-Markdown-Content a:hover{opacity:.9;text-decoration:underline}.DocSearch-Markdown-Content blockquote{border-left:4px solid var(--docsearch-hit-highlight-color);color:var(--docsearch-secondary-text-color);font-style:italic;margin:1.5em 0;padding:.5em 0 .5em 1em}.DocSearch-Markdown-Content hr{border:none;border-top:1px solid var(--docsearch-subtle-color);margin:1em 0}.DocSearch-Markdown-Content table{border-collapse:collapse;margin:1.5em 0;width:100%}.DocSearch-Markdown-Content td,.DocSearch-Markdown-Content th{border:1px solid var(--docsearch-subtle-color);padding:.75em;text-align:left}.DocSearch-Markdown-Content th{background-color:var(--docsearch-hit-background);font-weight:600}.DocSearch-AskAiScreen-MessageContent-Reasoning{align-items:center;color:var(--docsearch-muted-color);display:flex;font-size:1em;gap:4px}.DocSearch-AskAiScreen-MessageContent-Reasoning svg{color:var(--docsearch-icon-color)}.DocSearch-AskAiScreen-MessageContent-Tool{align-items:center;color:var(--docsearch-muted-color);display:flex;line-height:1.2;width:100%}.DocSearch-AskAiScreen-MessageContent-Tool.Tool--Result{padding-top:0}.DocSearch-AskAiScreen-MessageContent-Tool>svg{color:var(--docsearch-icon-color);margin-right:8px}.DocSearch-AskAiScreen-MessageContent-Tool-Query{color:var(--docsearch-muted-color);transition:box-shadow .2s ease}.DocSearch-AskAiScreen-MessageContent-Tool-Query svg{color:var(--docsearch-muted-color)}.DocSearch-AskAiScreen-MessageContent-Tool-Query:hover{box-shadow:0 1px 0 0 var(--docsearch-highlight-color);color:var(--docsearch-highlight-color);cursor:pointer}.DocSearch-AskAiScreen-MessageContent-Tool-Query:hover svg{color:var(--docsearch-highlight-color)}.DocSearck-AskAiScreen-MessageContent-Stopped{color:var(--docsearch-muted-color);font-style:italic;margin-top:1em}.DocSearch-AskAiScreen-SmallerLoadingIcon{height:16px;width:16px}.shimmer{background:var(--shimmer-bg);background-clip:text;-webkit-background-clip:text;background-size:200% auto;color:transparent;display:flex;-webkit-text-fill-color:transparent;animation:shimmerText 2.5s linear infinite;pointer-events:none}@keyframes shimmerText{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse{0%,to{opacity:.3}50%{opacity:.6}}@media(max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:48px}.DocSearch-Input{font-size:1rem}.DocSearch-Hit-AskAIButton-icon{margin-right:8px}body:has(.DocSearch-Container){overflow:hidden;position:fixed}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:calc(var(--docsearch-vh, 1vh)*100);height:100dvh}.DocSearch-Footer{border-radius:0;bottom:0;position:static}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:calc(var(--docsearch-vh, 1vh)*100);height:100dvh;margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:none}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}.DocSearch-AskAiScreen-Response-Container{flex-direction:column}.DocSearch-AskAiScreen-RelatedSources,.DocSearch-AskAiScreen-Response{width:100%}}.DocSearch-CodeSnippet{position:relative}.DocSearch-CodeSnippet-CopyButton{align-items:center;background:var(--docsearch-key-background);border:none;border-radius:4px;color:var(--docsearch-text-color);cursor:pointer;display:flex;font-size:.75em;padding:.2em .6em;position:absolute;right:8px;top:8px;transition:opacity .2s ease}.DocSearch-CodeSnippet-CopyButton:hover{opacity:.8}.DocSearch-CodeSnippet-CopyButton:active{opacity:.6}.DocSearch-CodeSnippet-CopyButton svg{height:16px;margin-right:4px;width:16px}.DocSearch-CodeSnippet-CheckIcon,.DocSearch-CodeSnippet-CopyButton--copied .DocSearch-CodeSnippet-CopyIcon{display:none}.DocSearch-CodeSnippet-CopyButton--copied .DocSearch-CodeSnippet-CheckIcon{display:inline-block}.DocSearch-Markdown-Content--streaming .DocSearch-CodeSnippet-CopyButton{display:none}.DocSearch-NewConversationScreen{padding:3em var(--docsearch-spacing)}.DocSearch-NewConversationScreen-Title{color:var(--docsearch-text-color);font-size:26px;font-weight:600;margin-bottom:.15em}.DocSearch-NewConversationScreen-Description{color:var(--docsearch-muted-color);font-size:14px}.DocSearch-NewConversationScreen-SuggestedQuestions{align-items:start;display:flex;flex-direction:column;gap:var(--docsearch-spacing);margin-top:1.5em}.DocSearch-NewConversationScreen-SuggestedQuestion{align-items:center;background-color:var(--docsearch-searchbox-background);border:1px solid var(--docsearch-subtle-color);border-radius:var(--docsearch-border-radius);color:var(--docsearch-text-color);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:12px}.DocSearch-Menu{position:relative}.DocSearch-Menu-content{background-color:var(--docsearch-dropdown-menu-background);border-radius:var(--docsearch-border-radius);box-shadow:0 0 0 1px #21243d0d,0 8px 16px -4px #21243d40;display:none;flex-direction:column;min-width:195px;padding:8px 0;position:absolute;right:0;top:calc(100% + 12px);z-index:422}.DocSearch-Menu-content.open{display:flex}.DocSearch-Menu-item{align-items:center;background-color:transparent;border:0;color:var(--docsearch-text-color);cursor:pointer;display:flex;font-size:14px;gap:8px;padding:10px 16px;white-space:nowrap}.DocSearch-Menu-item:hover{background-color:var(--docsearch-dropdown-menu-item-hover-background)}[class*=DocSearch]{--docsearch-actions-height: auto;--docsearch-actions-width: auto;--docsearch-background-color: var(--vp-c-bg-soft);--docsearch-container-background: var(--vp-backdrop-bg-color);--docsearch-focus-color: var(--vp-c-brand-1);--docsearch-footer-background: var(--vp-c-bg);--docsearch-highlight-color: var(--vp-c-brand-1);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-1);--docsearch-hit-highlight-color: var(--vp-c-brand-soft);--docsearch-icon-color: var(--vp-c-text-2);--docsearch-key-background: transparent;--docsearch-key-color: var(--vp-c-text-2);--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-searchbox-focus-background: transparent;--docsearch-secondary-text-color: var(--vp-c-text-2);--docsearch-soft-primary-color: var(--vp-c-brand-soft);--docsearch-subtle-color: var(--vp-c-divider);--docsearch-success-color: var(--vp-c-brand-soft);--docsearch-text-color: var(--vp-c-text-1)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none}.DocSearch-Clear{padding:0 8px}.DocSearch-Commands-Key{padding:4px;border:1px solid var(--docsearch-subtle-color);border-radius:4px}.DocSearch-Hit a:focus-visible{outline:2px solid var(--docsearch-focus-color)}.DocSearch-Logo [class^=cls-]{fill:currentColor}.DocSearch-SearchBar+.DocSearch-Footer{border-top-color:transparent}.DocSearch-Title{font-size:revert;line-height:revert}.DocSearch-Button{--docsearch-muted-color: var(--docsearch-text-color);--docsearch-searchbox-background: transparent;width:auto;padding:2px 12px;border:none;border-radius:8px}.DocSearch-Search-Icon{color:inherit!important;width:20px;height:20px}@media(min-width:768px){.DocSearch-Button{--docsearch-muted-color: var(--docsearch-secondary-text-color);--docsearch-searchbox-background: var(--vp-c-bg-alt)}.DocSearch-Search-Icon{width:15px;height:15px}.DocSearch-Button-Placeholder{font-size:13px}}.DocSearch-Button-Keys{min-width:auto;margin:0;padding:4px 6px;background-color:var(--docsearch-key-background);border:1px solid var(--docsearch-subtle-color);border-radius:4px;font-size:12px;line-height:1;color:var(--docsearch-key-color)}.DocSearch-Button-Keys>*{display:none}.DocSearch-Button-Keys:after{direction:ltr;content:"Ctrl K"}.mac .DocSearch-Button-Keys:after{content:"⌘ K"}.VPNavBarSearch{display:flex;align-items:center}@media(min-width:768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media(min-width:960px){.VPNavBarSearch{padding-left:32px}}.VPNavBarSocialLinks[data-v-a0cc7756]{display:none}@media(min-width:1280px){.VPNavBarSocialLinks[data-v-a0cc7756]{display:flex;align-items:center}}.title[data-v-16a8c3d8]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media(min-width:960px){.title[data-v-16a8c3d8]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-16a8c3d8]{border-bottom-color:var(--vp-c-divider)}}[data-v-16a8c3d8] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-10e66b35]{display:none}@media(min-width:1280px){.VPNavBarTranslations[data-v-10e66b35]{display:flex;align-items:center}}.title[data-v-10e66b35]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-edbf9404]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-edbf9404]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-edbf9404]:not(.home){background-color:var(--vp-nav-bg-color)}@media(min-width:960px){.VPNavBar[data-v-edbf9404]:not(.home){background-color:transparent}.VPNavBar[data-v-edbf9404]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-edbf9404]{padding:0 8px 0 24px}@media(min-width:768px){.wrapper[data-v-edbf9404]{padding:0 32px}}@media(min-width:960px){.VPNavBar.has-sidebar .wrapper[data-v-edbf9404]{padding:0}}.container[data-v-edbf9404]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-edbf9404],.container>.content[data-v-edbf9404]{pointer-events:none}.container[data-v-edbf9404] *{pointer-events:auto}@media(min-width:960px){.VPNavBar.has-sidebar .container[data-v-edbf9404]{max-width:100%}}.title[data-v-edbf9404]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media(min-width:960px){.VPNavBar.has-sidebar .title[data-v-edbf9404]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media(min-width:1440px){.VPNavBar.has-sidebar .title[data-v-edbf9404]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-edbf9404]{flex-grow:1}@media(min-width:960px){.VPNavBar.has-sidebar .content[data-v-edbf9404]{position:relative;z-index:1;padding-left:var(--vp-sidebar-width);padding-right:32px}}@media(min-width:1440px){.VPNavBar.has-sidebar .content[data-v-edbf9404]{padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));padding-right:calc((100% - var(--vp-layout-max-width)) / 2 + 32px)}}.content-body[data-v-edbf9404]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);margin-right:-100vw;padding-right:100vw;transition:background-color .5s}@media(min-width:960px){.VPNavBar:not(.home.top) .content-body[data-v-edbf9404]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-edbf9404]{background-color:transparent}}@media(max-width:767px){.content-body[data-v-edbf9404]{column-gap:.5rem}}.menu+.translations[data-v-edbf9404]:before,.menu+.appearance[data-v-edbf9404]:before,.menu+.social-links[data-v-edbf9404]:before,.translations+.appearance[data-v-edbf9404]:before,.appearance+.social-links[data-v-edbf9404]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-edbf9404]:before,.translations+.appearance[data-v-edbf9404]:before{margin-right:16px}.appearance+.social-links[data-v-edbf9404]:before{margin-left:16px}.social-links[data-v-edbf9404]{margin-right:-8px}.divider[data-v-edbf9404]{width:100%;height:1px}@media(min-width:960px){.VPNavBar.has-sidebar .divider[data-v-edbf9404]{padding-left:var(--vp-sidebar-width)}}@media(min-width:1440px){.VPNavBar.has-sidebar .divider[data-v-edbf9404]{padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-edbf9404]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-edbf9404]{background-color:var(--vp-c-gutter)}@media(min-width:960px){.VPNavBar:not(.home.top) .divider-line[data-v-edbf9404]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-edbf9404]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-0f7922c3]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-0f7922c3]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-82fb7219]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-82fb7219]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-26b11f1e]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-26b11f1e]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-762f1acc]{display:block}.title[data-v-762f1acc]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-beec6482]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-beec6482]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-beec6482]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-beec6482]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-beec6482]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-beec6482]{transform:rotate(45deg)}.button[data-v-beec6482]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-beec6482]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-beec6482]{transition:transform .25s}.group[data-v-beec6482]:first-child{padding-top:0}.group+.group[data-v-beec6482],.group+.item[data-v-beec6482]{padding-top:4px}.VPNavScreenTranslations[data-v-e1ea5f7c]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-e1ea5f7c]{height:auto}.title[data-v-e1ea5f7c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-e1ea5f7c]{font-size:16px}.icon.lang[data-v-e1ea5f7c]{margin-right:8px}.icon.chevron[data-v-e1ea5f7c]{margin-left:4px}.list[data-v-e1ea5f7c]{padding:4px 0 0 24px}.link[data-v-e1ea5f7c]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-786ada9e]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-786ada9e],.VPNavScreen.fade-leave-active[data-v-786ada9e]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-786ada9e],.VPNavScreen.fade-leave-active .container[data-v-786ada9e]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-786ada9e],.VPNavScreen.fade-leave-to[data-v-786ada9e]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-786ada9e],.VPNavScreen.fade-leave-to .container[data-v-786ada9e]{transform:translateY(-8px)}@media(min-width:768px){.VPNavScreen[data-v-786ada9e]{display:none}}.container[data-v-786ada9e]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-786ada9e],.menu+.appearance[data-v-786ada9e],.translations+.appearance[data-v-786ada9e]{margin-top:24px}.menu+.social-links[data-v-786ada9e]{margin-top:16px}.appearance+.social-links[data-v-786ada9e]{margin-top:16px}.VPNav[data-v-21e98c69]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s;overflow-x:clip}@media(min-width:960px){.VPNav[data-v-21e98c69]{position:fixed}}.VPSidebarItem.level-0[data-v-15093875]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-15093875]{padding-bottom:10px}.item[data-v-15093875]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-15093875]{cursor:pointer}.indicator[data-v-15093875]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-15093875],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-15093875],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-15093875],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-15093875]{background-color:var(--vp-c-brand-1)}.link[data-v-15093875]{display:flex;align-items:center;flex-grow:1}.text[data-v-15093875]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-15093875]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-15093875],.VPSidebarItem.level-2 .text[data-v-15093875],.VPSidebarItem.level-3 .text[data-v-15093875],.VPSidebarItem.level-4 .text[data-v-15093875],.VPSidebarItem.level-5 .text[data-v-15093875]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-15093875],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-15093875],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-15093875],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-15093875],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-15093875],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-15093875]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-1.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-2.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-3.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-4.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-5.has-active>.item>.text[data-v-15093875],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-15093875],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-15093875],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-15093875],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-15093875],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-15093875],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-15093875]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-15093875],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-15093875],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-15093875],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-15093875],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-15093875],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-15093875]{color:var(--vp-c-brand-1)}.caret[data-v-15093875]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-15093875]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-15093875]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-15093875]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-15093875]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-15093875],.VPSidebarItem.level-2 .items[data-v-15093875],.VPSidebarItem.level-3 .items[data-v-15093875],.VPSidebarItem.level-4 .items[data-v-15093875],.VPSidebarItem.level-5 .items[data-v-15093875]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-15093875]{display:none}.no-transition[data-v-c8cf511c] .caret-icon{transition:none}.group+.group[data-v-c8cf511c]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media(min-width:960px){.group[data-v-c8cf511c]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-01266c03]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-01266c03]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-01266c03]{box-shadow:var(--vp-shadow-1)}@media(min-width:960px){.VPSidebar[data-v-01266c03]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media(min-width:1440px){.VPSidebar[data-v-01266c03]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media(min-width:960px){.curtain[data-v-01266c03]{position:sticky;top:calc(var(--vp-nav-height) * -1);left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-01266c03]{outline:0}.VPSkipLink[data-v-451012a8]{position:fixed;top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-451012a8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media(min-width:1280px){.VPSkipLink[data-v-451012a8]{top:14px;left:16px}}.Layout[data-v-170c53fe]{display:flex;flex-direction:column;min-height:100vh}.VPImage.image-src{filter:drop-shadow(0 12px 32px rgba(0,0,0,.1))}.VPHero .image{animation:glow 3s ease-in-out infinite}@keyframes glow{0%,to{filter:drop-shadow(0 0 20px rgba(56,189,248,.5))}50%{filter:drop-shadow(0 0 40px rgba(56,189,248,.8))}} diff --git a/.vitepress/dist/config/instances.html b/.vitepress/dist/config/instances.html new file mode 100644 index 0000000..fe97b04 --- /dev/null +++ b/.vitepress/dist/config/instances.html @@ -0,0 +1,77 @@ + + + + + + 实例配置 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

实例配置

实例 (Instance) 和工作者 (Worker) 是 WebAI2API 的核心配置概念。

概念说明

Instance (浏览器实例)

一个 Instance 代表一个独立的浏览器进程,具有:

  • 独立的用户数据目录
  • 独立的 Cookie 和登录状态
  • 可选的专属代理配置

Worker (工作者)

Worker 是 Instance 内的一个标签页,负责与特定平台交互。同一 Instance 下的多个 Worker:

  • 共享浏览器数据和登录状态
  • 共享代理配置
  • 可以是不同的适配器类型

配置结构

yaml
backend:
+  pool:
+    instances:
+      - name: "browser_default"    # 实例 ID
+        userDataMark: "01"         # 数据目录标识 (可选)
+        proxy:                      # 实例级代理 (可选)
+          enable: true
+          type: socks5
+          host: 127.0.0.1
+          port: 1080
+        workers:                    # Worker 列表
+          - name: "worker1"
+            type: lmarena
+          - name: "worker2"
+            type: zai_is

Instance 配置项

配置项类型必填说明
namestring实例唯一标识,用于日志和 Cookie 获取
userDataMarkstring数据目录标识,留空使用默认目录
proxyobject实例级代理配置,参见代理设置
workersarrayWorker 配置列表

数据目录

  • 默认位置: data/camoufoxUserData
  • 设置 userDataMark 后: data/camoufoxUserData_{mark}

Worker 配置项

配置项类型必填说明
namestringWorker 唯一标识(全局唯一)
typestring适配器类型
mergeTypesarray聚合模式的适配器列表 (type=merge 时必填)
mergeMonitorstring空闲时监控的后端 (可选)

适配器类型

类型说明
lmarenaLMArena 图片生成
lmarena_textLMArena 文本生成
gemini_bizGemini Business 图片生成
gemini_biz_textGemini Business 文本生成
geminiGoogle Gemini
zai_iszAI 图片生成
nanobananafree_aiNano Banana Free
merge聚合模式(单标签多后端)

聚合模式 (Merge)

聚合模式允许在单个标签页中支持多个后端,实现故障转移:

yaml
workers:
+  - name: "merged_worker"
+    type: merge
+    mergeTypes: [gemini_biz, lmarena, zai_is]
+    mergeMonitor: gemini_biz  # 空闲时挂机监控的后端

聚合模式优势

  • 节省浏览器资源
  • 自动故障转移
  • 统一登录状态

配置示例

单实例单 Worker

yaml
instances:
+  - name: "default"
+    workers:
+      - name: "worker1"
+        type: lmarena

多实例隔离

yaml
instances:
+  # 实例 1: 美国代理
+  - name: "browser_us"
+    userDataMark: "us"
+    proxy:
+      enable: true
+      type: socks5
+      host: us-proxy.example.com
+      port: 1080
+    workers:
+      - name: "us_worker"
+        type: lmarena
+
+  # 实例 2: 日本代理
+  - name: "browser_jp"
+    userDataMark: "jp"
+    proxy:
+      enable: true
+      type: socks5
+      host: jp-proxy.example.com
+      port: 1080
+    workers:
+      - name: "jp_worker"
+        type: lmarena

聚合模式

yaml
instances:
+  - name: "browser_merged"
+    workers:
+      - name: "all_in_one"
+        type: merge
+        mergeTypes: [gemini_biz, lmarena, zai_is]
+        mergeMonitor: gemini_biz
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/config/overview.html b/.vitepress/dist/config/overview.html new file mode 100644 index 0000000..c227951 --- /dev/null +++ b/.vitepress/dist/config/overview.html @@ -0,0 +1,62 @@ + + + + + + 配置文件概览、 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

配置文件概览、

WebAI2API 使用 YAML 格式的配置文件 config.yaml 进行配置。

注意

项目的配置问价已可以完全使用 WebUI 进行配置,若您不了解 YAML 文件,请直接略过该板块访问 WebUI 修改配置!

配置文件结构

yaml
# 日志等级
+logLevel: info
+
+# 服务器配置
+server:
+  port: 3000
+  auth: sk-your-key
+  keepalive:
+    mode: "comment"
+
+# 后端配置
+backend:
+  pool:
+    strategy: least_busy
+    failover:
+      enabled: true
+      maxRetries: 2
+    instances:
+      - name: "browser_default"
+        workers:
+          - name: "default"
+            type: lmarena
+  adapter:
+    gemini_biz:
+      entryUrl: ""
+
+# 队列配置
+queue:
+  queueBuffer: 2
+  imageLimit: 5
+
+# 浏览器配置
+browser:
+  path: ""
+  headless: false
+  proxy:
+    enable: false

配置项说明

日志配置

配置项类型默认值说明
logLevelstringinfo日志等级:debuginfowarnerror

服务器配置 (server)

配置项类型默认值说明
portnumber3000HTTP 服务监听端口
authstring-API 鉴权 Token (Bearer Token)
keepalive.modestringcomment心跳模式:commentcontent

心跳模式说明

  • comment: 发送 :keepalive 注释,不污染数据(推荐)
  • content: 发送空 delta,用于必须收到 JSON 才重置超时的客户端

队列配置 (queue)

配置项类型默认值说明
queueBuffernumber2非流式请求的额外排队数,0 表示不限制
imageLimitnumber5单次请求最大图片数量 (最大 10)

浏览器配置 (browser)

配置项类型默认值说明
pathstring""Camoufox 可执行文件路径,留空使用默认
headlessbooleanfalse是否启用无头模式
proxyobject-全局代理配置

相关文档

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/config/proxy.html b/.vitepress/dist/config/proxy.html new file mode 100644 index 0000000..ff8999a --- /dev/null +++ b/.vitepress/dist/config/proxy.html @@ -0,0 +1,53 @@ + + + + + + 代理设置 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

代理设置

WebAI2API 支持全局代理和实例级代理配置。

代理优先级

  1. 实例级代理 - 如果 Instance 配置了代理,使用该代理
  2. 全局代理 - 如果实例未配置,使用全局代理
  3. 直连 - 如果都未配置,直接连接

全局代理配置

browser.proxy 中配置全局代理:

yaml
browser:
+  proxy:
+    enable: true
+    type: http          # http 或 socks5
+    host: 127.0.0.1
+    port: 7890
+    # 可选认证
+    user: username
+    passwd: password

实例级代理配置

在 Instance 中配置专属代理:

yaml
backend:
+  pool:
+    instances:
+      - name: "browser_us"
+        proxy:
+          enable: true
+          type: socks5
+          host: us-proxy.example.com
+          port: 1080
+          user: myuser
+          passwd: mypassword
+        workers:
+          - name: "us_worker"
+            type: lmarena

配置项说明

配置项类型必填说明
enableboolean是否启用代理
typestring代理类型:httpsocks5
hoststring代理服务器地址
portnumber代理服务器端口
userstring代理认证用户名
passwdstring代理认证密码

强制直连

如果需要某个实例强制直连,即使配置了全局代理:

yaml
instances:
+  - name: "browser_direct"
+    proxy:
+      enable: false    # 显式禁用代理
+    workers:
+      - name: "direct_worker"
+        type: lmarena

代理选型建议

推荐配置

  • 类型: SOCKS5 代理通常比 HTTP 代理更通用
  • 稳定性: 选择稳定可靠的代理服务商
  • IP 纯净度: 使用 ping0.cc 等工具检查 IP 纯净度

注意事项

  • 代理质量会影响验证码触发频率
  • 频繁更换 IP 可能导致账号风控
  • 建议使用住宅 IP 或数据中心静态 IP
+ + + + \ No newline at end of file diff --git a/.vitepress/dist/favicon.png b/.vitepress/dist/favicon.png new file mode 100644 index 0000000..eef19bf Binary files /dev/null and b/.vitepress/dist/favicon.png differ diff --git a/.vitepress/dist/guide/deployment.html b/.vitepress/dist/guide/deployment.html new file mode 100644 index 0000000..66da04a --- /dev/null +++ b/.vitepress/dist/guide/deployment.html @@ -0,0 +1,51 @@ + + + + + + 快速部署 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

快速部署

本项目支持 手动部署(推荐)Docker 容器化部署 两种方式。

手动部署

1. 克隆项目

bash
git clone https://github.com/foxhui/WebAI2API.git
+cd WebAI2API

2. 复制配置文件

bash
cp config.example.yaml config.yaml

3. 安装依赖

bash
# 安装 Node.js 依赖
+pnpm install
+
+# 初始化预编译依赖
+npm run init

注意

npm run init 需要从 GitHub 下载文件,请确保网络畅通。

4. 编辑配置

编辑 config.yaml 文件,设置鉴权密钥等配置:

yaml
server:
+  port: 3000
+  auth: sk-your-secret-key  # 修改为你的密钥

5. 启动服务

bash
# 标准运行
+npm start
+
+# Linux 命令行启动
+npm start -- -xvfb -vnc

Docker 部署

特别说明

登录相关操作可以在 WebUI 的虚拟显示器板块进行,也可通过 RealVNC 等工具连接(需添加映射 VNC 端口,默认非被占用的情况下为 5900)

Docker CLI

bash
docker run -d --name webai-2api \
+  -p 3000:3000 \
+  -v "$(pwd)/data:/app/data" \
+  --shm-size=2gb \
+  foxhui/webai-2api:latest

Docker Compose

yaml
services:
+  webai-2api:
+    image: foxhui/webai-2api:latest
+    container_name: webai-2api
+    restart: unless-stopped
+    ports:
+      - "3000:3000"
+    volumes:
+      - ./data:/app/data
+    shm_size: '2gb'
+    init: true

启动服务:

bash
docker compose up -d

验证安装

服务启动后,访问以下地址验证:

下一步

部署完成后,请阅读 首次使用 完成登录初始化。

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/guide/first-use.html b/.vitepress/dist/guide/first-use.html new file mode 100644 index 0000000..5215b73 --- /dev/null +++ b/.vitepress/dist/guide/first-use.html @@ -0,0 +1,33 @@ + + + + + + 首次使用 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

首次使用

首次使用 WebAI2API 时,需要完成登录初始化才能正常使用。

登录模式

启动登录模式

登录模式会强制关闭无头模式

bash
# 启动第一个 Worker 进行登录
+npm start -- -login
+
+# 启动指定 Worker 进行登录
+npm start -- -login=workerName

Linux 用户特殊说明

Linux 服务器用户可以使用 Xvfb + VNC 方式:

bash
npm start -- -xvfb -vnc

然后通过 VNC 客户端连接 :5900 端口进行操作(也可使用 WebUI 中的虚拟显示器板块)

初始化步骤

  1. 登录账号

    • Linux 用户使用 npm start -- -xvfb -vnc 启动程序,然后使用 WebUI 或者第三方工具连接 VNC
    • 在打开的浏览器中登录相应平台的账号
    • 例如:Google 账号用于 Gemini,GitHub 账号用于 LMArena
  2. 完成验证

    • 在输入框发送任意消息
    • 触发并完成 CloudFlare/reCAPTCHA 验证
    • 同意服务条款
  3. 验证成功

    • 确认可以正常发送消息和接收回复
    • 关闭浏览器或按 Ctrl+C 退出登录模式

运行建议

  • 初始化完成后可使用无头模式运行,为降低风控风险,强烈建议长期保持非无头模式运行
  • WebUI 和 VNC 传输过程均未加密,若在公网环境运行请走 SSH 隧道或者使用 Caddy/Nginx 为 WebUI 添加 HTTPS 连接
    bash
    # SSH隧道方法:在本地终端运行,将服务器 5900 端口映射到本地
    +ssh -L 5900:127.0.0.1:5900 root@服务器IP

多 Worker 登录

如果配置了多个 Worker,需要分别为每个 Worker 完成登录:

bash
# 依次登录各个 Worker
+npm start -- -login=worker1
+npm start -- -login=worker2

共享登录状态

同一 Instance(浏览器实例)下的多个 Worker 共享登录状态。如果使用 Google OAuth 等统一登录方式,只需登录一次即可。

WebUI 登录模式

服务运行后,也可以通过 WebUI 切换到登录模式:

  1. 访问 http://localhost:3000
  2. 进入「系统管理」页面
  3. 点击「重启」按钮的下拉箭头
  4. 选择「登录模式重启」或指定 Worker 登录

下一步

登录完成后,请阅读以下内容:

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/guide/introduction.html b/.vitepress/dist/guide/introduction.html new file mode 100644 index 0000000..714da57 --- /dev/null +++ b/.vitepress/dist/guide/introduction.html @@ -0,0 +1,26 @@ + + + + + + WebAI2API + + + + + + + + + + + + + + + +
Skip to content

WebAI2API

Image

📝 项目简介

WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发多账号管理(浏览器实例数据隔离)。

📋 当前支持列表

网站名称文本支持图片支持
LMArena
Gemini Enterprise Business
Nano Banana Free
zAI
Google Gemini

未来可能会支持更多网站...

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/guide/requirements.html b/.vitepress/dist/guide/requirements.html new file mode 100644 index 0000000..9b25382 --- /dev/null +++ b/.vitepress/dist/guide/requirements.html @@ -0,0 +1,39 @@ + + + + + + 环境要求 | WebAI2API + + + + + + + + + + + + + + + +
Skip to content

环境要求

在开始部署 WebAI2API 之前,请确保您的环境满足以下要求。

系统要求

操作系统

  • Windows: Windows 10/11 或 Windows Server 2016+
  • Linux: Ubuntu 18.04+, Debian 10+, CentOS 7+ 或其他主流发行版
  • macOS: macOS 10.15 (Catalina) 或更高版本

硬件配置

资源最低配置推荐配置(单实例)推荐配置(多实例)
CPU1 核2 核及以上2 核及以上
内存1 GB2 GB 及以上4 GB 及以上
磁盘2 GB 可用空间5 GB 及以上7 GB 及以上

实测环境表现

  • Oracle 免费机 (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用
  • 阿里云轻量云 (2C2G, Debian 11):运行流畅,项目开发测试所用机型

软件依赖

Node.js

  • 版本要求: v20.0.0 或更高版本 (ABI 115+)
  • 包管理器: pnpm (推荐) 或 npm
bash
# 检查 Node.js 版本
+node --version
+
+# 安装 pnpm (如未安装)
+npm install -g pnpm

Camoufox

Camoufox 是本项目的核心依赖,会在安装过程中自动下载。

网络要求

安装过程需要从 GitHub 下载 Camoufox 等预编译依赖,请确保网络能够正常访问 GitHub。

Docker 环境 (可选)

如果选择 Docker 部署方式,需要安装:

  • Docker: 20.10.0 或更高版本
  • Docker Compose: 2.0.0 或更高版本 (可选)
bash
# 检查 Docker 版本
+docker --version
+docker compose version

Linux 特殊依赖

在 Linux 环境下运行非无头模式时,可能需要额外安装:

bash
# Ubuntu/Debian
+sudo apt-get install xvfb x11vnc
+
+# CentOS/RHEL
+sudo yum install xorg-x11-server-Xvfb x11vnc
+
+# Arch Linux
+sudo pacman -S xorg-server-xvfb x11vnc

下一步

环境准备就绪后,请继续阅读 快速部署 开始安装。

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/hashmap.json b/.vitepress/dist/hashmap.json new file mode 100644 index 0000000..d7692bc --- /dev/null +++ b/.vitepress/dist/hashmap.json @@ -0,0 +1 @@ +{"admin_linux.md":"C4pirr1w","admin_troubleshooting.md":"BdBPvYAx","admin_webui.md":"C6OfyL7c","api_chat.md":"CVfvhFz2","api_cookies.md":"BngFs3oo","api_models.md":"BmD2H_2d","api_overview.md":"BJJapNOd","config_instances.md":"CvnejDKP","config_overview.md":"-rOn3l_p","config_proxy.md":"B7kjsU6e","guide_deployment.md":"Browh70b","guide_first-use.md":"C0Hv5lBx","guide_introduction.md":"D7_DJb6Y","guide_requirements.md":"ettCHBZs","index.md":"C3b48Ls9"} diff --git a/.vitepress/dist/index.html b/.vitepress/dist/index.html new file mode 100644 index 0000000..2a63e2e --- /dev/null +++ b/.vitepress/dist/index.html @@ -0,0 +1,26 @@ + + + + + + WebAI2API + + + + + + + + + + + + + + + +
Skip to content

WebAI2API网页版 AI 服务转 OpenAI 兼容 API

基于 Camoufox (Playwright),模拟人类操作与 LMArena、Gemini 等网站交互

+ + + + \ No newline at end of file diff --git a/.vitepress/dist/vp-icons.css b/.vitepress/dist/vp-icons.css new file mode 100644 index 0000000..ddc5bd8 --- /dev/null +++ b/.vitepress/dist/vp-icons.css @@ -0,0 +1 @@ +.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file diff --git a/docs/guide/deployment.md b/docs/guide/deployment.md index 049111a..76bbf6c 100644 --- a/docs/guide/deployment.md +++ b/docs/guide/deployment.md @@ -53,39 +53,34 @@ npm start -- -xvfb -vnc ## Docker 部署 -::: warning 首次运行说明 -首次运行需通过 VNC 客户端连接 `localhost:5900` 完成网页登录验证。 +::: warning **特别说明** +登录相关操作可以在 WebUI 的虚拟显示器板块进行,也可通过 RealVNC 等工具连接(需添加映射 VNC 端口,默认非被占用的情况下为 5900) ::: ### Docker CLI ```bash -docker run -d --name webai2api \ - -p 3000:3000 -p 5900:5900 \ +docker run -d --name webai-2api \ + -p 3000:3000 \ -v "$(pwd)/data:/app/data" \ - -v "$(pwd)/config.yaml:/app/config.yaml" \ - -e LOGIN_MODE=true \ --shm-size=2gb \ - foxhui/lmarena-imagen-automator:latest + foxhui/webai-2api:latest ``` ### Docker Compose ```yaml -version: '3.8' services: - webai2api: - image: foxhui/lmarena-imagen-automator:latest + webai-2api: + image: foxhui/webai-2api:latest + container_name: webai-2api + restart: unless-stopped ports: - "3000:3000" - - "5900:5900" volumes: - ./data:/app/data - - ./config.yaml:/app/config.yaml - environment: - - LOGIN_MODE=true - shm_size: 2gb - restart: unless-stopped + shm_size: '2gb' + init: true ``` 启动服务: diff --git a/docs/guide/first-use.md b/docs/guide/first-use.md index 1276e1a..9c5fd99 100644 --- a/docs/guide/first-use.md +++ b/docs/guide/first-use.md @@ -6,6 +6,8 @@ ### 启动登录模式 +登录模式会强制关闭无头模式 + ```bash # 启动第一个 Worker 进行登录 npm start -- -login @@ -27,6 +29,7 @@ npm start -- -xvfb -vnc ## 初始化步骤 1. **登录账号** + - Linux 用户使用 `npm start -- -xvfb -vnc` 启动程序,然后使用 WebUI 或者第三方工具连接 VNC - 在打开的浏览器中登录相应平台的账号 - 例如:Google 账号用于 Gemini,GitHub 账号用于 LMArena @@ -39,16 +42,14 @@ npm start -- -xvfb -vnc - 确认可以正常发送消息和接收回复 - 关闭浏览器或按 `Ctrl+C` 退出登录模式 -## 切换到标准模式 - -初始化完成后,使用标准命令启动服务: - -```bash -npm start -``` ::: tip 运行建议 -为降低风控风险,**强烈建议长期保持非无头模式运行**。 +- 初始化完成后可使用无头模式运行,为降低风控风险,**强烈建议长期保持非无头模式运行**。 +- **WebUI 和 VNC 传输过程均未加密,若在公网环境运行请走 SSH 隧道或者使用 Caddy/Nginx 为 WebUI 添加 HTTPS 连接** + ```bash + # SSH隧道方法:在本地终端运行,将服务器 5900 端口映射到本地 + ssh -L 5900:127.0.0.1:5900 root@服务器IP + ``` ::: ## 多 Worker 登录 diff --git a/docs/guide/introduction.md b/docs/guide/introduction.md new file mode 100644 index 0000000..c0e80cd --- /dev/null +++ b/docs/guide/introduction.md @@ -0,0 +1,18 @@ +# WebAI2API +![Image](https://github.com/user-attachments/assets/296a518e-c42b-4e39-8ff6-9b4381ed4f6e) + +## 📝 项目简介 + +**WebAI2API** 是一个基于 **Camoufox (Playwright)** 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 **OpenAI 格式** 的接口服务,同时支持 **多窗口并发** 与 **多账号管理**(浏览器实例数据隔离)。 + +### 📋 当前支持列表 + +| 网站名称 | 文本支持 | 图片支持 | +| :--- | :---: | :---: | +| [**LMArena**](https://lmarena.ai/) | ✅ | ✅ | +| [**Gemini Enterprise Business**](https://business.gemini.google/) | ✅ | ✅ | +| [**Nano Banana Free**](https://nanobananafree.ai/) | ❌ | ✅ | +| [**zAI**](https://zai.is/) | ❌ | ✅ | +| [**Google Gemini**](https://gemini.google.com/) | ❌ | ✅ | + +> 未来可能会支持更多网站... \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 6443a06..5973f00 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,6 +9,9 @@ hero: - theme: brand text: 快速开始 link: /guide/deployment + - theme: alt + text: 项目介绍 + link: /guide/introduction - theme: alt text: GitHub link: https://github.com/foxhui/WebAI2API