This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch feat/scalar-admin-api-reference
in repository https://gitbox.apache.org/repos/asf/apisix-website.git

commit e6319a3775e5335edfc9852c4cf9352f0fb7b6f7
Author: juzhiyuan <[email protected]>
AuthorDate: Thu Oct 22 07:00:49 2026 +0800

    feat(docs): render Admin API reference with Scalar
---
 .github/workflows/deploy.yml                  |    9 +-
 next/README.md                                |   39 +
 next/package-lock.json                        | 2270 +++++++++++++++++++++++--
 next/package.json                             |    2 +-
 next/public/openapi/admin-api/3.19.0.json     |    1 +
 next/src/layouts/AdminApiPage.astro           |  226 +++
 next/src/pages/docs/apisix/[...id].astro      |    2 +-
 next/src/pages/docs/apisix/admin-api.astro    |    4 +
 next/src/pages/zh/docs/apisix/[...id].astro   |    2 +-
 next/src/pages/zh/docs/apisix/admin-api.astro |    4 +
 next/src/styles/admin-api-scalar.css          |   46 +
 next/tests/e2e/admin-api.spec.mjs             |   66 +
 12 files changed, 2563 insertions(+), 108 deletions(-)

diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index b7e4c66689a..19fe4eee3f6 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -360,7 +360,7 @@ jobs:
           # product/resource pages, and shared Astro assets come from the Astro
           # build. Everything else in website/build (team, contribute, search,
           # sitemaps, .htaccess, robots) stays as Docusaurus produced it.
-          for path in index.html zh/index.html _astro \
+          for path in index.html zh/index.html _astro openapi \
                       blog zh/blog learning-center zh/learning-center \
                       articles zh/articles events zh/events \
                       integrations zh/integrations cookbooks zh/cookbooks \
@@ -451,6 +451,13 @@ jobs:
           grep -q '同一个网关' website/build/zh/index.html
           grep -q '/_astro/.*\.css' website/build/index.html
           test -d website/build/_astro
+          # Ship the same OAS that both Scalar pages and their downloads use.
+          cmp next/public/openapi/admin-api/3.19.0.json \
+            website/build/openapi/admin-api/3.19.0.json
+          for f in website/build/docs/apisix/admin-api/index.html \
+                   website/build/zh/docs/apisix/admin-api/index.html; do
+            grep -q 'data-spec-url="/openapi/admin-api/3.19.0.json"' "$f"
+          done
           # Wave-2 sanity: key subtree landmarks exist.
           test -f website/build/blog/index.html
           test -f website/build/zh/blog/index.html
diff --git a/next/README.md b/next/README.md
index ffbfdd687ab..64477137e84 100644
--- a/next/README.md
+++ b/next/README.md
@@ -32,3 +32,42 @@ node scripts/check-parity.mjs <live-en-urls.txt> 
<live-zh-urls.txt>
 ```
 
 Deploy target is unchanged: push `dist/` to the `asf-site` branch.
+
+## Admin API reference
+
+The current English and Chinese Admin API pages use Scalar at
+`/docs/apisix/admin-api/` and `/zh/docs/apisix/admin-api/`. Historical versions
+continue to use their original Docusaurus pages.
+
+Scalar is installed at a fixed version and bundled locally. Both locales load 
the
+same unmodified, API7-maintained OpenAPI document from
+`public/openapi/admin-api/3.19.0.json`, served at 
`/openapi/admin-api/3.19.0.json`.
+The toolbar download uses that same file. The OAS descriptions remain English;
+Scalar's controls follow the page language. The full upstream Markdown guide is
+still available in each page's language through the reading panel, with an
+expandable section as the no-JavaScript fallback.
+
+The checked-in snapshot was downloaded from
+[API7's published Admin API 
OAS](https://docs.api7.ai/apisix/reference/admin-api/openapi.json).
+It declares OAS 3.1.0, APISIX 3.19.0, API7.ai as its contact, and Apache 2.0
+licensing. Its SHA-256 is
+`25fdced50713283fd2252fc78ea733457e7bf59542dd8c0c6597a08e116a29e1`.
+The same JSON content is also published on the
+[Chinese documentation 
site](https://docs.apiseven.com/apisix/reference/admin-api/openapi.json).
+There is no Markdown-to-OpenAPI conversion and no network download during build
+or startup. To update the OAS, download the published source, verify its 
declared
+version against the website's APISIX version, retain the document unchanged, 
and
+update the versioned asset path and provenance here.
+
+Requests go directly to the selected server, which needs to permit the 
browser's
+origin through CORS. Authentication is not persisted or sent through a hosted
+proxy.
+
+To preview after installing dependencies and syncing content:
+
+```bash
+npm run dev
+# http://localhost:4321/docs/apisix/admin-api/
+# http://localhost:4321/zh/docs/apisix/admin-api/
+npm run test:e2e -- tests/e2e/admin-api.spec.mjs
+```
diff --git a/next/package-lock.json b/next/package-lock.json
index 227ded4842d..274c2ec3e1c 100644
--- a/next/package-lock.json
+++ b/next/package-lock.json
@@ -6,6 +6,7 @@
     "": {
       "name": "apisix-website-astro",
       "dependencies": {
+        "@scalar/api-reference": "1.75.1",
         "astro": "^6.0.5",
         "entities": "^6.0.1",
         "remark-directive": "^4.0.0",
@@ -17,6 +18,69 @@
         "semver": "^7.8.5"
       }
     },
+    "node_modules/@ai-sdk/gateway": {
+      "version": "3.0.139",
+      "resolved": 
"https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.139.tgz";,
+      "integrity": 
"sha512-RFpxyh5j9g7ZMfKxhiwCcF7bGU872o3JvoiIqZbHOM4qkR4RCzeKJF+k+zHomcJYGeUabEbeMXTKNASzz4Toxw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ai-sdk/provider": "3.0.12",
+        "@ai-sdk/provider-utils": "4.0.33",
+        "@vercel/oidc": "3.2.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "zod": "^3.25.76 || ^4.1.8"
+      }
+    },
+    "node_modules/@ai-sdk/provider": {
+      "version": "3.0.12",
+      "resolved": 
"https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.12.tgz";,
+      "integrity": 
"sha512-sj9DWTJ2Ze0WR9qsiOPqoqzNx3OxL6iMxHImbhvoe9qOspekbzxNDMiJ4TIGfYHYh9w4OmBjz3prvqhzTi96+Q==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "json-schema": "^0.4.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@ai-sdk/provider-utils": {
+      "version": "4.0.33",
+      "resolved": 
"https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.33.tgz";,
+      "integrity": 
"sha512-nJ0bAfegMAIJtrzMJtbzer1cS3nb7c7DsyU1S4nrPm7ZU0Mn6SBBZv5IGZZGTbpWTJwqKTSPeZJTXalbAxt1BA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ai-sdk/provider": "3.0.12",
+        "@standard-schema/spec": "^1.1.0",
+        "eventsource-parser": "^3.0.8"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "zod": "^3.25.76 || ^4.1.8"
+      }
+    },
+    "node_modules/@ai-sdk/vue": {
+      "version": "3.0.214",
+      "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-3.0.214.tgz";,
+      "integrity": 
"sha512-YADiezfhQfjqWJttXkweSLZNWCUH0VORv3VkCuwbAD+ViOTYiO/Im3Nfr49AgUwq+LaYZGDFCXtrg5DNobgR3g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ai-sdk/provider-utils": "4.0.33",
+        "ai": "6.0.214",
+        "swrv": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "vue": "^3.3.4"
+      }
+    },
     "node_modules/@astrojs/compiler": {
       "version": "3.0.1",
       "resolved": 
"https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.1.tgz";,
@@ -109,12 +173,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.29.7",
-      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz";,
-      "integrity": 
"sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "version": "7.29.9",
+      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz";,
+      "integrity": 
"sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.29.7"
+        "@babel/types": "^7.29.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -124,9 +188,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.29.7",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz";,
-      "integrity": 
"sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "version": "7.29.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz";,
+      "integrity": 
"sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.29.7",
@@ -176,6 +240,167 @@
         "node": ">= 20.12.0"
       }
     },
+    "node_modules/@codemirror/autocomplete": {
+      "version": "6.20.4",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.4.tgz";,
+      "integrity": 
"sha512-yF8RhOf2SXlg00+qtupzLhrglcas61boqaONiNcbPIebHCpJocpqTBA6dyrtUrQO47hqyTdeob/3XnYilT7TaQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/commands": {
+      "version": "6.11.1",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/commands/-/commands-6.11.1.tgz";,
+      "integrity": 
"sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.7.0",
+        "@codemirror/view": "^6.27.0",
+        "@lezer/common": "^1.1.0"
+      }
+    },
+    "node_modules/@codemirror/lang-css": {
+      "version": "6.3.1",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz";,
+      "integrity": 
"sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/common": "^1.0.2",
+        "@lezer/css": "^1.1.7"
+      }
+    },
+    "node_modules/@codemirror/lang-html": {
+      "version": "6.4.12",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.12.tgz";,
+      "integrity": 
"sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/lang-css": "^6.0.0",
+        "@codemirror/lang-javascript": "^6.0.0",
+        "@codemirror/language": "^6.4.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/css": "^1.1.0",
+        "@lezer/html": "^1.3.12"
+      }
+    },
+    "node_modules/@codemirror/lang-javascript": {
+      "version": "6.2.5",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz";,
+      "integrity": 
"sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.6.0",
+        "@codemirror/lint": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/javascript": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-json": {
+      "version": "6.0.2",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz";,
+      "integrity": 
"sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/json": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-xml": {
+      "version": "6.1.0",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz";,
+      "integrity": 
"sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.4.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/xml": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-yaml": {
+      "version": "6.1.3",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.3.tgz";,
+      "integrity": 
"sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.2.0",
+        "@lezer/lr": "^1.0.0",
+        "@lezer/yaml": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/language": {
+      "version": "6.13.1",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/language/-/language-6.13.1.tgz";,
+      "integrity": 
"sha512-zfvU2r3TyylQLMj/te+5CnQ0rSqZi8B1oTCBbQkagcLW4Xc6imab6qN+pEJhsuNOLaJqiRyBXp9UhWA1DhVvDw==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/streamparser": "^6.0.0",
+        "@codemirror/view": "^6.23.0",
+        "@lezer/common": "^1.5.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0",
+        "style-mod": "^4.0.0"
+      }
+    },
+    "node_modules/@codemirror/lint": {
+      "version": "6.9.7",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.7.tgz";,
+      "integrity": 
"sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.42.0",
+        "crelt": "^1.0.5"
+      }
+    },
+    "node_modules/@codemirror/state": {
+      "version": "6.7.6",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/state/-/state-6.7.6.tgz";,
+      "integrity": 
"sha512-kAz+AncRtKuIknedxT1bq4XwXv4UowhbkHU1myPrtVb/jZtImWuV5BXzv5vK6i3kYACsdiZiQKFQQ5Mq7elW8w==",
+      "license": "MIT",
+      "dependencies": {
+        "@marijn/find-cluster-break": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/streamparser": {
+      "version": "6.0.0",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/streamparser/-/streamparser-6.0.0.tgz";,
+      "integrity": 
"sha512-JTFPF6xrfjt0mnfGPgzcLiMwYmvIyNaoizp8BYzv8FE8KrT6GBGDZ190rtt+O7Wke3gG/MFHyiY9YGNeimof4w==",
+      "license": "MIT"
+    },
+    "node_modules/@codemirror/view": {
+      "version": "6.43.15",
+      "resolved": 
"https://registry.npmjs.org/@codemirror/view/-/view-6.43.15.tgz";,
+      "integrity": 
"sha512-HHsfpqFeHyXLs983pSRe38Xajs0vFWZQ2BuX0m7Ki8w3jZ5iD8cuR3lBz2/5/X53Dhf32SBHKh6rtSTB6tKeGw==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/state": "^6.7.0",
+        "crelt": "^1.0.6",
+        "style-mod": "^4.1.0",
+        "w3c-keyname": "^2.2.4"
+      }
+    },
     "node_modules/@emnapi/runtime": {
       "version": "1.11.2",
       "resolved": 
"https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz";,
@@ -602,6 +827,81 @@
         "node": ">=18"
       }
     },
+    "node_modules/@floating-ui/core": {
+      "version": "1.8.0",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz";,
+      "integrity": 
"sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/utils": "^0.2.12"
+      }
+    },
+    "node_modules/@floating-ui/core/node_modules/@floating-ui/utils": {
+      "version": "0.2.12",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz";,
+      "integrity": 
"sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+      "license": "MIT"
+    },
+    "node_modules/@floating-ui/dom": {
+      "version": "1.8.0",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz";,
+      "integrity": 
"sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/core": "^1.8.0",
+        "@floating-ui/utils": "^0.2.12"
+      }
+    },
+    "node_modules/@floating-ui/dom/node_modules/@floating-ui/utils": {
+      "version": "0.2.12",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz";,
+      "integrity": 
"sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+      "license": "MIT"
+    },
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz";,
+      "integrity": 
"sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+      "license": "MIT"
+    },
+    "node_modules/@floating-ui/vue": {
+      "version": "1.1.9",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.9.tgz";,
+      "integrity": 
"sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/dom": "^1.7.4",
+        "@floating-ui/utils": "^0.2.10",
+        "vue-demi": ">=0.13.0"
+      }
+    },
+    "node_modules/@headlessui/tailwindcss": {
+      "version": "0.2.2",
+      "resolved": 
"https://registry.npmjs.org/@headlessui/tailwindcss/-/tailwindcss-0.2.2.tgz";,
+      "integrity": 
"sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "tailwindcss": "^3.0 || ^4.0"
+      }
+    },
+    "node_modules/@headlessui/vue": {
+      "version": "1.7.23",
+      "resolved": 
"https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz";,
+      "integrity": 
"sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==",
+      "license": "MIT",
+      "dependencies": {
+        "@tanstack/vue-virtual": "^3.0.0-beta.60"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
     "node_modules/@img/colour": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz";,
@@ -1068,18 +1368,147 @@
         "url": "https://opencollective.com/libvips";
       }
     },
+    "node_modules/@internationalized/date": {
+      "version": "3.12.4",
+      "resolved": 
"https://registry.npmjs.org/@internationalized/date/-/date-3.12.4.tgz";,
+      "integrity": 
"sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@swc/helpers": "^0.5.0"
+      }
+    },
+    "node_modules/@internationalized/number": {
+      "version": "3.6.9",
+      "resolved": 
"https://registry.npmjs.org/@internationalized/number/-/number-3.6.9.tgz";,
+      "integrity": 
"sha512-GgWy2caO/+hV9sT/oCTWGHvbjmJMPT9kkXzoKRLnkEq7adghhR7UprhvY9sXrKfrp3NcDfhF6QQHXR1KfQbB8g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@swc/helpers": "^0.5.0"
+      }
+    },
     "node_modules/@jridgewell/sourcemap-codec": {
       "version": "1.5.5",
       "resolved": 
"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz";,
       "integrity": 
"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
       "license": "MIT"
     },
+    "node_modules/@lezer/common": {
+      "version": "1.5.3",
+      "resolved": 
"https://registry.npmjs.org/@lezer/common/-/common-1.5.3.tgz";,
+      "integrity": 
"sha512-H0iErY4e43LpXbYDyBci5W4v/RwTgGV3YzYOlJPiGZ8RY8w51kVE+xLn1tg3Z6UmSfyETvtsUK3r7YsgDQEI7Q==",
+      "license": "MIT"
+    },
+    "node_modules/@lezer/css": {
+      "version": "1.3.9",
+      "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.9.tgz";,
+      "integrity": 
"sha512-ZmzgvTOBdJWGIsY/ItAfN7UW8DV802oZG+jeG6E508SwEzz5YhuAajptpWPICvIyqYAD2+VjMdOS40GgGkyEOQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.3.0"
+      }
+    },
+    "node_modules/@lezer/highlight": {
+      "version": "1.2.5",
+      "resolved": 
"https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.5.tgz";,
+      "integrity": 
"sha512-O1GMVKgtf5YspFaRzpmqkVgMtIk2HG9uMAbH6wdAIdNh3TVzCsch/+cRi+6l2//UGDKe6NB9BW3cvuR5ezMQ0w==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.3.0"
+      }
+    },
+    "node_modules/@lezer/html": {
+      "version": "1.3.13",
+      "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz";,
+      "integrity": 
"sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/javascript": {
+      "version": "1.5.6",
+      "resolved": 
"https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.6.tgz";,
+      "integrity": 
"sha512-sEvOqpl4vJQca0NugSQK02vQPbc5KrvoojnYGoqqFgFO0MtcYhwGiHKVEB+LuXYJnfyXo4QPA8ztbrEa4Fw5NA==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.1.3",
+        "@lezer/lr": "^1.3.0"
+      }
+    },
+    "node_modules/@lezer/json": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz";,
+      "integrity": 
"sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/lr": {
+      "version": "1.4.11",
+      "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.11.tgz";,
+      "integrity": 
"sha512-UwgZcl1R66H2hDzBrA7kWyYmX6s8p5TQ+e/t7CuvgCtBEPxbEPaHYHu+pJBvTvDotEJpuQkJjbXuHiw5Cixxgw==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/xml": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz";,
+      "integrity": 
"sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/yaml": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.4.tgz";,
+      "integrity": 
"sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.4.0"
+      }
+    },
+    "node_modules/@marijn/find-cluster-break": {
+      "version": "1.0.4",
+      "resolved": 
"https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.4.tgz";,
+      "integrity": 
"sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==",
+      "license": "MIT"
+    },
+    "node_modules/@opentelemetry/api": {
+      "version": "1.10.0",
+      "resolved": 
"https://registry.npmjs.org/@opentelemetry/api/-/api-1.10.0.tgz";,
+      "integrity": 
"sha512-lMkyes8iHrG+mk6WH7X70MdCLI2RS0FwNBY1PyQ8UemaijE2m5mv5A0Niy3HtbYTFrgkUEQjFMXmSAk2hQDuPQ==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
     "node_modules/@oslojs/encoding": {
       "version": "1.1.0",
       "resolved": 
"https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz";,
       "integrity": 
"sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
       "license": "MIT"
     },
+    "node_modules/@phosphor-icons/core": {
+      "version": "2.1.1",
+      "resolved": 
"https://registry.npmjs.org/@phosphor-icons/core/-/core-2.1.1.tgz";,
+      "integrity": 
"sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==",
+      "license": "MIT"
+    },
     "node_modules/@playwright/test": {
       "version": "1.61.1",
       "resolved": 
"https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz";,
@@ -1096,6 +1525,17 @@
         "node": ">=18"
       }
     },
+    "node_modules/@replit/codemirror-css-color-picker": {
+      "version": "6.3.0",
+      "resolved": 
"https://registry.npmjs.org/@replit/codemirror-css-color-picker/-/codemirror-css-color-picker-6.3.0.tgz";,
+      "integrity": 
"sha512-19biDANghUm7Fz7L1SNMIhK48tagaWuCOHj4oPPxc7hxPGkTVY2lU/jVZ8tsbTKQPVG7BO2CBDzs7CBwb20t4A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0"
+      }
+    },
     "node_modules/@rollup/pluginutils": {
       "version": "5.4.0",
       "resolved": 
"https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz";,
@@ -1443,94 +1883,647 @@
         "win32"
       ]
     },
-    "node_modules/@shikijs/core": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz";,
-      "integrity": 
"sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==",
-      "license": "MIT",
-      "dependencies": {
-        "@shikijs/primitive": "4.3.1",
-        "@shikijs/types": "4.3.1",
-        "@shikijs/vscode-textmate": "^10.0.2",
-        "@types/hast": "^3.0.4",
-        "hast-util-to-html": "^9.0.5"
+    "node_modules/@scalar/agent-chat": {
+      "version": "0.12.45",
+      "resolved": 
"https://registry.npmjs.org/@scalar/agent-chat/-/agent-chat-0.12.45.tgz";,
+      "integrity": 
"sha512-ccjzL8aCQEI5ruv1uObwCmwBeruE6KZXBIdGc8dhcNu66ToLwZoLG9iGL4k/RX/SCZmD9T7COkCliCZo5VO0Vw==",
+      "license": "MIT",
+      "dependencies": {
+        "@ai-sdk/vue": "3.0.214",
+        "@scalar/api-client": "3.23.2",
+        "@scalar/components": "0.32.1",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/json-magic": "0.16.1",
+        "@scalar/openapi-types": "0.9.8",
+        "@scalar/schemas": "0.14.0",
+        "@scalar/themes": "0.19.2",
+        "@scalar/types": "0.24.0",
+        "@scalar/use-toasts": "0.10.5",
+        "@scalar/validation": "0.6.7",
+        "@scalar/workspace-store": "0.68.5",
+        "@vueuse/core": "13.9.0",
+        "ai": "6.0.214",
+        "js-base64": "^3.9.2",
+        "neverpanic": "0.0.8",
+        "truncate-json": "3.0.1",
+        "vue": "^3.5.40"
       },
       "engines": {
-        "node": ">=20"
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/api-client": {
+      "version": "3.23.2",
+      "resolved": 
"https://registry.npmjs.org/@scalar/api-client/-/api-client-3.23.2.tgz";,
+      "integrity": 
"sha512-gcsj3wHUAJ/9l55TgnZYknIWiF2uP2xo1O5isNsfAqeAC7WghMlB2aZnfV6X3epDQGQjvfmy+KhSYrpRFV3gKg==",
+      "license": "MIT",
+      "dependencies": {
+        "@headlessui/tailwindcss": "^0.2.2",
+        "@headlessui/vue": "1.7.23",
+        "@scalar/blocks": "0.5.4",
+        "@scalar/components": "0.32.1",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/localization": "0.2.8",
+        "@scalar/oas-utils": "0.20.14",
+        "@scalar/openapi-types": "0.9.8",
+        "@scalar/sidebar": "0.12.2",
+        "@scalar/snippetz": "0.10.10",
+        "@scalar/themes": "0.19.2",
+        "@scalar/typebox": "^0.1.3",
+        "@scalar/types": "0.24.0",
+        "@scalar/use-codemirror": "0.14.15",
+        "@scalar/use-hooks": "0.4.21",
+        "@scalar/use-toasts": "0.10.5",
+        "@scalar/workspace-store": "0.68.5",
+        "@vueuse/core": "13.9.0",
+        "@vueuse/integrations": "13.9.0",
+        "focus-trap": "^7.8.0",
+        "fuse.js": "^7.5.0",
+        "js-base64": "^3.9.2",
+        "jsonc-parser": "3.3.1",
+        "nanoid": "^5.1.6",
+        "pretty-ms": "^9.3.0",
+        "radix-vue": "^1.9.17",
+        "set-cookie-parser": "3.1.0",
+        "vue": "^3.5.40",
+        "yaml": "^2.9.0",
+        "zod": "^4.4.3"
+      },
+      "engines": {
+        "node": ">=22"
       }
     },
-    "node_modules/@shikijs/engine-javascript": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz";,
-      "integrity": 
"sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==",
+    "node_modules/@scalar/api-client/node_modules/nanoid": {
+      "version": "5.1.16",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz";,
+      "integrity": 
"sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
       "license": "MIT",
-      "dependencies": {
-        "@shikijs/types": "4.3.1",
-        "@shikijs/vscode-textmate": "^10.0.2",
-        "oniguruma-to-es": "^4.3.6"
+      "bin": {
+        "nanoid": "bin/nanoid.js"
       },
       "engines": {
-        "node": ">=20"
+        "node": "^18 || >=20"
       }
     },
-    "node_modules/@shikijs/engine-oniguruma": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz";,
-      "integrity": 
"sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==",
-      "license": "MIT",
-      "dependencies": {
-        "@shikijs/types": "4.3.1",
-        "@shikijs/vscode-textmate": "^10.0.2"
+    "node_modules/@scalar/api-reference": {
+      "version": "1.75.1",
+      "resolved": 
"https://registry.npmjs.org/@scalar/api-reference/-/api-reference-1.75.1.tgz";,
+      "integrity": 
"sha512-9kWlskfDzzCB7aXTIM9BHWYnEly62I9IZ+tFzlc+koq3Tw/HoSMV2YWYHwkL84i5GQk0lrPolzR+tAikiiZVeA==",
+      "license": "MIT",
+      "dependencies": {
+        "@headlessui/vue": "1.7.23",
+        "@scalar/agent-chat": "0.12.45",
+        "@scalar/api-client": "3.23.2",
+        "@scalar/blocks": "0.5.4",
+        "@scalar/code-highlight": "0.4.10",
+        "@scalar/components": "0.32.1",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/localization": "0.2.8",
+        "@scalar/oas-utils": "0.20.14",
+        "@scalar/openapi-to-markdown": "1.6.1",
+        "@scalar/schemas": "0.14.0",
+        "@scalar/sidebar": "0.12.2",
+        "@scalar/snippetz": "0.10.10",
+        "@scalar/themes": "0.19.2",
+        "@scalar/types": "0.24.0",
+        "@scalar/use-hooks": "0.4.21",
+        "@scalar/use-toasts": "0.10.5",
+        "@scalar/validation": "0.6.7",
+        "@scalar/workspace-store": "0.68.5",
+        "@unhead/vue": "^2.1.4",
+        "@vueuse/core": "13.9.0",
+        "fuse.js": "^7.5.0",
+        "microdiff": "^1.5.0",
+        "nanoid": "^5.1.6",
+        "vue": "^3.5.40",
+        "yaml": "^2.9.0"
       },
       "engines": {
-        "node": ">=20"
+        "node": ">=22"
       }
     },
-    "node_modules/@shikijs/langs": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz";,
-      "integrity": 
"sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==",
+    "node_modules/@scalar/api-reference/node_modules/nanoid": {
+      "version": "5.1.16",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz";,
+      "integrity": 
"sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
       "license": "MIT",
-      "dependencies": {
-        "@shikijs/types": "4.3.1"
+      "bin": {
+        "nanoid": "bin/nanoid.js"
       },
       "engines": {
-        "node": ">=20"
+        "node": "^18 || >=20"
       }
     },
-    "node_modules/@shikijs/primitive": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz";,
-      "integrity": 
"sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==",
+    "node_modules/@scalar/asyncapi-upgrader": {
+      "version": "0.1.18",
+      "resolved": 
"https://registry.npmjs.org/@scalar/asyncapi-upgrader/-/asyncapi-upgrader-0.1.18.tgz";,
+      "integrity": 
"sha512-jr+BW2c9mM2LNb6WP2xmi1lRopOg35E71AyNwPiMIbue+yoZp+K2q2vgCjCiltKF0sKJMFjdujyLWgBDWsb1nw==",
       "license": "MIT",
       "dependencies": {
-        "@shikijs/types": "4.3.1",
-        "@shikijs/vscode-textmate": "^10.0.2",
-        "@types/hast": "^3.0.4"
+        "@scalar/helpers": "0.16.4"
       },
       "engines": {
-        "node": ">=20"
+        "node": ">=22"
       }
     },
-    "node_modules/@shikijs/themes": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz";,
-      "integrity": 
"sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==",
+    "node_modules/@scalar/blocks": {
+      "version": "0.5.4",
+      "resolved": 
"https://registry.npmjs.org/@scalar/blocks/-/blocks-0.5.4.tgz";,
+      "integrity": 
"sha512-7Tzo8+9te5Rvyv91PDBPr++HEixdA3yw7l2E/JYGvXu8a4NFLULkJroKS2cQPeA5xs+p9N+4/8GMhGMeCr2Slg==",
       "license": "MIT",
       "dependencies": {
-        "@shikijs/types": "4.3.1"
+        "@scalar/components": "0.32.1",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/localization": "0.2.8",
+        "@scalar/snippetz": "0.10.10",
+        "@scalar/themes": "0.19.2",
+        "@scalar/types": "0.24.0",
+        "@scalar/use-hooks": "0.4.21",
+        "@scalar/workspace-store": "0.68.5",
+        "@types/har-format": "^1.2.16",
+        "@vueuse/core": "13.9.0",
+        "js-base64": "^3.9.2",
+        "vue": "^3.5.40"
       },
       "engines": {
-        "node": ">=20"
+        "node": ">=22"
       }
     },
-    "node_modules/@shikijs/types": {
-      "version": "4.3.1",
-      "resolved": 
"https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz";,
-      "integrity": 
"sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==",
+    "node_modules/@scalar/code-highlight": {
+      "version": "0.4.10",
+      "resolved": 
"https://registry.npmjs.org/@scalar/code-highlight/-/code-highlight-0.4.10.tgz";,
+      "integrity": 
"sha512-rNR95oryt65rK6sWDCmYOHPHvxTysbXDtgqfgpCPlsAA5zdsEWadWjvS608ejtoq0KLyzuhltO6MMuMjGQtjRA==",
       "license": "MIT",
       "dependencies": {
-        "@shikijs/vscode-textmate": "^10.0.2",
+        "hast-util-to-text": "^4.0.2",
+        "highlight.js": "^11.11.1",
+        "lowlight": "^3.3.0",
+        "rehype-external-links": "^3.0.0",
+        "rehype-format": "^5.0.1",
+        "rehype-parse": "^9.0.1",
+        "rehype-raw": "^7.0.0",
+        "rehype-sanitize": "^6.0.0",
+        "rehype-stringify": "^10.0.1",
+        "remark-gfm": "^4.0.1",
+        "remark-parse": "^11.0.0",
+        "remark-rehype": "^11.1.2",
+        "remark-stringify": "^11.0.0",
+        "unified": "^11.0.5",
+        "unist-util-visit": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/components": {
+      "version": "0.32.1",
+      "resolved": 
"https://registry.npmjs.org/@scalar/components/-/components-0.32.1.tgz";,
+      "integrity": 
"sha512-SszUkAbokwPVTRRqwCYsnko4K1vXRtf+LpI2gKgphUWV96OxEI30h6oIQwe4W3+Xu7s+XciddhwG/0fzTE+VXw==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/utils": "0.2.10",
+        "@floating-ui/vue": "1.1.9",
+        "@headlessui/tailwindcss": "^0.2.2",
+        "@headlessui/vue": "1.7.23",
+        "@scalar/code-highlight": "0.4.10",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/themes": "0.19.2",
+        "@scalar/use-hooks": "0.4.21",
+        "@vueuse/core": "13.9.0",
+        "cva": "1.0.0-beta.4",
+        "radix-vue": "^1.9.17",
+        "vue": "^3.5.40",
+        "vue-component-type-helpers": "^3.2.6"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/helpers": {
+      "version": "0.16.4",
+      "resolved": 
"https://registry.npmjs.org/@scalar/helpers/-/helpers-0.16.4.tgz";,
+      "integrity": 
"sha512-9eILWzUcAkHEuYMMvijpSIy69t+Vkq+NudLB/7lgARFTWqXfQpIxW1L3VH7ogKyRie5+E4CNZ3PSvlw6IIfLGw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/icons": {
+      "version": "0.7.7",
+      "resolved": "https://registry.npmjs.org/@scalar/icons/-/icons-0.7.7.tgz";,
+      "integrity": 
"sha512-VKa6fgXILbOxOhvyYL+talXJEVdj68MhdiLuF8fAv43vJMQH7vo6UccyMMig0jdSaBgZxy3As/aSKrYObk4WjA==",
+      "license": "MIT",
+      "dependencies": {
+        "@phosphor-icons/core": "^2.1.1",
+        "@types/node": "^24.1.0",
+        "chalk": "^5.6.2",
+        "vue": "^3.5.40"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/json-magic": {
+      "version": "0.16.1",
+      "resolved": 
"https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.16.1.tgz";,
+      "integrity": 
"sha512-yWQJUrkufUsShizF+rGKO4BoZ/ijMpnrgwRjtCA2cYqjxkQOYaQCd+WVF+b3ihmXE7amr768pLItFCx5UV/ObQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "pathe": "^2.0.3",
+        "undici": "7.30.1",
+        "yaml": "^2.9.0"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/localization": {
+      "version": "0.2.8",
+      "resolved": 
"https://registry.npmjs.org/@scalar/localization/-/localization-0.2.8.tgz";,
+      "integrity": 
"sha512-1M+cFXgiGhlfivZ5DOH/sIK1z8FsWNIsF5rsVr3YkVL0p9fUfg/Fl/FJB0IUyXhEjhZtTwQoE74LLfFQAtPEZQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "type-fest": "^5.8.0",
+        "vue": "^3.5.40"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/oas-utils": {
+      "version": "0.20.14",
+      "resolved": 
"https://registry.npmjs.org/@scalar/oas-utils/-/oas-utils-0.20.14.tgz";,
+      "integrity": 
"sha512-uVxxUQ12TtNR37H6+62BVMNLwkZJlaQl62urCl1hRm3jDWEQIqKVNaiQdYZzFo4d1BTGEDTR61pCcRjwidxcLQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "@scalar/themes": "0.19.2",
+        "@scalar/types": "0.24.0",
+        "@scalar/workspace-store": "0.68.5",
+        "flatted": "^3.4.0",
+        "vue": "^3.5.40",
+        "yaml": "^2.9.0"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/openapi-to-markdown": {
+      "version": "1.6.1",
+      "resolved": 
"https://registry.npmjs.org/@scalar/openapi-to-markdown/-/openapi-to-markdown-1.6.1.tgz";,
+      "integrity": 
"sha512-dxX09fkmDxSTN+y+ph3kuFiS2i61K25DVZ8Isdw1ZEso1tkOCqPaMOFjXFtv8S0ulNVzVCYbe9Zcz1B/nZA/LQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/code-highlight": "0.4.10",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/json-magic": "0.16.1",
+        "@scalar/openapi-upgrader": "0.4.5",
+        "@scalar/workspace-store": "0.68.5",
+        "rehype-parse": "^9.0.1",
+        "rehype-remark": "^10.0.1",
+        "rehype-sanitize": "^6.0.0",
+        "remark-gfm": "^4.0.1",
+        "remark-parse": "^11.0.0",
+        "remark-stringify": "^11.0.0",
+        "unified": "^11.0.5"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/openapi-types": {
+      "version": "0.9.8",
+      "resolved": 
"https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.9.8.tgz";,
+      "integrity": 
"sha512-pGcpkZObsGBC7nRKYte+6gstoe0C4hp7B2UWQYjg5To1wE68s3OHVvin+muL3tn3ZAoahXeJAkn1+aEcMi802w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/openapi-upgrader": {
+      "version": "0.4.5",
+      "resolved": 
"https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.4.5.tgz";,
+      "integrity": 
"sha512-PdsTyeO8CepVP7I8JvwoojtzyZ+R1MrVgu1C8npvVvy5JRixp5E34Z4J1sKojJs+YRe42/MK2XHXVM/X1qgGPA==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "@scalar/openapi-types": "0.9.8"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/schemas": {
+      "version": "0.14.0",
+      "resolved": 
"https://registry.npmjs.org/@scalar/schemas/-/schemas-0.14.0.tgz";,
+      "integrity": 
"sha512-tYNfeIOk/G5o/DiW2Yc2tFlNvE42Ls1aHUOQSSeFugjBgv53p3u3tlu7gA5N4uMaS8mQCumURusc/cb4RmiX2g==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "@scalar/validation": "0.6.7"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/sidebar": {
+      "version": "0.12.2",
+      "resolved": 
"https://registry.npmjs.org/@scalar/sidebar/-/sidebar-0.12.2.tgz";,
+      "integrity": 
"sha512-1on+ci1pIfcCmYPlpwQvj6njPXsiFRJO6wOkXU1AxOWxboEgap0F6Ej8Y+g3THXkaO5bfw5WO3iHbjrqbWfp9A==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/components": "0.32.1",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/icons": "0.7.7",
+        "@scalar/themes": "0.19.2",
+        "@scalar/use-hooks": "0.4.21",
+        "@scalar/workspace-store": "0.68.5",
+        "vue": "^3.5.40"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/snippetz": {
+      "version": "0.10.10",
+      "resolved": 
"https://registry.npmjs.org/@scalar/snippetz/-/snippetz-0.10.10.tgz";,
+      "integrity": 
"sha512-ZMH01jYcG0TPIvritWQCtrW7pvCNstldO2xrI5aHckCZ63owPSZ6CF+27hnoMeThlAF78MGINN44Jqqev0JbGQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "@scalar/types": "0.24.0",
+        "js-base64": "^3.9.2"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/themes": {
+      "version": "0.19.2",
+      "resolved": 
"https://registry.npmjs.org/@scalar/themes/-/themes-0.19.2.tgz";,
+      "integrity": 
"sha512-tr33cE4/Y+8rwDs9k5fcFKwhr1cMtK6rfrFy5QpkaC1sN4jjHEopWP+j/EhR0A19S/vFXRt6K65CbMlSaFjNag==",
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^5.1.6"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/themes/node_modules/nanoid": {
+      "version": "5.1.16",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz";,
+      "integrity": 
"sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      }
+    },
+    "node_modules/@scalar/typebox": {
+      "version": "0.1.3",
+      "resolved": 
"https://registry.npmjs.org/@scalar/typebox/-/typebox-0.1.3.tgz";,
+      "integrity": 
"sha512-lU055AUccECZMIfGA0z/C1StYmboAYIPJLDFBzOO81yXBi35Pxdq+I4fWX6iUZ8qcoHneiLGk9jAUM1rA93iEg==",
+      "license": "MIT"
+    },
+    "node_modules/@scalar/types": {
+      "version": "0.24.0",
+      "resolved": 
"https://registry.npmjs.org/@scalar/types/-/types-0.24.0.tgz";,
+      "integrity": 
"sha512-x4O8ddCvh+59zwh9Xc+bG2QACxYARcPDfJBYiUzD/hzSxb6vpcms+WKgMksBfYWCZneO6e5Kt6hZFBoE9D9YCg==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "nanoid": "^5.1.6",
+        "type-fest": "^5.8.0",
+        "zod": "^4.4.3"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/types/node_modules/nanoid": {
+      "version": "5.1.16",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz";,
+      "integrity": 
"sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      }
+    },
+    "node_modules/@scalar/use-codemirror": {
+      "version": "0.14.15",
+      "resolved": 
"https://registry.npmjs.org/@scalar/use-codemirror/-/use-codemirror-0.14.15.tgz";,
+      "integrity": 
"sha512-Uvjx0qvOsWPs+I32FL+3v//+VKwtp8ROXgbIAMauNypuw52VeF7R4RM7YoN2Xg1EAEiMtM8ZhWVzCoYTFr6AKQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.18.3",
+        "@codemirror/commands": "^6.7.1",
+        "@codemirror/lang-css": "^6.3.1",
+        "@codemirror/lang-html": "^6.4.8",
+        "@codemirror/lang-json": "^6.0.0",
+        "@codemirror/lang-xml": "^6.0.0",
+        "@codemirror/lang-yaml": "^6.1.2",
+        "@codemirror/language": "^6.10.7",
+        "@codemirror/lint": "^6.8.4",
+        "@codemirror/state": "^6.5.0",
+        "@codemirror/view": "^6.35.3",
+        "@lezer/common": "^1.2.3",
+        "@lezer/highlight": "^1.2.1",
+        "@replit/codemirror-css-color-picker": "^6.3.0",
+        "vue": "^3.5.40"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/use-hooks": {
+      "version": "0.4.21",
+      "resolved": 
"https://registry.npmjs.org/@scalar/use-hooks/-/use-hooks-0.4.21.tgz";,
+      "integrity": 
"sha512-W9ZZnHX0wH9mKMCENzPHLKLHfBo4s7kDT+zZtlfxYEPPPr078ACch3IGf1EZgdoze1eGTcdoqfdTLSIIoXfL7Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/helpers": "0.16.4",
+        "@scalar/use-toasts": "0.10.5",
+        "@scalar/validation": "0.6.7",
+        "@vueuse/core": "13.9.0",
+        "cva": "1.0.0-beta.4",
+        "tailwind-merge": "3.5.0",
+        "vue": "^3.5.40"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/use-toasts": {
+      "version": "0.10.5",
+      "resolved": 
"https://registry.npmjs.org/@scalar/use-toasts/-/use-toasts-0.10.5.tgz";,
+      "integrity": 
"sha512-5a8qTVd9eXvMDeD0ifqHvnzg0i2v15clhyFToXDHYmInQD51oBRwByCFqFO+m9ymxSLOHZ7/FiEcU6F90/QTlg==",
+      "license": "MIT",
+      "dependencies": {
+        "vue": "^3.5.40",
+        "vue-sonner": "^1.3.2"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@scalar/validation": {
+      "version": "0.6.7",
+      "resolved": 
"https://registry.npmjs.org/@scalar/validation/-/validation-0.6.7.tgz";,
+      "integrity": 
"sha512-xvmeYb0LOg9B598oVA/1fs9MvnMdtWjQYG3v2Wgftewizr7tQjsdDYT1TQahlDzqRG+r+ml6zlSkPrFiCE5jHQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@scalar/workspace-store": {
+      "version": "0.68.5",
+      "resolved": 
"https://registry.npmjs.org/@scalar/workspace-store/-/workspace-store-0.68.5.tgz";,
+      "integrity": 
"sha512-3+ztYocY07hG/WwaHp8Wgj1xm+5paqxaonp1XZE3cwyzQeCI420aOAkoqrWBXyPCRH0ZADD0hjBC9umDIDE2nQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@scalar/asyncapi-upgrader": "0.1.18",
+        "@scalar/helpers": "0.16.4",
+        "@scalar/json-magic": "0.16.1",
+        "@scalar/openapi-upgrader": "0.4.5",
+        "@scalar/schemas": "0.14.0",
+        "@scalar/snippetz": "0.10.10",
+        "@scalar/typebox": "0.1.3",
+        "@scalar/types": "0.24.0",
+        "@scalar/validation": "0.6.7",
+        "js-base64": "^3.9.2",
+        "type-fest": "^5.8.0",
+        "vue": "^3.5.40",
+        "yaml": "^2.9.0"
+      },
+      "engines": {
+        "node": ">=22"
+      }
+    },
+    "node_modules/@shikijs/core": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz";,
+      "integrity": 
"sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/primitive": "4.3.1",
+        "@shikijs/types": "4.3.1",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4",
+        "hast-util-to-html": "^9.0.5"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/engine-javascript": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz";,
+      "integrity": 
"sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "4.3.1",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "oniguruma-to-es": "^4.3.6"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/engine-oniguruma": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz";,
+      "integrity": 
"sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "4.3.1",
+        "@shikijs/vscode-textmate": "^10.0.2"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/langs": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz";,
+      "integrity": 
"sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "4.3.1"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/primitive": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz";,
+      "integrity": 
"sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "4.3.1",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/themes": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz";,
+      "integrity": 
"sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "4.3.1"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/@shikijs/types": {
+      "version": "4.3.1",
+      "resolved": 
"https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz";,
+      "integrity": 
"sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/vscode-textmate": "^10.0.2",
         "@types/hast": "^3.0.4"
       },
       "engines": {
@@ -1543,6 +2536,47 @@
       "integrity": 
"sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
       "license": "MIT"
     },
+    "node_modules/@standard-schema/spec": {
+      "version": "1.1.0",
+      "resolved": 
"https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz";,
+      "integrity": 
"sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+      "license": "MIT"
+    },
+    "node_modules/@swc/helpers": {
+      "version": "0.5.23",
+      "resolved": 
"https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz";,
+      "integrity": 
"sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^2.8.0"
+      }
+    },
+    "node_modules/@tanstack/virtual-core": {
+      "version": "3.19.6",
+      "resolved": 
"https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.19.6.tgz";,
+      "integrity": 
"sha512-CsTW892z23gy7IyxYTTorVu1uZWB+0N349rSMgKz4rFLPpLza7F7TpcCKeI5iUAwYQCt8QUlOU67J+KXCxtpGw==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley";
+      }
+    },
+    "node_modules/@tanstack/vue-virtual": {
+      "version": "3.13.47",
+      "resolved": 
"https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.47.tgz";,
+      "integrity": 
"sha512-6HzdYK9bDyDoD9Q/NjepnC4wGDaZ7mFl5zz8tbn3Fmy7FDicI98ZJ+R37ztFssnoTMoCQhY3GfUhlz+pW/vOTg==",
+      "license": "MIT",
+      "dependencies": {
+        "@tanstack/virtual-core": "3.19.6"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley";
+      },
+      "peerDependencies": {
+        "vue": "^2.7.0 || ^3.0.0"
+      }
+    },
     "node_modules/@types/debug": {
       "version": "4.1.13",
       "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz";,
@@ -1558,50 +2592,328 @@
       "integrity": 
"sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
       "license": "MIT"
     },
+    "node_modules/@types/har-format": {
+      "version": "1.2.16",
+      "resolved": 
"https://registry.npmjs.org/@types/har-format/-/har-format-1.2.16.tgz";,
+      "integrity": 
"sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==",
+      "license": "MIT"
+    },
     "node_modules/@types/hast": {
       "version": "3.0.5",
       "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz";,
       "integrity": 
"sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
       "license": "MIT",
       "dependencies": {
-        "@types/unist": "*"
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/mdast": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz";,
+      "integrity": 
"sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/ms": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz";,
+      "integrity": 
"sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/nlcst": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz";,
+      "integrity": 
"sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "24.19.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz";,
+      "integrity": 
"sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==",
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": ">=7.24.0 <7.24.7"
+      }
+    },
+    "node_modules/@types/unist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz";,
+      "integrity": 
"sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+      "license": "MIT"
+    },
+    "node_modules/@types/web-bluetooth": {
+      "version": "0.0.21",
+      "resolved": 
"https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz";,
+      "integrity": 
"sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+      "license": "MIT"
+    },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.3.3",
+      "resolved": 
"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz";,
+      "integrity": 
"sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
+      "license": "ISC"
+    },
+    "node_modules/@unhead/vue": {
+      "version": "2.1.17",
+      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.17.tgz";,
+      "integrity": 
"sha512-pnC8x9HLV3qQXdvWfylUEU25uhfCAy3ly9nmpQz84j9py818DRfU8jOsQ5wjdWtxyU1vX/fW2udfm4jtxUK8Bg==",
+      "license": "MIT",
+      "dependencies": {
+        "hookable": "^6.0.1",
+        "unhead": "2.1.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw";
+      },
+      "peerDependencies": {
+        "vue": ">=3.5.18"
+      }
+    },
+    "node_modules/@vercel/oidc": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz";,
+      "integrity": 
"sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 20"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.44.tgz";,
+      "integrity": 
"sha512-k34nCytbK8PQ1gR2mGROYOw6Pnv/mumqIdrZ3x2tbyXZDWm7ViKGLTfdB+DRrWqEQsLgGJvn0WN9jBif5zCTLQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.9",
+        "@vue/shared": "3.5.44",
+        "entities": "^7.0.1",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.2"
+      }
+    },
+    "node_modules/@vue/compiler-core/node_modules/entities": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz";,
+      "integrity": 
"sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1";
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.44.tgz";,
+      "integrity": 
"sha512-W5AoBFWdw1lQAKiHowkfgFKFab82oSRT6sGsPfw/q1GRjsy/ZJFLHGhJyBRIFN9APLTUduDH9U2JAiPOIyKuYg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.44",
+        "@vue/shared": "3.5.44"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.44.tgz";,
+      "integrity": 
"sha512-dzHmQ4jXTpdr5FjIQUeykVakN/uzqFbUo9/C5ikBFg3a3PeM6uRxeczx1ZbXBML0/zJstEh3ygYipzR5Z7b2Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.9",
+        "@vue/compiler-core": "3.5.44",
+        "@vue/compiler-dom": "3.5.44",
+        "@vue/compiler-ssr": "3.5.44",
+        "@vue/shared": "3.5.44",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.21",
+        "postcss": "^8.5.29",
+        "source-map-js": "^1.2.2"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.44.tgz";,
+      "integrity": 
"sha512-xr5gb1JVHlfXJwSlRz1FeP6uxoazdzHuMTVLE7up+4Vrqxk219CvxLPxD9NXBt47yvZW7+p4DXfyp4O1fkByIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.44",
+        "@vue/shared": "3.5.44"
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.44.tgz";,
+      "integrity": 
"sha512-u+QJdKeBBEADkPdevsL+6E12QlYVfBD8Zcw5qjDQKtamI6l14KyqazJMobhCKelhWN5zpyKUiEDoTyHE93cqWw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.44"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.44.tgz";,
+      "integrity": 
"sha512-uEa/ndwjhrrhnOfb2p+sZy6zeoamJOISqaLSJGk/8R6nABT1ZldpzcJoPzKj+zHVomVBPcmQYyC2r4LtvDV6CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.44",
+        "@vue/shared": "3.5.44"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.44.tgz";,
+      "integrity": 
"sha512-3fc4ARcXVhVBaJ3ujWiNZJARD6pkyRcwG+ZYhMzjKtKUp7MAY0HLwr7r3Smep3Li6ZaWT6ewdmx8XqdaD5oNZg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.44",
+        "@vue/runtime-core": "3.5.44",
+        "@vue/shared": "3.5.44",
+        "csstype": "^3.2.3"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.44",
+      "resolved": 
"https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.44.tgz";,
+      "integrity": 
"sha512-R4S1UoH4h5Frrauv8Z5XE5TxV9oBiUSgWIC4TyVK1FK+RocRnOLwFA5Xcmo2011RlgJp+AbZCnw6afrhlgRuUQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.44",
+        "@vue/runtime-dom": "3.5.44",
+        "@vue/shared": "3.5.44"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.5.44",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.44.tgz";,
+      "integrity": 
"sha512-H82XLH0DjmSOdbEwO15x3QTo1f5PWEtv237eLpYKc0mqLu+B8hnq16lFWmuBmNurkeiG3wr+oM1FhOll/YVFRg==",
+      "license": "MIT"
+    },
+    "node_modules/@vueuse/core": {
+      "version": "13.9.0",
+      "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz";,
+      "integrity": 
"sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.21",
+        "@vueuse/metadata": "13.9.0",
+        "@vueuse/shared": "13.9.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      },
+      "peerDependencies": {
+        "vue": "^3.5.0"
       }
     },
-    "node_modules/@types/mdast": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz";,
-      "integrity": 
"sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+    "node_modules/@vueuse/integrations": {
+      "version": "13.9.0",
+      "resolved": 
"https://registry.npmjs.org/@vueuse/integrations/-/integrations-13.9.0.tgz";,
+      "integrity": 
"sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ==",
       "license": "MIT",
       "dependencies": {
-        "@types/unist": "*"
+        "@vueuse/core": "13.9.0",
+        "@vueuse/shared": "13.9.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      },
+      "peerDependencies": {
+        "async-validator": "^4",
+        "axios": "^1",
+        "change-case": "^5",
+        "drauu": "^0.4",
+        "focus-trap": "^7",
+        "fuse.js": "^7",
+        "idb-keyval": "^6",
+        "jwt-decode": "^4",
+        "nprogress": "^0.2",
+        "qrcode": "^1.5",
+        "sortablejs": "^1",
+        "universal-cookie": "^7 || ^8",
+        "vue": "^3.5.0"
+      },
+      "peerDependenciesMeta": {
+        "async-validator": {
+          "optional": true
+        },
+        "axios": {
+          "optional": true
+        },
+        "change-case": {
+          "optional": true
+        },
+        "drauu": {
+          "optional": true
+        },
+        "focus-trap": {
+          "optional": true
+        },
+        "fuse.js": {
+          "optional": true
+        },
+        "idb-keyval": {
+          "optional": true
+        },
+        "jwt-decode": {
+          "optional": true
+        },
+        "nprogress": {
+          "optional": true
+        },
+        "qrcode": {
+          "optional": true
+        },
+        "sortablejs": {
+          "optional": true
+        },
+        "universal-cookie": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@types/ms": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz";,
-      "integrity": 
"sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
-      "license": "MIT"
-    },
-    "node_modules/@types/nlcst": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz";,
-      "integrity": 
"sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+    "node_modules/@vueuse/metadata": {
+      "version": "13.9.0",
+      "resolved": 
"https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.9.0.tgz";,
+      "integrity": 
"sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==",
       "license": "MIT",
-      "dependencies": {
-        "@types/unist": "*"
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
       }
     },
-    "node_modules/@types/unist": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz";,
-      "integrity": 
"sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
-      "license": "MIT"
+    "node_modules/@vueuse/shared": {
+      "version": "13.9.0",
+      "resolved": 
"https://registry.npmjs.org/@vueuse/shared/-/shared-13.9.0.tgz";,
+      "integrity": 
"sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      },
+      "peerDependencies": {
+        "vue": "^3.5.0"
+      }
     },
-    "node_modules/@ungap/structured-clone": {
-      "version": "1.3.3",
-      "resolved": 
"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz";,
-      "integrity": 
"sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
-      "license": "ISC"
+    "node_modules/ai": {
+      "version": "6.0.214",
+      "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.214.tgz";,
+      "integrity": 
"sha512-9MlePEXT5pXtQv4fXqmiR0RG3DZU4Dbv+kU9ktEJC2COi2RH2WvI2GiyG9MuCqgPII6f1w+5kB5fNIiArqPzaQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ai-sdk/gateway": "3.0.139",
+        "@ai-sdk/provider": "3.0.12",
+        "@ai-sdk/provider-utils": "4.0.33",
+        "@opentelemetry/api": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "zod": "^3.25.76 || ^4.1.8"
+      }
     },
     "node_modules/anymatch": {
       "version": "3.1.3",
@@ -1634,6 +2946,18 @@
       "integrity": 
"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "license": "Python-2.0"
     },
+    "node_modules/aria-hidden": {
+      "version": "1.2.6",
+      "resolved": 
"https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz";,
+      "integrity": 
"sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/aria-query": {
       "version": "5.3.2",
       "resolved": 
"https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz";,
@@ -1766,6 +3090,18 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz";,
+      "integrity": 
"sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1";
+      }
+    },
     "node_modules/character-entities": {
       "version": "2.0.2",
       "resolved": 
"https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz";,
@@ -1892,6 +3228,12 @@
       "integrity": 
"sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
       "license": "MIT"
     },
+    "node_modules/crelt": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.7.tgz";,
+      "integrity": 
"sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==",
+      "license": "MIT"
+    },
     "node_modules/crossws": {
       "version": "0.3.5",
       "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz";,
@@ -1975,6 +3317,32 @@
       "integrity": 
"sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
       "license": "CC0-1.0"
     },
+    "node_modules/csstype": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz";,
+      "integrity": 
"sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+      "license": "MIT"
+    },
+    "node_modules/cva": {
+      "version": "1.0.0-beta.4",
+      "resolved": "https://registry.npmjs.org/cva/-/cva-1.0.0-beta.4.tgz";,
+      "integrity": 
"sha512-F/JS9hScapq4DBVQXcK85l9U91M6ePeXoBMSp7vypzShoefUBxjQTo3g3935PUHgQd+IW77DjbPRIxugy4/GCQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "clsx": "^2.1.1"
+      },
+      "funding": {
+        "url": "https://polar.sh/cva";
+      },
+      "peerDependencies": {
+        "typescript": ">= 4.5.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/debug": {
       "version": "4.4.3",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz";,
@@ -2229,12 +3597,27 @@
       "integrity": 
"sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
       "license": "MIT"
     },
+    "node_modules/eventsource-parser": {
+      "version": "3.1.1",
+      "resolved": 
"https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz";,
+      "integrity": 
"sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
     "node_modules/extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";,
       "integrity": 
"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
       "license": "MIT"
     },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": 
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";,
+      "integrity": 
"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "license": "MIT"
+    },
     "node_modules/fast-string-truncated-width": {
       "version": "3.0.3",
       "resolved": 
"https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz";,
@@ -2276,6 +3659,12 @@
         }
       }
     },
+    "node_modules/flatted": {
+      "version": "3.4.4",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz";,
+      "integrity": 
"sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
+      "license": "ISC"
+    },
     "node_modules/flattie": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz";,
@@ -2285,6 +3674,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/focus-trap": {
+      "version": "7.8.0",
+      "resolved": 
"https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz";,
+      "integrity": 
"sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==",
+      "license": "MIT",
+      "dependencies": {
+        "tabbable": "^6.4.0"
+      }
+    },
     "node_modules/fontace": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz";,
@@ -2320,12 +3718,34 @@
         "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
       }
     },
+    "node_modules/fuse.js": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.5.0.tgz";,
+      "integrity": 
"sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/krisk";
+      }
+    },
     "node_modules/github-slugger": {
       "version": "2.0.0",
       "resolved": 
"https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz";,
       "integrity": 
"sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
       "license": "ISC"
     },
+    "node_modules/guess-json-indent": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/guess-json-indent/-/guess-json-indent-3.0.1.tgz";,
+      "integrity": 
"sha512-LWZ3Vr8BG7DHE3TzPYFqkhjNRw4vYgFSsv2nfMuHklAlOfiy54/EwiDQuQfFVLxENCVv20wpbjfTayooQHrEhQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
     "node_modules/h3": {
       "version": "1.15.11",
       "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz";,
@@ -2343,6 +3763,39 @@
         "uncrypto": "^0.1.3"
       }
     },
+    "node_modules/hast-util-embedded": {
+      "version": "3.0.0",
+      "resolved": 
"https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz";,
+      "integrity": 
"sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-is-element": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
+    "node_modules/hast-util-format": {
+      "version": "1.1.0",
+      "resolved": 
"https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz";,
+      "integrity": 
"sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-embedded": "^3.0.0",
+        "hast-util-minify-whitespace": "^1.0.0",
+        "hast-util-phrasing": "^3.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "html-whitespace-sensitive-tag-names": "^3.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-from-html": {
       "version": "2.0.3",
       "resolved": 
"https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz";,
@@ -2381,6 +3834,32 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/hast-util-has-property": {
+      "version": "3.0.0",
+      "resolved": 
"https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz";,
+      "integrity": 
"sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
+    "node_modules/hast-util-is-body-ok-link": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz";,
+      "integrity": 
"sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-is-element": {
       "version": "3.0.0",
       "resolved": 
"https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz";,
@@ -2394,6 +3873,23 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/hast-util-minify-whitespace": {
+      "version": "1.0.1",
+      "resolved": 
"https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz";,
+      "integrity": 
"sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-embedded": "^3.0.0",
+        "hast-util-is-element": "^3.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-parse-selector": {
       "version": "4.0.0",
       "resolved": 
"https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz";,
@@ -2407,6 +3903,23 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/hast-util-phrasing": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz";,
+      "integrity": 
"sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-embedded": "^3.0.0",
+        "hast-util-has-property": "^3.0.0",
+        "hast-util-is-body-ok-link": "^3.0.0",
+        "hast-util-is-element": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-raw": {
       "version": "9.1.0",
       "resolved": 
"https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz";,
@@ -2432,6 +3945,21 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/hast-util-sanitize": {
+      "version": "5.0.2",
+      "resolved": 
"https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz";,
+      "integrity": 
"sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "unist-util-position": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-to-html": {
       "version": "9.0.5",
       "resolved": 
"https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz";,
@@ -2455,6 +3983,32 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/hast-util-to-mdast": {
+      "version": "10.1.2",
+      "resolved": 
"https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.2.tgz";,
+      "integrity": 
"sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "hast-util-phrasing": "^3.0.0",
+        "hast-util-to-html": "^9.0.0",
+        "hast-util-to-text": "^4.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "mdast-util-phrasing": "^4.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "mdast-util-to-string": "^4.0.0",
+        "rehype-minify-whitespace": "^6.0.0",
+        "trim-trailing-lines": "^2.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/hast-util-to-parse5": {
       "version": "8.0.1",
       "resolved": 
"https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz";,
@@ -2520,6 +4074,21 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/highlight.js": {
+      "version": "11.12.0",
+      "resolved": 
"https://registry.npmjs.org/highlight.js/-/highlight.js-11.12.0.tgz";,
+      "integrity": 
"sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/hookable": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.2.tgz";,
+      "integrity": 
"sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==",
+      "license": "MIT"
+    },
     "node_modules/html-escaper": {
       "version": "3.0.3",
       "resolved": 
"https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz";,
@@ -2536,6 +4105,16 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/html-whitespace-sensitive-tag-names": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz";,
+      "integrity": 
"sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/http-cache-semantics": {
       "version": "4.2.0",
       "resolved": 
"https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz";,
@@ -2551,6 +4130,18 @@
         "url": "https://github.com/sponsors/brc-dd";
       }
     },
+    "node_modules/is-absolute-url": {
+      "version": "4.0.1",
+      "resolved": 
"https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz";,
+      "integrity": 
"sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
     "node_modules/is-alphabetical": {
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz";,
@@ -2655,6 +4246,12 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/js-base64": {
+      "version": "3.9.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.4.tgz";,
+      "integrity": 
"sha512-PtOMXpEGuP0RRiRXsjzHzl44dMHxSu2CPvAhinupR1tBa88me+1DPqsobl7eupn5UukjLkln1ZnAOAOXOrYG0Q==",
+      "license": "BSD-3-Clause"
+    },
     "node_modules/js-yaml": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz";,
@@ -2677,6 +4274,18 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
+    "node_modules/json-schema": {
+      "version": "0.4.0",
+      "resolved": 
"https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz";,
+      "integrity": 
"sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+      "license": "(AFL-2.1 OR BSD-3-Clause)"
+    },
+    "node_modules/jsonc-parser": {
+      "version": "3.3.1",
+      "resolved": 
"https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz";,
+      "integrity": 
"sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+      "license": "MIT"
+    },
     "node_modules/longest-streak": {
       "version": "3.1.0",
       "resolved": 
"https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz";,
@@ -2687,6 +4296,30 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/lowlight": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz";,
+      "integrity": 
"sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "devlop": "^1.0.0",
+        "highlight.js": "~11.11.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm";
+      }
+    },
+    "node_modules/lowlight/node_modules/highlight.js": {
+      "version": "11.11.2",
+      "resolved": 
"https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.2.tgz";,
+      "integrity": 
"sha512-oaXMACAU0kzOMXBjWpNcX+vlwSBCIAiZ9BHa7gA15NOTtT2L/l8OSZDuqS2XppOhZBPJ7hm4o8ep2kyuip2uEQ==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
     "node_modules/lru-cache": {
       "version": "11.5.2",
       "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz";,
@@ -2978,6 +4611,12 @@
       "integrity": 
"sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
       "license": "CC0-1.0"
     },
+    "node_modules/microdiff": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/microdiff/-/microdiff-1.6.0.tgz";,
+      "integrity": 
"sha512-w7JWt8Bno6I8h0rEqlxr4lNG4UbT1FVtWo42wWosIiaJ+rP3pXh7shCYDnyqBrYx36LJ1CZ64p8A62aVp0sJpQ==",
+      "license": "MIT"
+    },
     "node_modules/micromark": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz";,
@@ -3576,9 +5215,9 @@
       "license": "MIT"
     },
     "node_modules/nanoid": {
-      "version": "3.3.16",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz";,
-      "integrity": 
"sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+      "version": "3.3.20",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz";,
+      "integrity": 
"sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
       "funding": [
         {
           "type": "github",
@@ -3602,6 +5241,12 @@
         "node": ">= 10"
       }
     },
+    "node_modules/neverpanic": {
+      "version": "0.0.8",
+      "resolved": 
"https://registry.npmjs.org/neverpanic/-/neverpanic-0.0.8.tgz";,
+      "integrity": 
"sha512-vVdkelrLxaow/fdWDumzNBO+jwm6X8bxeLJc34THtpj70u0C5QBkcV6CRCu2X726km7XD45N0A3QtYCla4RvKw==",
+      "license": "MIT"
+    },
     "node_modules/nlcst-to-string": {
       "version": "4.0.0",
       "resolved": 
"https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz";,
@@ -3787,6 +5432,18 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz";,
+      "integrity": 
"sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
     "node_modules/parse5": {
       "version": "7.3.0",
       "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz";,
@@ -3799,6 +5456,12 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1";
       }
     },
+    "node_modules/pathe": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz";,
+      "integrity": 
"sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+      "license": "MIT"
+    },
     "node_modules/piccolore": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz";,
@@ -3871,9 +5534,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.5.19",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz";,
-      "integrity": 
"sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==",
+      "version": "8.5.31",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz";,
+      "integrity": 
"sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==",
       "funding": [
         {
           "type": "opencollective",
@@ -3890,14 +5553,29 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "nanoid": "^3.3.12",
+        "nanoid": "^3.3.20",
         "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
+        "source-map-js": "^1.2.2"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/pretty-ms": {
+      "version": "9.3.1",
+      "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.1.tgz";,
+      "integrity": 
"sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==",
+      "license": "MIT",
+      "dependencies": {
+        "parse-ms": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
     "node_modules/prismjs": {
       "version": "1.30.0",
       "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz";,
@@ -3917,6 +5595,88 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/radix-vue": {
+      "version": "1.9.17",
+      "resolved": 
"https://registry.npmjs.org/radix-vue/-/radix-vue-1.9.17.tgz";,
+      "integrity": 
"sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/dom": "^1.6.7",
+        "@floating-ui/vue": "^1.1.0",
+        "@internationalized/date": "^3.5.4",
+        "@internationalized/number": "^3.5.3",
+        "@tanstack/vue-virtual": "^3.8.1",
+        "@vueuse/core": "^10.11.0",
+        "@vueuse/shared": "^10.11.0",
+        "aria-hidden": "^1.2.4",
+        "defu": "^6.1.4",
+        "fast-deep-equal": "^3.1.3",
+        "nanoid": "^5.0.7"
+      },
+      "peerDependencies": {
+        "vue": ">= 3.2.0"
+      }
+    },
+    "node_modules/radix-vue/node_modules/@types/web-bluetooth": {
+      "version": "0.0.20",
+      "resolved": 
"https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz";,
+      "integrity": 
"sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
+      "license": "MIT"
+    },
+    "node_modules/radix-vue/node_modules/@vueuse/core": {
+      "version": "10.11.1",
+      "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz";,
+      "integrity": 
"sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.20",
+        "@vueuse/metadata": "10.11.1",
+        "@vueuse/shared": "10.11.1",
+        "vue-demi": ">=0.14.8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
+    "node_modules/radix-vue/node_modules/@vueuse/metadata": {
+      "version": "10.11.1",
+      "resolved": 
"https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz";,
+      "integrity": 
"sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
+    "node_modules/radix-vue/node_modules/@vueuse/shared": {
+      "version": "10.11.1",
+      "resolved": 
"https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz";,
+      "integrity": 
"sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==",
+      "license": "MIT",
+      "dependencies": {
+        "vue-demi": ">=0.14.8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
+    "node_modules/radix-vue/node_modules/nanoid": {
+      "version": "5.1.16",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz";,
+      "integrity": 
"sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      }
+    },
     "node_modules/radix3": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz";,
@@ -3976,6 +5736,52 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/rehype-external-links": {
+      "version": "3.0.0",
+      "resolved": 
"https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz";,
+      "integrity": 
"sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "hast-util-is-element": "^3.0.0",
+        "is-absolute-url": "^4.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "unist-util-visit": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
+    "node_modules/rehype-format": {
+      "version": "5.0.1",
+      "resolved": 
"https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz";,
+      "integrity": 
"sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-format": "^1.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
+    "node_modules/rehype-minify-whitespace": {
+      "version": "6.0.2",
+      "resolved": 
"https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.2.tgz";,
+      "integrity": 
"sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-minify-whitespace": "^1.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/rehype-parse": {
       "version": "9.0.1",
       "resolved": 
"https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz";,
@@ -4006,6 +5812,37 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/rehype-remark": {
+      "version": "10.0.1",
+      "resolved": 
"https://registry.npmjs.org/rehype-remark/-/rehype-remark-10.0.1.tgz";,
+      "integrity": 
"sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "hast-util-to-mdast": "^10.0.0",
+        "unified": "^11.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
+    "node_modules/rehype-sanitize": {
+      "version": "6.0.0",
+      "resolved": 
"https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz";,
+      "integrity": 
"sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-sanitize": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified";
+      }
+    },
     "node_modules/rehype-stringify": {
       "version": "10.0.1",
       "resolved": 
"https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz";,
@@ -4244,6 +6081,12 @@
         "node": ">=10"
       }
     },
+    "node_modules/set-cookie-parser": {
+      "version": "3.1.0",
+      "resolved": 
"https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz";,
+      "integrity": 
"sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==",
+      "license": "MIT"
+    },
     "node_modules/sharp": {
       "version": "0.34.5",
       "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz";,
@@ -4327,9 +6170,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.2.1",
-      "resolved": 
"https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz";,
-      "integrity": 
"sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "version": "1.2.2",
+      "resolved": 
"https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz";,
+      "integrity": 
"sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
@@ -4345,6 +6188,24 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/string-byte-length": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/string-byte-length/-/string-byte-length-3.0.1.tgz";,
+      "integrity": 
"sha512-yJ8vP0HMwZ54CcA8S8mKoXbkezpZHANFtmafFo8lGxZThCQcAwRHjdFabuSLgOzxj9OFJcmssmiAvmcOK4O2Hw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/string-byte-slice": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/string-byte-slice/-/string-byte-slice-3.0.1.tgz";,
+      "integrity": 
"sha512-GWv2K4lYyd2+AhmKH3BV+OVx62xDX+99rSLfKpaqFiQU7uOMaUY1tDjdrRD4gsrCr9lTyjMgjna7tZcCOw+Smg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
     "node_modules/stringify-entities": {
       "version": "4.0.4",
       "resolved": 
"https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz";,
@@ -4359,6 +6220,12 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/style-mod": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.4.tgz";,
+      "integrity": 
"sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==",
+      "license": "MIT"
+    },
     "node_modules/svgo": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz";,
@@ -4384,6 +6251,56 @@
         "url": "https://opencollective.com/svgo";
       }
     },
+    "node_modules/swrv": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.3.0.tgz";,
+      "integrity": 
"sha512-6uyQ79QemgpJzdwVNkxZdypTmKC80uHdjSZGAGo0HnizL2AzQJUZXQFR3KZq8yru32IC7HngiBA7o2FtL/Lozw==",
+      "license": "Apache-2.0",
+      "peerDependencies": {
+        "@vue/test-utils": ">=2.0.0",
+        "vue": "^3.2.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/test-utils": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/tabbable": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz";,
+      "integrity": 
"sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==",
+      "license": "MIT"
+    },
+    "node_modules/tagged-tag": {
+      "version": "1.0.0",
+      "resolved": 
"https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz";,
+      "integrity": 
"sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
+    "node_modules/tailwind-merge": {
+      "version": "3.5.0",
+      "resolved": 
"https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz";,
+      "integrity": 
"sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/dcastil";
+      }
+    },
+    "node_modules/tailwindcss": {
+      "version": "4.3.3",
+      "resolved": 
"https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz";,
+      "integrity": 
"sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==",
+      "license": "MIT",
+      "peer": true
+    },
     "node_modules/tiny-inflate": {
       "version": "1.0.3",
       "resolved": 
"https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz";,
@@ -4434,6 +6351,16 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/trim-trailing-lines": {
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz";,
+      "integrity": 
"sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm";
+      }
+    },
     "node_modules/trough": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz";,
@@ -4444,6 +6371,20 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/truncate-json": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/truncate-json/-/truncate-json-3.0.1.tgz";,
+      "integrity": 
"sha512-QVsbr1WhGLq2F0oDyYbqtOXcf3gcnL8C9H5EX8bBwAr8ZWvWGJzukpPrDrWgJMrNtgDbo74BIjI4kJu3q2xQWw==",
+      "license": "MIT",
+      "dependencies": {
+        "guess-json-indent": "^3.0.1",
+        "string-byte-length": "^3.0.1",
+        "string-byte-slice": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
     "node_modules/tsconfck": {
       "version": "3.1.6",
       "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz";,
@@ -4469,8 +6410,22 @@
       "version": "2.8.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz";,
       "integrity": 
"sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "license": "0BSD",
-      "optional": true
+      "license": "0BSD"
+    },
+    "node_modules/type-fest": {
+      "version": "5.10.0",
+      "resolved": 
"https://registry.npmjs.org/type-fest/-/type-fest-5.10.0.tgz";,
+      "integrity": 
"sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==",
+      "license": "(MIT OR CC0-1.0)",
+      "dependencies": {
+        "tagged-tag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
     },
     "node_modules/ufo": {
       "version": "1.6.4",
@@ -4490,6 +6445,33 @@
       "integrity": 
"sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
       "license": "MIT"
     },
+    "node_modules/undici": {
+      "version": "7.30.1",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-7.30.1.tgz";,
+      "integrity": 
"sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=20.18.1"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "7.24.6",
+      "resolved": 
"https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz";,
+      "integrity": 
"sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
+      "license": "MIT"
+    },
+    "node_modules/unhead": {
+      "version": "2.1.17",
+      "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.17.tgz";,
+      "integrity": 
"sha512-HLMKXOszRhAPBrr6VlqCeVeJq2kbC4kXwzGLEZvvojPLWNYTJw22xG7Bfwhsvs31+IBet3Wl8ADg9dwYdyphfQ==",
+      "license": "MIT",
+      "dependencies": {
+        "hookable": "^6.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw";
+      }
+    },
     "node_modules/unified": {
       "version": "11.0.5",
       "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz";,
@@ -4874,6 +6856,71 @@
         }
       }
     },
+    "node_modules/vue": {
+      "version": "3.5.44",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.44.tgz";,
+      "integrity": 
"sha512-dvvmaOCG7lAMkJTPqPwWeGMsPS6DIsFsfZDUgBp9V6mHf9b3+/wyVwYR4Es+WV6uJC0FKRxp81Obcq0ZwUcGFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.44",
+        "@vue/compiler-sfc": "3.5.44",
+        "@vue/runtime-dom": "3.5.44",
+        "@vue/server-renderer": "3.5.44",
+        "@vue/shared": "3.5.44"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-component-type-helpers": {
+      "version": "3.3.13",
+      "resolved": 
"https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.13.tgz";,
+      "integrity": 
"sha512-02KCxSmKDhIITjKyJ4QT5csP6L0WoRborLqY/34a40+S9uvMvdNgMV0yVjO3p2Gkz3ZoPmFz/0JsGHacwJYTxw==",
+      "license": "MIT"
+    },
+    "node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz";,
+      "integrity": 
"sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-sonner": {
+      "version": "1.3.2",
+      "resolved": 
"https://registry.npmjs.org/vue-sonner/-/vue-sonner-1.3.2.tgz";,
+      "integrity": 
"sha512-UbZ48E9VIya3ToiRHAZUbodKute/z/M1iT8/3fU8zEbwBRE11AKuHikssv18LMk2gTTr6eMQT4qf6JoLHWuj/A==",
+      "license": "MIT"
+    },
+    "node_modules/w3c-keyname": {
+      "version": "2.2.8",
+      "resolved": 
"https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz";,
+      "integrity": 
"sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+      "license": "MIT"
+    },
     "node_modules/web-namespaces": {
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz";,
@@ -4899,6 +6946,21 @@
       "integrity": 
"sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
       "license": "MIT"
     },
+    "node_modules/yaml": {
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz";,
+      "integrity": 
"sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
+      "license": "ISC",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/eemeli";
+      }
+    },
     "node_modules/yargs-parser": {
       "version": "22.0.0",
       "resolved": 
"https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz";,
diff --git a/next/package.json b/next/package.json
index 4446af44ec3..a6d3a857366 100644
--- a/next/package.json
+++ b/next/package.json
@@ -1 +1 @@
-{"name":"apisix-website-astro","type":"module","private":true,"dependencies":{"astro":"^6.0.5","entities":"^6.0.1","remark-directive":"^4.0.0","unist-util-visit":"^5.1.0"},"devDependencies":{"@playwright/test":"1.61.1","sax":"^1.6.0","semver":"^7.8.5"},"scripts":{"sync":"node
 scripts/sync-content.mjs && node scripts/lint-content.mjs","build":"astro 
build && node scripts/generate-sitemaps.mjs && node 
scripts/check-non-indexed-content-sitemaps.mjs","dev":"astro 
dev","preview":"astro previe [...]
+{"name":"apisix-website-astro","type":"module","private":true,"dependencies":{"@scalar/api-reference":"1.75.1","astro":"^6.0.5","entities":"^6.0.1","remark-directive":"^4.0.0","unist-util-visit":"^5.1.0"},"devDependencies":{"@playwright/test":"1.61.1","sax":"^1.6.0","semver":"^7.8.5"},"scripts":{"sync":"node
 scripts/sync-content.mjs && node scripts/lint-content.mjs","build":"astro 
build && node scripts/generate-sitemaps.mjs && node 
scripts/check-non-indexed-content-sitemaps.mjs","dev":"a [...]
diff --git a/next/public/openapi/admin-api/3.19.0.json 
b/next/public/openapi/admin-api/3.19.0.json
new file mode 100644
index 00000000000..2e1c47ed34b
--- /dev/null
+++ b/next/public/openapi/admin-api/3.19.0.json
@@ -0,0 +1 @@
+{"openapi":"3.1.0","info":{"title":"Apache APISIX Admin 
API","description":"The **Apache APISIX Admin API** is a RESTful interface for 
managing all APISIX gateway resources — routes, upstreams, services, consumers, 
SSL certificates, plugins, and more.\n\nAPISIX Admin API allows you to 
dynamically configure the API gateway without restarts. All changes take effect 
immediately.\n\nUnless API key authentication is explicitly disabled with 
`deployment.admin.admin_key_required: false`, endpoi [...]
\ No newline at end of file
diff --git a/next/src/layouts/AdminApiPage.astro 
b/next/src/layouts/AdminApiPage.astro
new file mode 100644
index 00000000000..c91ddac23ac
--- /dev/null
+++ b/next/src/layouts/AdminApiPage.astro
@@ -0,0 +1,226 @@
+---
+import Base from './Base.astro';
+import { getApisixDocs, getApisixSidebar, sidebarLandingId, docEditUrl, 
APISIX_DOCS_VERSION, APISIX_ARCHIVED_VERSIONS, versionedLandingHref, type 
VersionEntry } from '../lib/content';
+import type { Locale } from '../lib/site';
+
+interface Props {
+  locale: Locale;
+}
+const { locale } = Astro.props;
+const zh = locale === 'zh';
+const docs = getApisixDocs(locale);
+const entry = docs.find((doc) => doc.pathId === 'admin-api');
+if (!entry) throw new Error('Sync APISIX documentation before building the 
Admin API reference');
+const prefix = zh ? '/zh' : '';
+const docsHref = docs.find((doc) => doc.pathId === 
sidebarLandingId(getApisixSidebar()))?.url ?? `${prefix}/docs/`;
+const editUrl = docEditUrl('apisix', 'apisix', entry);
+const currentHref = `${prefix}/docs/apisix/admin-api/`;
+const versions: VersionEntry[] = [
+  { label: `APISIX ${APISIX_DOCS_VERSION}`, href: currentHref, current: true },
+  ...[...APISIX_ARCHIVED_VERSIONS, 'next'].map((version) => ({
+    label: version === 'next' ? (zh ? '开发版 (next)' : 'Next (unreleased)') : 
version,
+    href: versionedLandingHref(`${prefix}/docs/apisix/`, version, currentHref),
+  })).filter((version): version is VersionEntry => Boolean(version.href)),
+];
+const specUrl = '/openapi/admin-api/3.19.0.json';
+const { Content } = entry.mod;
+---
+<Base title={entry.title} description={entry.description} locale={locale} 
path="/docs/apisix/admin-api/" hasAlternate={entry.hasTranslation}>
+  <nav class="api-toolbar" aria-label={zh ? 'API 文档导航' : 'API reference 
navigation'}>
+    <div class="api-location">
+      <a class="api-back" href={docsHref}>
+        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" 
stroke="currentColor" stroke-width="1.7" aria-hidden="true"><path d="m14 6-6 6 
6 6" /></svg>
+        {zh ? '文档' : 'Docs'}
+      </a>
+      <span class="api-separator" aria-hidden="true">/</span>
+      <span class="api-page-name" aria-current="page">Admin API</span>
+      <details class="api-version">
+        <summary aria-label={zh ? `切换版本,当前 ${APISIX_DOCS_VERSION}` : `Switch 
version, current ${APISIX_DOCS_VERSION}`}>
+          <span>{APISIX_DOCS_VERSION}</span>
+          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" 
stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="m6 9 6 6 
6-6" /></svg>
+        </summary>
+        <ul>{versions.map((version) => <li><a href={version.href} 
aria-current={version.current ? 'page' : 
undefined}>{version.label}</a></li>)}</ul>
+      </details>
+    </div>
+    <div class="api-actions">
+      <a class="api-action" href="#admin-api-guide" data-open-guide 
aria-label={zh ? '使用指南' : 'Usage guide'} title={zh ? '使用指南' : 'Usage guide'}>
+        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" 
stroke="currentColor" stroke-width="1.7" aria-hidden="true"><path d="M4 4h6a3 3 
0 0 1 3 3v14a4 4 0 0 0-4-2H4zM13 7a3 3 0 0 1 3-3h5v15h-5a4 4 0 0 0-3 2" /></svg>
+        <span class="api-action-label">{zh ? '使用指南' : 'Usage guide'}</span>
+      </a>
+      <a class="api-action api-download" href={specUrl} 
download="apisix-admin-api.json" aria-label={zh ? '下载 OpenAPI' : 'Download 
OpenAPI'} title={zh ? '下载 OpenAPI' : 'Download OpenAPI'}>
+        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" 
stroke="currentColor" stroke-width="1.7" aria-hidden="true"><path d="M12 
3v12m-5-5 5 5 5-5M4 16v5h16v-5" /></svg>
+        <span class="api-action-label">{zh ? '下载 OpenAPI' : 'Download 
OpenAPI'}</span>
+      </a>
+    </div>
+  </nav>
+  <div id="admin-api-reference" data-spec-url={specUrl}>
+    <p class="container" role="status">{zh ? '正在加载 API 参考…' : 'Loading API 
reference…'}</p>
+  </div>
+  <div class="api-guide" data-guide-source>
+    <details id="admin-api-guide">
+      <summary>
+        <span class="guide-title">{zh ? '使用指南与完整示例' : 'Usage guide and 
complete examples'}</span>
+        <span class="guide-description">{zh ? '配置、分页查询、字段约束与响应格式' : 
'Configuration, pagination, field requirements, and response formats'}</span>
+      </summary>
+      <a class="api-guide-back" href="#admin-api-reference" data-close-guide>↑ 
{zh ? '返回接口文档' : 'Back to API reference'}</a>
+      <article class="prose"><Content /></article>
+    </details>
+    <div class="api-guide-footer">
+      <a href={editUrl}>{zh ? '在 GitHub 上编辑' : 'Edit on GitHub'}</a>
+      <a href="https://github.com/apache/apisix/issues";>{zh ? '反馈文档问题' : 
'Report an issue'}</a>
+    </div>
+  </div>
+  <dialog class="api-guide-dialog" aria-labelledby="api-guide-dialog-title">
+    <header class="guide-dialog-header">
+      <h2 id="api-guide-dialog-title">{zh ? '使用指南与完整示例' : 'Usage guide and 
complete examples'}</h2>
+      <form method="dialog">
+        <button aria-label={zh ? '关闭指南' : 'Close guide'} autofocus>
+          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" 
stroke="currentColor" stroke-width="1.7" aria-hidden="true"><path d="m6 6 12 
12M6 18 18 6" /></svg>
+        </button>
+      </form>
+    </header>
+    <div class="guide-dialog-body"></div>
+  </dialog>
+  <script>
+    import { createApiReference } from '@scalar/api-reference';
+    import '@scalar/api-reference/style.css';
+    import scalarTheme from '../styles/admin-api-scalar.css?inline';
+
+    const toolbar = document.querySelector<HTMLElement>('.api-toolbar');
+    if (toolbar) {
+      const updateHeight = () => 
document.documentElement.style.setProperty('--api-toolbar-height', 
`${toolbar.getBoundingClientRect().height}px`);
+      new ResizeObserver(updateHeight).observe(toolbar);
+      updateHeight();
+    }
+    const guideDialog = 
document.querySelector<HTMLDialogElement>('.api-guide-dialog');
+    const guideSource = 
document.querySelector<HTMLElement>('[data-guide-source]');
+    let guideWasOpen = false;
+    document.querySelector('[data-open-guide]')?.addEventListener('click', 
(event) => {
+      const guide = 
document.querySelector<HTMLDetailsElement>('#admin-api-guide');
+      if (!guide || !guideDialog || !guideSource) return;
+      // Keep the full guide readable without JavaScript, and move that same
+      // content into a dialog when enhanced. No duplicate document or hash
+      // navigation that conflicts with Scalar's operation router.
+      event.preventDefault();
+      guideWasOpen = guide.open;
+      guide.open = true;
+      guideDialog.querySelector('.guide-dialog-body')?.append(guideSource);
+      guideDialog.showModal();
+    });
+    guideDialog?.addEventListener('close', () => {
+      if (guideSource) guideDialog.before(guideSource);
+      const guide = 
document.querySelector<HTMLDetailsElement>('#admin-api-guide');
+      if (guide) guide.open = guideWasOpen;
+    });
+    document.querySelector('[data-close-guide]')?.addEventListener('click', 
(event) => {
+      if (guideDialog?.open) {
+        event.preventDefault();
+        guideDialog.close();
+      }
+    });
+    const versionPicker = 
document.querySelector<HTMLDetailsElement>('.api-version');
+    document.addEventListener('click', (event) => {
+      if (versionPicker?.open && event.target instanceof Node && 
!versionPicker.contains(event.target)) versionPicker.open = false;
+    });
+    document.addEventListener('keydown', (event) => {
+      if (event.key === 'Escape' && versionPicker?.open) {
+        versionPicker.open = false;
+        versionPicker.querySelector('summary')?.focus();
+      }
+    });
+
+    const container = 
document.querySelector<HTMLElement>('#admin-api-reference');
+    if (container) {
+      try {
+        // A nonempty mount point is treated as server-rendered Scalar markup.
+        container.replaceChildren();
+        createApiReference(container, {
+          url: container.dataset.specUrl,
+          theme: 'default',
+          darkMode: false,
+          hideDarkModeToggle: true,
+          localization: { locale: document.documentElement.lang === 'zh-CN' ? 
'zh-CN' : 'en' },
+          documentDownloadType: 'none',
+          withDefaultFonts: false,
+          persistAuth: false,
+          operationTitleSource: 'path',
+          // Admin credentials and requests stay in the browser; no hosted 
proxy.
+          proxyUrl: '',
+          telemetry: false,
+          agent: { disabled: true },
+          showDeveloperTools: 'never',
+          customCss: scalarTheme,
+        });
+      } catch {
+        const status = document.createElement('p');
+        status.setAttribute('role', 'status');
+        status.className = 'container';
+        status.textContent = document.documentElement.lang === 'zh-CN'
+          ? 'API 参考加载失败,请查看下方完整说明或下载 OpenAPI。'
+          : 'Unable to load the API reference. Use the full guide below or 
download OpenAPI.';
+        container.replaceChildren(status);
+      }
+    }
+  </script>
+</Base>
+
+<style>
+  .api-toolbar {
+    position: sticky; top: var(--header-height); z-index: 90;
+    display: flex; justify-content: space-between; align-items: center; gap: 
1rem;
+    min-height: 56px; padding: .6rem 1.5rem;
+    background: #fff; border-bottom: 1px solid #e8ecf1;
+    font-size: .82rem; line-height: 1.4;
+  }
+  .api-location, .api-actions, .api-back, .api-action, .api-version summary { 
display: flex; align-items: center; }
+  .api-location { gap: .8rem; min-width: 0; }
+  .api-back { gap: .25rem; color: #64748b; white-space: nowrap; }
+  .api-separator { color: #cbd5e1; }
+  .api-page-name { color: #1e293b; font-weight: 650; white-space: nowrap; }
+  .api-version { position: relative; }
+  .api-version summary { gap: .4rem; padding: .3rem .6rem; background: 
#f6f8fa; border: 1px solid #e8ecf1; border-radius: 6px; color: #475569; 
font-size: .75rem; font-variant-numeric: tabular-nums; cursor: pointer; 
list-style: none; }
+  .api-version summary::-webkit-details-marker { display: none; }
+  .api-version[open] summary { border-color: #e8433e; }
+  .api-version ul { position: absolute; top: calc(100% + .6rem); left: 0; 
width: 210px; max-height: 55vh; overflow-y: auto; padding: .4rem; margin: 0; 
list-style: none; border: 1px solid #e8ecf1; border-radius: 10px; background: 
#fff; box-shadow: 0 12px 32px rgb(15 23 42 / 10%); }
+  .api-version a { display: block; padding: .5rem .7rem; border-radius: 5px; 
color: #475569; }
+  .api-version a:hover { background: #f6f8fa; text-decoration: none; }
+  .api-version a[aria-current] { color: #bc3532; background: #fff1f0; 
font-weight: 600; }
+  .api-actions { gap: .5rem; }
+  .api-action { gap: .45rem; padding: .45rem .65rem; border-radius: 6px; 
color: #475569; white-space: nowrap; }
+  .api-action:hover, .api-back:hover { color: #c53632; text-decoration: none; }
+  .api-action:hover { background: #f8fafc; }
+  .api-download { border: 1px solid #e2e8f0; background: #fff; }
+  .api-toolbar a:focus-visible, .api-version summary:focus-visible { outline: 
2px solid #e8433e; outline-offset: 3px; }
+  #admin-api-reference { min-height: 60vh; }
+  .api-guide { max-width: 1100px; margin: 0 auto; padding: 2rem 1.5rem; }
+  .api-guide > details { border: 1px solid #e8ecf1; border-radius: 10px; 
padding: 1.2rem 1.5rem; scroll-margin-top: calc(var(--header-height) + 
var(--api-toolbar-height, 56px) + 16px); }
+  .api-guide > details > summary { cursor: pointer; color: #1e293b; }
+  .guide-title { font-weight: 600; }
+  .guide-description { display: block; margin-top: .25rem; padding-left: 1rem; 
color: #64748b; font-size: .85rem; }
+  .api-guide-back { display: inline-block; margin-top: 1rem; font-size: 
.85rem; }
+  .api-guide article { padding-block: 1rem; min-width: 0; overflow-x: auto; }
+  .api-guide-footer { display: flex; justify-content: space-between; gap: 
1rem; padding: 1rem 0; font-size: .8rem; }
+  .api-guide-footer a { color: #64748b; }
+  .api-guide-dialog { width: min(1100px, calc(100vw - 48px)); max-height: 
calc(100dvh - 64px); padding: 0; border: 1px solid #e8ecf1; border-radius: 
14px; color: #1e293b; box-shadow: 0 24px 80px rgb(15 23 42 / 20%); }
+  .api-guide-dialog::backdrop { background: rgb(15 23 42 / 35%); 
backdrop-filter: blur(3px); }
+  .guide-dialog-header { display: flex; align-items: center; justify-content: 
space-between; gap: 1rem; padding: 1rem 1.5rem; border-bottom: 1px solid 
#e8ecf1; }
+  .guide-dialog-header h2 { margin: 0; font-size: 1rem; font-weight: 650; }
+  .guide-dialog-header button { display: flex; align-items: center; 
justify-content: center; width: 32px; height: 32px; padding: 0; background: 
#f8fafc; color: #475569; border: 1px solid #e8ecf1; border-radius: 6px; cursor: 
pointer; }
+  .guide-dialog-body { max-height: calc(100dvh - 140px); overflow-y: auto; 
overscroll-behavior: contain; }
+  .api-guide-dialog .api-guide { padding: 1rem 1.5rem; }
+  .api-guide-dialog .api-guide > details { border: 0; padding: 0; }
+  .api-guide-dialog .api-guide > details > summary { display: none; }
+  @media (max-width: 640px) {
+    .api-toolbar { gap: .5rem; padding: .65rem 1rem; }
+    .api-location { gap: .5rem; }
+    .api-actions { gap: .25rem; }
+    .api-action { padding: .5rem; }
+    .api-action-label { display: none; }
+    .api-guide { padding: 1.5rem 1rem; }
+    .api-guide > details { padding: 1rem; }
+    .api-guide-dialog { width: calc(100vw - 24px); max-height: calc(100dvh - 
24px); border-radius: 10px; }
+    .guide-dialog-header { padding: .75rem 1rem; }
+    .guide-dialog-body { max-height: calc(100dvh - 88px); }
+    .api-guide-dialog .api-guide { padding: 1rem; }
+  }
+</style>
diff --git a/next/src/pages/docs/apisix/[...id].astro 
b/next/src/pages/docs/apisix/[...id].astro
index 47eb938daa4..c701ec57c4e 100644
--- a/next/src/pages/docs/apisix/[...id].astro
+++ b/next/src/pages/docs/apisix/[...id].astro
@@ -7,7 +7,7 @@ export function getStaticPaths() {
   // Sidebar config ids are path-derived; map them to post-override 
titles/urls.
   const titleById = new Map(docs.map((d) => [d.pathId, d.title]));
   const urlByPathId = new Map(docs.map((d) => [d.pathId, d.url]));
-  return docs.map((entry) => ({
+  return docs.filter((entry) => entry.pathId !== 'admin-api').map((entry) => ({
     params: { id: entry.id },
     props: { entry, titleById, urlByPathId },
   }));
diff --git a/next/src/pages/docs/apisix/admin-api.astro 
b/next/src/pages/docs/apisix/admin-api.astro
new file mode 100644
index 00000000000..db5c4140e2f
--- /dev/null
+++ b/next/src/pages/docs/apisix/admin-api.astro
@@ -0,0 +1,4 @@
+---
+import AdminApiPage from '../../../layouts/AdminApiPage.astro';
+---
+<AdminApiPage locale="en" />
diff --git a/next/src/pages/zh/docs/apisix/[...id].astro 
b/next/src/pages/zh/docs/apisix/[...id].astro
index 494afc4af63..f91d148789e 100644
--- a/next/src/pages/zh/docs/apisix/[...id].astro
+++ b/next/src/pages/zh/docs/apisix/[...id].astro
@@ -7,7 +7,7 @@ export function getStaticPaths() {
   // Sidebar config ids are path-derived; map them to post-override 
titles/urls.
   const titleById = new Map(docs.map((d) => [d.pathId, d.title]));
   const urlByPathId = new Map(docs.map((d) => [d.pathId, d.url]));
-  return docs.map((entry) => ({
+  return docs.filter((entry) => entry.pathId !== 'admin-api').map((entry) => ({
     params: { id: entry.id },
     props: { entry, titleById, urlByPathId },
   }));
diff --git a/next/src/pages/zh/docs/apisix/admin-api.astro 
b/next/src/pages/zh/docs/apisix/admin-api.astro
new file mode 100644
index 00000000000..8e10a07387b
--- /dev/null
+++ b/next/src/pages/zh/docs/apisix/admin-api.astro
@@ -0,0 +1,4 @@
+---
+import AdminApiPage from '../../../../layouts/AdminApiPage.astro';
+---
+<AdminApiPage locale="zh" />
diff --git a/next/src/styles/admin-api-scalar.css 
b/next/src/styles/admin-api-scalar.css
new file mode 100644
index 00000000000..62b8794e7fb
--- /dev/null
+++ b/next/src/styles/admin-api-scalar.css
@@ -0,0 +1,46 @@
+/* Keep the reference aligned with APISIX while retaining Scalar's layouts. */
+:root {
+  --scalar-font: var(--font-sans);
+  --scalar-font-code: var(--font-mono);
+  --scalar-custom-header-height: calc(var(--header-height) + 
var(--api-toolbar-height, 56px));
+}
+
+.light-mode {
+  --scalar-color-1: #1e293b;
+  --scalar-color-2: #536277;
+  --scalar-color-3: #64748b;
+  --scalar-color-accent: #cc3935;
+  --scalar-background-1: #fff;
+  --scalar-background-2: #f8fafc;
+  --scalar-background-3: #f1f5f9;
+  --scalar-background-accent: #fff1f0;
+  --scalar-border-color: #e8ecf1;
+}
+
+#admin-api-reference .introduction-section {
+  padding-top: 32px;
+  padding-bottom: 36px;
+}
+
+#admin-api-reference .introduction-card {
+  border-radius: 10px;
+}
+
+#admin-api-reference h1 {
+  font-size: clamp(24px, 2.5vw, 32px);
+  letter-spacing: -0.035em;
+  line-height: 1.25;
+}
+
+#admin-api-reference h2 {
+  font-size: 28px;
+  letter-spacing: -0.025em;
+  line-height: 1.3;
+}
+
+@media (max-width: 640px) {
+  #admin-api-reference .introduction-section {
+    padding-top: 24px;
+    padding-bottom: 24px;
+  }
+}
diff --git a/next/tests/e2e/admin-api.spec.mjs 
b/next/tests/e2e/admin-api.spec.mjs
new file mode 100644
index 00000000000..c35a8216f1b
--- /dev/null
+++ b/next/tests/e2e/admin-api.spec.mjs
@@ -0,0 +1,66 @@
+// Playwright is a test-only dependency.
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { expect, test } from '@playwright/test';
+
+for (const locale of ['en', 'zh']) {
+  const url = `${locale === 'zh' ? '/zh' : ''}/docs/apisix/admin-api/`;
+
+  test(`Scalar renders the ${locale} Admin API and opens its request client`, 
async ({ page }) => {
+    const errors = [];
+    page.on('pageerror', (error) => errors.push(error.message));
+    const documentResponse = page.waitForResponse((response) => 
response.url().endsWith('/openapi/admin-api/3.19.0.json'));
+    await page.goto(url);
+    const response = await documentResponse;
+    expect(response.ok()).toBe(true);
+    const document = await response.json();
+    expect(document.openapi).toBe('3.1.0');
+    expect(document.info.version).toBe('3.19.0');
+    
expect(document.paths['/apisix/admin/routes/{id}'].put.requestBody).toBeTruthy();
+    
expect(document.paths['/apisix/admin/routes'].get.responses['200'].content['application/json'].schema)
+      .toEqual({ $ref: '#/components/schemas/RouteListEnvelope' });
+    expect(document.components.schemas.RouteListEnvelope).toBeTruthy();
+    expect(document.paths['/apisix/admin/plugins'].get.parameters)
+      .toContainEqual({ $ref: '#/components/parameters/Subsystem' });
+    await expect(page.locator('.api-download')).toHaveAttribute('href', 
'/openapi/admin-api/3.19.0.json');
+    const reference = page.locator('#admin-api-reference');
+    await expect(reference.getByRole('heading', { name: 'Apache APISIX Admin 
API', exact: true })).toBeVisible();
+    await expect(reference).toContainText('X-API-KEY');
+    // The source OAS is English in both locales; Scalar's controls are 
localized.
+    await expect(reference).toContainText('RESTful interface');
+    if (locale === 'zh') await expect(reference).toContainText('身份验证');
+    expect(await page.evaluate(() => document.documentElement.scrollWidth <= 
window.innerWidth)).toBe(true);
+
+    await page.getByRole('link', { name: locale === 'zh' ? '使用指南' : 'Usage 
guide', exact: true }).click();
+    await expect(page.locator('.api-guide-dialog')).toBeVisible();
+    await expect(page.locator('#admin-api-guide 
article')).toContainText('/apisix/admin/routes');
+    await page.keyboard.press('Escape');
+    await expect(page.locator('.api-guide-dialog')).not.toBeVisible();
+
+    // Scalar renders operations as they enter view; navigate through the
+    // resource's operation list before opening a request on smaller screens.
+    await reference.getByRole('link', { name: 'get /apisix/admin/routes', 
exact: true }).click();
+    await reference.getByRole('button', { name: /\(get 
\/apisix\/admin\/routes\)$/ }).click();
+    await expect(page.getByRole('dialog')).toBeVisible();
+    expect(errors).toEqual([]);
+  });
+
+  test(`the ${locale} guide remains readable without JavaScript`, async ({ 
browser }) => {
+    const context = await browser.newContext({ javaScriptEnabled: false });
+    const page = await context.newPage();
+    await page.goto(url);
+    await page.locator('#admin-api-guide > summary').click();
+    await expect(page.locator('#admin-api-guide article')).toBeVisible();
+    await expect(page.locator('#admin-api-guide 
article')).toContainText('/apisix/admin/routes');
+    await context.close();
+  });
+}
+
+test('ordinary documentation does not load the Scalar bundle or styles', async 
({ page }) => {
+  const scalarRequests = [];
+  page.on('request', (request) => {
+    if (/AdminApiPage|@scalar/.test(request.url())) 
scalarRequests.push(request.url());
+  });
+  await page.goto('/docs/apisix/installation-guide/');
+  await expect(page.locator('.docs-content h1')).toBeVisible();
+  expect(scalarRequests).toEqual([]);
+});

Reply via email to