diff --git a/.forgejo/workflows/build_preview.yml b/.forgejo/workflows/build_preview.yml
index 34bd57a..36d6eb5 100644
--- a/.forgejo/workflows/build_preview.yml
+++ b/.forgejo/workflows/build_preview.yml
@@ -4,38 +4,54 @@ on:
       - '[0-9]+\.[0-9]+\.[0-9]+-pre\.[0-9]+'
 
 jobs:
-  checking:
+  check-tag:
     runs-on: docker
-    container: node:lts
+    steps:
+      - name: Checking Out Repository Code
+        uses: https://code.forgejo.org/actions/checkout@v3
+      - name: Check if Version in package.json matches Tag
+        run: |
+          VERSION=$(npm pkg get version --workspaces=false | tr -d \")
+          if test $VERSION != "${{ github.ref_name }}"; then 
+            echo "Expected Version is: '${{  github.ref_name }}' actual Version is: '$VERSION'"; 
+            exit 1
+          else 
+            echo "Version is: '$VERSION'"; 
+          fi 
+
+  checking:
+    needs: [ check-tag ]
+    runs-on: docker
+    container: forgejo.neshweb.net/ci-docker-images/node-alpine-git:latest
     steps:
       - name: Checkout source code
         uses: https://code.forgejo.org/actions/checkout@v3
       - name: Install packages
-        run: npm install
+        run: npm i
       - name: Run astro check (linting +  static analysis)
         run: npm run astro check
 
   build-site:
-    needs: [checking]
+    needs: [ checking ]
     if: success()
     runs-on: dind
     steps:
       - name: Set up Docker Buildx
         uses: docker/setup-buildx-action@v3
-      - name: Login to Docker Hub
+      - name: Log into Docker Package Registry
         uses: docker/login-action@v3
         with:
           registry: forgejo.neshweb.net
           username: ${{ secrets.FORGEJO_USERNAME }}
           password: ${{ secrets.FORGEJO_TOKEN }}
-      - name: Push to Package Registry
+      - name: Build and push to Docker Package Registry
         uses: docker/build-push-action@v5
         with:
           push: true
           tags: forgejo.neshweb.net/firq/fgo-ta-com-website:${{ github.ref_name }}, forgejo.neshweb.net/firq/fgo-ta-com-website:preview
 
-  publish:
-    needs: [build-site]
+  create-release:
+    needs: [ build-site ]
     if: success()
     runs-on: docker
     steps:
@@ -48,3 +64,34 @@ jobs:
           token: ${{ secrets.FORGEJO_TOKEN }}
           tag: ${{  github.ref_name }}
           prerelease: true
+
+  auto-deploy-dockge:
+    needs: [ build-site ]
+    if: success()
+    runs-on: docker
+    container: forgejo.neshweb.net/firq/dockge-cli:0.1.2
+    steps:
+      - name: Configure Dockge CLI
+        run: |
+          dockge host '${{ vars.DOCKGE_HOST }}'
+          dockge login --user '${{ secrets.DOCKGE_USER }}' --password '${{ secrets.DOCKGE_CREDENTIAL }}'
+      - name: Check status and redeploy
+        run: |
+          dockge status fgo-ta-com-preview
+          dockge update fgo-ta-com-preview
+          dockge status fgo-ta-com-preview
+
+  run-unlighthouse:
+    needs: [ build-site ]
+    if: success()
+    runs-on: docker
+    steps:
+      - name: Launch workflow
+        run: |
+          payload="{\"ref\": \"${GITHUB_REF_NAME}\", \"inputs\": { \"containertag\": \"${GITHUB_REF_NAME}\" }}"
+          curl -X "POST" \
+          -H "accept: application/json" \
+          -H "Content-Type: application/json" \
+          -H "Authorization: token ${GITHUB_TOKEN}" \
+          -d "${payload}" \
+          "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/actions/workflows/unlighthouse.yml/dispatches" -v
diff --git a/.forgejo/workflows/build_release.yml b/.forgejo/workflows/build_release.yml
index cfc3ccb..3ebd356 100644
--- a/.forgejo/workflows/build_release.yml
+++ b/.forgejo/workflows/build_release.yml
@@ -4,38 +4,54 @@ on:
       - '[0-9]+\.[0-9]+\.[0-9]+'
 
 jobs:
-  checking:
+  check-tag:
     runs-on: docker
-    container: node:lts
+    steps:
+      - name: Checking Out Repository Code
+        uses: https://code.forgejo.org/actions/checkout@v3
+      - name: Check if Version in package.json matches Tag
+        run: |
+          VERSION=$(npm pkg get version --workspaces=false | tr -d \")
+          if test $VERSION != "${{ github.ref_name }}"; then 
+            echo "Expected Version is: '${{  github.ref_name }}' actual Version is: '$VERSION'"; 
+            exit 1
+          else 
+            echo "Version is: '$VERSION'"; 
+          fi 
+
+  checking:
+    needs: [ check-tag ]
+    runs-on: docker
+    container: forgejo.neshweb.net/ci-docker-images/node-alpine-git:latest
     steps:
       - name: Checkout source code
         uses: https://code.forgejo.org/actions/checkout@v3
       - name: Install packages
-        run: npm install
+        run: npm i
       - name: Run astro check (linting +  static analysis)
         run: npm run astro check
 
   build-site:
-    needs: [checking]
+    needs: [ checking ]
     if: success()
     runs-on: dind
     steps:
       - name: Set up Docker Buildx
         uses: docker/setup-buildx-action@v3
-      - name: Login to Docker Hub
+      - name: Log into Docker Package Registry
         uses: docker/login-action@v3
         with:
           registry: forgejo.neshweb.net
           username: ${{ secrets.FORGEJO_USERNAME }}
           password: ${{ secrets.FORGEJO_TOKEN }}
-      - name: Push to Package Registry
+      - name: Build and push to Docker Package Registry
         uses: docker/build-push-action@v5
         with:
           push: true
           tags: forgejo.neshweb.net/firq/fgo-ta-com-website:${{ github.ref_name }}, forgejo.neshweb.net/firq/fgo-ta-com-website:latest
 
-  release:
-    needs: [build-site]
+  create-release:
+    needs: [ build-site ]
     if: success()
     runs-on: docker
     steps:
@@ -47,3 +63,19 @@ jobs:
           release-dir: release
           token: ${{ secrets.FORGEJO_TOKEN }}
           tag: ${{  github.ref_name }}
+
+  auto-deploy-dockge:
+    needs: [ build-site ]
+    if: success()
+    runs-on: docker
+    container: forgejo.neshweb.net/firq/dockge-cli:0.1.2
+    steps:
+      - name: Configure Dockge CLI
+        run: |
+          dockge host '${{ vars.DOCKGE_HOST }}'
+          dockge login --user '${{ secrets.DOCKGE_USER }}' --password '${{ secrets.DOCKGE_CREDENTIAL }}'
+      - name: Check status and redeploy
+        run: |
+          dockge status fgo-ta-com
+          dockge update fgo-ta-com
+          dockge status fgo-ta-com
diff --git a/.forgejo/workflows/linting.yml b/.forgejo/workflows/linting.yml
index 4e921f8..f68bdf7 100644
--- a/.forgejo/workflows/linting.yml
+++ b/.forgejo/workflows/linting.yml
@@ -4,13 +4,22 @@ on:
       - '**'
 
 jobs:
-  checking:
+  get-version:
     runs-on: docker
-    container: node:lts
+    steps:
+      - name: Checking Out Repository Code
+        uses: https://code.forgejo.org/actions/checkout@v3
+      - name: Check if Version in package.json matches Tag
+        run: |
+          VERSION=$(npm pkg get version --workspaces=false | tr -d \")
+          echo "Version is: '$VERSION'"; 
+  astro-check:
+    runs-on: docker
+    container: forgejo.neshweb.net/ci-docker-images/node-alpine-git:latest
     steps:
       - name: Checkout source code
         uses: https://code.forgejo.org/actions/checkout@v3
       - name: Install packages
-        run: npm install
+        run: npm i
       - name: Run astro check (linting +  static analysis)
         run: npm run astro check
diff --git a/.forgejo/workflows/unlighthouse.yml b/.forgejo/workflows/unlighthouse.yml
index 97f0740..1222bce 100644
--- a/.forgejo/workflows/unlighthouse.yml
+++ b/.forgejo/workflows/unlighthouse.yml
@@ -1,18 +1,36 @@
+name: Run unlighthouse-tests [Downstream pipeline]
+run-name: Run unlighthouse-tests [Downstream pipeline] for version ${{ inputs.containertag }}
 on:
-  push:
-    tags:
-      - '[0-9]+\.[0-9]+\.[0-9]+-unlighthouse\.[0-9]+'
-      - '[0-9]+\.[0-9]+\.[0-9]+-ulh\.[0-9]+'
+  workflow_dispatch:
+    inputs:
+      containertag:
+        description: "Tag of the container to test"
+        default: "preview"
+        type: "string"
 
 jobs:
   unlighthouse:
     runs-on: docker
-    container: forgejo.neshweb.net/ci-docker-images/unlighthouse:0.2.1
+    container: 
+      image: forgejo.neshweb.net/ci-docker-images/unlighthouse:0.3.0
+    services:
+      website:
+        image: forgejo.neshweb.net/firq/fgo-ta-com-website:${{ inputs.containertag }}
+        options: >-
+          --workdir /
     steps:
       - name: Checkout repository
         uses: https://code.forgejo.org/actions/checkout@v3 
+      - name: Check availability
+        run: |
+          while [ "$(curl -o /dev/null -s -w '%{http_code}' http://localhost:8081/)" -ne 200 ];
+            do echo "Waiting...";
+            sleep 5;
+          done;
       - name: Run unlighthouse
-        run: unlighthouse-ci --site "https://preview.fgo-ta.com/" --disable-dynamic-sampling
+        run: unlighthouse-ci --site "http://localhost:8081/"
+      - name: Replace URLs
+        run: find ./unlighthouse-reports -type f | xargs sed -i "s|http://localhost:8081|https://preview.fgo-ta.com|g";
       - name: Prepare artifacts
         run: cp serve.json unlighthouse-reports
       - name: Upload reports
@@ -20,79 +38,54 @@ jobs:
         with:
           name: unlighthouse-reports
           path: unlighthouse-reports/
+      - name: Upload Dockerfile
+        uses: actions/upload-artifact@v3
+        with:
+          name: dockerfile
+          path: Dockerfile.reports
 
-  deploy-unlighthouse-files:
+  build-site:
     needs: [ unlighthouse ]
     if: success()
-    runs-on: docker
-    env: 
-      DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
-      DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
+    runs-on: dind
     steps:
-      - name: Install and update ssh + rsync
-        run: |
-            which rsync || ( apt update -y && apt install rsync -y)
-            which ssh-agent || ( apt update -y && apt install openssh-client -y)            
+      - name: Downloading static site artifacts
+        uses: actions/download-artifact@v3
+        with:
+          name: dockerfile
       - name: Downloading static site artifacts
         uses: actions/download-artifact@v3
         with:
           name: unlighthouse-reports
-          path: public
-      - name: Install SSH Key
-        uses: https://github.com/shimataro/ssh-key-action@v2
+          path: reports
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v3
+      - name: Log into Docker Package Registry
+        uses: docker/login-action@v3
         with:
-          key: ${{ secrets.SSH_PRIVATE_KEY }}
-          known_hosts: unnecessary
-      - name: Adding Known Hosts
-        run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
-      - name: Stop screen session, delete old files
-        uses: https://github.com/appleboy/ssh-action@master
+          registry: forgejo.neshweb.net
+          username: ${{ secrets.FORGEJO_USERNAME }}
+          password: ${{ secrets.FORGEJO_TOKEN }}
+      - name: Build and push to Docker Package Registry
+        uses: docker/build-push-action@v5
         with:
-          host: ${{ env.DEPLOY_HOST }}
-          username: ${{ env.DEPLOY_USER }}
-          key: ${{ secrets.SSH_PRIVATE_KEY }}
-          script: |
-            screen -X -S fgo_ta_com-unlighthouse kill
-            rm -r -f fgo_ta_com/unlighthouse/*            
-      - name: Copy files using rsync
-        run: rsync -az --stats public/* ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}:~/fgo_ta_com/unlighthouse
-      - name: Check files on deploy target
-        uses: https://github.com/appleboy/ssh-action@master
-        with:
-          host: ${{ env.DEPLOY_HOST }}
-          username: ${{ env.DEPLOY_USER }}
-          key: ${{ secrets.SSH_PRIVATE_KEY }}
-          script: |
-            cd fgo_ta_com
-            find unlighthouse -maxdepth 1 -printf "%p\n"            
+          context: .
+          file: Dockerfile.reports
+          push: true
+          tags: forgejo.neshweb.net/firq/fgo-ta-com-website-unlighthouse:latest
 
-  deploy-unlighthouse-site:
-    needs: [ deploy-unlighthouse-files ]
+  auto-deploy-dockge:
+    needs: [ build-site ]
     if: success()
     runs-on: docker
-    env: 
-      DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
-      DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
+    container: forgejo.neshweb.net/firq/dockge-cli:0.1.2
     steps:
-      - name: Install and update ssh + rsync
+      - name: Configure Dockge CLI
         run: |
-            which rsync || ( apt update -y && apt install rsync -y)
-            which ssh-agent || ( apt update -y && apt install openssh-client -y)            
-      - name: Install SSH Key
-        uses: https://github.com/shimataro/ssh-key-action@v2
-        with:
-          key: ${{ secrets.SSH_PRIVATE_KEY }}
-          known_hosts: unnecessary
-      - name: Adding Known Hosts
-        run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
-      - name: Start new screen session
-        uses: https://github.com/appleboy/ssh-action@master
-        with:
-          host: ${{ env.DEPLOY_HOST }}
-          username: ${{ env.DEPLOY_USER }}
-          key: ${{ secrets.SSH_PRIVATE_KEY }}
-          script: |
-            PATH="$HOME/.local/bin:$PATH"
-            screen -ls | grep 'fgo_ta_com-unlighthouse' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
-            cd fgo_ta_com
-            screen -S fgo_ta_com-unlighthouse -dm serve unlighthouse/ -p ${{ secrets.UNLIGHTHOUSE_DEPLOY_PORT }}   
+          dockge host '${{ vars.DOCKGE_HOST }}'
+          dockge login --user '${{ secrets.DOCKGE_USER }}' --password '${{ secrets.DOCKGE_CREDENTIAL }}'
+      - name: Check status and redeploy
+        run: |
+          dockge status fgo-ta-com-unlighthouse
+          dockge update fgo-ta-com-unlighthouse
+          dockge status fgo-ta-com-unlighthouse
diff --git a/Dockerfile b/Dockerfile
index 68f8067..b9ff0a5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,16 +1,16 @@
-FROM node:21.5 AS build
+FROM node:22-alpine AS build
 WORKDIR /site
 COPY . .
 RUN npm i
 RUN npm run astro telemetry disable
 RUN npm run build
 
-FROM forgejo.neshweb.net/ci-docker-images/website-serve:0.1.3 AS runtime
+FROM forgejo.neshweb.net/ci-docker-images/website-serve:2 AS runtime
 
 COPY --from=build /site/dist /public
 COPY --from=build /site/serve.json /public/serve.json
 
-ENV PORT 8081
+ENV PORT=8081
 EXPOSE 8081
 
-CMD [ "serve", "public/", "-p", "8081" ]
+CMD serve public/ -p ${PORT}
diff --git a/Dockerfile.reports b/Dockerfile.reports
new file mode 100644
index 0000000..f745d5e
--- /dev/null
+++ b/Dockerfile.reports
@@ -0,0 +1,6 @@
+FROM forgejo.neshweb.net/ci-docker-images/website-serve:2 AS runtime
+
+ADD reports /public
+
+EXPOSE 8081
+CMD serve public/ -p 8081
diff --git a/astro.config.mjs b/astro.config.mjs
index 37c3a0b..a00984c 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,12 +1,12 @@
-import { defineConfig } from 'astro/config';
 import sitemap from '@astrojs/sitemap';
 import metaTags from "astro-meta-tags";
+import { defineConfig } from 'astro/config';
 
 export default defineConfig({
   sitemap: true,
   base: '/',
   outDir: 'dist',
-  publicDir: 'static',
+  publicDir: 'public',
   site: 'https://fgo-ta.com/',
   integrations: [sitemap(), metaTags()],
   trailingSlash: "never"
diff --git a/package-lock.json b/package-lock.json
index b85fdf1..d2af1b8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,23 +1,23 @@
 {
   "name": "fgo-ta-com-website",
-  "version": "0.2.2-pre.1",
+  "version": "0.2.2-pre.18",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "fgo-ta-com-website",
-      "version": "0.2.2-pre.1",
+      "version": "0.2.2-pre.18",
       "dependencies": {
-        "@astro-community/astro-embed-youtube": "^0.4.3",
-        "@astrojs/check": "^0.5.10",
-        "@astrojs/sitemap": "^3.1.4",
+        "@astro-community/astro-embed-youtube": "^0.5.2",
+        "@astrojs/check": "^0.9.3",
+        "@astrojs/sitemap": "^3.1.6",
         "@fontsource/work-sans": "^5.0.18",
-        "astro": "^4.7.0",
-        "astro-meta-tags": "^0.1.3",
-        "autoprefixer": "^10.4.16",
-        "iconoir": "^7.3.0",
-        "postcss-preset-env": "^9.3.0",
-        "typescript": "^5.3.3"
+        "astro": "^4.14.3",
+        "astro-meta-tags": "^0.3.0",
+        "autoprefixer": "^10.4.19",
+        "iconoir": "^7.7.0",
+        "postcss-preset-env": "^9.6.0",
+        "typescript": "^5.5.3"
       },
       "devDependencies": {
         "prettier": "^3.1.1",
@@ -37,22 +37,23 @@
       }
     },
     "node_modules/@astro-community/astro-embed-youtube": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@astro-community/astro-embed-youtube/-/astro-embed-youtube-0.4.3.tgz",
-      "integrity": "sha512-zXtPmR9yxrTo6cuLhH8v+r62bsXbsLJgsU2FiZalPr4bXJxAUQEIlG46S/qK0AEXi9uNShKqy4+zBaJ98xTVEg==",
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/@astro-community/astro-embed-youtube/-/astro-embed-youtube-0.5.2.tgz",
+      "integrity": "sha512-cckWcq7mFCmI6uPpIlRolSafSQRYZBOaxIc8DaCUh8+JQAtPF7O4EdpRpZBUcvbARrWEEyHJCWrt0XOGppMniw==",
       "dependencies": {
-        "lite-youtube-embed": "^0.2.0"
+        "lite-youtube-embed": "^0.3.2"
       },
       "peerDependencies": {
         "astro": "^2.0.0 || ^3.0.0-beta || ^4.0.0-beta"
       }
     },
     "node_modules/@astrojs/check": {
-      "version": "0.5.10",
-      "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.5.10.tgz",
-      "integrity": "sha512-vliHXM9cu/viGeKiksUM4mXfO816ohWtawTl2ADPgTsd4nUMjFiyAl7xFZhF34yy4hq4qf7jvK1F2PlR3b5I5w==",
+      "version": "0.9.3",
+      "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.3.tgz",
+      "integrity": "sha512-I6Dz45bMI5YRbp4yK2LKWsHH3/kkHRGdPGruGkLap6pqxhdcNh7oCgN04Ac+haDfc9ow5BYPGPmEhkwef15GQQ==",
+      "license": "MIT",
       "dependencies": {
-        "@astrojs/language-server": "^2.8.4",
+        "@astrojs/language-server": "^2.14.1",
         "chokidar": "^3.5.3",
         "fast-glob": "^3.3.1",
         "kleur": "^4.1.5",
@@ -66,35 +67,39 @@
       }
     },
     "node_modules/@astrojs/compiler": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.7.1.tgz",
-      "integrity": "sha512-/POejAYuj8WEw7ZI0J8JBvevjfp9jQ9Wmu/Bg52RiNwGXkMV7JnYpsenVfHvvf1G7R5sXHGKlTcxlQWhoUTiGQ=="
+      "version": "2.10.3",
+      "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.10.3.tgz",
+      "integrity": "sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw=="
     },
     "node_modules/@astrojs/internal-helpers": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.0.tgz",
-      "integrity": "sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA=="
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.1.tgz",
+      "integrity": "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="
     },
     "node_modules/@astrojs/language-server": {
-      "version": "2.8.4",
-      "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.8.4.tgz",
-      "integrity": "sha512-sJH5vGTBkhgA8+hdhzX78UUp4cFz4Mt7xkEkevD188OS5bDMkaue6hK+dtXWM47mnrXFveXA2u38K7S+5+IRjA==",
+      "version": "2.14.1",
+      "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.14.1.tgz",
+      "integrity": "sha512-mkKtCTPRD4dyKdAqIP0zmmPyO/ZABOqFESnaVca47Dg/sAagJnDSEsDUDzNbHFh1+9Dj1o5y4iwNsxJboGdaNg==",
+      "license": "MIT",
       "dependencies": {
-        "@astrojs/compiler": "^2.7.0",
+        "@astrojs/compiler": "^2.10.3",
+        "@astrojs/yaml2ts": "^0.2.1",
         "@jridgewell/sourcemap-codec": "^1.4.15",
-        "@volar/kit": "~2.1.5",
-        "@volar/language-core": "~2.1.5",
-        "@volar/language-server": "~2.1.5",
-        "@volar/language-service": "~2.1.5",
-        "@volar/typescript": "~2.1.5",
+        "@volar/kit": "~2.4.0",
+        "@volar/language-core": "~2.4.0",
+        "@volar/language-server": "~2.4.0",
+        "@volar/language-service": "~2.4.0",
+        "@volar/typescript": "~2.4.0",
         "fast-glob": "^3.2.12",
-        "volar-service-css": "0.0.34",
-        "volar-service-emmet": "0.0.34",
-        "volar-service-html": "0.0.34",
-        "volar-service-prettier": "0.0.34",
-        "volar-service-typescript": "0.0.34",
-        "volar-service-typescript-twoslash-queries": "0.0.34",
-        "vscode-html-languageservice": "^5.1.2",
+        "muggle-string": "^0.4.1",
+        "volar-service-css": "0.0.61",
+        "volar-service-emmet": "0.0.61",
+        "volar-service-html": "0.0.61",
+        "volar-service-prettier": "0.0.61",
+        "volar-service-typescript": "0.0.61",
+        "volar-service-typescript-twoslash-queries": "0.0.61",
+        "volar-service-yaml": "0.0.61",
+        "vscode-html-languageservice": "^5.2.0",
         "vscode-uri": "^3.0.8"
       },
       "bin": {
@@ -114,28 +119,28 @@
       }
     },
     "node_modules/@astrojs/markdown-remark": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.1.0.tgz",
-      "integrity": "sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.2.0.tgz",
+      "integrity": "sha512-vWGM24KZXz11jR3JO+oqYU3T2qpuOi4uGivJ9SQLCAI01+vEkHC60YJMRvHPc+hwd60F7euNs1PeOEixIIiNQw==",
       "dependencies": {
-        "@astrojs/prism": "^3.1.0",
+        "@astrojs/prism": "3.1.0",
         "github-slugger": "^2.0.0",
-        "hast-util-from-html": "^2.0.0",
-        "hast-util-to-text": "^4.0.0",
-        "import-meta-resolve": "^4.0.0",
+        "hast-util-from-html": "^2.0.1",
+        "hast-util-to-text": "^4.0.2",
+        "import-meta-resolve": "^4.1.0",
         "mdast-util-definitions": "^6.0.0",
         "rehype-raw": "^7.0.0",
         "rehype-stringify": "^10.0.0",
         "remark-gfm": "^4.0.0",
         "remark-parse": "^11.0.0",
-        "remark-rehype": "^11.0.0",
-        "remark-smartypants": "^2.0.0",
-        "shiki": "^1.1.2",
-        "unified": "^11.0.4",
+        "remark-rehype": "^11.1.0",
+        "remark-smartypants": "^3.0.2",
+        "shiki": "^1.10.3",
+        "unified": "^11.0.5",
         "unist-util-remove-position": "^5.0.0",
         "unist-util-visit": "^5.0.0",
-        "unist-util-visit-parents": "^6.0.0",
-        "vfile": "^6.0.1"
+        "unist-util-visit-parents": "^6.0.1",
+        "vfile": "^6.0.2"
       }
     },
     "node_modules/@astrojs/prism": {
@@ -150,13 +155,13 @@
       }
     },
     "node_modules/@astrojs/sitemap": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.1.4.tgz",
-      "integrity": "sha512-po8CqDCK14O6phU1mB5C8SyVLyQEa+7pJM8oXxs1mVh8DgvxxaA5E7lak1vzOmBcyyyHBW32jakGqNYc66sBRw==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.1.6.tgz",
+      "integrity": "sha512-1Qp2NvAzVImqA6y+LubKi1DVhve/hXXgFvB0szxiipzh7BvtuKe4oJJ9dXSqaubaTkt4nMa6dv6RCCAYeB6xaQ==",
       "dependencies": {
-        "sitemap": "^7.1.1",
+        "sitemap": "^7.1.2",
         "stream-replace-string": "^2.0.0",
-        "zod": "^3.22.4"
+        "zod": "^3.23.8"
       }
     },
     "node_modules/@astrojs/telemetry": {
@@ -176,12 +181,21 @@
         "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
       }
     },
-    "node_modules/@babel/code-frame": {
-      "version": "7.24.2",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-      "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+    "node_modules/@astrojs/yaml2ts": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.1.tgz",
+      "integrity": "sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==",
+      "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.2",
+        "yaml": "^2.5.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "dependencies": {
+        "@babel/highlight": "^7.24.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -189,28 +203,28 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
-      "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
-      "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.2",
-        "@babel/generator": "^7.24.5",
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-module-transforms": "^7.24.5",
-        "@babel/helpers": "^7.24.5",
-        "@babel/parser": "^7.24.5",
-        "@babel/template": "^7.24.0",
-        "@babel/traverse": "^7.24.5",
-        "@babel/types": "^7.24.5",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/helper-compilation-targets": "^7.25.2",
+        "@babel/helper-module-transforms": "^7.25.2",
+        "@babel/helpers": "^7.25.0",
+        "@babel/parser": "^7.25.0",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.2",
+        "@babel/types": "^7.25.2",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -234,11 +248,11 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz",
-      "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
       "dependencies": {
-        "@babel/types": "^7.24.5",
+        "@babel/types": "^7.25.0",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -248,24 +262,24 @@
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
-      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
-      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
       "dependencies": {
-        "@babel/compat-data": "^7.23.5",
-        "@babel/helper-validator-option": "^7.23.5",
-        "browserslist": "^4.22.2",
+        "@babel/compat-data": "^7.25.2",
+        "@babel/helper-validator-option": "^7.24.8",
+        "browserslist": "^4.23.1",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -281,58 +295,27 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
-      "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
-      "dependencies": {
-        "@babel/types": "^7.22.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
-      "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
       "dependencies": {
-        "@babel/types": "^7.24.0"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz",
-      "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-module-imports": "^7.24.3",
-        "@babel/helper-simple-access": "^7.24.5",
-        "@babel/helper-split-export-declaration": "^7.24.5",
-        "@babel/helper-validator-identifier": "^7.24.5"
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/traverse": "^7.25.2"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -342,78 +325,67 @@
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz",
-      "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz",
-      "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
       "dependencies": {
-        "@babel/types": "^7.24.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz",
-      "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==",
-      "dependencies": {
-        "@babel/types": "^7.24.5"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
-      "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
-      "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
-      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz",
-      "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
       "dependencies": {
-        "@babel/template": "^7.24.0",
-        "@babel/traverse": "^7.24.5",
-        "@babel/types": "^7.24.5"
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
-      "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.5",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -423,9 +395,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
-      "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -434,11 +409,11 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
-      "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -448,15 +423,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
-      "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
+      "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-module-imports": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-jsx": "^7.23.3",
-        "@babel/types": "^7.23.4"
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/types": "^7.25.2"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -466,31 +441,28 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/parser": "^7.25.0",
+        "@babel/types": "^7.25.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
-      "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
       "dependencies": {
-        "@babel/code-frame": "^7.24.2",
-        "@babel/generator": "^7.24.5",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.24.5",
-        "@babel/parser": "^7.24.5",
-        "@babel/types": "^7.24.5",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/parser": "^7.25.3",
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.2",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -499,12 +471,12 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz",
-      "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.1",
-        "@babel/helper-validator-identifier": "^7.24.5",
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -512,9 +484,9 @@
       }
     },
     "node_modules/@csstools/cascade-layer-name-parser": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.6.tgz",
-      "integrity": "sha512-HkxRNs6ZIV0VjLFw6k5G8K35vd9r+O8B1Vr+QVD8M5Y44eQxyHtc42BdF74FQatXACPnitOR1+sRx2oWdnKTQw==",
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz",
+      "integrity": "sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==",
       "funding": [
         {
           "type": "github",
@@ -529,14 +501,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/color-helpers": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz",
-      "integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.1.tgz",
+      "integrity": "sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==",
       "funding": [
         {
           "type": "github",
@@ -552,9 +524,9 @@
       }
     },
     "node_modules/@csstools/css-calc": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.5.tgz",
-      "integrity": "sha512-UhI5oSRAUtTHY3MyGahqn0ZzQOHVoPpfvUcOmYipAZ1rILAvCBoyiLSsa/clv1Xxct0SMKIq93KO5Bfl1cb6tQ==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.4.tgz",
+      "integrity": "sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q==",
       "funding": [
         {
           "type": "github",
@@ -569,14 +541,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/css-color-parser": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.5.0.tgz",
-      "integrity": "sha512-PUhSg1MgU2sjYhA6moOmxYesqVqYTJwcVw12boTNbDX7Af+VK02MkgvmBBY2Z2qU6UN5HOQ+wrF0qQJGsTFY7w==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.5.tgz",
+      "integrity": "sha512-lRZSmtl+DSjok3u9hTWpmkxFZnz7stkbZxzKc08aDUsdrWwhSgWo8yq9rq9DaFUtbAyAq2xnH92fj01S+pwIww==",
       "funding": [
         {
           "type": "github",
@@ -588,21 +560,21 @@
         }
       ],
       "dependencies": {
-        "@csstools/color-helpers": "^4.0.0",
-        "@csstools/css-calc": "^1.1.5"
+        "@csstools/color-helpers": "^4.2.1",
+        "@csstools/css-calc": "^1.2.4"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz",
-      "integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz",
+      "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==",
       "funding": [
         {
           "type": "github",
@@ -617,13 +589,13 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz",
-      "integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz",
+      "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==",
       "funding": [
         {
           "type": "github",
@@ -639,9 +611,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz",
-      "integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==",
+      "version": "2.1.13",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz",
+      "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==",
       "funding": [
         {
           "type": "github",
@@ -656,14 +628,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/postcss-cascade-layers": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.2.tgz",
-      "integrity": "sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==",
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz",
+      "integrity": "sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==",
       "funding": [
         {
           "type": "github",
@@ -675,7 +647,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.1",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
@@ -686,9 +658,9 @@
       }
     },
     "node_modules/@csstools/postcss-color-function": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.8.tgz",
-      "integrity": "sha512-jvbF7eCRbIcxWqby0kk2Mt85QtGzRRpFFYdlJCJ80Tuiv43PY+auS/nBl8pDQQ4Ndm4vsm4IC/wCZDcJUmpJmg==",
+      "version": "3.0.19",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.19.tgz",
+      "integrity": "sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg==",
       "funding": [
         {
           "type": "github",
@@ -700,10 +672,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -713,9 +686,9 @@
       }
     },
     "node_modules/@csstools/postcss-color-mix-function": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.8.tgz",
-      "integrity": "sha512-sGhk+TdZ2TeXspc6LSYSYC8WgzLlxoknUaObKgB0mk+dNjRQgSSIeCU+qrCwvHmwM+uTNKtiS8mntDzyQLHTTA==",
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.19.tgz",
+      "integrity": "sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg==",
       "funding": [
         {
           "type": "github",
@@ -727,10 +700,38 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4"
+      }
+    },
+    "node_modules/@csstools/postcss-content-alt-text": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-1.0.0.tgz",
+      "integrity": "sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "dependencies": {
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -740,9 +741,9 @@
       }
     },
     "node_modules/@csstools/postcss-exponential-functions": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.2.tgz",
-      "integrity": "sha512-VRIYrwNCkZRqzsGB4jGT+XcNXsoiwyqy0Vf7C3I/5OPcf7WcWK3G1sBYFqqgWLGtpwc7m1m8TcorGY1xdh5abg==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.9.tgz",
+      "integrity": "sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ==",
       "funding": [
         {
           "type": "github",
@@ -754,9 +755,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.1.5",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-calc": "^1.2.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -766,9 +767,9 @@
       }
     },
     "node_modules/@csstools/postcss-font-format-keywords": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.1.tgz",
-      "integrity": "sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.2.tgz",
+      "integrity": "sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==",
       "funding": [
         {
           "type": "github",
@@ -780,6 +781,7 @@
         }
       ],
       "dependencies": {
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -790,9 +792,9 @@
       }
     },
     "node_modules/@csstools/postcss-gamut-mapping": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.1.tgz",
-      "integrity": "sha512-GDVzfNbnc7x3GusFklvt0mYXIWVzxEtEtTFEW664NgZh/5V7Z89hZKBMl9piOAHXuxijfHtE+kul/ShfeLUvcA==",
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.11.tgz",
+      "integrity": "sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g==",
       "funding": [
         {
           "type": "github",
@@ -804,9 +806,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -816,9 +818,9 @@
       }
     },
     "node_modules/@csstools/postcss-gradients-interpolation-method": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.8.tgz",
-      "integrity": "sha512-bmvCNzuUvWPPdgASh0T14ffTay/FdzXsXfp0wXT1pYoUPmkH9M6yyxwPEkHq5djjzSb2jiLl4Ta3XM1uOREQ2w==",
+      "version": "4.0.20",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.20.tgz",
+      "integrity": "sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og==",
       "funding": [
         {
           "type": "github",
@@ -830,10 +832,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -843,9 +846,9 @@
       }
     },
     "node_modules/@csstools/postcss-hwb-function": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.7.tgz",
-      "integrity": "sha512-iXs1gxKtev8YNP5bOF26TAsnMfcxnCRLpKItQ067RphYECKEK/xWm4Z0r4ChmV1U1eq+lbdH5ZIb2cju4o5akA==",
+      "version": "3.0.18",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.18.tgz",
+      "integrity": "sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ==",
       "funding": [
         {
           "type": "github",
@@ -857,9 +860,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -869,9 +874,9 @@
       }
     },
     "node_modules/@csstools/postcss-ic-unit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.3.tgz",
-      "integrity": "sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.7.tgz",
+      "integrity": "sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g==",
       "funding": [
         {
           "type": "github",
@@ -883,7 +888,8 @@
         }
       ],
       "dependencies": {
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -915,9 +921,9 @@
       }
     },
     "node_modules/@csstools/postcss-is-pseudo-class": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz",
-      "integrity": "sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz",
+      "integrity": "sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==",
       "funding": [
         {
           "type": "github",
@@ -929,7 +935,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.1",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
@@ -939,6 +945,33 @@
         "postcss": "^8.4"
       }
     },
+    "node_modules/@csstools/postcss-light-dark-function": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.8.tgz",
+      "integrity": "sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "dependencies": {
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4"
+      }
+    },
     "node_modules/@csstools/postcss-logical-float-and-clear": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz",
@@ -1027,9 +1060,9 @@
       }
     },
     "node_modules/@csstools/postcss-logical-viewport-units": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.4.tgz",
-      "integrity": "sha512-jetp/ArGAniWbjWBh5UQ07ztawfSbqCFd0QelX4R4pVIxrXahUEhz5VZHebMPVCg02J8GsQn0br6fdRpY6t7lw==",
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.11.tgz",
+      "integrity": "sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg==",
       "funding": [
         {
           "type": "github",
@@ -1041,7 +1074,8 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1051,9 +1085,9 @@
       }
     },
     "node_modules/@csstools/postcss-media-minmax": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.1.tgz",
-      "integrity": "sha512-mBY46/Hr+A8cDjoX0OoPRBOVrkANym9540dSB9rN3dllPZdM1E112i/tVxWsrR1s1yE9gfF0pk+7lf9l+qSeHA==",
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.8.tgz",
+      "integrity": "sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w==",
       "funding": [
         {
           "type": "github",
@@ -1065,10 +1099,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.1.5",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/media-query-list-parser": "^2.1.6"
+        "@csstools/css-calc": "^1.2.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/media-query-list-parser": "^2.1.13"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1078,9 +1112,9 @@
       }
     },
     "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.4.tgz",
-      "integrity": "sha512-IaIZZhH0Qy9UDn7u+N3cuwwPG0Po3ZKOdDh+ClR7xvisSqniG+PuVrOEWYJrFKOt2//UHLhd7KHDqr2u9LKS9Q==",
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.11.tgz",
+      "integrity": "sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA==",
       "funding": [
         {
           "type": "github",
@@ -1092,9 +1126,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/media-query-list-parser": "^2.1.6"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/media-query-list-parser": "^2.1.13"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1104,9 +1138,9 @@
       }
     },
     "node_modules/@csstools/postcss-nested-calc": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.1.tgz",
-      "integrity": "sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.2.tgz",
+      "integrity": "sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==",
       "funding": [
         {
           "type": "github",
@@ -1118,6 +1152,7 @@
         }
       ],
       "dependencies": {
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -1152,9 +1187,9 @@
       }
     },
     "node_modules/@csstools/postcss-oklab-function": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.8.tgz",
-      "integrity": "sha512-L4xrwbgg+k08v+a88LDxJeIM6+kqaBJlYb/QgmEMfQpUbrfXTp87DuRc7utcRdDvY+qWK5vqz3h1xUtceB5LJQ==",
+      "version": "3.0.19",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.19.tgz",
+      "integrity": "sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q==",
       "funding": [
         {
           "type": "github",
@@ -1166,10 +1201,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1179,9 +1215,9 @@
       }
     },
     "node_modules/@csstools/postcss-progressive-custom-properties": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.3.tgz",
-      "integrity": "sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.3.0.tgz",
+      "integrity": "sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg==",
       "funding": [
         {
           "type": "github",
@@ -1203,9 +1239,9 @@
       }
     },
     "node_modules/@csstools/postcss-relative-color-syntax": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.8.tgz",
-      "integrity": "sha512-wu/Oh7QKINpRXnmLMUbObVNlqwr843PSF4a3x3fMC0I+vUeoGqMfZuSPFtT+NnYYxfzUjEZ091GURPxee22VLQ==",
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.19.tgz",
+      "integrity": "sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA==",
       "funding": [
         {
           "type": "github",
@@ -1217,10 +1253,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1254,9 +1291,9 @@
       }
     },
     "node_modules/@csstools/postcss-stepped-value-functions": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.3.tgz",
-      "integrity": "sha512-hzo9Wr3u7JJiM65/EyHgE/gJpBzhDwBSGOobFs2YQ0ZNTywUliYQoYJud1KKlByMRuhqvDLh9V95eIkLf/fZTQ==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.10.tgz",
+      "integrity": "sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g==",
       "funding": [
         {
           "type": "github",
@@ -1268,9 +1305,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.1.5",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-calc": "^1.2.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1280,9 +1317,9 @@
       }
     },
     "node_modules/@csstools/postcss-text-decoration-shorthand": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz",
-      "integrity": "sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz",
+      "integrity": "sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==",
       "funding": [
         {
           "type": "github",
@@ -1294,7 +1331,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/color-helpers": "^4.0.0",
+        "@csstools/color-helpers": "^4.2.1",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -1305,9 +1342,9 @@
       }
     },
     "node_modules/@csstools/postcss-trigonometric-functions": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.3.tgz",
-      "integrity": "sha512-T/npTbDuMZ3vktEMuA05p1oeVd12Sy47qZP1vFhzNMUOdXGCK9vlm0tUSIlV5DdlbTJqKqq9FhGitZH9VTKrfQ==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.10.tgz",
+      "integrity": "sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw==",
       "funding": [
         {
           "type": "github",
@@ -1319,9 +1356,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.1.5",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2"
+        "@csstools/css-calc": "^1.2.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -1351,10 +1388,10 @@
         "postcss": "^8.4"
       }
     },
-    "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz",
-      "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==",
+    "node_modules/@csstools/selector-resolve-nested": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz",
+      "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==",
       "funding": [
         {
           "type": "github",
@@ -1372,10 +1409,53 @@
         "postcss-selector-parser": "^6.0.13"
       }
     },
+    "node_modules/@csstools/selector-specificity": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "postcss-selector-parser": "^6.0.13"
+      }
+    },
+    "node_modules/@csstools/utilities": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz",
+      "integrity": "sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4"
+      }
+    },
     "node_modules/@emmetio/abbreviation": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
       "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
+      "license": "MIT",
       "dependencies": {
         "@emmetio/scanner": "^1.0.4"
       }
@@ -1384,14 +1464,47 @@
       "version": "2.1.8",
       "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
       "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
+      "license": "MIT",
       "dependencies": {
         "@emmetio/scanner": "^1.0.4"
       }
     },
+    "node_modules/@emmetio/css-parser": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz",
+      "integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==",
+      "license": "MIT",
+      "dependencies": {
+        "@emmetio/stream-reader": "^2.2.0",
+        "@emmetio/stream-reader-utils": "^0.1.0"
+      }
+    },
+    "node_modules/@emmetio/html-matcher": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
+      "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
+      "license": "ISC",
+      "dependencies": {
+        "@emmetio/scanner": "^1.0.0"
+      }
+    },
     "node_modules/@emmetio/scanner": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
-      "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="
+      "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==",
+      "license": "MIT"
+    },
+    "node_modules/@emmetio/stream-reader": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
+      "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==",
+      "license": "MIT"
+    },
+    "node_modules/@emmetio/stream-reader-utils": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
+      "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==",
+      "license": "MIT"
     },
     "node_modules/@emnapi/runtime": {
       "version": "1.1.1",
@@ -1402,351 +1515,6 @@
         "tslib": "^2.4.0"
       }
     },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
-      "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
-      "cpu": [
-        "ppc64"
-      ],
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
-      "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
-      "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
-      "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
-      "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
-      "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
-      "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
-      "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
-      "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
-      "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
-      "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
-      "cpu": [
-        "ia32"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
-      "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
-      "cpu": [
-        "loong64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
-      "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
-      "cpu": [
-        "mips64el"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
-      "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
-      "cpu": [
-        "ppc64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
-      "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
-      "cpu": [
-        "riscv64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
-      "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
-      "cpu": [
-        "s390x"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
-      "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
-      "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
-      "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
-      "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
-      "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
-      "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
-      "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@fontsource/work-sans": {
       "version": "5.0.18",
       "resolved": "https://registry.npmjs.org/@fontsource/work-sans/-/work-sans-5.0.18.tgz",
@@ -2213,9 +1981,9 @@
       }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
     },
     "node_modules/@jridgewell/trace-mapping": {
       "version": "0.3.25",
@@ -2258,6 +2026,37 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@oslojs/encoding": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-0.4.1.tgz",
+      "integrity": "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
     "node_modules/@rollup/rollup-android-arm-eabi": {
       "version": "4.17.2",
       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz",
@@ -2451,9 +2250,13 @@
       ]
     },
     "node_modules/@shikijs/core": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.4.0.tgz",
-      "integrity": "sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ=="
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.14.1.tgz",
+      "integrity": "sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.4"
+      }
     },
     "node_modules/@types/babel__core": {
       "version": "7.20.5",
@@ -2511,9 +2314,9 @@
       "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
     },
     "node_modules/@types/hast": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
-      "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+      "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
       "dependencies": {
         "@types/unist": "*"
       }
@@ -2532,27 +2335,22 @@
       "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
     },
     "node_modules/@types/nlcst": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.4.tgz",
-      "integrity": "sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+      "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
       "dependencies": {
-        "@types/unist": "^2"
+        "@types/unist": "*"
       }
     },
-    "node_modules/@types/nlcst/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
     "node_modules/@types/node": {
       "version": "17.0.45",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
       "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
     },
     "node_modules/@types/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==",
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
+      "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
       "dependencies": {
         "@types/node": "*"
       }
@@ -2568,12 +2366,13 @@
       "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
     },
     "node_modules/@volar/kit": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.1.6.tgz",
-      "integrity": "sha512-dSuXChDGM0nSG/0fxqlNfadjpAeeo1P1SJPBQ+pDf8H1XrqeJq5gIhxRTEbiS+dyNIG69ATq1CArkbCif+oxJw==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.0.tgz",
+      "integrity": "sha512-uqwtPKhrbnP+3f8hs+ltDYXLZ6Wdbs54IzkaPocasI4aBhqWLht5qXctE1MqpZU52wbH359E0u9nhxEFmyon+w==",
+      "license": "MIT",
       "dependencies": {
-        "@volar/language-service": "2.1.6",
-        "@volar/typescript": "2.1.6",
+        "@volar/language-service": "2.4.0",
+        "@volar/typescript": "2.4.0",
         "typesafe-path": "^0.2.2",
         "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-uri": "^3.0.8"
@@ -2583,23 +2382,23 @@
       }
     },
     "node_modules/@volar/language-core": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.1.6.tgz",
-      "integrity": "sha512-pAlMCGX/HatBSiDFMdMyqUshkbwWbLxpN/RL7HCQDOo2gYBE+uS+nanosLc1qR6pTQ/U8q00xt8bdrrAFPSC0A==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0.tgz",
+      "integrity": "sha512-FTla+khE+sYK0qJP+6hwPAAUwiNHVMph4RUXpxf/FIPKUP61NFrVZorml4mjFShnueR2y9/j8/vnh09YwVdH7A==",
+      "license": "MIT",
       "dependencies": {
-        "@volar/source-map": "2.1.6"
+        "@volar/source-map": "2.4.0"
       }
     },
     "node_modules/@volar/language-server": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.1.6.tgz",
-      "integrity": "sha512-0w+FV8ro37hVb3qE4ONo3VbS5kEQXv4H/D2xCePyY5dRw6XnbJAPFNKvoxI9mxHTPonvIG1si5rN9MSGSKtgZQ==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.0.tgz",
+      "integrity": "sha512-rmGIjAxWekWQiGH97Mosb4juiD/hfFYNQKV5Py9r7vDOLSkbIwRhITbwHm88NJKs8P6TNc6w/PfBXN6yjKadJg==",
+      "license": "MIT",
       "dependencies": {
-        "@volar/language-core": "2.1.6",
-        "@volar/language-service": "2.1.6",
-        "@volar/snapshot-document": "2.1.6",
-        "@volar/typescript": "2.1.6",
-        "@vscode/l10n": "^0.0.16",
+        "@volar/language-core": "2.4.0",
+        "@volar/language-service": "2.4.0",
+        "@volar/typescript": "2.4.0",
         "path-browserify": "^1.0.1",
         "request-light": "^0.7.0",
         "vscode-languageserver": "^9.0.1",
@@ -2609,46 +2408,39 @@
       }
     },
     "node_modules/@volar/language-service": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.1.6.tgz",
-      "integrity": "sha512-1OpbbPQ6wUIumwMP5r45y8utVEmvq1n6BC8JHqGKsuFr9RGFIldDBlvA/xuO3MDKhjmmPGPHKb54kg1/YN78ow==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.0.tgz",
+      "integrity": "sha512-4P3yeQXIL68mLfS3n6P3m02IRg3GnLHUU9k/1PCHEfm5FG9bySkDOc72dbBn2vAa2BxOqm18bmmZXrsWuQ5AOw==",
+      "license": "MIT",
       "dependencies": {
-        "@volar/language-core": "2.1.6",
+        "@volar/language-core": "2.4.0",
         "vscode-languageserver-protocol": "^3.17.5",
         "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-uri": "^3.0.8"
       }
     },
-    "node_modules/@volar/snapshot-document": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/snapshot-document/-/snapshot-document-2.1.6.tgz",
-      "integrity": "sha512-YNYk1sCOrGg7VHbZM+1It97q0GWhFxdqIwnxSNFoL0X1LuSRXoCT2DRb/aa1J6aBpPMbKqSFUWHGQEAFUnc4Zw==",
-      "dependencies": {
-        "vscode-languageserver-protocol": "^3.17.5",
-        "vscode-languageserver-textdocument": "^1.0.11"
-      }
-    },
     "node_modules/@volar/source-map": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.1.6.tgz",
-      "integrity": "sha512-TeyH8pHHonRCHYI91J7fWUoxi0zWV8whZTVRlsWHSYfjm58Blalkf9LrZ+pj6OiverPTmrHRkBsG17ScQyWECw==",
-      "dependencies": {
-        "muggle-string": "^0.4.0"
-      }
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0.tgz",
+      "integrity": "sha512-2ceY8/NEZvN6F44TXw2qRP6AQsvCYhV2bxaBPWxV9HqIfkbRydSksTFObCF1DBDNBfKiZTS8G/4vqV6cvjdOIQ==",
+      "license": "MIT"
     },
     "node_modules/@volar/typescript": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.1.6.tgz",
-      "integrity": "sha512-JgPGhORHqXuyC3r6skPmPHIZj4LoMmGlYErFTuPNBq9Nhc9VTv7ctHY7A3jMN3ngKEfRrfnUcwXHztvdSQqNfw==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0.tgz",
+      "integrity": "sha512-9zx3lQWgHmVd+JRRAHUSRiEhe4TlzL7U7e6ulWXOxHH/WNYxzKwCvZD7WYWEZFdw4dHfTD9vUR0yPQO6GilCaQ==",
+      "license": "MIT",
       "dependencies": {
-        "@volar/language-core": "2.1.6",
-        "path-browserify": "^1.0.1"
+        "@volar/language-core": "2.4.0",
+        "path-browserify": "^1.0.1",
+        "vscode-uri": "^3.0.8"
       }
     },
     "node_modules/@vscode/emmet-helper": {
       "version": "2.9.3",
       "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz",
       "integrity": "sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==",
+      "license": "MIT",
       "dependencies": {
         "emmet": "^2.4.3",
         "jsonc-parser": "^2.3.0",
@@ -2660,17 +2452,19 @@
     "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
-      "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
+      "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
+      "license": "MIT"
     },
     "node_modules/@vscode/l10n": {
-      "version": "0.0.16",
-      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz",
-      "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg=="
+      "version": "0.0.18",
+      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+      "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
+      "license": "MIT"
     },
     "node_modules/acorn": {
-      "version": "8.11.3",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "version": "8.12.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -2678,6 +2472,22 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
     "node_modules/ansi-align": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -2785,40 +2595,42 @@
       }
     },
     "node_modules/astro": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/astro/-/astro-4.7.0.tgz",
-      "integrity": "sha512-YC24nK6/UNelVob+4RoJPDgZJdpaJarIU85D/UxCrlsYJlLqrW8hXq7A9T6BXNs+puF9pJrYlqaJNCRO+928XA==",
+      "version": "4.14.3",
+      "resolved": "https://registry.npmjs.org/astro/-/astro-4.14.3.tgz",
+      "integrity": "sha512-+Hox1EhiS5iHy4pfZaLidpD9x7WVAcgGgjTo1JOYSQ0+a2ZA9mbLtGVEXbUeeYweviNc0ZNHMnI4r9S2e8xnXg==",
+      "license": "MIT",
       "dependencies": {
-        "@astrojs/compiler": "^2.7.1",
-        "@astrojs/internal-helpers": "0.4.0",
-        "@astrojs/markdown-remark": "5.1.0",
+        "@astrojs/compiler": "^2.10.3",
+        "@astrojs/internal-helpers": "0.4.1",
+        "@astrojs/markdown-remark": "5.2.0",
         "@astrojs/telemetry": "3.1.0",
-        "@babel/core": "^7.24.4",
-        "@babel/generator": "^7.24.4",
-        "@babel/parser": "^7.24.4",
-        "@babel/plugin-transform-react-jsx": "^7.23.4",
-        "@babel/traverse": "^7.24.1",
-        "@babel/types": "^7.24.0",
+        "@babel/core": "^7.25.2",
+        "@babel/generator": "^7.25.0",
+        "@babel/parser": "^7.25.3",
+        "@babel/plugin-transform-react-jsx": "^7.25.2",
+        "@babel/traverse": "^7.25.3",
+        "@babel/types": "^7.25.2",
+        "@oslojs/encoding": "^0.4.1",
+        "@rollup/pluginutils": "^5.1.0",
         "@types/babel__core": "^7.20.5",
         "@types/cookie": "^0.6.0",
-        "acorn": "^8.11.3",
+        "acorn": "^8.12.1",
         "aria-query": "^5.3.0",
-        "axobject-query": "^4.0.0",
-        "boxen": "^7.1.1",
-        "chokidar": "^3.6.0",
+        "axobject-query": "^4.1.0",
+        "boxen": "7.1.1",
         "ci-info": "^4.0.0",
-        "clsx": "^2.1.0",
+        "clsx": "^2.1.1",
         "common-ancestor-path": "^1.0.1",
         "cookie": "^0.6.0",
         "cssesc": "^3.0.0",
-        "debug": "^4.3.4",
+        "debug": "^4.3.6",
         "deterministic-object-hash": "^2.0.2",
         "devalue": "^5.0.0",
         "diff": "^5.2.0",
         "dlv": "^1.1.3",
         "dset": "^3.1.3",
-        "es-module-lexer": "^1.5.0",
-        "esbuild": "^0.20.2",
+        "es-module-lexer": "^1.5.4",
+        "esbuild": "^0.21.5",
         "estree-walker": "^3.0.3",
         "execa": "^8.0.1",
         "fast-glob": "^3.3.2",
@@ -2829,29 +2641,32 @@
         "http-cache-semantics": "^4.1.1",
         "js-yaml": "^4.1.0",
         "kleur": "^4.1.5",
-        "magic-string": "^0.30.10",
+        "magic-string": "^0.30.11",
+        "micromatch": "^4.0.7",
         "mrmime": "^2.0.0",
+        "neotraverse": "^0.6.18",
         "ora": "^8.0.1",
-        "p-limit": "^5.0.0",
+        "p-limit": "^6.1.0",
         "p-queue": "^8.0.1",
         "path-to-regexp": "^6.2.2",
-        "preferred-pm": "^3.1.3",
+        "preferred-pm": "^4.0.0",
         "prompts": "^2.4.2",
         "rehype": "^13.0.1",
-        "resolve": "^1.22.8",
-        "semver": "^7.6.0",
-        "shiki": "^1.3.0",
-        "string-width": "^7.1.0",
+        "semver": "^7.6.3",
+        "shiki": "^1.14.1",
+        "string-width": "^7.2.0",
         "strip-ansi": "^7.1.0",
-        "tsconfck": "^3.0.3",
+        "tsconfck": "^3.1.1",
         "unist-util-visit": "^5.0.0",
-        "vfile": "^6.0.1",
-        "vite": "^5.2.10",
+        "vfile": "^6.0.2",
+        "vite": "^5.4.1",
         "vitefu": "^0.2.5",
-        "which-pm": "^2.1.1",
+        "which-pm": "^3.0.0",
+        "xxhash-wasm": "^1.0.2",
         "yargs-parser": "^21.1.1",
-        "zod": "^3.23.0",
-        "zod-to-json-schema": "^3.22.5"
+        "zod": "^3.23.8",
+        "zod-to-json-schema": "^3.23.2",
+        "zod-to-ts": "^1.2.0"
       },
       "bin": {
         "astro": "astro.js"
@@ -2866,13 +2681,358 @@
       }
     },
     "node_modules/astro-meta-tags": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/astro-meta-tags/-/astro-meta-tags-0.1.3.tgz",
-      "integrity": "sha512-hQ2JK9deBBPI94umeQxnj2hrs1hJ9pJcnqK8XjyZNnBq6pHefR5dpRXTzHDoxr1V4TjIQho0P9F2NG7JdaQhHA==",
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/astro-meta-tags/-/astro-meta-tags-0.3.0.tgz",
+      "integrity": "sha512-BA8jZncOGz1DkjK4AQHt8mzXurGwhR96CZZlx2wLemRUqKTxft4N2Arg8DK/s49G/9F0g4TuxmiObVkIv/DX8g==",
       "peerDependencies": {
         "astro": "^4.0.0"
       }
     },
+    "node_modules/astro/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/android-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+      "cpu": [
+        "arm"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/android-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/android-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/darwin-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+      "cpu": [
+        "arm"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+      "cpu": [
+        "ia32"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-loong64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+      "cpu": [
+        "loong64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+      "cpu": [
+        "mips64el"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-s390x": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+      "cpu": [
+        "s390x"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/linux-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/sunos-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/win32-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/win32-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+      "cpu": [
+        "ia32"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/astro/node_modules/@esbuild/win32-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/astro/node_modules/@types/node": {
       "version": "20.10.5",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz",
@@ -2883,13 +3043,61 @@
         "undici-types": "~5.26.4"
       }
     },
+    "node_modules/astro/node_modules/esbuild": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.21.5",
+        "@esbuild/android-arm": "0.21.5",
+        "@esbuild/android-arm64": "0.21.5",
+        "@esbuild/android-x64": "0.21.5",
+        "@esbuild/darwin-arm64": "0.21.5",
+        "@esbuild/darwin-x64": "0.21.5",
+        "@esbuild/freebsd-arm64": "0.21.5",
+        "@esbuild/freebsd-x64": "0.21.5",
+        "@esbuild/linux-arm": "0.21.5",
+        "@esbuild/linux-arm64": "0.21.5",
+        "@esbuild/linux-ia32": "0.21.5",
+        "@esbuild/linux-loong64": "0.21.5",
+        "@esbuild/linux-mips64el": "0.21.5",
+        "@esbuild/linux-ppc64": "0.21.5",
+        "@esbuild/linux-riscv64": "0.21.5",
+        "@esbuild/linux-s390x": "0.21.5",
+        "@esbuild/linux-x64": "0.21.5",
+        "@esbuild/netbsd-x64": "0.21.5",
+        "@esbuild/openbsd-x64": "0.21.5",
+        "@esbuild/sunos-x64": "0.21.5",
+        "@esbuild/win32-arm64": "0.21.5",
+        "@esbuild/win32-ia32": "0.21.5",
+        "@esbuild/win32-x64": "0.21.5"
+      }
+    },
+    "node_modules/astro/node_modules/semver": {
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/astro/node_modules/vite": {
-      "version": "5.2.10",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz",
-      "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
       "dependencies": {
-        "esbuild": "^0.20.1",
-        "postcss": "^8.4.38",
+        "esbuild": "^0.21.3",
+        "postcss": "^8.4.41",
         "rollup": "^4.13.0"
       },
       "bin": {
@@ -2909,6 +3117,7 @@
         "less": "*",
         "lightningcss": "^1.21.0",
         "sass": "*",
+        "sass-embedded": "*",
         "stylus": "*",
         "sugarss": "*",
         "terser": "^5.4.0"
@@ -2926,6 +3135,9 @@
         "sass": {
           "optional": true
         },
+        "sass-embedded": {
+          "optional": true
+        },
         "stylus": {
           "optional": true
         },
@@ -2951,9 +3163,9 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.16",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
-      "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+      "version": "10.4.19",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+      "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
       "funding": [
         {
           "type": "opencollective",
@@ -2969,9 +3181,9 @@
         }
       ],
       "dependencies": {
-        "browserslist": "^4.21.10",
-        "caniuse-lite": "^1.0.30001538",
-        "fraction.js": "^4.3.6",
+        "browserslist": "^4.23.0",
+        "caniuse-lite": "^1.0.30001599",
+        "fraction.js": "^4.3.7",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
@@ -2987,11 +3199,11 @@
       }
     },
     "node_modules/axobject-query": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
-      "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
-      "dependencies": {
-        "dequal": "^2.0.3"
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/bail": {
@@ -3081,9 +3293,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.22.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
-      "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+      "version": "4.23.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
+      "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
       "funding": [
         {
           "type": "opencollective",
@@ -3099,10 +3311,10 @@
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001565",
-        "electron-to-chromium": "^1.4.601",
+        "caniuse-lite": "^1.0.30001640",
+        "electron-to-chromium": "^1.4.820",
         "node-releases": "^2.0.14",
-        "update-browserslist-db": "^1.0.13"
+        "update-browserslist-db": "^1.1.0"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -3123,9 +3335,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001633",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001633.tgz",
-      "integrity": "sha512-6sT0yf/z5jqf8tISAgpJDrmwOpLsrpnyCdD/lOZKvKkkJK4Dn0X5i7KF7THEZhOq+30bmhwBlNEaqPUiHiKtZg==",
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
       "funding": [
         {
           "type": "opencollective",
@@ -3139,7 +3351,8 @@
           "type": "github",
           "url": "https://github.com/sponsors/ai"
         }
-      ]
+      ],
+      "license": "CC-BY-4.0"
     },
     "node_modules/ccount": {
       "version": "2.0.1",
@@ -3462,9 +3675,9 @@
       }
     },
     "node_modules/css-blank-pseudo": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz",
-      "integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz",
+      "integrity": "sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==",
       "funding": [
         {
           "type": "github",
@@ -3486,9 +3699,9 @@
       }
     },
     "node_modules/css-has-pseudo": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.1.tgz",
-      "integrity": "sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz",
+      "integrity": "sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==",
       "funding": [
         {
           "type": "github",
@@ -3500,7 +3713,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.1",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13",
         "postcss-value-parser": "^4.2.0"
       },
@@ -3533,9 +3746,9 @@
       }
     },
     "node_modules/cssdb": {
-      "version": "7.10.0",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz",
-      "integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.1.0.tgz",
+      "integrity": "sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew==",
       "funding": [
         {
           "type": "opencollective",
@@ -3559,9 +3772,9 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -3658,14 +3871,21 @@
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.615",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz",
-      "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng=="
+      "version": "1.4.828",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz",
+      "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw=="
     },
     "node_modules/emmet": {
       "version": "2.4.7",
       "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.7.tgz",
       "integrity": "sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==",
+      "license": "MIT",
+      "workspaces": [
+        "./packages/scanner",
+        "./packages/abbreviation",
+        "./packages/css-abbreviation",
+        "./"
+      ],
       "dependencies": {
         "@emmetio/abbreviation": "^2.3.3",
         "@emmetio/css-abbreviation": "^2.1.8"
@@ -3688,51 +3908,14 @@
       }
     },
     "node_modules/es-module-lexer": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
-      "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA=="
-    },
-    "node_modules/esbuild": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
-      "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
-      "hasInstallScript": true,
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.20.2",
-        "@esbuild/android-arm": "0.20.2",
-        "@esbuild/android-arm64": "0.20.2",
-        "@esbuild/android-x64": "0.20.2",
-        "@esbuild/darwin-arm64": "0.20.2",
-        "@esbuild/darwin-x64": "0.20.2",
-        "@esbuild/freebsd-arm64": "0.20.2",
-        "@esbuild/freebsd-x64": "0.20.2",
-        "@esbuild/linux-arm": "0.20.2",
-        "@esbuild/linux-arm64": "0.20.2",
-        "@esbuild/linux-ia32": "0.20.2",
-        "@esbuild/linux-loong64": "0.20.2",
-        "@esbuild/linux-mips64el": "0.20.2",
-        "@esbuild/linux-ppc64": "0.20.2",
-        "@esbuild/linux-riscv64": "0.20.2",
-        "@esbuild/linux-s390x": "0.20.2",
-        "@esbuild/linux-x64": "0.20.2",
-        "@esbuild/netbsd-x64": "0.20.2",
-        "@esbuild/openbsd-x64": "0.20.2",
-        "@esbuild/sunos-x64": "0.20.2",
-        "@esbuild/win32-arm64": "0.20.2",
-        "@esbuild/win32-ia32": "0.20.2",
-        "@esbuild/win32-x64": "0.20.2"
-      }
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+      "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
     },
     "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
       "engines": {
         "node": ">=6"
       }
@@ -3808,6 +3991,12 @@
         "node": ">=0.10.0"
       }
     },
+    "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-glob": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -3823,6 +4012,12 @@
         "node": ">=8.6.0"
       }
     },
+    "node_modules/fast-uri": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "license": "MIT"
+    },
     "node_modules/fastq": {
       "version": "1.16.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
@@ -3843,15 +4038,23 @@
       }
     },
     "node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
       "dependencies": {
-        "locate-path": "^6.0.0",
+        "locate-path": "^5.0.0",
         "path-exists": "^4.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=8"
+      }
+    },
+    "node_modules/find-up-simple": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
+      "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==",
+      "engines": {
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -3899,14 +4102,6 @@
         "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
       }
     },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4016,17 +4211,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/hasown": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
-      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/hast-util-from-html": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz",
@@ -4223,9 +4407,9 @@
       }
     },
     "node_modules/iconoir": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.3.0.tgz",
-      "integrity": "sha512-e/Kop2l4Hsc2Aq95paLAP1rHVTpIxVcKV/G/hMOd3GzFI/vIYEYYRSef/HDC7Ru1rH7KP7BFGuCO5FeLLP5wEA==",
+      "version": "7.7.0",
+      "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.7.0.tgz",
+      "integrity": "sha512-OsWErkUrvFW+EQAUkSw1JgVXGCIynVgCGUtrI7PzGcVmhfryFCbWHZceoGRtI2BMfp28J6HxethR86V58sJfnw==",
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/iconoir"
@@ -4257,39 +4441,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-buffer": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
-      "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-docker": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
@@ -4454,6 +4605,12 @@
         "node": ">=4"
       }
     },
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "license": "MIT"
+    },
     "node_modules/json5": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -4468,7 +4625,8 @@
     "node_modules/jsonc-parser": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
-      "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
+      "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
+      "license": "MIT"
     },
     "node_modules/kind-of": {
       "version": "6.0.3",
@@ -4487,9 +4645,9 @@
       }
     },
     "node_modules/lite-youtube-embed": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/lite-youtube-embed/-/lite-youtube-embed-0.2.0.tgz",
-      "integrity": "sha512-XXXAk5sbvtjjwbie3XG+6HppgTm1HTGL/Uk9z9NkJH53o7puZLur434heHzAjkS60hZB3vT4ls25zl5rMiX4EA=="
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/lite-youtube-embed/-/lite-youtube-embed-0.3.2.tgz",
+      "integrity": "sha512-b1dgKyF4PHhinonmr3PB172Nj0qQgA/7DE9EmeIXHR1ksnFEC2olWjNJyJGdsN2cleKHRjjsmrziKlwXtPlmLQ=="
     },
     "node_modules/load-yaml-file": {
       "version": "0.2.0",
@@ -4526,19 +4684,22 @@
       }
     },
     "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "dependencies": {
-        "p-locate": "^5.0.0"
+        "p-locate": "^4.1.0"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "license": "MIT"
+    },
     "node_modules/log-symbols": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
@@ -4594,11 +4755,11 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.30.10",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
-      "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+      "version": "0.30.11",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
       "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.4.15"
+        "@jridgewell/sourcemap-codec": "^1.5.0"
       }
     },
     "node_modules/markdown-table": {
@@ -4651,9 +4812,9 @@
       }
     },
     "node_modules/mdast-util-from-markdown": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-      "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+      "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
       "dependencies": {
         "@types/mdast": "^4.0.0",
         "@types/unist": "^3.0.0",
@@ -4931,9 +5092,9 @@
       }
     },
     "node_modules/micromark-extension-gfm-autolink-literal": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz",
-      "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+      "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
       "dependencies": {
         "micromark-util-character": "^2.0.0",
         "micromark-util-sanitize-uri": "^2.0.0",
@@ -4946,9 +5107,9 @@
       }
     },
     "node_modules/micromark-extension-gfm-footnote": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz",
-      "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+      "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
       "dependencies": {
         "devlop": "^1.0.0",
         "micromark-core-commonmark": "^2.0.0",
@@ -4965,9 +5126,9 @@
       }
     },
     "node_modules/micromark-extension-gfm-strikethrough": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz",
-      "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+      "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
       "dependencies": {
         "devlop": "^1.0.0",
         "micromark-util-chunked": "^2.0.0",
@@ -4982,9 +5143,9 @@
       }
     },
     "node_modules/micromark-extension-gfm-table": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz",
-      "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz",
+      "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==",
       "dependencies": {
         "devlop": "^1.0.0",
         "micromark-factory-space": "^2.0.0",
@@ -5010,9 +5171,9 @@
       }
     },
     "node_modules/micromark-extension-gfm-task-list-item": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz",
-      "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+      "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
       "dependencies": {
         "devlop": "^1.0.0",
         "micromark-factory-space": "^2.0.0",
@@ -5380,11 +5541,11 @@
       ]
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
       "dependencies": {
-        "braces": "^3.0.2",
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
       },
       "engines": {
@@ -5418,7 +5579,8 @@
     "node_modules/muggle-string": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
-      "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="
+      "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+      "license": "MIT"
     },
     "node_modules/nanoid": {
       "version": "3.3.7",
@@ -5437,12 +5599,20 @@
         "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
+    "node_modules/neotraverse": {
+      "version": "0.6.18",
+      "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+      "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
     "node_modules/nlcst-to-string": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz",
-      "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+      "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
       "dependencies": {
-        "@types/nlcst": "^1.0.0"
+        "@types/nlcst": "^2.0.0"
       },
       "funding": {
         "type": "opencollective",
@@ -5543,11 +5713,11 @@
       }
     },
     "node_modules/p-limit": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
-      "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.1.0.tgz",
+      "integrity": "sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==",
       "dependencies": {
-        "yocto-queue": "^1.0.0"
+        "yocto-queue": "^1.1.1"
       },
       "engines": {
         "node": ">=18"
@@ -5557,39 +5727,25 @@
       }
     },
     "node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "dependencies": {
-        "p-limit": "^3.0.2"
+        "p-limit": "^2.2.0"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/p-locate/node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "dependencies": {
-        "yocto-queue": "^0.1.0"
+        "p-try": "^2.0.0"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate/node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "engines": {
-        "node": ">=10"
+        "node": ">=6"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -5630,13 +5786,16 @@
       }
     },
     "node_modules/parse-latin": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz",
-      "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
+      "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
       "dependencies": {
-        "nlcst-to-string": "^3.0.0",
-        "unist-util-modify-children": "^3.0.0",
-        "unist-util-visit-children": "^2.0.0"
+        "@types/nlcst": "^2.0.0",
+        "@types/unist": "^3.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unist-util-modify-children": "^4.0.0",
+        "unist-util-visit-children": "^3.0.0",
+        "vfile": "^6.0.0"
       },
       "funding": {
         "type": "github",
@@ -5657,7 +5816,8 @@
     "node_modules/path-browserify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
-      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "license": "MIT"
     },
     "node_modules/path-exists": {
       "version": "4.0.0",
@@ -5675,20 +5835,15 @@
         "node": ">=8"
       }
     },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
-    },
     "node_modules/path-to-regexp": {
       "version": "6.2.2",
       "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
       "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw=="
     },
     "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
     },
     "node_modules/picomatch": {
       "version": "2.3.1",
@@ -5720,58 +5875,10 @@
         "node": ">=8"
       }
     },
-    "node_modules/pkg-dir/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/postcss": {
-      "version": "8.4.38",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
-      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -5788,7 +5895,7 @@
       ],
       "dependencies": {
         "nanoid": "^3.3.7",
-        "picocolors": "^1.0.0",
+        "picocolors": "^1.0.1",
         "source-map-js": "^1.2.0"
       },
       "engines": {
@@ -5796,19 +5903,25 @@
       }
     },
     "node_modules/postcss-attribute-case-insensitive": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz",
-      "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==",
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz",
+      "integrity": "sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "dependencies": {
-        "postcss-selector-parser": "^6.0.10"
+        "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
-      },
       "peerDependencies": {
         "postcss": "^8.4"
       }
@@ -5828,9 +5941,9 @@
       }
     },
     "node_modules/postcss-color-functional-notation": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.3.tgz",
-      "integrity": "sha512-2jBr3H0sk3qGh/3BkmLsOKcYyVfSlM1K2QQYVU7eW5mkg7ZOQ4aU/Rtbh7vJ9FxAfgf8iHRwXBsQkHqUxzTkXw==",
+      "version": "6.0.14",
+      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.14.tgz",
+      "integrity": "sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A==",
       "funding": [
         {
           "type": "github",
@@ -5842,10 +5955,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -5855,9 +5969,9 @@
       }
     },
     "node_modules/postcss-color-hex-alpha": {
-      "version": "9.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz",
-      "integrity": "sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==",
+      "version": "9.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz",
+      "integrity": "sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==",
       "funding": [
         {
           "type": "github",
@@ -5869,6 +5983,7 @@
         }
       ],
       "dependencies": {
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -5879,9 +5994,9 @@
       }
     },
     "node_modules/postcss-color-rebeccapurple": {
-      "version": "9.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.2.tgz",
-      "integrity": "sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==",
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.3.tgz",
+      "integrity": "sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==",
       "funding": [
         {
           "type": "github",
@@ -5893,6 +6008,7 @@
         }
       ],
       "dependencies": {
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -5903,9 +6019,9 @@
       }
     },
     "node_modules/postcss-custom-media": {
-      "version": "10.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz",
-      "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==",
+      "version": "10.0.8",
+      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.8.tgz",
+      "integrity": "sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ==",
       "funding": [
         {
           "type": "github",
@@ -5917,10 +6033,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.5",
-        "@csstools/css-parser-algorithms": "^2.3.2",
-        "@csstools/css-tokenizer": "^2.2.1",
-        "@csstools/media-query-list-parser": "^2.1.5"
+        "@csstools/cascade-layer-name-parser": "^1.0.13",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/media-query-list-parser": "^2.1.13"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -5930,9 +6046,9 @@
       }
     },
     "node_modules/postcss-custom-properties": {
-      "version": "13.3.3",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.3.tgz",
-      "integrity": "sha512-xLmILb2R83aG4X++iVFg8TWadOlc45xiyFHRZD6Yhhu2igrTHXL6C75AEWqx6k9lxrr9sK5rcfUI9JvTCxBTvA==",
+      "version": "13.3.12",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.12.tgz",
+      "integrity": "sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA==",
       "funding": [
         {
           "type": "github",
@@ -5944,9 +6060,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.6",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
+        "@csstools/cascade-layer-name-parser": "^1.0.13",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -5957,9 +6074,9 @@
       }
     },
     "node_modules/postcss-custom-selectors": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz",
-      "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==",
+      "version": "7.1.12",
+      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.12.tgz",
+      "integrity": "sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g==",
       "funding": [
         {
           "type": "github",
@@ -5971,10 +6088,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.5",
-        "@csstools/css-parser-algorithms": "^2.3.2",
-        "@csstools/css-tokenizer": "^2.2.1",
-        "postcss-selector-parser": "^6.0.13"
+        "@csstools/cascade-layer-name-parser": "^1.0.13",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "postcss-selector-parser": "^6.1.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -6008,9 +6125,9 @@
       }
     },
     "node_modules/postcss-double-position-gradients": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.3.tgz",
-      "integrity": "sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==",
+      "version": "5.0.7",
+      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.7.tgz",
+      "integrity": "sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg==",
       "funding": [
         {
           "type": "github",
@@ -6022,7 +6139,8 @@
         }
       ],
       "dependencies": {
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -6110,9 +6228,9 @@
       }
     },
     "node_modules/postcss-image-set-function": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.2.tgz",
-      "integrity": "sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==",
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.3.tgz",
+      "integrity": "sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==",
       "funding": [
         {
           "type": "github",
@@ -6124,6 +6242,7 @@
         }
       ],
       "dependencies": {
+        "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -6134,9 +6253,9 @@
       }
     },
     "node_modules/postcss-lab-function": {
-      "version": "6.0.8",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.8.tgz",
-      "integrity": "sha512-agYs7R9Z5gnX837fCkH8TEQIHdhyDsMPPnpuuENt/dxoDVAykBaqbdxIN4DagOj+ZQo20iRNNJeY3MsFcdI6Sg==",
+      "version": "6.0.19",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.19.tgz",
+      "integrity": "sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g==",
       "funding": [
         {
           "type": "github",
@@ -6148,10 +6267,11 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^1.5.0",
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.3"
+        "@csstools/css-color-parser": "^2.0.4",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/utilities": "^1.0.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -6185,9 +6305,9 @@
       }
     },
     "node_modules/postcss-nesting": {
-      "version": "12.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.2.tgz",
-      "integrity": "sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==",
+      "version": "12.1.5",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz",
+      "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==",
       "funding": [
         {
           "type": "github",
@@ -6199,8 +6319,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.1",
-        "postcss-selector-parser": "^6.0.13"
+        "@csstools/selector-resolve-nested": "^1.1.0",
+        "@csstools/selector-specificity": "^3.1.1",
+        "postcss-selector-parser": "^6.1.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -6287,9 +6408,9 @@
       }
     },
     "node_modules/postcss-preset-env": {
-      "version": "9.3.0",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz",
-      "integrity": "sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==",
+      "version": "9.6.0",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.6.0.tgz",
+      "integrity": "sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA==",
       "funding": [
         {
           "type": "github",
@@ -6301,66 +6422,67 @@
         }
       ],
       "dependencies": {
-        "@csstools/postcss-cascade-layers": "^4.0.1",
-        "@csstools/postcss-color-function": "^3.0.7",
-        "@csstools/postcss-color-mix-function": "^2.0.7",
-        "@csstools/postcss-exponential-functions": "^1.0.1",
-        "@csstools/postcss-font-format-keywords": "^3.0.0",
-        "@csstools/postcss-gamut-mapping": "^1.0.0",
-        "@csstools/postcss-gradients-interpolation-method": "^4.0.7",
-        "@csstools/postcss-hwb-function": "^3.0.6",
-        "@csstools/postcss-ic-unit": "^3.0.2",
-        "@csstools/postcss-initial": "^1.0.0",
-        "@csstools/postcss-is-pseudo-class": "^4.0.3",
-        "@csstools/postcss-logical-float-and-clear": "^2.0.0",
-        "@csstools/postcss-logical-overflow": "^1.0.0",
-        "@csstools/postcss-logical-overscroll-behavior": "^1.0.0",
-        "@csstools/postcss-logical-resize": "^2.0.0",
-        "@csstools/postcss-logical-viewport-units": "^2.0.3",
-        "@csstools/postcss-media-minmax": "^1.1.0",
-        "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3",
-        "@csstools/postcss-nested-calc": "^3.0.0",
-        "@csstools/postcss-normalize-display-values": "^3.0.1",
-        "@csstools/postcss-oklab-function": "^3.0.7",
-        "@csstools/postcss-progressive-custom-properties": "^3.0.2",
-        "@csstools/postcss-relative-color-syntax": "^2.0.7",
-        "@csstools/postcss-scope-pseudo-class": "^3.0.0",
-        "@csstools/postcss-stepped-value-functions": "^3.0.2",
-        "@csstools/postcss-text-decoration-shorthand": "^3.0.3",
-        "@csstools/postcss-trigonometric-functions": "^3.0.2",
-        "@csstools/postcss-unset-value": "^3.0.0",
-        "autoprefixer": "^10.4.16",
-        "browserslist": "^4.22.1",
-        "css-blank-pseudo": "^6.0.0",
-        "css-has-pseudo": "^6.0.0",
-        "css-prefers-color-scheme": "^9.0.0",
-        "cssdb": "^7.9.0",
-        "postcss-attribute-case-insensitive": "^6.0.2",
+        "@csstools/postcss-cascade-layers": "^4.0.6",
+        "@csstools/postcss-color-function": "^3.0.19",
+        "@csstools/postcss-color-mix-function": "^2.0.19",
+        "@csstools/postcss-content-alt-text": "^1.0.0",
+        "@csstools/postcss-exponential-functions": "^1.0.9",
+        "@csstools/postcss-font-format-keywords": "^3.0.2",
+        "@csstools/postcss-gamut-mapping": "^1.0.11",
+        "@csstools/postcss-gradients-interpolation-method": "^4.0.20",
+        "@csstools/postcss-hwb-function": "^3.0.18",
+        "@csstools/postcss-ic-unit": "^3.0.7",
+        "@csstools/postcss-initial": "^1.0.1",
+        "@csstools/postcss-is-pseudo-class": "^4.0.8",
+        "@csstools/postcss-light-dark-function": "^1.0.8",
+        "@csstools/postcss-logical-float-and-clear": "^2.0.1",
+        "@csstools/postcss-logical-overflow": "^1.0.1",
+        "@csstools/postcss-logical-overscroll-behavior": "^1.0.1",
+        "@csstools/postcss-logical-resize": "^2.0.1",
+        "@csstools/postcss-logical-viewport-units": "^2.0.11",
+        "@csstools/postcss-media-minmax": "^1.1.8",
+        "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.11",
+        "@csstools/postcss-nested-calc": "^3.0.2",
+        "@csstools/postcss-normalize-display-values": "^3.0.2",
+        "@csstools/postcss-oklab-function": "^3.0.19",
+        "@csstools/postcss-progressive-custom-properties": "^3.3.0",
+        "@csstools/postcss-relative-color-syntax": "^2.0.19",
+        "@csstools/postcss-scope-pseudo-class": "^3.0.1",
+        "@csstools/postcss-stepped-value-functions": "^3.0.10",
+        "@csstools/postcss-text-decoration-shorthand": "^3.0.7",
+        "@csstools/postcss-trigonometric-functions": "^3.0.10",
+        "@csstools/postcss-unset-value": "^3.0.1",
+        "autoprefixer": "^10.4.19",
+        "browserslist": "^4.23.1",
+        "css-blank-pseudo": "^6.0.2",
+        "css-has-pseudo": "^6.0.5",
+        "css-prefers-color-scheme": "^9.0.1",
+        "cssdb": "^8.1.0",
+        "postcss-attribute-case-insensitive": "^6.0.3",
         "postcss-clamp": "^4.1.0",
-        "postcss-color-functional-notation": "^6.0.2",
-        "postcss-color-hex-alpha": "^9.0.2",
-        "postcss-color-rebeccapurple": "^9.0.1",
-        "postcss-custom-media": "^10.0.2",
-        "postcss-custom-properties": "^13.3.2",
-        "postcss-custom-selectors": "^7.1.6",
-        "postcss-dir-pseudo-class": "^8.0.0",
-        "postcss-double-position-gradients": "^5.0.2",
-        "postcss-focus-visible": "^9.0.0",
-        "postcss-focus-within": "^8.0.0",
+        "postcss-color-functional-notation": "^6.0.14",
+        "postcss-color-hex-alpha": "^9.0.4",
+        "postcss-color-rebeccapurple": "^9.0.3",
+        "postcss-custom-media": "^10.0.8",
+        "postcss-custom-properties": "^13.3.12",
+        "postcss-custom-selectors": "^7.1.12",
+        "postcss-dir-pseudo-class": "^8.0.1",
+        "postcss-double-position-gradients": "^5.0.7",
+        "postcss-focus-visible": "^9.0.1",
+        "postcss-focus-within": "^8.0.1",
         "postcss-font-variant": "^5.0.0",
-        "postcss-gap-properties": "^5.0.0",
-        "postcss-image-set-function": "^6.0.1",
-        "postcss-lab-function": "^6.0.7",
-        "postcss-logical": "^7.0.0",
-        "postcss-nesting": "^12.0.1",
+        "postcss-gap-properties": "^5.0.1",
+        "postcss-image-set-function": "^6.0.3",
+        "postcss-lab-function": "^6.0.19",
+        "postcss-logical": "^7.0.1",
+        "postcss-nesting": "^12.1.5",
         "postcss-opacity-percentage": "^2.0.0",
-        "postcss-overflow-shorthand": "^5.0.0",
+        "postcss-overflow-shorthand": "^5.0.1",
         "postcss-page-break": "^3.0.4",
-        "postcss-place": "^9.0.0",
-        "postcss-pseudo-class-any-link": "^9.0.0",
+        "postcss-place": "^9.0.1",
+        "postcss-pseudo-class-any-link": "^9.0.2",
         "postcss-replace-overflow-wrap": "^4.0.0",
-        "postcss-selector-not": "^7.0.1",
-        "postcss-value-parser": "^4.2.0"
+        "postcss-selector-not": "^7.0.2"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -6370,9 +6492,9 @@
       }
     },
     "node_modules/postcss-pseudo-class-any-link": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz",
-      "integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz",
+      "integrity": "sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==",
       "funding": [
         {
           "type": "github",
@@ -6402,27 +6524,33 @@
       }
     },
     "node_modules/postcss-selector-not": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz",
-      "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz",
+      "integrity": "sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "dependencies": {
-        "postcss-selector-parser": "^6.0.10"
+        "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
-      },
       "peerDependencies": {
         "postcss": "^8.4"
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.15",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
-      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
       "dependencies": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
@@ -6437,29 +6565,16 @@
       "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
     },
     "node_modules/preferred-pm": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz",
-      "integrity": "sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.0.0.tgz",
+      "integrity": "sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==",
       "dependencies": {
-        "find-up": "^5.0.0",
+        "find-up-simple": "^1.0.0",
         "find-yarn-workspace-root2": "1.2.16",
-        "path-exists": "^4.0.0",
-        "which-pm": "2.0.0"
+        "which-pm": "^3.0.0"
       },
       "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/preferred-pm/node_modules/which-pm": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz",
-      "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==",
-      "dependencies": {
-        "load-yaml-file": "^0.2.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8.15"
+        "node": ">=18.12"
       }
     },
     "node_modules/prettier": {
@@ -6670,16 +6785,17 @@
       }
     },
     "node_modules/remark-smartypants": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-2.1.0.tgz",
-      "integrity": "sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
+      "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
       "dependencies": {
-        "retext": "^8.1.0",
-        "retext-smartypants": "^5.2.0",
+        "retext": "^9.0.0",
+        "retext-smartypants": "^6.0.0",
+        "unified": "^11.0.4",
         "unist-util-visit": "^5.0.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/remark-stringify": {
@@ -6699,7 +6815,8 @@
     "node_modules/request-light": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
-      "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="
+      "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
+      "license": "MIT"
     },
     "node_modules/require-directory": {
       "version": "2.1.1",
@@ -6709,20 +6826,13 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/resolve": {
-      "version": "1.22.8",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
-      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
-      "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
     "node_modules/restore-cursor": {
@@ -6768,14 +6878,14 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
     },
     "node_modules/retext": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz",
-      "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
+      "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
       "dependencies": {
-        "@types/nlcst": "^1.0.0",
-        "retext-latin": "^3.0.0",
-        "retext-stringify": "^3.0.0",
-        "unified": "^10.0.0"
+        "@types/nlcst": "^2.0.0",
+        "retext-latin": "^4.0.0",
+        "retext-stringify": "^4.0.0",
+        "unified": "^11.0.0"
       },
       "funding": {
         "type": "opencollective",
@@ -6783,77 +6893,13 @@
       }
     },
     "node_modules/retext-latin": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz",
-      "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
+      "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
       "dependencies": {
-        "@types/nlcst": "^1.0.0",
-        "parse-latin": "^5.0.0",
-        "unherit": "^3.0.0",
-        "unified": "^10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-latin/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
-    "node_modules/retext-latin/node_modules/unified": {
-      "version": "10.1.2",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
-      "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "bail": "^2.0.0",
-        "extend": "^3.0.0",
-        "is-buffer": "^2.0.0",
-        "is-plain-obj": "^4.0.0",
-        "trough": "^2.0.0",
-        "vfile": "^5.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-latin/node_modules/unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-latin/node_modules/vfile": {
-      "version": "5.3.7",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
-      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "is-buffer": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "vfile-message": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-latin/node_modules/vfile-message": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
-      "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0"
+        "@types/nlcst": "^2.0.0",
+        "parse-latin": "^7.0.0",
+        "unified": "^11.0.0"
       },
       "funding": {
         "type": "opencollective",
@@ -6861,116 +6907,13 @@
       }
     },
     "node_modules/retext-smartypants": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-5.2.0.tgz",
-      "integrity": "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.1.0.tgz",
+      "integrity": "sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==",
       "dependencies": {
-        "@types/nlcst": "^1.0.0",
-        "nlcst-to-string": "^3.0.0",
-        "unified": "^10.0.0",
-        "unist-util-visit": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
-    "node_modules/retext-smartypants/node_modules/unified": {
-      "version": "10.1.2",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
-      "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "bail": "^2.0.0",
-        "extend": "^3.0.0",
-        "is-buffer": "^2.0.0",
-        "is-plain-obj": "^4.0.0",
-        "trough": "^2.0.0",
-        "vfile": "^5.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/unist-util-is": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
-      "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/unist-util-visit": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
-      "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-is": "^5.0.0",
-        "unist-util-visit-parents": "^5.1.1"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/unist-util-visit-parents": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
-      "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-is": "^5.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/vfile": {
-      "version": "5.3.7",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
-      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "is-buffer": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "vfile-message": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-smartypants/node_modules/vfile-message": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
-      "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0"
+        "@types/nlcst": "^2.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unist-util-visit": "^5.0.0"
       },
       "funding": {
         "type": "opencollective",
@@ -6978,139 +6921,13 @@
       }
     },
     "node_modules/retext-stringify": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz",
-      "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
+      "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
       "dependencies": {
-        "@types/nlcst": "^1.0.0",
-        "nlcst-to-string": "^3.0.0",
-        "unified": "^10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-stringify/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
-    "node_modules/retext-stringify/node_modules/unified": {
-      "version": "10.1.2",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
-      "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "bail": "^2.0.0",
-        "extend": "^3.0.0",
-        "is-buffer": "^2.0.0",
-        "is-plain-obj": "^4.0.0",
-        "trough": "^2.0.0",
-        "vfile": "^5.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-stringify/node_modules/unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-stringify/node_modules/vfile": {
-      "version": "5.3.7",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
-      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "is-buffer": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "vfile-message": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext-stringify/node_modules/vfile-message": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
-      "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
-    "node_modules/retext/node_modules/unified": {
-      "version": "10.1.2",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
-      "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "bail": "^2.0.0",
-        "extend": "^3.0.0",
-        "is-buffer": "^2.0.0",
-        "is-plain-obj": "^4.0.0",
-        "trough": "^2.0.0",
-        "vfile": "^5.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext/node_modules/unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext/node_modules/vfile": {
-      "version": "5.3.7",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
-      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "is-buffer": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "vfile-message": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/retext/node_modules/vfile-message": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
-      "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "unist-util-stringify-position": "^3.0.0"
+        "@types/nlcst": "^2.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unified": "^11.0.0"
       },
       "funding": {
         "type": "opencollective",
@@ -7198,9 +7015,9 @@
       }
     },
     "node_modules/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
     },
     "node_modules/section-matter": {
       "version": "1.0.0",
@@ -7215,12 +7032,9 @@
       }
     },
     "node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -7228,22 +7042,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/semver/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/semver/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    },
     "node_modules/sharp": {
       "version": "0.33.3",
       "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz",
@@ -7304,11 +7102,13 @@
       }
     },
     "node_modules/shiki": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.4.0.tgz",
-      "integrity": "sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==",
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.14.1.tgz",
+      "integrity": "sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==",
+      "license": "MIT",
       "dependencies": {
-        "@shikijs/core": "1.4.0"
+        "@shikijs/core": "1.14.1",
+        "@types/hast": "^3.0.4"
       }
     },
     "node_modules/signal-exit": {
@@ -7337,9 +7137,9 @@
       "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
     },
     "node_modules/sitemap": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz",
-      "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz",
+      "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==",
       "dependencies": {
         "@types/node": "^17.0.5",
         "@types/sax": "^1.2.1",
@@ -7393,9 +7193,9 @@
       "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
     },
     "node_modules/string-width": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
-      "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
       "dependencies": {
         "emoji-regex": "^10.3.0",
         "get-east-asian-width": "^1.0.0",
@@ -7482,17 +7282,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -7531,9 +7320,9 @@
       }
     },
     "node_modules/tsconfck": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz",
-      "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz",
+      "integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==",
       "bin": {
         "tsconfck": "bin/tsconfck.js"
       },
@@ -7569,12 +7358,13 @@
     "node_modules/typesafe-path": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
-      "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="
+      "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==",
+      "license": "MIT"
     },
     "node_modules/typescript": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
-      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "version": "5.5.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
+      "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -7584,9 +7374,10 @@
       }
     },
     "node_modules/typescript-auto-import-cache": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.2.tgz",
-      "integrity": "sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.3.tgz",
+      "integrity": "sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==",
+      "license": "MIT",
       "dependencies": {
         "semver": "^7.3.8"
       }
@@ -7598,19 +7389,10 @@
       "optional": true,
       "peer": true
     },
-    "node_modules/unherit": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz",
-      "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/unified": {
-      "version": "11.0.4",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
-      "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+      "version": "11.0.5",
+      "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+      "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
       "dependencies": {
         "@types/unist": "^3.0.0",
         "bail": "^2.0.0",
@@ -7651,11 +7433,11 @@
       }
     },
     "node_modules/unist-util-modify-children": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz",
-      "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+      "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
       "dependencies": {
-        "@types/unist": "^2.0.0",
+        "@types/unist": "^3.0.0",
         "array-iterate": "^2.0.0"
       },
       "funding": {
@@ -7663,11 +7445,6 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/unist-util-modify-children/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
     "node_modules/unist-util-position": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
@@ -7720,22 +7497,17 @@
       }
     },
     "node_modules/unist-util-visit-children": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz",
-      "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+      "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
       "dependencies": {
-        "@types/unist": "^2.0.0"
+        "@types/unist": "^3.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/unist-util-visit-children/node_modules/@types/unist": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-      "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
-    },
     "node_modules/unist-util-visit-parents": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
@@ -7750,9 +7522,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
-      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -7768,8 +7540,8 @@
         }
       ],
       "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+        "escalade": "^3.1.2",
+        "picocolors": "^1.0.1"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -7784,9 +7556,9 @@
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
     },
     "node_modules/vfile": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
-      "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz",
+      "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==",
       "dependencies": {
         "@types/unist": "^3.0.0",
         "unist-util-stringify-position": "^4.0.0",
@@ -7824,16 +7596,17 @@
       }
     },
     "node_modules/volar-service-css": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.34.tgz",
-      "integrity": "sha512-C7ua0j80ZD7bsgALAz/cA1bykPehoIa5n+3+Ccr+YLpj0fypqw9iLUmGLX11CqzqNCO2XFGe/1eXB/c+SWrF/g==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.61.tgz",
+      "integrity": "sha512-Ct9L/w+IB1JU8F4jofcNCGoHy6TF83aiapfZq9A0qYYpq+Kk5dH+ONS+rVZSsuhsunq8UvAuF8Gk6B8IFLfniw==",
+      "license": "MIT",
       "dependencies": {
-        "vscode-css-languageservice": "^6.2.10",
+        "vscode-css-languageservice": "^6.3.0",
         "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-uri": "^3.0.8"
       },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0"
+        "@volar/language-service": "~2.4.0"
       },
       "peerDependenciesMeta": {
         "@volar/language-service": {
@@ -7842,15 +7615,18 @@
       }
     },
     "node_modules/volar-service-emmet": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.34.tgz",
-      "integrity": "sha512-ubQvMCmHPp8Ic82LMPkgrp9ot+u2p/RDd0RyT0EykRkZpWsagHUF5HWkVheLfiMyx2rFuWx/+7qZPOgypx6h6g==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.61.tgz",
+      "integrity": "sha512-iiYqBxjjcekqrRruw4COQHZME6EZYWVbkHjHDbULpml3g8HGJHzpAMkj9tXNCPxf36A+f1oUYjsvZt36qPg4cg==",
+      "license": "MIT",
       "dependencies": {
-        "@vscode/emmet-helper": "^2.9.2",
-        "vscode-html-languageservice": "^5.1.0"
+        "@emmetio/css-parser": "^0.4.0",
+        "@emmetio/html-matcher": "^1.3.0",
+        "@vscode/emmet-helper": "^2.9.3",
+        "vscode-uri": "^3.0.8"
       },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0"
+        "@volar/language-service": "~2.4.0"
       },
       "peerDependenciesMeta": {
         "@volar/language-service": {
@@ -7859,16 +7635,17 @@
       }
     },
     "node_modules/volar-service-html": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.34.tgz",
-      "integrity": "sha512-kMEneea1tQbiRcyKavqdrSVt8zV06t+0/3pGkjO3gV6sikXTNShIDkdtB4Tq9vE2cQdM50TuS7utVV7iysUxHw==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.61.tgz",
+      "integrity": "sha512-yFE+YmmgqIL5HI4ORqP++IYb1QaGcv+xBboI0WkCxJJ/M35HZj7f5rbT3eQ24ECLXFbFCFanckwyWJVz5KmN3Q==",
+      "license": "MIT",
       "dependencies": {
-        "vscode-html-languageservice": "^5.1.0",
+        "vscode-html-languageservice": "^5.3.0",
         "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-uri": "^3.0.8"
       },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0"
+        "@volar/language-service": "~2.4.0"
       },
       "peerDependenciesMeta": {
         "@volar/language-service": {
@@ -7877,14 +7654,15 @@
       }
     },
     "node_modules/volar-service-prettier": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.34.tgz",
-      "integrity": "sha512-BNfJ8FwfPi1Wm/JkuzNjraOLdtKieGksNT/bDyquygVawv1QUzO2HB1hiMKfZGdcSFG5ZL9R0j7bBfRTfXA2gg==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.61.tgz",
+      "integrity": "sha512-F612nql5I0IS8HxXemCGvOR2Uxd4XooIwqYVUvk7WSBxP/+xu1jYvE3QJ7EVpl8Ty3S4SxPXYiYTsG3bi+gzIQ==",
+      "license": "MIT",
       "dependencies": {
         "vscode-uri": "^3.0.8"
       },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0",
+        "@volar/language-service": "~2.4.0",
         "prettier": "^2.2 || ^3.0"
       },
       "peerDependenciesMeta": {
@@ -7897,18 +7675,20 @@
       }
     },
     "node_modules/volar-service-typescript": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.34.tgz",
-      "integrity": "sha512-NbAry0w8ZXFgGsflvMwmPDCzgJGx3C+eYxFEbldaumkpTAJiywECWiUbPIOfmEHgpOllUKSnhwtLlWFK4YnfQg==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.61.tgz",
+      "integrity": "sha512-4kRHxVbW7wFBHZWRU6yWxTgiKETBDIJNwmJUAWeP0mHaKpnDGj/astdRFKqGFRYVeEYl45lcUPhdJyrzanjsdQ==",
+      "license": "MIT",
       "dependencies": {
         "path-browserify": "^1.0.1",
-        "semver": "^7.5.4",
-        "typescript-auto-import-cache": "^0.3.1",
+        "semver": "^7.6.2",
+        "typescript-auto-import-cache": "^0.3.3",
         "vscode-languageserver-textdocument": "^1.0.11",
-        "vscode-nls": "^5.2.0"
+        "vscode-nls": "^5.2.0",
+        "vscode-uri": "^3.0.8"
       },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0"
+        "@volar/language-service": "~2.4.0"
       },
       "peerDependenciesMeta": {
         "@volar/language-service": {
@@ -7917,11 +7697,33 @@
       }
     },
     "node_modules/volar-service-typescript-twoslash-queries": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.34.tgz",
-      "integrity": "sha512-XAY2YtWKUp6ht89gxt3L5Dr46LU45d/VlBkj1KXUwNlinpoWiGN4Nm3B6DRF3VoBThAnQgm4c7WD0S+5yTzh+w==",
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.61.tgz",
+      "integrity": "sha512-99FICGrEF0r1E2tV+SvprHPw9Knyg7BdW2fUch0tf59kG+KG+Tj4tL6tUg+cy8f23O/VXlmsWFMIE+bx1dXPnQ==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-uri": "^3.0.8"
+      },
       "peerDependencies": {
-        "@volar/language-service": "~2.1.0"
+        "@volar/language-service": "~2.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@volar/language-service": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/volar-service-yaml": {
+      "version": "0.0.61",
+      "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.61.tgz",
+      "integrity": "sha512-L+gbDiLDQQ1rZUbJ3mf3doDsoQUa8OZM/xdpk/unMg1Vz24Zmi2Ign8GrZyBD7bRoIQDwOH9gdktGDKzRPpUNw==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-uri": "^3.0.8",
+        "yaml-language-server": "~1.15.0"
+      },
+      "peerDependencies": {
+        "@volar/language-service": "~2.4.0"
       },
       "peerDependenciesMeta": {
         "@volar/language-service": {
@@ -7930,9 +7732,10 @@
       }
     },
     "node_modules/vscode-css-languageservice": {
-      "version": "6.2.14",
-      "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.14.tgz",
-      "integrity": "sha512-5UPQ9Y1sUTnuMyaMBpO7LrBkqjhEJb5eAwdUlDp+Uez8lry+Tspnk3+3p2qWS4LlNsr4p3v9WkZxUf1ltgFpgw==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.0.tgz",
+      "integrity": "sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==",
+      "license": "MIT",
       "dependencies": {
         "@vscode/l10n": "^0.0.18",
         "vscode-languageserver-textdocument": "^1.0.11",
@@ -7940,15 +7743,11 @@
         "vscode-uri": "^3.0.8"
       }
     },
-    "node_modules/vscode-css-languageservice/node_modules/@vscode/l10n": {
-      "version": "0.0.18",
-      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
-      "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
-    },
     "node_modules/vscode-html-languageservice": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.2.0.tgz",
-      "integrity": "sha512-cdNMhyw57/SQzgUUGSIMQ66jikqEN6nBNyhx5YuOyj9310+eY9zw8Q0cXpiKzDX8aHYFewQEXRnigl06j/TVwQ==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.0.tgz",
+      "integrity": "sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==",
+      "license": "MIT",
       "dependencies": {
         "@vscode/l10n": "^0.0.18",
         "vscode-languageserver-textdocument": "^1.0.11",
@@ -7956,15 +7755,33 @@
         "vscode-uri": "^3.0.8"
       }
     },
-    "node_modules/vscode-html-languageservice/node_modules/@vscode/l10n": {
-      "version": "0.0.18",
-      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
-      "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+    "node_modules/vscode-json-languageservice": {
+      "version": "4.1.8",
+      "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz",
+      "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==",
+      "license": "MIT",
+      "dependencies": {
+        "jsonc-parser": "^3.0.0",
+        "vscode-languageserver-textdocument": "^1.0.1",
+        "vscode-languageserver-types": "^3.16.0",
+        "vscode-nls": "^5.0.0",
+        "vscode-uri": "^3.0.2"
+      },
+      "engines": {
+        "npm": ">=7.0.0"
+      }
+    },
+    "node_modules/vscode-json-languageservice/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/vscode-jsonrpc": {
       "version": "8.2.0",
       "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
       "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+      "license": "MIT",
       "engines": {
         "node": ">=14.0.0"
       }
@@ -7973,6 +7790,7 @@
       "version": "9.0.1",
       "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
       "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+      "license": "MIT",
       "dependencies": {
         "vscode-languageserver-protocol": "3.17.5"
       },
@@ -7984,30 +7802,35 @@
       "version": "3.17.5",
       "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
       "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+      "license": "MIT",
       "dependencies": {
         "vscode-jsonrpc": "8.2.0",
         "vscode-languageserver-types": "3.17.5"
       }
     },
     "node_modules/vscode-languageserver-textdocument": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
-      "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA=="
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+      "license": "MIT"
     },
     "node_modules/vscode-languageserver-types": {
       "version": "3.17.5",
       "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
-      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+      "license": "MIT"
     },
     "node_modules/vscode-nls": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
-      "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="
+      "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
+      "license": "MIT"
     },
     "node_modules/vscode-uri": {
       "version": "3.0.8",
       "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
-      "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+      "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
+      "license": "MIT"
     },
     "node_modules/web-namespaces": {
       "version": "2.0.1",
@@ -8033,15 +7856,14 @@
       }
     },
     "node_modules/which-pm": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.1.1.tgz",
-      "integrity": "sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.0.tgz",
+      "integrity": "sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==",
       "dependencies": {
-        "load-yaml-file": "^0.2.0",
-        "path-exists": "^4.0.0"
+        "load-yaml-file": "^0.2.0"
       },
       "engines": {
-        "node": ">=8.15"
+        "node": ">=18.12"
       }
     },
     "node_modules/which-pm-runs": {
@@ -8135,6 +7957,11 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/xxhash-wasm": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
+      "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A=="
+    },
     "node_modules/y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -8148,6 +7975,110 @@
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
     },
+    "node_modules/yaml": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "license": "ISC",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/yaml-language-server": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.15.0.tgz",
+      "integrity": "sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==",
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^8.11.0",
+        "lodash": "4.17.21",
+        "request-light": "^0.5.7",
+        "vscode-json-languageservice": "4.1.8",
+        "vscode-languageserver": "^7.0.0",
+        "vscode-languageserver-textdocument": "^1.0.1",
+        "vscode-languageserver-types": "^3.16.0",
+        "vscode-nls": "^5.0.0",
+        "vscode-uri": "^3.0.2",
+        "yaml": "2.2.2"
+      },
+      "bin": {
+        "yaml-language-server": "bin/yaml-language-server"
+      },
+      "optionalDependencies": {
+        "prettier": "2.8.7"
+      }
+    },
+    "node_modules/yaml-language-server/node_modules/prettier": {
+      "version": "2.8.7",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
+      "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/yaml-language-server/node_modules/request-light": {
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz",
+      "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==",
+      "license": "MIT"
+    },
+    "node_modules/yaml-language-server/node_modules/vscode-jsonrpc": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
+      "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.0.0 || >=10.0.0"
+      }
+    },
+    "node_modules/yaml-language-server/node_modules/vscode-languageserver": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
+      "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-languageserver-protocol": "3.16.0"
+      },
+      "bin": {
+        "installServerIntoExtension": "bin/installServerIntoExtension"
+      }
+    },
+    "node_modules/yaml-language-server/node_modules/vscode-languageserver-protocol": {
+      "version": "3.16.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
+      "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-jsonrpc": "6.0.0",
+        "vscode-languageserver-types": "3.16.0"
+      }
+    },
+    "node_modules/yaml-language-server/node_modules/vscode-languageserver-types": {
+      "version": "3.16.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
+      "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
+      "license": "MIT"
+    },
+    "node_modules/yaml-language-server/node_modules/yaml": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+      "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/yargs": {
       "version": "17.7.2",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
@@ -8211,9 +8142,9 @@
       }
     },
     "node_modules/yocto-queue": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
-      "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
       "engines": {
         "node": ">=12.20"
       },
@@ -8222,21 +8153,30 @@
       }
     },
     "node_modules/zod": {
-      "version": "3.23.5",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.5.tgz",
-      "integrity": "sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==",
+      "version": "3.23.8",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+      "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
       "funding": {
         "url": "https://github.com/sponsors/colinhacks"
       }
     },
     "node_modules/zod-to-json-schema": {
-      "version": "3.23.0",
-      "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.0.tgz",
-      "integrity": "sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==",
+      "version": "3.23.2",
+      "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz",
+      "integrity": "sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==",
       "peerDependencies": {
         "zod": "^3.23.3"
       }
     },
+    "node_modules/zod-to-ts": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
+      "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
+      "peerDependencies": {
+        "typescript": "^4.9.4 || ^5.0.2",
+        "zod": "^3"
+      }
+    },
     "node_modules/zwitch": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
diff --git a/package.json b/package.json
index 47ddf88..0420254 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "fgo-ta-com-website",
   "type": "module",
-  "version": "0.2.2-pre.4",
+  "version": "0.2.2-pre.22",
   "scripts": {
     "dev": "astro dev",
     "start": "astro dev",
@@ -10,16 +10,16 @@
     "astro": "astro"
   },
   "dependencies": {
-    "@astro-community/astro-embed-youtube": "^0.4.3",
-    "@astrojs/check": "^0.5.10",
-    "@astrojs/sitemap": "^3.1.4",
+    "@astro-community/astro-embed-youtube": "^0.5.2",
+    "@astrojs/check": "^0.9.3",
+    "@astrojs/sitemap": "^3.1.6",
     "@fontsource/work-sans": "^5.0.18",
-    "astro": "^4.7.0",
-    "astro-meta-tags": "^0.1.3",
-    "autoprefixer": "^10.4.16",
-    "iconoir": "^7.3.0",
-    "postcss-preset-env": "^9.3.0",
-    "typescript": "^5.3.3"
+    "astro": "^4.14.3",
+    "astro-meta-tags": "^0.3.0",
+    "autoprefixer": "^10.4.19",
+    "iconoir": "^7.7.0",
+    "postcss-preset-env": "^9.6.0",
+    "typescript": "^5.5.3"
   },
   "browserslist": [
     "last 2 versions",
diff --git a/static/favicon.ico b/public/favicon.ico
similarity index 100%
rename from static/favicon.ico
rename to public/favicon.ico
diff --git a/static/robots.txt b/public/robots.txt
similarity index 100%
rename from static/robots.txt
rename to public/robots.txt
diff --git a/serve.json b/serve.json
index eb10f13..4b422d7 100644
--- a/serve.json
+++ b/serve.json
@@ -12,6 +12,15 @@
         }
       ]
     },
+    {
+      "source": "**/*.woff2",
+      "headers": [
+        {
+          "key": "Cache-Control",
+          "value": "no-cache"
+        }
+      ]
+    },
     {
       "source": "404.html",
       "headers": [
diff --git a/src/assets/ta_servants/jalter.png b/src/assets/ta_servants/106.png
similarity index 100%
rename from src/assets/ta_servants/jalter.png
rename to src/assets/ta_servants/106.png
diff --git a/src/assets/ta_servants/11.png b/src/assets/ta_servants/11.png
new file mode 100644
index 0000000..ee2ca96
Binary files /dev/null and b/src/assets/ta_servants/11.png differ
diff --git a/src/assets/ta_servants/sanzang.png b/src/assets/ta_servants/113.png
similarity index 100%
rename from src/assets/ta_servants/sanzang.png
rename to src/assets/ta_servants/113.png
diff --git a/src/assets/ta_servants/kintokirider.png b/src/assets/ta_servants/115.png
similarity index 100%
rename from src/assets/ta_servants/kintokirider.png
rename to src/assets/ta_servants/115.png
diff --git a/src/assets/ta_servants/ozymandias.png b/src/assets/ta_servants/118.png
similarity index 100%
rename from src/assets/ta_servants/ozymandias.png
rename to src/assets/ta_servants/118.png
diff --git a/src/assets/ta_servants/gilgamesh.png b/src/assets/ta_servants/12.png
similarity index 100%
rename from src/assets/ta_servants/gilgamesh.png
rename to src/assets/ta_servants/12.png
diff --git a/src/assets/ta_servants/bedivere.png b/src/assets/ta_servants/126.png
similarity index 100%
rename from src/assets/ta_servants/bedivere.png
rename to src/assets/ta_servants/126.png
diff --git a/src/assets/ta_servants/summertamamo.png b/src/assets/ta_servants/128.png
similarity index 100%
rename from src/assets/ta_servants/summertamamo.png
rename to src/assets/ta_servants/128.png
diff --git a/src/assets/ta_servants/133.png b/src/assets/ta_servants/133.png
new file mode 100644
index 0000000..95cc502
Binary files /dev/null and b/src/assets/ta_servants/133.png differ
diff --git a/src/assets/ta_servants/summerkiyohime.png b/src/assets/ta_servants/134.png
similarity index 100%
rename from src/assets/ta_servants/summerkiyohime.png
rename to src/assets/ta_servants/134.png
diff --git a/src/assets/ta_servants/illya.png b/src/assets/ta_servants/136.png
similarity index 100%
rename from src/assets/ta_servants/illya.png
rename to src/assets/ta_servants/136.png
diff --git a/src/assets/ta_servants/cleopatra.png b/src/assets/ta_servants/139.png
similarity index 100%
rename from src/assets/ta_servants/cleopatra.png
rename to src/assets/ta_servants/139.png
diff --git a/src/assets/ta_servants/janta.png b/src/assets/ta_servants/141.png
similarity index 100%
rename from src/assets/ta_servants/janta.png
rename to src/assets/ta_servants/141.png
diff --git a/src/assets/ta_servants/ishtar.png b/src/assets/ta_servants/142.png
similarity index 100%
rename from src/assets/ta_servants/ishtar.png
rename to src/assets/ta_servants/142.png
diff --git a/src/assets/ta_servants/enkidu.png b/src/assets/ta_servants/143.png
similarity index 100%
rename from src/assets/ta_servants/enkidu.png
rename to src/assets/ta_servants/143.png
diff --git a/src/assets/ta_servants/145.png b/src/assets/ta_servants/145.png
new file mode 100644
index 0000000..38eaa48
Binary files /dev/null and b/src/assets/ta_servants/145.png differ
diff --git a/src/assets/ta_servants/taiga.png b/src/assets/ta_servants/148.png
similarity index 100%
rename from src/assets/ta_servants/taiga.png
rename to src/assets/ta_servants/148.png
diff --git a/src/assets/ta_servants/merlin.png b/src/assets/ta_servants/150.png
similarity index 100%
rename from src/assets/ta_servants/merlin.png
rename to src/assets/ta_servants/150.png
diff --git a/src/assets/ta_servants/musashi.png b/src/assets/ta_servants/153.png
similarity index 100%
rename from src/assets/ta_servants/musashi.png
rename to src/assets/ta_servants/153.png
diff --git a/src/assets/ta_servants/mhxa.png b/src/assets/ta_servants/155.png
similarity index 100%
rename from src/assets/ta_servants/mhxa.png
rename to src/assets/ta_servants/155.png
diff --git a/src/assets/ta_servants/arash.png b/src/assets/ta_servants/16.png
similarity index 100%
rename from src/assets/ta_servants/arash.png
rename to src/assets/ta_servants/16.png
diff --git a/src/assets/ta_servants/melt.png b/src/assets/ta_servants/163.png
similarity index 100%
rename from src/assets/ta_servants/melt.png
rename to src/assets/ta_servants/163.png
diff --git a/src/assets/ta_servants/suzuka.png b/src/assets/ta_servants/165.png
similarity index 100%
rename from src/assets/ta_servants/suzuka.png
rename to src/assets/ta_servants/165.png
diff --git a/src/assets/ta_servants/167.png b/src/assets/ta_servants/167.png
new file mode 100644
index 0000000..6bd7753
Binary files /dev/null and b/src/assets/ta_servants/167.png differ
diff --git a/src/assets/ta_servants/nerocaster.png b/src/assets/ta_servants/175.png
similarity index 100%
rename from src/assets/ta_servants/nerocaster.png
rename to src/assets/ta_servants/175.png
diff --git a/src/assets/ta_servants/riderishtar.png b/src/assets/ta_servants/182.png
similarity index 100%
rename from src/assets/ta_servants/riderishtar.png
rename to src/assets/ta_servants/182.png
diff --git a/src/assets/ta_servants/abby.png b/src/assets/ta_servants/195.png
similarity index 100%
rename from src/assets/ta_servants/abby.png
rename to src/assets/ta_servants/195.png
diff --git a/src/assets/ta_servants/ereshkigal.png b/src/assets/ta_servants/196.png
similarity index 100%
rename from src/assets/ta_servants/ereshkigal.png
rename to src/assets/ta_servants/196.png
diff --git a/src/assets/ta_servants/hokusai.png b/src/assets/ta_servants/198.png
similarity index 100%
rename from src/assets/ta_servants/hokusai.png
rename to src/assets/ta_servants/198.png
diff --git a/src/assets/ta_servants/artoria.png b/src/assets/ta_servants/2.png
similarity index 100%
rename from src/assets/ta_servants/artoria.png
rename to src/assets/ta_servants/2.png
diff --git a/src/assets/ta_servants/fujino.png b/src/assets/ta_servants/200.png
similarity index 100%
rename from src/assets/ta_servants/fujino.png
rename to src/assets/ta_servants/200.png
diff --git a/src/assets/ta_servants/anastasia.png b/src/assets/ta_servants/201.png
similarity index 100%
rename from src/assets/ta_servants/anastasia.png
rename to src/assets/ta_servants/201.png
diff --git a/src/assets/ta_servants/ivan.png b/src/assets/ta_servants/205.png
similarity index 100%
rename from src/assets/ta_servants/ivan.png
rename to src/assets/ta_servants/205.png
diff --git a/src/assets/ta_servants/okitaalter.png b/src/assets/ta_servants/209.png
similarity index 100%
rename from src/assets/ta_servants/okitaalter.png
rename to src/assets/ta_servants/209.png
diff --git a/src/assets/ta_servants/sigurd.png b/src/assets/ta_servants/213.png
similarity index 100%
rename from src/assets/ta_servants/sigurd.png
rename to src/assets/ta_servants/213.png
diff --git a/src/assets/ta_servants/skadi.png b/src/assets/ta_servants/215.png
similarity index 100%
rename from src/assets/ta_servants/skadi.png
rename to src/assets/ta_servants/215.png
diff --git a/src/assets/ta_servants/216.png b/src/assets/ta_servants/216.png
new file mode 100644
index 0000000..950ee44
Binary files /dev/null and b/src/assets/ta_servants/216.png differ
diff --git a/src/assets/ta_servants/jaltersummer.png b/src/assets/ta_servants/219.png
similarity index 100%
rename from src/assets/ta_servants/jaltersummer.png
rename to src/assets/ta_servants/219.png
diff --git a/src/assets/ta_servants/bbsummer.png b/src/assets/ta_servants/220.png
similarity index 100%
rename from src/assets/ta_servants/bbsummer.png
rename to src/assets/ta_servants/220.png
diff --git a/src/assets/ta_servants/223.png b/src/assets/ta_servants/223.png
new file mode 100644
index 0000000..750aa38
Binary files /dev/null and b/src/assets/ta_servants/223.png differ
diff --git a/src/assets/ta_servants/sitonai.png b/src/assets/ta_servants/224.png
similarity index 100%
rename from src/assets/ta_servants/sitonai.png
rename to src/assets/ta_servants/224.png
diff --git a/src/assets/ta_servants/shutencaster.png b/src/assets/ta_servants/225.png
similarity index 100%
rename from src/assets/ta_servants/shutencaster.png
rename to src/assets/ta_servants/225.png
diff --git a/src/assets/ta_servants/xiangyu.png b/src/assets/ta_servants/226.png
similarity index 100%
rename from src/assets/ta_servants/xiangyu.png
rename to src/assets/ta_servants/226.png
diff --git a/src/assets/ta_servants/redhare.png b/src/assets/ta_servants/231.png
similarity index 100%
rename from src/assets/ta_servants/redhare.png
rename to src/assets/ta_servants/231.png
diff --git a/src/assets/ta_servants/bradamante.png b/src/assets/ta_servants/232.png
similarity index 100%
rename from src/assets/ta_servants/bradamante.png
rename to src/assets/ta_servants/232.png
diff --git a/src/assets/ta_servants/benienma.png b/src/assets/ta_servants/234.png
similarity index 100%
rename from src/assets/ta_servants/benienma.png
rename to src/assets/ta_servants/234.png
diff --git a/src/assets/ta_servants/oldli.png b/src/assets/ta_servants/235.png
similarity index 100%
rename from src/assets/ta_servants/oldli.png
rename to src/assets/ta_servants/235.png
diff --git a/src/assets/ta_servants/kingprotea.png b/src/assets/ta_servants/238.png
similarity index 100%
rename from src/assets/ta_servants/kingprotea.png
rename to src/assets/ta_servants/238.png
diff --git a/src/assets/ta_servants/kama.png b/src/assets/ta_servants/239.png
similarity index 100%
rename from src/assets/ta_servants/kama.png
rename to src/assets/ta_servants/239.png
diff --git a/src/assets/ta_servants/astrea.png b/src/assets/ta_servants/242.png
similarity index 100%
rename from src/assets/ta_servants/astrea.png
rename to src/assets/ta_servants/242.png
diff --git a/src/assets/ta_servants/arjunaalter.png b/src/assets/ta_servants/247.png
similarity index 100%
rename from src/assets/ta_servants/arjunaalter.png
rename to src/assets/ta_servants/247.png
diff --git a/src/assets/ta_servants/maounobu.png b/src/assets/ta_servants/250.png
similarity index 100%
rename from src/assets/ta_servants/maounobu.png
rename to src/assets/ta_servants/250.png
diff --git a/src/assets/ta_servants/kagetora.png b/src/assets/ta_servants/252.png
similarity index 100%
rename from src/assets/ta_servants/kagetora.png
rename to src/assets/ta_servants/252.png
diff --git a/src/assets/ta_servants/davincirider.png b/src/assets/ta_servants/253.png
similarity index 100%
rename from src/assets/ta_servants/davincirider.png
rename to src/assets/ta_servants/253.png
diff --git a/src/assets/ta_servants/gong.png b/src/assets/ta_servants/258.png
similarity index 100%
rename from src/assets/ta_servants/gong.png
rename to src/assets/ta_servants/258.png
diff --git a/src/assets/ta_servants/charlotte.png b/src/assets/ta_servants/259.png
similarity index 100%
rename from src/assets/ta_servants/charlotte.png
rename to src/assets/ta_servants/259.png
diff --git a/src/assets/ta_servants/summermusashi.png b/src/assets/ta_servants/261.png
similarity index 100%
rename from src/assets/ta_servants/summermusashi.png
rename to src/assets/ta_servants/261.png
diff --git a/src/assets/ta_servants/summerhokusai.png b/src/assets/ta_servants/264.png
similarity index 100%
rename from src/assets/ta_servants/summerhokusai.png
rename to src/assets/ta_servants/264.png
diff --git a/src/assets/ta_servants/meltlambda.png b/src/assets/ta_servants/266.png
similarity index 100%
rename from src/assets/ta_servants/meltlambda.png
rename to src/assets/ta_servants/266.png
diff --git a/src/assets/ta_servants/spaceishtar.png b/src/assets/ta_servants/268.png
similarity index 100%
rename from src/assets/ta_servants/spaceishtar.png
rename to src/assets/ta_servants/268.png
diff --git a/src/assets/ta_servants/yangguifei.png b/src/assets/ta_servants/275.png
similarity index 100%
rename from src/assets/ta_servants/yangguifei.png
rename to src/assets/ta_servants/275.png
diff --git a/src/assets/ta_servants/sei.png b/src/assets/ta_servants/276.png
similarity index 100%
rename from src/assets/ta_servants/sei.png
rename to src/assets/ta_servants/276.png
diff --git a/src/assets/ta_servants/odysseus.png b/src/assets/ta_servants/277.png
similarity index 100%
rename from src/assets/ta_servants/odysseus.png
rename to src/assets/ta_servants/277.png
diff --git a/src/assets/ta_servants/dioscuri.png b/src/assets/ta_servants/278.png
similarity index 100%
rename from src/assets/ta_servants/dioscuri.png
rename to src/assets/ta_servants/278.png
diff --git a/src/assets/ta_servants/romulus.png b/src/assets/ta_servants/280.png
similarity index 100%
rename from src/assets/ta_servants/romulus.png
rename to src/assets/ta_servants/280.png
diff --git a/src/assets/ta_servants/voyager.png b/src/assets/ta_servants/281.png
similarity index 100%
rename from src/assets/ta_servants/voyager.png
rename to src/assets/ta_servants/281.png
diff --git a/src/assets/ta_servants/koyo.png b/src/assets/ta_servants/282.png
similarity index 100%
rename from src/assets/ta_servants/koyo.png
rename to src/assets/ta_servants/282.png
diff --git a/src/assets/ta_servants/castoria.png b/src/assets/ta_servants/284.png
similarity index 100%
rename from src/assets/ta_servants/castoria.png
rename to src/assets/ta_servants/284.png
diff --git a/src/assets/ta_servants/kiarasummer.png b/src/assets/ta_servants/285.png
similarity index 100%
rename from src/assets/ta_servants/kiarasummer.png
rename to src/assets/ta_servants/285.png
diff --git a/src/assets/ta_servants/summerillya.png b/src/assets/ta_servants/286.png
similarity index 100%
rename from src/assets/ta_servants/summerillya.png
rename to src/assets/ta_servants/286.png
diff --git a/src/assets/ta_servants/summeryu.png b/src/assets/ta_servants/288.png
similarity index 100%
rename from src/assets/ta_servants/summeryu.png
rename to src/assets/ta_servants/288.png
diff --git a/src/assets/ta_servants/saitohajime.png b/src/assets/ta_servants/293.png
similarity index 100%
rename from src/assets/ta_servants/saitohajime.png
rename to src/assets/ta_servants/293.png
diff --git a/src/assets/ta_servants/vangogh.png b/src/assets/ta_servants/295.png
similarity index 100%
rename from src/assets/ta_servants/vangogh.png
rename to src/assets/ta_servants/295.png
diff --git a/src/assets/ta_servants/douman.png b/src/assets/ta_servants/297.png
similarity index 100%
rename from src/assets/ta_servants/douman.png
rename to src/assets/ta_servants/297.png
diff --git a/src/assets/ta_servants/ibuki.png b/src/assets/ta_servants/299.png
similarity index 100%
rename from src/assets/ta_servants/ibuki.png
rename to src/assets/ta_servants/299.png
diff --git a/src/assets/ta_servants/saberalter.png b/src/assets/ta_servants/3.png
similarity index 100%
rename from src/assets/ta_servants/saberalter.png
rename to src/assets/ta_servants/3.png
diff --git a/src/assets/ta_servants/vritra.png b/src/assets/ta_servants/300.png
similarity index 100%
rename from src/assets/ta_servants/vritra.png
rename to src/assets/ta_servants/300.png
diff --git a/src/assets/ta_servants/muramasa.png b/src/assets/ta_servants/302.png
similarity index 100%
rename from src/assets/ta_servants/muramasa.png
rename to src/assets/ta_servants/302.png
diff --git a/src/assets/ta_servants/taira.png b/src/assets/ta_servants/303.png
similarity index 100%
rename from src/assets/ta_servants/taira.png
rename to src/assets/ta_servants/303.png
diff --git a/src/assets/ta_servants/caren.png b/src/assets/ta_servants/305.png
similarity index 100%
rename from src/assets/ta_servants/caren.png
rename to src/assets/ta_servants/305.png
diff --git a/src/assets/ta_servants/galatea.png b/src/assets/ta_servants/306.png
similarity index 100%
rename from src/assets/ta_servants/galatea.png
rename to src/assets/ta_servants/306.png
diff --git a/src/assets/ta_servants/misscrane.png b/src/assets/ta_servants/307.png
similarity index 100%
rename from src/assets/ta_servants/misscrane.png
rename to src/assets/ta_servants/307.png
diff --git a/src/assets/ta_servants/mixa.png b/src/assets/ta_servants/308.png
similarity index 100%
rename from src/assets/ta_servants/mixa.png
rename to src/assets/ta_servants/308.png
diff --git a/src/assets/ta_servants/morgan.png b/src/assets/ta_servants/309.png
similarity index 100%
rename from src/assets/ta_servants/morgan.png
rename to src/assets/ta_servants/309.png
diff --git a/src/assets/ta_servants/barghest.png b/src/assets/ta_servants/310.png
similarity index 100%
rename from src/assets/ta_servants/barghest.png
rename to src/assets/ta_servants/310.png
diff --git a/src/assets/ta_servants/baobhansith.png b/src/assets/ta_servants/311.png
similarity index 100%
rename from src/assets/ta_servants/baobhansith.png
rename to src/assets/ta_servants/311.png
diff --git a/src/assets/ta_servants/melusine_aoe.png b/src/assets/ta_servants/312_aoe.png
similarity index 100%
rename from src/assets/ta_servants/melusine_aoe.png
rename to src/assets/ta_servants/312_aoe.png
diff --git a/src/assets/ta_servants/melusine_st.png b/src/assets/ta_servants/312_st.png
similarity index 100%
rename from src/assets/ta_servants/melusine_st.png
rename to src/assets/ta_servants/312_st.png
diff --git a/src/assets/ta_servants/percival.png b/src/assets/ta_servants/313.png
similarity index 100%
rename from src/assets/ta_servants/percival.png
rename to src/assets/ta_servants/313.png
diff --git a/src/assets/ta_servants/koyanlight.png b/src/assets/ta_servants/314.png
similarity index 100%
rename from src/assets/ta_servants/koyanlight.png
rename to src/assets/ta_servants/314.png
diff --git a/src/assets/ta_servants/summerokitaalter.png b/src/assets/ta_servants/317.png
similarity index 100%
rename from src/assets/ta_servants/summerokitaalter.png
rename to src/assets/ta_servants/317.png
diff --git a/src/assets/ta_servants/summercharlotte.png b/src/assets/ta_servants/319.png
similarity index 100%
rename from src/assets/ta_servants/summercharlotte.png
rename to src/assets/ta_servants/319.png
diff --git a/src/assets/ta_servants/summerdavinci.png b/src/assets/ta_servants/320.png
similarity index 100%
rename from src/assets/ta_servants/summerdavinci.png
rename to src/assets/ta_servants/320.png
diff --git a/src/assets/ta_servants/summerkama.png b/src/assets/ta_servants/321.png
similarity index 100%
rename from src/assets/ta_servants/summerkama.png
rename to src/assets/ta_servants/321.png
diff --git a/src/assets/ta_servants/summercaenis.png b/src/assets/ta_servants/322.png
similarity index 100%
rename from src/assets/ta_servants/summercaenis.png
rename to src/assets/ta_servants/322.png
diff --git a/src/assets/ta_servants/summersei.png b/src/assets/ta_servants/323.png
similarity index 100%
rename from src/assets/ta_servants/summersei.png
rename to src/assets/ta_servants/323.png
diff --git a/src/assets/ta_servants/zenobia.png b/src/assets/ta_servants/325.png
similarity index 100%
rename from src/assets/ta_servants/zenobia.png
rename to src/assets/ta_servants/325.png
diff --git a/src/assets/ta_servants/cindereli.png b/src/assets/ta_servants/326.png
similarity index 100%
rename from src/assets/ta_servants/cindereli.png
rename to src/assets/ta_servants/326.png
diff --git a/src/assets/ta_servants/okuni.png b/src/assets/ta_servants/327.png
similarity index 100%
rename from src/assets/ta_servants/okuni.png
rename to src/assets/ta_servants/327.png
diff --git a/src/assets/ta_servants/ryomalancer.png b/src/assets/ta_servants/329.png
similarity index 100%
rename from src/assets/ta_servants/ryomalancer.png
rename to src/assets/ta_servants/329.png
diff --git a/src/assets/ta_servants/hans.png b/src/assets/ta_servants/33.png
similarity index 100%
rename from src/assets/ta_servants/hans.png
rename to src/assets/ta_servants/33.png
diff --git a/src/assets/ta_servants/taigongwang.png b/src/assets/ta_servants/331.png
similarity index 100%
rename from src/assets/ta_servants/taigongwang.png
rename to src/assets/ta_servants/331.png
diff --git a/src/assets/ta_servants/koyandark.png b/src/assets/ta_servants/334.png
similarity index 100%
rename from src/assets/ta_servants/koyandark.png
rename to src/assets/ta_servants/334.png
diff --git a/src/assets/ta_servants/bazett.png b/src/assets/ta_servants/336.png
similarity index 100%
rename from src/assets/ta_servants/bazett.png
rename to src/assets/ta_servants/336.png
diff --git a/src/assets/ta_servants/338.png b/src/assets/ta_servants/338.png
new file mode 100644
index 0000000..ffd792a
Binary files /dev/null and b/src/assets/ta_servants/338.png differ
diff --git a/src/assets/ta_servants/340.png b/src/assets/ta_servants/340.png
new file mode 100644
index 0000000..63b9e36
Binary files /dev/null and b/src/assets/ta_servants/340.png differ
diff --git a/src/assets/ta_servants/348.png b/src/assets/ta_servants/348.png
new file mode 100644
index 0000000..3d1f76f
Binary files /dev/null and b/src/assets/ta_servants/348.png differ
diff --git a/src/assets/ta_servants/350.png b/src/assets/ta_servants/350.png
new file mode 100644
index 0000000..b05ef3a
Binary files /dev/null and b/src/assets/ta_servants/350.png differ
diff --git a/src/assets/ta_servants/351.png b/src/assets/ta_servants/351.png
new file mode 100644
index 0000000..7f5dff2
Binary files /dev/null and b/src/assets/ta_servants/351.png differ
diff --git a/src/assets/ta_servants/355.png b/src/assets/ta_servants/355.png
new file mode 100644
index 0000000..f46378c
Binary files /dev/null and b/src/assets/ta_servants/355.png differ
diff --git a/src/assets/ta_servants/357.png b/src/assets/ta_servants/357.png
new file mode 100644
index 0000000..2039468
Binary files /dev/null and b/src/assets/ta_servants/357.png differ
diff --git a/src/assets/ta_servants/38.png b/src/assets/ta_servants/38.png
new file mode 100644
index 0000000..74580cb
Binary files /dev/null and b/src/assets/ta_servants/38.png differ
diff --git a/src/assets/ta_servants/kojirou.png b/src/assets/ta_servants/39.png
similarity index 100%
rename from src/assets/ta_servants/kojirou.png
rename to src/assets/ta_servants/39.png
diff --git a/src/assets/ta_servants/saberlily.png b/src/assets/ta_servants/4.png
similarity index 100%
rename from src/assets/ta_servants/saberlily.png
rename to src/assets/ta_servants/4.png
diff --git a/src/assets/ta_servants/stheno.png b/src/assets/ta_servants/41.png
similarity index 100%
rename from src/assets/ta_servants/stheno.png
rename to src/assets/ta_servants/41.png
diff --git a/src/assets/ta_servants/nero.png b/src/assets/ta_servants/5.png
similarity index 100%
rename from src/assets/ta_servants/nero.png
rename to src/assets/ta_servants/5.png
diff --git a/src/assets/ta_servants/kintoki.png b/src/assets/ta_servants/51.png
similarity index 100%
rename from src/assets/ta_servants/kintoki.png
rename to src/assets/ta_servants/51.png
diff --git a/src/assets/ta_servants/darius.png b/src/assets/ta_servants/55.png
similarity index 100%
rename from src/assets/ta_servants/darius.png
rename to src/assets/ta_servants/55.png
diff --git a/src/assets/ta_servants/tamamocat.png b/src/assets/ta_servants/58.png
similarity index 100%
rename from src/assets/ta_servants/tamamocat.png
rename to src/assets/ta_servants/58.png
diff --git a/src/assets/ta_servants/6.png b/src/assets/ta_servants/6.png
new file mode 100644
index 0000000..53ec41c
Binary files /dev/null and b/src/assets/ta_servants/6.png differ
diff --git a/src/assets/ta_servants/tamamo.png b/src/assets/ta_servants/62.png
similarity index 100%
rename from src/assets/ta_servants/tamamo.png
rename to src/assets/ta_servants/62.png
diff --git a/src/assets/ta_servants/drake.png b/src/assets/ta_servants/65.png
similarity index 100%
rename from src/assets/ta_servants/drake.png
rename to src/assets/ta_servants/65.png
diff --git a/src/assets/ta_servants/okita.png b/src/assets/ta_servants/68.png
similarity index 100%
rename from src/assets/ta_servants/okita.png
rename to src/assets/ta_servants/68.png
diff --git a/src/assets/ta_servants/shishou.png b/src/assets/ta_servants/70.png
similarity index 100%
rename from src/assets/ta_servants/shishou.png
rename to src/assets/ta_servants/70.png
diff --git a/src/assets/ta_servants/shishou_bunny.png b/src/assets/ta_servants/70_bunny.png
similarity index 100%
rename from src/assets/ta_servants/shishou_bunny.png
rename to src/assets/ta_servants/70_bunny.png
diff --git a/src/assets/ta_servants/altera.png b/src/assets/ta_servants/8.png
similarity index 100%
rename from src/assets/ta_servants/altera.png
rename to src/assets/ta_servants/8.png
diff --git a/src/assets/ta_servants/jekyllhyde.png b/src/assets/ta_servants/81.png
similarity index 100%
rename from src/assets/ta_servants/jekyllhyde.png
rename to src/assets/ta_servants/81.png
diff --git a/src/assets/ta_servants/karna.png b/src/assets/ta_servants/85.png
similarity index 100%
rename from src/assets/ta_servants/karna.png
rename to src/assets/ta_servants/85.png
diff --git a/src/assets/ta_servants/mhx.png b/src/assets/ta_servants/86.png
similarity index 100%
rename from src/assets/ta_servants/mhx.png
rename to src/assets/ta_servants/86.png
diff --git a/src/assets/ta_servants/brynhild.png b/src/assets/ta_servants/88.png
similarity index 100%
rename from src/assets/ta_servants/brynhild.png
rename to src/assets/ta_servants/88.png
diff --git a/src/assets/ta_servants/nerobride.png b/src/assets/ta_servants/90.png
similarity index 100%
rename from src/assets/ta_servants/nerobride.png
rename to src/assets/ta_servants/90.png
diff --git a/src/assets/ta_servants/amakusa.png b/src/assets/ta_servants/93.png
similarity index 100%
rename from src/assets/ta_servants/amakusa.png
rename to src/assets/ta_servants/93.png
diff --git a/src/assets/ta_servants/96.png b/src/assets/ta_servants/96.png
new file mode 100644
index 0000000..66a42a0
Binary files /dev/null and b/src/assets/ta_servants/96.png differ
diff --git a/src/assets/ta_servants/cualter.png b/src/assets/ta_servants/98.png
similarity index 100%
rename from src/assets/ta_servants/cualter.png
rename to src/assets/ta_servants/98.png
diff --git a/src/assets/ta_servants/summerkiara.png b/src/assets/ta_servants/summerkiara.png
deleted file mode 100644
index 26a695b..0000000
Binary files a/src/assets/ta_servants/summerkiara.png and /dev/null differ
diff --git a/src/components/listings/eventListingLine.astro b/src/components/listings/eventListingLine.astro
index 8922b74..a538be4 100644
--- a/src/components/listings/eventListingLine.astro
+++ b/src/components/listings/eventListingLine.astro
@@ -13,7 +13,7 @@ const options_date: Intl.DateTimeFormatOptions = {
   day: '2-digit',
 }
 
-const { shortdescription, releaseDate, title, link, hlcolor } = Astro.props
+const { releaseDate, title, link, hlcolor } = Astro.props
 const render_date = releaseDate.toLocaleDateString('en-GB', options_date)
 ---
 
@@ -22,7 +22,7 @@ const render_date = releaseDate.toLocaleDateString('en-GB', options_date)
   <article>
     <h2>{title}</h2>
     <h3>{render_date}</h3>
-    <p>{shortdescription}</p>
+    <!-- <p>{shortdescription}</p> -->
   </article>
 </a>
 
@@ -90,22 +90,26 @@ const render_date = releaseDate.toLocaleDateString('en-GB', options_date)
       position: relative;
       display: flex;
       visibility: visible;
-      height: 1.5rem;
-      width: 1.5rem;
-      border-radius: 40%;
+      height: 1rem;
+      width: 1rem;
       background-color: var(--c-darkpurple);
+      border-style: solid;
+      border-width: 0.25rem;
+      border-color: var(--c-lightgray);
+      border-radius: 40%;
       transition: transform var(--speed) var(--ease);
     }
 
     a:hover > .circle {
-      height: 1.75rem;
-      width: 1.75rem;
+      height: 1.25rem;
+      width: 1.25rem;
       translate: -0.125rem;
-      margin-right: 0.825rem;
+      margin-right: 4px;
     }
 
     a:hover article {
       border-color: var(--hlcolor);
+      transform: none;
     }
 
     article {
diff --git a/src/components/listings/questListingLine.astro b/src/components/listings/questListingLine.astro
index 844a858..6bd5775 100644
--- a/src/components/listings/questListingLine.astro
+++ b/src/components/listings/questListingLine.astro
@@ -40,8 +40,8 @@ const render_date = releaseDate.toLocaleDateString(
     justify-content: center;
     display: flex;
     text-decoration: none;
-    height: auto;
-    margin: 0.5rem;
+    height: fit-content;
+    margin: 0px 0.5rem;
     width: 100%;
   }
   p {
@@ -91,22 +91,26 @@ const render_date = releaseDate.toLocaleDateString(
       position: relative;
       display: flex;
       visibility: visible;
-      height: 1.5rem;
-      width: 1.5rem;
-      border-radius: 40%;
+      height: 1rem;
+      width: 1rem;
       background-color: var(--c-darkpurple);
+      border-style: solid;
+      border-width: 0.25rem;
+      border-color: var(--c-lightgray);
+      border-radius: 40%;
       transition: transform var(--speed) var(--ease);
     }
 
     a:hover > .circle {
-      height: 1.75rem;
-      width: 1.75rem;
+      height: 1.25rem;
+      width: 1.25rem;
       translate: -0.125rem;
-      margin-right: 0.825rem;
+      margin-right: 4px;
     }
 
     a:hover article {
       border-color: var(--c-darkpurple);
+      transform: none;
     }
 
     article {
diff --git a/src/components/navbar.astro b/src/components/navbar.astro
index 0e2f916..5838c8f 100644
--- a/src/components/navbar.astro
+++ b/src/components/navbar.astro
@@ -33,12 +33,13 @@ const hamburger_src_url = `url("${hamburger.src}")`
     z-index: 1000;
     position: sticky;
     top: 0px;
-    background-color: var(--c-darkgray);
+    background-color: var(--c-darkergray);
     display: flex;
     height: auto;
     width: 100%;
     align-items: flex-start;
     line-height: 1.5em;
+    border-bottom: 2px solid var(--c-darkpurple) ;
   }
   header > a {
     margin-left: 16px;
@@ -67,7 +68,7 @@ const hamburger_src_url = `url("${hamburger.src}")`
     line-height: 1.5em;
   }
   .mobile > ul {
-    background-color: var(--c-darkgray);
+    background-color: var(--c-darkergray);
     align-items: center;
     flex-wrap: wrap;
     flex-direction: column;
@@ -84,7 +85,7 @@ const hamburger_src_url = `url("${hamburger.src}")`
 
   .mobile {
     display: flex;
-    background-color: var(--c-darkgray);
+    background-color: var(--c-darkergray);
     border: 0px;
     width: 100%;
     height: 64px;
@@ -114,13 +115,14 @@ const hamburger_src_url = `url("${hamburger.src}")`
 
   .hamburger-menu {
     mask: var(--hamburger_src_url) no-repeat center;
+    mask-size: cover;
     background-color: white;
-    width: 2rem;
-    height: 2rem;
+    width: 2.25rem;
+    height: 2.25rem;
     position: static;
     align-self: flex-start;
     margin-right: 1rem;
-    margin-top: 1rem;
+    margin-top: 0.825rem;
   }
 
   @media (min-width: 1140px) {
diff --git a/src/components/smallTitle.astro b/src/components/smallTitle.astro
index c548afd..d214f84 100644
--- a/src/components/smallTitle.astro
+++ b/src/components/smallTitle.astro
@@ -6,16 +6,26 @@ export interface Props {
   subtext: string
   fadeout?: boolean
   baseurl?: string
+  returnbutton?: boolean
 }
-const { maintext, subtext, fadeout, baseurl } = Astro.props
-const display = fadeout ? "": "display: none"
+const { maintext, subtext, fadeout, baseurl, returnbutton } = Astro.props
+const displayFadeout = fadeout ? "": "display: none"
+const displayBackButton = returnbutton ? "": "display: none"
+
+let text
+if (baseurl) {
+  text = baseurl?.split("/").pop()
+  text = text?.replace("-", " ").replace("-", ".")
+  text = text?.includes('eq 20') ? text?.replace("eq", "EQ") : text
+}
+
 ---
 
 <div class="wrap">
   <div class="head">{maintext}</div>
   <div class="sub">{subtext}</div>
-  <a href=`/${baseurl}`>&lt&lt Back to database</a>
-  <div class="fade" style={display}></div>
+  <a href=`/${baseurl}` style={displayBackButton}>&lt&lt Back to {text}</a>
+  <div class="fade" style={displayFadeout}></div>
 </div>
 
 <style>
@@ -23,8 +33,19 @@ const display = fadeout ? "": "display: none"
     font-weight: 600;
     font-family: 'Work Sans', 'Helvetica Neue', Helvetica, Helvetica, Arial, sans-serif;
     color: white;
-    padding: 0.5rem 0px;
+    margin: 1rem 0px 0px;
+    padding: 0.5rem 0.75rem;
     text-decoration: none;
+    background-color: var(--c-lightgray);
+    border-radius: 10px;
+    border-style: solid;
+    border-width: 2px;
+    border-color: var(--c-lightgray);
+    text-transform: capitalize;
+  }
+
+  a:hover {
+    border-color: var(--c-darkpurple);
   }
 
   .wrap {
@@ -49,14 +70,16 @@ const display = fadeout ? "": "display: none"
   .head {
     hyphens: auto;
     padding-top: 2rem;
-    font-size: 2rem;
+    font-size: 3rem;
     font-weight: 800;
     font-family: 'Work Sans', 'Helvetica Neue', Helvetica, Helvetica, Arial,
       sans-serif;
   }
 
   .sub {
-    font-size: 0.75rem;
+    padding-left: 0.5rem;
+    padding-right: 0.5rem;
+    font-size: 1rem;
     font-weight: 600;
     font-family: 'Work Sans', 'Helvetica Neue', Helvetica, Helvetica, Arial,
       sans-serif;
@@ -77,19 +100,19 @@ const display = fadeout ? "": "display: none"
   @media (min-width: 620px) {
     .head {
       hyphens: none;
-      font-size: 3rem;
-    }
-    .sub {
-      font-size: 0.75rem;
-    }
-  }
-
-  @media (min-width: 1000px) {
-    .head {
       font-size: 4rem;
     }
     .sub {
       font-size: 1rem;
     }
   }
+
+  @media (min-width: 1000px) {
+    .head {
+      font-size: 6rem;
+    }
+    .sub {
+      font-size: 1rem;
+    }
+  }
 </style>
diff --git a/src/components/title.astro b/src/components/title.astro
index 272997a..abf6197 100644
--- a/src/components/title.astro
+++ b/src/components/title.astro
@@ -45,6 +45,8 @@ const display = fadeout ? "": "display: none"
   }
 
   .sub {
+    padding-left: 0.5rem;
+    padding-right: 0.5rem;
     font-size: 1.5rem;
     font-weight: 800;
     font-family: 'Work Sans', 'Helvetica Neue', Helvetica, Helvetica, Arial,
diff --git a/src/content/changes/appends-120.json b/src/content/changes/appends-120.json
new file mode 100644
index 0000000..0baa342
--- /dev/null
+++ b/src/content/changes/appends-120.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "../../../.astro/collections/changes.schema.json",
+  "info": {
+    "title": "Appends and Level 120",
+    "releaseDate": "2022-05-23",
+    "shortdescription": "Release of Append Skills and increased level cap of 120 with the Servant Coins Update",
+    "releaseNumber": 1,
+    "type": "event"
+  },
+  "link": "https://fategrandorder.fandom.com/wiki/FGO_Summer_2021_Event_Revival_(US)#Game_Updates",
+  "color": "#d4af37"
+}
diff --git a/src/content/changes/castoria.json b/src/content/changes/castoria.json
new file mode 100644
index 0000000..f5a6402
--- /dev/null
+++ b/src/content/changes/castoria.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "../../../.astro/collections/changes.schema.json",
+  "info": {
+    "title": "Castoria",
+    "releaseDate": "2022-07-04",
+    "shortdescription": "Release of Castoria during the 5rd Anniversary of the game",
+    "releaseNumber": 1,
+    "type": "event"
+  },
+  "link": "https://apps.atlasacademy.io/db/NA/servant/284/",
+  "color": "#0b67fb"
+}
diff --git a/src/content/changes/koyan.json b/src/content/changes/koyan.json
index 2c93a5a..239598c 100644
--- a/src/content/changes/koyan.json
+++ b/src/content/changes/koyan.json
@@ -1,8 +1,9 @@
 {
+  "$schema": "../../../.astro/collections/changes.schema.json",
   "info": {
     "title": "Koyanskaya of Light",
     "releaseDate": "2023-07-03",
-    "shortdescription": "Release of Koyanskaya of Light during 6th Anniversary of the game",
+    "shortdescription": "Release of Koyanskaya of Light during the 6th Anniversary of the game",
     "releaseNumber": 1,
     "type": "event"
   },
diff --git a/src/content/changes/oberon.json b/src/content/changes/oberon.json
new file mode 100644
index 0000000..725dbbb
--- /dev/null
+++ b/src/content/changes/oberon.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "../../../.astro/collections/changes.schema.json",
+  "info": {
+    "title": "Oberon",
+    "releaseDate": "2023-07-10",
+    "shortdescription": "Release of Oberon during the Lostbelt 6 Conclusion Campaign",
+    "releaseNumber": 1,
+    "type": "event"
+  },
+  "link": "https://apps.atlasacademy.io/db/NA/servant/316/",
+  "color": "#f7281f"
+}
diff --git a/src/content/changes/skadi.json b/src/content/changes/skadi.json
index 7923425..19575cd 100644
--- a/src/content/changes/skadi.json
+++ b/src/content/changes/skadi.json
@@ -1,8 +1,9 @@
 {
+  "$schema": "../../../.astro/collections/changes.schema.json",
   "info": {
     "title": "Scathach-Skadi",
     "releaseDate": "2020-07-06",
-    "shortdescription": "Release of Scathach-Skadi during 3rd Anniversary of the game",
+    "shortdescription": "Release of Scathach-Skadi during the 3rd Anniversary of the game",
     "releaseNumber": 1,
     "type": "event"
   },
diff --git a/src/content/changes/summer-skadi.json b/src/content/changes/summer-skadi.json
new file mode 100644
index 0000000..e6ac541
--- /dev/null
+++ b/src/content/changes/summer-skadi.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "../../../.astro/collections/changes.schema.json",
+  "info": {
+    "title": "Scathach-Skadi (Ruler)",
+    "releaseDate": "2024-07-24",
+    "shortdescription": "Release of Scathach-Skadi (Ruler) during the Arctic Summer World Event",
+    "releaseNumber": 1,
+    "type": "event"
+  },
+  "link": "https://apps.atlasacademy.io/db/NA/servant/357/",
+  "color": "#0eb31d"
+}
diff --git a/src/content/config.ts b/src/content/config.ts
index 267cd1f..14ecdfb 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -53,5 +53,6 @@ export const collections = {
   taInfoData: taData,
   teslafest: taData,
   groups: groupDescription,
+  teslafestgroups: groupDescription,
   changes: changes,
 }
diff --git a/src/content/groups/lostbelt-6-5.json b/src/content/groups/lostbelt-6-5.json
new file mode 100644
index 0000000..c291d45
--- /dev/null
+++ b/src/content/groups/lostbelt-6-5.json
@@ -0,0 +1,11 @@
+{
+  "$schema": "../../../.astro/collections/groups.schema.json",
+    "info": {
+      "title": "Lostbelt 6.5 - Traum",
+      "releaseDate": "2024-05-13",
+      "shortdescription": "An Interlude of sorts that brings some new challenging content centered around a nation build of servants",
+      "releaseNumber": 1,
+      "type": "group"
+    }
+  }
+  
\ No newline at end of file
diff --git a/src/content/groups/lostbelt-6.json b/src/content/groups/lostbelt-6.json
index 3494f8b..b1a6047 100644
--- a/src/content/groups/lostbelt-6.json
+++ b/src/content/groups/lostbelt-6.json
@@ -1,8 +1,9 @@
 {
+  "$schema": "../../../.astro/collections/groups.schema.json",
   "info": {
-    "title": "Lostbelt 6",
+    "title": "Lostbelt 6 - Avalon le Fae",
     "releaseDate": "2023-06-06",
-    "shortdescription": "Lostbelt 6",
+    "shortdescription": "The 6th Lostbelt, the journey into the Fairy Kingdom of Queen Morgan - do you have what it takes for some of the most difficult content of this game?",
     "releaseNumber": 1,
     "type": "group"
   }
diff --git a/src/content/taInfoData/arctic-summer-world.json b/src/content/taInfoData/arctic-summer-world.json
new file mode 100644
index 0000000..7642a91
--- /dev/null
+++ b/src/content/taInfoData/arctic-summer-world.json
@@ -0,0 +1,274 @@
+{
+  "$schema": "../../../.astro/collections/taInfoData.schema.json",
+  "info": {
+    "title": "Arctic Summer World",
+    "releaseDate": "2024-07-24",
+    "shortdescription": "An expedition to the endless summer festival at the North Pole, orchestrated by Skadi - what could possibly happen here?",
+    "releaseNumber": 1,
+    "type": "quest"
+  },
+  "quests": [
+    {
+      "questTitle": "Arctic Summer Memory",
+      "description": "Battling against the Valkyries and the whole cast of the event - definitely a fun experience",
+      "data": [
+        {
+          "title": "Summer Skadi 4T (FLO)",
+          "link": "https://www.youtube.com/watch?v=VD2FOa9lymE",
+          "date": "2024-07-28",
+          "servant": "357",
+          "turns": "4T",
+          "runner": "Firq"
+        },
+        {
+          "title": "Summer Skadi 4T (Lvl. 2)",
+          "link": "https://www.youtube.com/watch?v=ozgDQF_vMPQ",
+          "date": "2024-07-27",
+          "servant": "357",
+          "turns": "4T",
+          "runner": "Requiem"
+        },
+        {
+          "title": "Summer Jeanne 4T",
+          "link": "https://www.youtube.com/watch?v=9inDbuA-mDo",
+          "date": "2024-07-25",
+          "servant": "216",
+          "turns": "4T",
+          "runner": "im poketar"
+        },
+        {
+          "title": "Summer Ibuki 4T (FLO NDCE)",
+          "link": "https://www.youtube.com/watch?v=Yp1aN6d_Daw",
+          "date": "2024-07-25",
+          "servant": "355",
+          "turns": "4T",
+          "runner": "ahelpfulhamster"
+        },
+        {
+          "title": "Gilgamesh Caster 4T",
+          "link": "https://www.youtube.com/watch?v=ut-VcCeB_1o",
+          "date": "2024-07-25",
+          "servant": "145",
+          "turns": "4T",
+          "runner": "Gorgeous P."
+        },
+        {
+          "title": "Dantes 4T (FLO NDCE)",
+          "link": "https://www.youtube.com/watch?v=tH7BUI5C3oA",
+          "date": "2024-07-25",
+          "servant": "96",
+          "turns": "4T",
+          "runner": "Akise"
+        },
+        {
+          "title": "Cu Alter 4T (NDCE)",
+          "link": "https://www.youtube.com/watch?v=DII1lPGAGR4",
+          "date": "2024-07-25",
+          "servant": "98",
+          "turns": "4T",
+          "runner": "Volcanicz"
+        },
+        {
+          "title": "Arcueid 4T (NDCE)",
+          "link": "https://www.youtube.com/watch?v=avMiU2rU7Y4",
+          "date": "2024-07-25",
+          "servant": "351",
+          "turns": "4T",
+          "runner": "QyTheQTπ"
+        },
+        {
+          "title": "Morgan 4T (FLO NDCE)",
+          "link": "https://www.youtube.com/watch?v=zT1cm4jxEtY",
+          "date": "2024-07-25",
+          "servant": "309",
+          "turns": "4T",
+          "runner": "Felt"
+        },
+        {
+          "title": "Morgan 4T (4man NDCE)",
+          "link": "https://www.youtube.com/watch?v=UJP79G_yge4",
+          "date": "2024-07-25",
+          "servant": "309",
+          "turns": "4T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Taigong Wang 4T",
+          "link": "https://www.youtube.com/watch?v=B1tNm-LRlOs",
+          "date": "2024-07-25",
+          "servant": "331",
+          "turns": "4T",
+          "runner": "Ise(Kai)"
+        },
+        {
+          "title": "Melt Summer 4T",
+          "link": "https://www.youtube.com/watch?v=Upqg_OTScNs",
+          "date": "2024-07-26",
+          "servant": "266",
+          "turns": "4T",
+          "runner": "CarmFGO"
+        },
+        {
+          "title": "Shishou Summer 4T",
+          "link": "https://www.youtube.com/watch?v=Gd46UzjslPs",
+          "date": "2024-07-26",
+          "servant": "133",
+          "turns": "4T",
+          "runner": "Lyud"
+        },
+        {
+          "title": "Minamoto-no-Tametomo 4T (No CE)",
+          "link": "https://www.youtube.com/watch?v=iaVGp-HuoDg",
+          "date": "2024-07-26",
+          "servant": "350",
+          "turns": "4T",
+          "runner": "ProbablyAParrot"
+        },
+        {
+          "title": "Bazett 4T (4man)",
+          "link": "https://www.youtube.com/watch?v=5q7x738BzkQ",
+          "date": "2024-07-26",
+          "servant": "336",
+          "turns": "4T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Voyager 4T",
+          "link": "https://www.youtube.com/watch?v=ciPBOisUtYg",
+          "date": "2024-07-26",
+          "servant": "281",
+          "turns": "4T",
+          "runner": "Ise(Kai)"
+        },
+        {
+          "title": "Arjuna Alter 4T (FLO NoCE)",
+          "link": "https://www.youtube.com/watch?v=ARXYYGCT8A8",
+          "date": "2024-07-26",
+          "servant": "247",
+          "turns": "4T",
+          "runner": "Akise"
+        },
+        {
+          "title": "Summer Ibuki 4T (FLO NoCE)",
+          "link": "https://www.youtube.com/watch?v=D2oi0OskXKU",
+          "date": "2024-07-26",
+          "servant": "355",
+          "turns": "4T",
+          "runner": "Tinesh"
+        },
+        {
+          "title": "Melusine 4T (No RNG)",
+          "link": "https://www.youtube.com/watch?v=D2oi0OskXKU",
+          "date": "2024-07-26",
+          "servant": "312_st",
+          "turns": "4T",
+          "runner": "Felt"
+        },
+        {
+          "title": "Taira 4T (NoCE)",
+          "link": "https://www.youtube.com/watch?v=Y-EhbiRbeCc",
+          "date": "2024-07-27",
+          "servant": "303",
+          "turns": "4T",
+          "runner": "Felt"
+        },
+        {
+          "title": "Voyager 4T (4man)",
+          "link": "https://www.youtube.com/watch?v=L0jSQWOeN6s",
+          "date": "2024-07-27",
+          "servant": "281",
+          "turns": "4T",
+          "runner": "Kamager III"
+        },
+        {
+          "title": "BB Summer 4T (FLO)",
+          "link": "https://www.youtube.com/watch?v=Lz3YltEipd0",
+          "date": "2024-07-27",
+          "servant": "220",
+          "turns": "4T",
+          "runner": "Zoropp"
+        },
+        {
+          "title": "Jalter 4T (NoCE)",
+          "link": "https://www.youtube.com/watch?v=0AJ4w09VlT4",
+          "date": "2024-07-28",
+          "servant": "106",
+          "turns": "4T",
+          "runner": "Ray"
+        },
+        {
+          "title": "Gilgamesh 4T",
+          "link": "https://www.youtube.com/watch?v=ZwH32UR-CIU",
+          "date": "2024-07-28",
+          "servant": "12",
+          "turns": "4T",
+          "runner": "Mikazuki"
+        },
+        {
+          "title": "Artoria 4T",
+          "link": "https://www.youtube.com/watch?v=pfRJBE5JupA",
+          "date": "2024-07-28",
+          "servant": "2",
+          "turns": "4T",
+          "runner": "HardChibi"
+        },
+        {
+          "title": "Melusine 4T (NoCEs)",
+          "link": "https://www.youtube.com/watch?v=9-S91YIDqug",
+          "date": "2024-07-28",
+          "servant": "312_aoe",
+          "turns": "4T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Taisui Xingjun 4T",
+          "link": "https://www.youtube.com/watch?v=95HdMeysR1A",
+          "date": "2024-07-28",
+          "servant": "338",
+          "turns": "4T",
+          "runner": "Kamager III"
+        },
+        {
+          "title": "Nero (Caster) 4T (NoCE)",
+          "link": "https://www.youtube.com/watch?v=f1UvMBeE7-I",
+          "date": "2024-07-28",
+          "servant": "175",
+          "turns": "4T",
+          "runner": "Lutrec"
+        },
+        {
+          "title": "Zhang Jue 4T (FLO)",
+          "link": "https://www.youtube.com/watch?v=T3BEI-04dmI",
+          "date": "2024-07-29",
+          "servant": "348",
+          "turns": "4T",
+          "runner": "L11"
+        },
+        {
+          "title": "Galatea 4T",
+          "link": "https://www.youtube.com/watch?v=mL1und2p5Wc",
+          "date": "2024-07-29",
+          "servant": "306",
+          "turns": "4T",
+          "runner": "Hentai Daddy"
+        },
+        {
+          "title": "Summer Okitan 4T",
+          "link": "https://www.youtube.com/watch?v=o1Ai-YCvo08",
+          "date": "2024-07-29",
+          "servant": "317",
+          "turns": "4T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Summer Jalter 4T (NDCE)",
+          "link": "https://x.com/santoryuiai3/status/1817969764972847614",
+          "date": "2024-07-29",
+          "servant": "219",
+          "turns": "4T",
+          "runner": "Ray"
+        }
+      ]
+    }
+  ]
+}
diff --git a/src/content/taInfoData/beast4l.json b/src/content/taInfoData/beast4l.json
index eaa34df..003f3ee 100644
--- a/src/content/taInfoData/beast4l.json
+++ b/src/content/taInfoData/beast4l.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Beast IV:L",
     "releaseDate": "2023-12-26",
@@ -14,7 +15,7 @@
           "title": "Shishou 4T (No MLB DMG CE)",
           "link": "https://www.youtube.com/watch?v=brz21NKMMsY",
           "date": "2023-12-31",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "4T",
           "runner": "Firq"
         },
@@ -22,7 +23,7 @@
           "title": "Shishou 4T (No DMG CE)",
           "link": "https://www.youtube.com/watch?v=J0l-psWpokQ",
           "date": "2023-12-28",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "4T",
           "runner": "Requiem"
         },
@@ -30,7 +31,7 @@
           "title": "Amakusa 4T",
           "link": "https://www.youtube.com/watch?v=ud5JZ__Hk4I",
           "date": "2023-12-31",
-          "servant": "amakusa",
+          "servant": "93",
           "turns": "4T",
           "runner": "Yier"
         },
@@ -38,7 +39,7 @@
           "title": "Romulus 4T (NoMash NoCE)",
           "link": "https://www.youtube.com/watch?v=e0DJEXpysSQ",
           "date": "2023-12-28",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "4T",
           "runner": "Sakazuki"
         },
@@ -46,7 +47,7 @@
           "title": "Melt 4T",
           "link": "https://www.youtube.com/watch?v=c7K5ra2CAxs",
           "date": "2023-12-31",
-          "servant": "melt",
+          "servant": "163",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -54,7 +55,7 @@
           "title": "Okuni 4T",
           "link": "https://www.youtube.com/watch?v=eg5OeQrhQMk",
           "date": "2023-12-29",
-          "servant": "okuni",
+          "servant": "327",
           "turns": "4T",
           "runner": "QP Dangerous"
         },
@@ -62,7 +63,7 @@
           "title": "Kama 4T",
           "link": "https://www.youtube.com/watch?v=9sm8XBglEgo",
           "date": "2023-12-29",
-          "servant": "kama",
+          "servant": "239",
           "turns": "4T",
           "runner": "Requiem"
         },
@@ -70,7 +71,7 @@
           "title": "Melusine 4T (FLO)",
           "link": "https://www.youtube.com/watch?v=XHjExMEg3vQ",
           "date": "2024-01-01",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -78,7 +79,7 @@
           "title": "Gilgamesh 4T",
           "link": "https://www.youtube.com/watch?v=SrDvEaFx3ko",
           "date": "2023-12-31",
-          "servant": "gilgamesh",
+          "servant": "12",
           "turns": "4T",
           "runner": "Yier"
         },
@@ -86,7 +87,7 @@
           "title": "Astrea 4T",
           "link": "https://www.youtube.com/watch?v=kw4E_mCxkKc",
           "date": "2023-12-30",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "4T",
           "runner": "Alastair Hale"
         },
@@ -94,7 +95,7 @@
           "title": "Kijyo Koyo 4T (Solo)",
           "link": "https://www.youtube.com/watch?v=tAUA7Fn_HYo",
           "date": "2023-12-29",
-          "servant": "koyo",
+          "servant": "282",
           "turns": "4T",
           "runner": "MCR"
         },
@@ -102,7 +103,7 @@
           "title": "Tamamo Solo 30T",
           "link": "https://www.youtube.com/watch?v=2wUcojRXTlw",
           "date": "2023-12-27",
-          "servant": "tamamo",
+          "servant": "62",
           "turns": "30T",
           "runner": "Mitsunee"
         },
@@ -110,7 +111,7 @@
           "title": "Dual Taigong Wang 4T",
           "link": "https://www.youtube.com/watch?v=3jU3Az7iM7E",
           "date": "2023-12-27",
-          "servant": "taigongwang",
+          "servant": "331",
           "turns": "4T",
           "runner": "Ryougi Bobby"
         },
@@ -118,7 +119,7 @@
           "title": "Ibuki 4T",
           "link": "https://www.youtube.com/watch?v=dgJfgMHAOpI",
           "date": "2023-12-29",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "4T",
           "runner": "Martyr Kuga"
         },
@@ -126,7 +127,7 @@
           "title": "Ozymandias 4T",
           "link": "https://www.youtube.com/watch?v=Y8qYY875M_I",
           "date": "2023-12-28",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "4T",
           "runner": "Kusanagi"
         },
@@ -134,7 +135,7 @@
           "title": "Arjuna Alter 4T",
           "link": "https://www.youtube.com/watch?v=OTfM7WQl5uI",
           "date": "2023-12-28",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "4T",
           "runner": "Akise"
         },
@@ -142,7 +143,7 @@
           "title": "Galatea 4T",
           "link": "https://www.youtube.com/watch?v=GKCZtn815wA",
           "date": "2023-12-30",
-          "servant": "galatea",
+          "servant": "306",
           "turns": "4T",
           "runner": "Hentai Daddi"
         },
@@ -150,7 +151,7 @@
           "title": "Summer Kiara 4T",
           "link": "https://www.youtube.com/watch?v=b46JRNUIdrM",
           "date": "2023-12-28",
-          "servant": "kiarasummer",
+          "servant": "285",
           "turns": "4T",
           "runner": "Felt"
         }
diff --git a/src/content/taInfoData/case-files-rerun.json b/src/content/taInfoData/case-files-rerun.json
index 6e54788..948acf1 100644
--- a/src/content/taInfoData/case-files-rerun.json
+++ b/src/content/taInfoData/case-files-rerun.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Case Files Rerun 2024",
     "releaseDate": "2024-01-10",
@@ -15,7 +16,7 @@
           "title": "Shishou 3T",
           "link": "https://www.youtube.com/watch?v=j1fFbkfYtvo",
           "date": "2024-01-22",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -23,7 +24,7 @@
           "title": "Shishou 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=Sszw_x7IqVU",
           "date": "2024-01-23",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -31,7 +32,7 @@
           "title": "Muramasa 3T",
           "link": "https://www.youtube.com/watch?v=IyOXmmY9wy8",
           "date": "2024-01-21",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -39,7 +40,7 @@
           "title": "Artoria 3T",
           "link": "https://www.youtube.com/watch?v=UnFsH4t0A4Y",
           "date": "2024-01-22",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "3T",
           "runner": "HardChibi"
         },
@@ -47,7 +48,7 @@
           "title": "Salter 3T",
           "link": "https://www.youtube.com/watch?v=K_8iF_EHP1g",
           "date": "2024-01-21",
-          "servant": "saberalter",
+          "servant": "3",
           "turns": "3T",
           "runner": "im poketar"
         },
@@ -55,7 +56,7 @@
           "title": "Sei 3T",
           "link": "https://www.youtube.com/watch?v=kCajUN2Lz2Q",
           "date": "2024-01-24",
-          "servant": "sei",
+          "servant": "276",
           "turns": "3T",
           "runner": "crimsonmage"
         },
@@ -63,7 +64,7 @@
           "title": "Cindereli 3T",
           "link": "https://www.youtube.com/watch?v=BPc7RTY_c7M",
           "date": "2024-01-21",
-          "servant": "cindereli",
+          "servant": "326",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -71,7 +72,7 @@
           "title": "Kama 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=-4dDZV7ijeM",
           "date": "2024-01-22",
-          "servant": "kama",
+          "servant": "239",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -79,7 +80,7 @@
           "title": "MHXA 3T",
           "link": "https://www.youtube.com/watch?v=TfWsR-hVULo",
           "date": "2024-01-20",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "3T",
           "runner": "Ayumi"
         },
@@ -87,7 +88,7 @@
           "title": "Morgan 3T (6 Cost)",
           "link": "https://www.youtube.com/watch?v=zXQ_FrnBh0k",
           "date": "2024-01-20",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -95,7 +96,7 @@
           "title": "Astrea 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=kwqjMhYrQHY",
           "date": "2024-01-20",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -103,7 +104,7 @@
           "title": "Van Gogh 3T",
           "link": "https://www.youtube.com/watch?v=VbSXl8GthwM",
           "date": "2024-01-20",
-          "servant": "vangogh",
+          "servant": "295",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -111,7 +112,7 @@
           "title": "Hokusai 3T",
           "link": "https://www.youtube.com/watch?v=CIzUCIN-ft4",
           "date": "2024-01-24",
-          "servant": "hokusai",
+          "servant": "198",
           "turns": "3T",
           "runner": "inv4der"
         },
@@ -119,7 +120,7 @@
           "title": "Okita Alter 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=qkah__8XWJk",
           "date": "2024-01-20",
-          "servant": "okitaalter",
+          "servant": "209",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -127,7 +128,7 @@
           "title": "Summer BB 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=VAEjvL34hsc",
           "date": "2024-01-21",
-          "servant": "bbsummer",
+          "servant": "220",
           "turns": "3T",
           "runner": "Felt"
         },
@@ -135,7 +136,7 @@
           "title": "Kijyo Koyo 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=A5-VRkAx__o",
           "date": "2024-01-19",
-          "servant": "koyo",
+          "servant": "282",
           "turns": "3T",
           "runner": "MCR"
         }
@@ -149,7 +150,7 @@
           "title": "Artoria 3T",
           "link": "https://www.youtube.com/watch?v=FQ6Zb_kzrWs",
           "date": "2024-01-21",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "3T",
           "runner": "HardChibi"
         },
@@ -157,7 +158,7 @@
           "title": "Artoria 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=uKercpWUnGs&t=216s",
           "date": "2024-01-19",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "3T",
           "runner": "Fu Windsword"
         },
@@ -165,7 +166,7 @@
           "title": "Altera 3T",
           "link": "https://www.youtube.com/watch?v=WcHpHfFnVrY",
           "date": "2024-01-24",
-          "servant": "altera",
+          "servant": "8",
           "turns": "3T",
           "runner": "Lyud"
         },
@@ -173,7 +174,7 @@
           "title": "Saber Lily 3T",
           "link": "https://www.youtube.com/watch?v=jCwTbmLsGcA",
           "date": "2024-01-18",
-          "servant": "saberlily",
+          "servant": "4",
           "turns": "3T",
           "runner": "Ayumi"
         },
@@ -181,7 +182,7 @@
           "title": "Gilgamesh 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=nWeZ9lo2iYI",
           "date": "2024-01-18",
-          "servant": "gilgamesh",
+          "servant": "12",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -189,7 +190,7 @@
           "title": "Sei 3T",
           "link": "https://www.youtube.com/watch?v=BEGortNzIsQ",
           "date": "2024-01-23",
-          "servant": "sei",
+          "servant": "276",
           "turns": "3T",
           "runner": "inv4der"
         },
@@ -197,7 +198,7 @@
           "title": "Melusine 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=OgoteFJL85A",
           "date": "2024-01-21",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -205,7 +206,7 @@
           "title": "Melusine 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=PTtm_c7F5Ro",
           "date": "2024-01-18",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "Felt"
         },
@@ -213,7 +214,7 @@
           "title": "Ivan 3T",
           "link": "https://www.youtube.com/watch?v=shsogSLclv4",
           "date": "2024-01-24",
-          "servant": "ivan",
+          "servant": "205",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         },
@@ -221,7 +222,7 @@
           "title": "Gong 3T",
           "link": "https://www.youtube.com/watch?v=bc5LvCQO56I&t=244s",
           "date": "2024-01-23",
-          "servant": "gong",
+          "servant": "258",
           "turns": "3T",
           "runner": "BadLuck"
         },
@@ -229,7 +230,7 @@
           "title": "Morgan 3T (NoCEs)",
           "link": "https://www.youtube.com/watch?v=y4XnMyqVGK8",
           "date": "2024-01-18",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -237,7 +238,7 @@
           "title": "Morgan 3T (Lvl 50)",
           "link": "https://www.youtube.com/watch?v=MQ2b6FFPMf8",
           "date": "2024-01-18",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -245,7 +246,7 @@
           "title": "Okita Alter 3T (FLO NoCEs)",
           "link": "https://www.youtube.com/watch?v=7Htl-Ld6f-Q",
           "date": "2024-01-21",
-          "servant": "okitaalter",
+          "servant": "209",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -253,7 +254,7 @@
           "title": "Kingprotea 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=iarswRjrKAI",
           "date": "2024-01-21",
-          "servant": "kingprotea",
+          "servant": "238",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -261,7 +262,7 @@
           "title": "Koyan of Dark 3T",
           "link": "https://www.youtube.com/watch?v=h_jsUQeOXi8",
           "date": "2024-01-21",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -269,7 +270,7 @@
           "title": "Voyager 3T",
           "link": "https://www.youtube.com/watch?v=kQ2pRFR3ZmM",
           "date": "2024-01-20",
-          "servant": "voyager",
+          "servant": "281",
           "turns": "3T",
           "runner": "Ise(Kai)"
         },
@@ -277,7 +278,7 @@
           "title": "Scathach 5T (4Man)",
           "link": "https://www.youtube.com/watch?v=IIk5ypPq9dM",
           "date": "2024-01-23",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "5T",
           "runner": "Requiem"
         },
@@ -285,7 +286,7 @@
           "title": "Li Shuwen 5T (NoCE)",
           "link": "https://www.youtube.com/watch?v=BHNTmj56Adk",
           "date": "2024-01-24",
-          "servant": "oldli",
+          "servant": "235",
           "turns": "5T",
           "runner": "Alastair Hale"
         },
@@ -293,7 +294,7 @@
           "title": "Charlotte 5T",
           "link": "https://www.youtube.com/watch?v=aOuK9RhZSFk",
           "date": "2024-01-20",
-          "servant": "charlotte",
+          "servant": "259",
           "turns": "5T",
           "runner": "xy sunder"
         },
@@ -301,7 +302,7 @@
           "title": "Taira 5T (FLO BCE)",
           "link": "https://www.youtube.com/watch?v=A5F8Rb26tNY",
           "date": "2024-01-22",
-          "servant": "taira",
+          "servant": "303",
           "turns": "5T",
           "runner": "Felt"
         },
@@ -309,7 +310,7 @@
           "title": "Melt 5T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=-WRocbYbzpE",
           "date": "2024-01-23",
-          "servant": "melt",
+          "servant": "163",
           "turns": "5T",
           "runner": "xy sunder"
         },
@@ -317,7 +318,7 @@
           "title": "MHXA 5T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=qFESCN59RFA",
           "date": "2024-01-22",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "5T",
           "runner": "Ayumi"
         }
@@ -331,7 +332,7 @@
           "title": "Skadi 1T",
           "link": "https://www.youtube.com/watch?v=ic-wva9H0Ic",
           "date": "2024-01-16",
-          "servant": "skadi",
+          "servant": "215",
           "turns": "1T",
           "runner": "Firq"
         }
diff --git a/src/content/taInfoData/devilish-bodhisattva.json b/src/content/taInfoData/devilish-bodhisattva.json
index e1afde3..38bcf7a 100644
--- a/src/content/taInfoData/devilish-bodhisattva.json
+++ b/src/content/taInfoData/devilish-bodhisattva.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Devilish Bodhisattva",
     "releaseDate": "2019-04-23",
@@ -15,7 +16,15 @@
           "title": "Shishou 7T (NoDupes)",
           "link": "https://www.youtube.com/watch?v=d1ftVeitR6c",
           "date": "2022-07-09",
-          "servant": "shishou",
+          "servant": "70",
+          "turns": "7T",
+          "runner": "Firq"
+        },
+        {
+          "title": "Summer Skadi 7T",
+          "link": "https://www.youtube.com/watch?v=7HPLGs_LPzs",
+          "date": "2024-07-25",
+          "servant": "357",
           "turns": "7T",
           "runner": "Firq"
         },
@@ -23,7 +32,7 @@
           "title": "Shishou 7T",
           "link": "https://www.youtube.com/watch?v=nYV4jwgpuR0",
           "date": "2022-07-14",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "7T",
           "runner": "KOG"
         },
@@ -31,7 +40,7 @@
           "title": "Shishou 7T",
           "link": "https://www.youtube.com/watch?v=jKoSw1XM6-c",
           "date": "2022-07-07",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "7T",
           "runner": "Requiem"
         },
@@ -39,7 +48,7 @@
           "title": "Jalter 7T",
           "link": "https://www.youtube.com/watch?v=U5wsl09_VVQ",
           "date": "2023-03-21",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "7T",
           "runner": "Ray"
         },
@@ -47,7 +56,7 @@
           "title": "Jalter 7T (NoCE)",
           "link": "https://www.youtube.com/watch?v=RPtMHOxQfjs",
           "date": "2023-11-29",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "7T",
           "runner": "Ray"
         },
@@ -55,7 +64,7 @@
           "title": "Taira 7T (NoCE)",
           "link": "https://www.youtube.com/watch?v=mg8f8TD5AEQ",
           "date": "2023-08-20",
-          "servant": "taira",
+          "servant": "303",
           "turns": "7T",
           "runner": "Felt"
         },
@@ -63,7 +72,7 @@
           "title": "Astrea 7T",
           "link": "https://www.youtube.com/watch?v=aWg9LCcZxro",
           "date": "2023-08-22",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "7T",
           "runner": "Alastair Hale"
         },
@@ -71,7 +80,7 @@
           "title": "Astrea 7T (No Castoria)",
           "link": "https://www.youtube.com/watch?v=fEJTDScu238",
           "date": "2023-01-01",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "7T",
           "runner": "Alastair Hale"
         },
@@ -79,7 +88,7 @@
           "title": "Dioscuri 7T",
           "link": "https://www.youtube.com/watch?v=El9D-LskMHU",
           "date": "2022-06-25",
-          "servant": "dioscuri",
+          "servant": "278",
           "turns": "7T",
           "runner": "Sou"
         },
@@ -87,7 +96,7 @@
           "title": "Maou Nobu 7T",
           "link": "https://www.youtube.com/watch?v=CGGJ7WA6Gqg",
           "date": "2022-12-30",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "7T",
           "runner": "Haru"
         },
@@ -95,7 +104,7 @@
           "title": "Sitonai 7T",
           "link": "https://www.youtube.com/watch?v=RJSedKUyKn0",
           "date": "2022-10-26",
-          "servant": "sitonai",
+          "servant": "224",
           "turns": "7T",
           "runner": "Alastair Hale"
         },
@@ -103,7 +112,7 @@
           "title": "Charlotte 7T",
           "link": "https://www.youtube.com/watch?v=2DhDcxAcUTo",
           "date": "2022-07-07",
-          "servant": "charlotte",
+          "servant": "259",
           "turns": "7T",
           "runner": "Dante09"
         },
@@ -111,7 +120,7 @@
           "title": "MHXA 7T",
           "link": "https://www.youtube.com/watch?v=xGHiUL4HR08",
           "date": "2023-06-13",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "7T",
           "runner": "Ayumi"
         }
diff --git a/src/content/taInfoData/lostbelt-6-5/kiyohime.json b/src/content/taInfoData/lostbelt-6-5/kiyohime.json
new file mode 100644
index 0000000..125d5a5
--- /dev/null
+++ b/src/content/taInfoData/lostbelt-6-5/kiyohime.json
@@ -0,0 +1,49 @@
+{
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
+  "info": {
+    "title": "Kiyohime",
+    "releaseDate": "2024-05-13",
+    "shortdescription": "Help, there is an angry dragon snek that wants to burn me for slightly lying to her",
+    "releaseNumber": 2
+  },
+  "quests": [
+    {
+      "questTitle": "Kiyohime",
+      "description": "",
+      "data": [
+        {
+          "title": "S.Karna Karna Arjuna Junao 5T",
+          "link": "https://youtu.be/f039x5OIl6E",
+          "date": "2024-05-18",
+          "servant": "247",
+          "turns": "5T",
+          "runner": "Akise"
+        },
+        {
+          "title": "Baobhan Arash Habetrot 5T",
+          "link": "https://www.youtube.com/watch?v=a7V5W8MkxO8",
+          "date": "2024-05-31",
+          "servant": "311",
+          "turns": "5T",
+          "runner": "Mikazuki"
+        },
+        {
+          "title": "Cindereli Habenya Douman Arash 5T",
+          "link": "https://www.youtube.com/watch?v=7Z0Fn8tBV4E",
+          "date": "2024-05-14",
+          "servant": "326",
+          "turns": "5T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Daikokuten 5T",
+          "link": "https://www.youtube.com/watch?v=Q7v_joSJmNg",
+          "date": "2024-05-20",
+          "servant": "340",
+          "turns": "5T",
+          "runner": "TokuHer0"
+        }
+      ]
+    }
+  ]
+}
diff --git a/src/content/taInfoData/lostbelt-6-5/kriemhild.json b/src/content/taInfoData/lostbelt-6-5/kriemhild.json
new file mode 100644
index 0000000..da1ebc5
--- /dev/null
+++ b/src/content/taInfoData/lostbelt-6-5/kriemhild.json
@@ -0,0 +1,153 @@
+{
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
+  "info": {
+    "title": "Kriemhild",
+    "releaseDate": "2024-05-13",
+    "shortdescription": "Trying to get Kriemhild acting sane when she's a Berserker and pitted against her husband - Challenge Impossible",
+    "releaseNumber": 3
+  },
+  "quests": [
+    {
+      "questTitle": "Kriemhild",
+      "description": "",
+      "data": [
+        {
+          "title": "Nero Bride 3T (FLO)",
+          "link": "https://www.youtube.com/watch?v=iEOhDVhIKkw",
+          "date": "2024-05-22",
+          "servant": "90",
+          "turns": "3T",
+          "runner": "Lutrec"
+        },
+        {
+          "title": "Saber Diarmuid 3T",
+          "link": "https://www.youtube.com/watch?v=aBBY-smKj2I",
+          "date": "2024-05-27",
+          "servant": "223",
+          "turns": "3T",
+          "runner": "Volcanicz"
+        },
+        {
+          "title": "Muramasa 3T",
+          "link": "https://www.youtube.com/watch?v=Wejdo62W9Ng",
+          "date": "2024-05-16",
+          "servant": "302",
+          "turns": "3T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Artoria 3T (FLO)",
+          "link": "https://www.youtube.com/watch?v=qkZji1N7oLs",
+          "date": "2024-05-25",
+          "servant": "2",
+          "turns": "3T",
+          "runner": "Fu Windsword"
+        },
+        {
+          "title": "Siegfried 3T (NPC)",
+          "link": "https://www.youtube.com/watch?v=BSPUS2kQyeE",
+          "date": "2024-05-20",
+          "servant": "6",
+          "turns": "3T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Jeanne Summer 3T",
+          "link": "https://www.youtube.com/watch?v=_1GgmzU8SJI",
+          "date": "2024-05-18",
+          "servant": "216",
+          "turns": "3T",
+          "runner": "im poketar"
+        },
+        {
+          "title": "Emiya 3T",
+          "link": "https://www.youtube.com/watch?v=hEuWchiPUcM",
+          "date": "2024-05-18",
+          "servant": "11",
+          "turns": "3T",
+          "runner": "Volcanicz"
+        },
+        {
+          "title": "Melusine 3T (Solo)",
+          "link": "https://www.youtube.com/watch?v=pH7iLqMKamE",
+          "date": "2024-05-16",
+          "servant": "312_st",
+          "turns": "3T",
+          "runner": "Felt"
+        },
+        {
+          "title": "Kagetora 3T (FLO)",
+          "link": "https://www.youtube.com/watch?v=j_S20-UZbqo",
+          "date": "2024-05-22",
+          "servant": "252",
+          "turns": "3T",
+          "runner": "Volcanicz"
+        },
+        {
+          "title": "Cindereli 3T",
+          "link": "https://www.youtube.com/watch?v=H_mUuNrZE0I",
+          "date": "2024-05-16",
+          "servant": "326",
+          "turns": "3T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Rider Ishtar 3T",
+          "link": "https://www.youtube.com/watch?v=9jHuxjH6puw",
+          "date": "2024-05-19",
+          "servant": "182",
+          "turns": "3T",
+          "runner": "Volcanicz"
+        },
+        {
+          "title": "Cu Caster 3T (FLO)",
+          "link": "https://www.youtube.com/watch?v=N9ZZ-nuePmA",
+          "date": "2024-05-22",
+          "servant": "38",
+          "turns": "3T",
+          "runner": "Akise"
+        },
+        {
+          "title": "Skadi 3T",
+          "link": "https://www.youtube.com/watch?v=YrvWmFTgMUE",
+          "date": "2024-05-17",
+          "servant": "215",
+          "turns": "3T",
+          "runner": "Firq"
+        },
+        {
+          "title": "Merlin 3T",
+          "link": "https://www.youtube.com/watch?v=kPtC0P-XHag",
+          "date": "2024-05-20",
+          "servant": "150",
+          "turns": "3T",
+          "runner": "Ise(Kai)"
+        },
+        {
+          "title": "Morgan 3T",
+          "link": "https://www.youtube.com/watch?v=hJyf-FFRQUw",
+          "date": "2024-05-15",
+          "servant": "309",
+          "turns": "3T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Astrea 3T (Lvl. 2)",
+          "link": "https://www.youtube.com/watch?v=EPZUkzN9ySQ",
+          "date": "2024-05-19",
+          "servant": "242",
+          "turns": "3T",
+          "runner": "Alastair Hale"
+        },
+        {
+          "title": "Summer BB 3T (4man)",
+          "link": "https://www.youtube.com/watch?v=k7btt-Vti2I",
+          "date": "2024-05-21",
+          "servant": "220",
+          "turns": "3T",
+          "runner": "Volcanicz"
+        }
+      ]
+    }
+  ]
+}
diff --git a/src/content/taInfoData/lostbelt-6-5/moriarty.json b/src/content/taInfoData/lostbelt-6-5/moriarty.json
new file mode 100644
index 0000000..1a8b5a8
--- /dev/null
+++ b/src/content/taInfoData/lostbelt-6-5/moriarty.json
@@ -0,0 +1,81 @@
+{
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
+  "info": {
+    "title": "Moriarty",
+    "releaseDate": "2024-05-13",
+    "shortdescription": "The epic showdown at the Reichenbach Falls - A worthy finale against the Big Bad Evil of this Lostbelt",
+    "releaseNumber": 4
+  },
+  "quests": [
+    {
+      "questTitle": "Moriarty",
+      "description": "",
+      "data": [
+        {
+          "title": "Nero Bride 4T",
+          "link": "https://www.youtube.com/watch?v=wWM5yvCeiIA",
+          "date": "2024-05-25",
+          "servant": "90",
+          "turns": "4T",
+          "runner": "Lutrec"
+        },
+        {
+          "title": "Morgan 4T",
+          "link": "https://www.youtube.com/watch?v=42pTDuQwsQg",
+          "date": "2024-05-16",
+          "servant": "309",
+          "turns": "4T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Arjuna Alter 4T (FLO)",
+          "link": "https://www.youtube.com/watch?v=egmZQvRseX8",
+          "date": "2024-05-23",
+          "servant": "247",
+          "turns": "4T",
+          "runner": "Akise"
+        },
+        {
+          "title": "Da Vinci Ruler 4T",
+          "link": "https://www.youtube.com/watch?v=LUFHZXy0F14",
+          "date": "2024-05-27",
+          "servant": "320",
+          "turns": "4T",
+          "runner": "Lutrec"
+        },
+        {
+          "title": "Taira 4T",
+          "link": "https://www.youtube.com/watch?v=qU_9PFh04Og",
+          "date": "2024-05-19",
+          "servant": "303",
+          "turns": "4T",
+          "runner": "Patrick Bandeira"
+        },
+        {
+          "title": "Taira 4T (Solo)",
+          "link": "https://www.youtube.com/watch?v=PaTeIqKSdVA",
+          "date": "2024-05-16",
+          "servant": "303",
+          "turns": "4T",
+          "runner": "Felt"
+        },
+        {
+          "title": "Bazett 3T",
+          "link": "https://www.youtube.com/watch?v=_7vDBCqLlhU",
+          "date": "2024-05-21",
+          "servant": "336",
+          "turns": "3T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Kiara 4T",
+          "link": "https://www.youtube.com/watch?v=gEa8VJOy2Eg",
+          "date": "2024-05-19",
+          "servant": "167",
+          "turns": "4T",
+          "runner": "im poketar"
+        }
+      ]
+    }
+  ]
+}
diff --git a/src/content/taInfoData/lostbelt-6-5/zhang-jue.json b/src/content/taInfoData/lostbelt-6-5/zhang-jue.json
new file mode 100644
index 0000000..d470713
--- /dev/null
+++ b/src/content/taInfoData/lostbelt-6-5/zhang-jue.json
@@ -0,0 +1,65 @@
+{
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
+  "info": {
+    "title": "Zhang Jue",
+    "releaseDate": "2024-05-13",
+    "shortdescription": "A fight against a general that uses his servants as meat shields - what a way trying to survive an assassination.",
+    "releaseNumber": 1
+  },
+  "quests": [
+    {
+      "questTitle": "Zhang Jue",
+      "description": "",
+      "data": [
+        {
+          "title": "Skadi 2T",
+          "link": "https://youtu.be/OtNYsaM13G4",
+          "date": "2024-05-14",
+          "servant": "215",
+          "turns": "2T",
+          "runner": "Firq"
+        },
+        {
+          "title": "Baobhan 2T",
+          "link": "https://www.youtube.com/watch?v=GmUUF0aiXik",
+          "date": "2024-05-18",
+          "servant": "311",
+          "turns": "2T",
+          "runner": "Mikazuki"
+        },
+        {
+          "title": "Melusine 2T",
+          "link": "https://www.youtube.com/watch?v=9X5Znfw6dWk",
+          "date": "2024-05-20",
+          "servant": "312_aoe",
+          "turns": "2T",
+          "runner": "TokuHer0"
+        },
+        {
+          "title": "Nero (Caster) 2T",
+          "link": "https://www.youtube.com/watch?v=-rK9rpJIFDA",
+          "date": "2024-05-20",
+          "servant": "175",
+          "turns": "2T",
+          "runner": "Lutrec"
+        },
+        {
+          "title": "Morgan 2T",
+          "link": "https://www.youtube.com/watch?v=8mg123LnifQ",
+          "date": "2024-05-14",
+          "servant": "309",
+          "turns": "2T",
+          "runner": "Loki"
+        },
+        {
+          "title": "Bazett 1T",
+          "link": "https://www.youtube.com/watch?v=Zgn8tlXStiI",
+          "date": "2024-05-22",
+          "servant": "336",
+          "turns": "1T",
+          "runner": "Mikazuki"
+        }
+      ]
+    }
+  ]
+}
diff --git a/src/content/taInfoData/lostbelt-6/albion.json b/src/content/taInfoData/lostbelt-6/albion.json
index 6b0e8cd..66be8dc 100644
--- a/src/content/taInfoData/lostbelt-6/albion.json
+++ b/src/content/taInfoData/lostbelt-6/albion.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Albion",
     "releaseDate": "2023-07-10",
@@ -15,7 +16,7 @@
           "title": "Musashi 3T",
           "link": "https://www.youtube.com/watch?v=iVdQPoouI_Y",
           "date": "2023-07-10",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -23,7 +24,7 @@
           "title": "Altera 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=7pyPtTVbd2A",
           "date": "2023-07-13",
-          "servant": "altera",
+          "servant": "8",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -31,7 +32,7 @@
           "title": "Suzuka 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=6ExpIoUJ3aU",
           "date": "2023-07-12",
-          "servant": "suzuka",
+          "servant": "165",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -39,7 +40,7 @@
           "title": "Saber Alter 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=5U42nu-vPnk",
           "date": "2023-07-12",
-          "servant": "saberalter",
+          "servant": "3",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -47,7 +48,7 @@
           "title": "Baobhan Sith 3T",
           "link": "https://www.youtube.com/watch?v=526KYBolySY",
           "date": "2023-07-13",
-          "servant": "baobhansith",
+          "servant": "311",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -55,7 +56,7 @@
           "title": "Shishou 3T",
           "link": "https://www.youtube.com/watch?v=E8fjEYFqrWI",
           "date": "2023-07-12",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -63,7 +64,7 @@
           "title": "Shishou 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=ciIkgHr-QPk",
           "date": "2023-07-12",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -71,7 +72,7 @@
           "title": "Ereshkigal 3T",
           "link": "https://www.youtube.com/watch?v=wQBe74XTy4Q",
           "date": "2023-07-13",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "3T",
           "runner": "Conry"
         },
@@ -79,7 +80,7 @@
           "title": "Skadi 3T",
           "link": "https://www.youtube.com/watch?v=tejeiYpzfqo",
           "date": "2023-07-11",
-          "servant": "skadi",
+          "servant": "215",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -87,7 +88,7 @@
           "title": "Kama 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=SmnwfrXp1sg",
           "date": "2023-07-13",
-          "servant": "kama",
+          "servant": "239",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -95,7 +96,7 @@
           "title": "Summer Jalter 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=-3uDduYI2Cw",
           "date": "2023-07-10",
-          "servant": "jaltersummer",
+          "servant": "219",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -103,7 +104,7 @@
           "title": "Tamamo Cat 3T",
           "link": "https://www.youtube.com/watch?v=Vn6L6Ywin44",
           "date": "2023-07-13",
-          "servant": "tamamocat",
+          "servant": "58",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -111,7 +112,7 @@
           "title": "Cu Alter 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=iaR6PdFmmeQ",
           "date": "2023-07-13",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -119,7 +120,7 @@
           "title": "Suzuka 3T",
           "link": "https://www.youtube.com/watch?v=2dj-55-9Oe8",
           "date": "2023-07-12",
-          "servant": "suzuka",
+          "servant": "165",
           "turns": "3T",
           "runner": "Mitsunee"
         },
@@ -127,7 +128,7 @@
           "title": "Shishou 3T",
           "link": "https://www.youtube.com/watch?v=QB8xf7IeLO4",
           "date": "2023-07-13",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "3T",
           "runner": "KOG"
         }
diff --git a/src/content/taInfoData/lostbelt-6/cernunnos.json b/src/content/taInfoData/lostbelt-6/cernunnos.json
index 61113f8..af516a8 100644
--- a/src/content/taInfoData/lostbelt-6/cernunnos.json
+++ b/src/content/taInfoData/lostbelt-6/cernunnos.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Cernunnos",
     "releaseDate": "2023-07-10",
@@ -15,7 +16,7 @@
           "title": "Shishou 4T (No Castoria)",
           "link": "https://www.youtube.com/watch?v=WrHudtdfivA",
           "date": "2023-07-19",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "4T",
           "runner": "Firq"
         },
@@ -23,7 +24,7 @@
           "title": "Shishou 4T (FLO)",
           "link": "https://www.youtube.com/watch?v=O1f-go7uJQM",
           "date": "2023-07-19",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "4T",
           "runner": "Requiem"
         },
@@ -31,7 +32,7 @@
           "title": "Jalter 4T",
           "link": "https://www.youtube.com/watch?v=VGuXstsJa6k",
           "date": "2023-07-10",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "4T",
           "runner": "Ray"
         },
@@ -39,7 +40,7 @@
           "title": "Altera 4T",
           "link": "https://www.youtube.com/watch?v=BrgJT3gC6sg",
           "date": "2023-07-13",
-          "servant": "altera",
+          "servant": "8",
           "turns": "4T",
           "runner": "Requiem"
         },
@@ -47,7 +48,7 @@
           "title": "Astrea 4T (4 Slot)",
           "link": "https://www.youtube.com/watch?v=0pwUn_bickU",
           "date": "2023-07-17",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "4T",
           "runner": "Alastair Hale"
         },
@@ -55,7 +56,7 @@
           "title": "Meltryllis 4T (4 Slot)",
           "link": "https://www.youtube.com/watch?v=B5uZkC40SQc",
           "date": "2023-07-21",
-          "servant": "melt",
+          "servant": "163",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -63,7 +64,7 @@
           "title": "Kijyo Koyo 4T",
           "link": "https://www.youtube.com/watch?v=hea0QSvTbkY",
           "date": "2023-07-14",
-          "servant": "koyo",
+          "servant": "282",
           "turns": "4T",
           "runner": "MCR"
         },
@@ -71,7 +72,7 @@
           "title": "Charlotte 4T",
           "link": "https://www.youtube.com/watch?v=HMD2WLNGxAk",
           "date": "2023-07-12",
-          "servant": "charlotte",
+          "servant": "259",
           "turns": "4T",
           "runner": "Dante09"
         },
@@ -79,7 +80,7 @@
           "title": "Gong 4T (4 NPs)",
           "link": "https://www.youtube.com/watch?v=qQ82YA4BeGE",
           "date": "2023-07-11",
-          "servant": "gong",
+          "servant": "258",
           "turns": "4T",
           "runner": "BadLuck"
         },
@@ -87,7 +88,7 @@
           "title": "Shishou 4T",
           "link": "https://www.youtube.com/watch?v=dArTitWkttA",
           "date": "2023-07-13",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "4T",
           "runner": "KOG"
         },
@@ -95,7 +96,7 @@
           "title": "Amakusa 4T",
           "link": "https://www.youtube.com/watch?v=hRu3EskLExE",
           "date": "2023-07-27",
-          "servant": "amakusa",
+          "servant": "93",
           "turns": "4T",
           "runner": "Yier"
         }
diff --git a/src/content/taInfoData/lostbelt-6/morgan.json b/src/content/taInfoData/lostbelt-6/morgan.json
index 8d30d3f..6b7bc82 100644
--- a/src/content/taInfoData/lostbelt-6/morgan.json
+++ b/src/content/taInfoData/lostbelt-6/morgan.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/taInfoData.schema.json",
   "info": {
     "title": "Queen Morgan",
     "releaseDate": "2023-06-20",
@@ -15,7 +16,7 @@
           "title": "Skadi 3T",
           "link": "https://www.youtube.com/watch?v=sQ7HHl1Pb3c",
           "date": "2023-06-25",
-          "servant": "skadi",
+          "servant": "215",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -23,7 +24,7 @@
           "title": "Shishou 3T",
           "link": "https://www.youtube.com/watch?v=7wQ6iabqgEc",
           "date": "2023-06-26",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -31,7 +32,7 @@
           "title": "Shishou 3T",
           "link": "https://www.youtube.com/watch?v=peKFxJZzoQ8",
           "date": "2023-06-24",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "3T",
           "runner": "KOG"
         },
@@ -39,7 +40,7 @@
           "title": "MHXA 3T",
           "link": "https://www.youtube.com/watch?v=ezKPe41MP3w",
           "date": "2023-06-28",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -47,7 +48,7 @@
           "title": "NPC Castoria 3T",
           "link": "https://www.youtube.com/watch?v=80u9nMp1k3o",
           "date": "2023-06-28",
-          "servant": "castoria",
+          "servant": "284",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -55,7 +56,7 @@
           "title": "Shishou 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=nDLV_TrnEts",
           "date": "2023-06-28",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -63,7 +64,7 @@
           "title": "Kama 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=3hEmzqo84XU",
           "date": "2023-06-28",
-          "servant": "kama",
+          "servant": "239",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -71,7 +72,7 @@
           "title": "Baobhan Sith 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=RR0u-_oooJ8",
           "date": "2023-06-28",
-          "servant": "baobhansith",
+          "servant": "311",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -79,7 +80,7 @@
           "title": "Jalter 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=Vjai9Qg8TyU",
           "date": "2023-06-24",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -87,7 +88,7 @@
           "title": "MIXA 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=pV6ktirIuPE",
           "date": "2023-06-26",
-          "servant": "mixa",
+          "servant": "308",
           "turns": "3T",
           "runner": "Ayumi"
         },
@@ -95,7 +96,7 @@
           "title": "BB (Summer) 3T (NoCE NoNP FLO)",
           "link": "https://www.youtube.com/watch?v=lgyteVK7cNA",
           "date": "2023-07-06",
-          "servant": "bbsummer",
+          "servant": "220",
           "turns": "3T",
           "runner": "BadLuck"
         },
@@ -103,7 +104,7 @@
           "title": "Cu Alter 3T",
           "link": "https://www.youtube.com/watch?v=7QY_9rYmbwA",
           "date": "2023-06-30",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -111,7 +112,7 @@
           "title": "Saber Lily 3T",
           "link": "https://www.youtube.com/watch?v=v4j8YkJfZJ4",
           "date": "2023-06-26",
-          "servant": "saberlily",
+          "servant": "4",
           "turns": "3T",
           "runner": "Ayumi"
         },
@@ -119,7 +120,7 @@
           "title": "Arjuna Alter 3T (FLO NoCEs)",
           "link": "https://www.youtube.com/watch?v=zqGoTDhNfXM",
           "date": "2023-07-07",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -127,7 +128,7 @@
           "title": "Arjuna Alter 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=SWK8oevHYmk",
           "date": "2023-07-20",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -135,7 +136,7 @@
           "title": "Astrea 3T",
           "link": "https://www.youtube.com/watch?v=FsCfhat10yw",
           "date": "2023-06-24",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "3T",
           "runner": "Duplexubiquitary"
         },
@@ -143,7 +144,7 @@
           "title": "Kijyo Koyo 3T",
           "link": "https://www.youtube.com/watch?v=gL4PqwliXr4",
           "date": "2023-06-28",
-          "servant": "koyo",
+          "servant": "282",
           "turns": "3T",
           "runner": "MCR"
         },
@@ -151,7 +152,7 @@
           "title": "Melt 3T (FLO NoCEs)",
           "link": "https://www.youtube.com/watch?v=2eh_Hitk7uQ",
           "date": "2023-07-14",
-          "servant": "melt",
+          "servant": "163",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -159,7 +160,7 @@
           "title": "Taira 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=iM7KBuvtUH0",
           "date": "2023-07-17",
-          "servant": "taira",
+          "servant": "303",
           "turns": "3T",
           "runner": "Felt"
         }
diff --git a/src/content/teslafest/cq-teslafest.json b/src/content/teslafest/challenge-quest.json
similarity index 87%
rename from src/content/teslafest/cq-teslafest.json
rename to src/content/teslafest/challenge-quest.json
index 5191828..25ef7bb 100644
--- a/src/content/teslafest/cq-teslafest.json
+++ b/src/content/teslafest/challenge-quest.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Lightning in Gilgilgamesh",
     "releaseDate": "2024-03-23",
@@ -14,7 +15,7 @@
           "title": "Scathach 5T (Solo)",
           "link": "https://www.youtube.com/watch?v=z00-lmhHSz8",
           "date": "2024-04-08",
-          "servant": "shishou_bunny",
+          "servant": "70_bunny",
           "turns": "5T",
           "runner": "Firq"
         },
@@ -22,7 +23,7 @@
           "title": "Scathach 5T (Solo)",
           "link": "https://www.youtube.com/watch?v=OgZo-anT5uQ",
           "date": "2024-03-26",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "5T",
           "runner": "Requiem"
         },
@@ -30,7 +31,7 @@
           "title": "Summer Sei 5T",
           "link": "https://www.youtube.com/watch?v=7fPkwG--6Is",
           "date": "2024-03-27",
-          "servant": "summersei",
+          "servant": "323",
           "turns": "5T",
           "runner": "Ise(Kai)"
         },
@@ -38,7 +39,7 @@
           "title": "Artoria 3T",
           "link": "https://www.youtube.com/watch?v=NbQE0SzQH6M",
           "date": "2024-03-28",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "3T",
           "runner": "Fu Windsword"
         },
@@ -46,7 +47,7 @@
           "title": "Nero 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=9u2JdC2cxYU",
           "date": "2024-03-25",
-          "servant": "nero",
+          "servant": "5",
           "turns": "3T",
           "runner": "Lutrec"
         },
@@ -54,7 +55,7 @@
           "title": "Ibuki 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=bUIYd9JI5zE",
           "date": "2024-03-24",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "3T",
           "runner": "inv4der"
         },
@@ -62,7 +63,7 @@
           "title": "Sei 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=_EOrWKda0Mo",
           "date": "2024-03-24",
-          "servant": "sei",
+          "servant": "276",
           "turns": "3T",
           "runner": "Ise(Kai)"
         },
@@ -70,7 +71,7 @@
           "title": "Summer Illya 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=_EOrWKda0Mo",
           "date": "2024-03-30",
-          "servant": "summerillya",
+          "servant": "286",
           "turns": "3T",
           "runner": "Zoropp"
         },
@@ -78,7 +79,7 @@
           "title": "Gong 3T",
           "link": "https://www.youtube.com/watch?v=-hZpsrD-8oA",
           "date": "2024-03-24",
-          "servant": "gong",
+          "servant": "258",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -86,7 +87,7 @@
           "title": "Summer Kama 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=F5DTWtzSz-w",
           "date": "2024-03-24",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -94,7 +95,7 @@
           "title": "Voyager 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=cNvJDcKvjzY",
           "date": "2024-03-26",
-          "servant": "voyager",
+          "servant": "281",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -102,7 +103,7 @@
           "title": "Bazett 2T (w. Morgan)",
           "link": "https://www.youtube.com/watch?v=nZjTgPkemxM",
           "date": "2024-03-24",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -110,7 +111,7 @@
           "title": "Bazett 2T (w. Gong)",
           "link": "https://www.youtube.com/watch?v=MxYdAf5L0rQ",
           "date": "2024-03-26",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "Paradise"
         },
@@ -118,7 +119,7 @@
           "title": "Da Vinci Rider 3T",
           "link": "https://www.youtube.com/watch?v=HnkTrc1HC60",
           "date": "2024-03-27",
-          "servant": "davincirider",
+          "servant": "253",
           "turns": "3T",
           "runner": "Gartendrache"
         },
@@ -126,7 +127,7 @@
           "title": "Ivan 3T",
           "link": "https://www.youtube.com/watch?v=fkRfkKwOGg4",
           "date": "2024-03-24",
-          "servant": "ivan",
+          "servant": "205",
           "turns": "3T",
           "runner": "rotankhero"
         },
@@ -134,7 +135,7 @@
           "title": "Ivan 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=X6JMhUjizvY",
           "date": "2024-03-27",
-          "servant": "ivan",
+          "servant": "205",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         },
@@ -142,7 +143,7 @@
           "title": "Red Hare 3T",
           "link": "https://www.youtube.com/watch?v=QkeY-m2EPVM",
           "date": "2024-03-27",
-          "servant": "redhare",
+          "servant": "231",
           "turns": "3T",
           "runner": "L11"
         },
@@ -150,7 +151,7 @@
           "title": "Morgan 3T",
           "link": "https://www.youtube.com/watch?v=qXqsBAgdjEc",
           "date": "2024-03-24",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Sonicanimefan1"
         },
@@ -158,7 +159,7 @@
           "title": "Morgan 3T",
           "link": "https://www.youtube.com/watch?v=mkF973oq5JU",
           "date": "2024-03-29",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "SilverChaos"
         },
@@ -166,7 +167,7 @@
           "title": "Arjuna Alter 3T",
           "link": "https://www.youtube.com/watch?v=2ALsnvTHErw",
           "date": "2024-03-30",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "geens"
         },
@@ -174,7 +175,7 @@
           "title": "Arjuna Alter 3T (FLO NoDupes)",
           "link": "https://www.youtube.com/watch?v=M9uMA8zYZ3w",
           "date": "2024-03-24",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -182,7 +183,7 @@
           "title": "Arjuna Alter 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=1Eu1qwknSBY",
           "date": "2024-04-06",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -190,7 +191,7 @@
           "title": "Romulus 3T",
           "link": "https://www.youtube.com/watch?v=QwXakPCGTQY",
           "date": "2024-03-24",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "3T",
           "runner": "First_TLN"
         },
@@ -198,7 +199,7 @@
           "title": "Romulus 3T (F2P Support)",
           "link": "https://www.youtube.com/watch?v=pJIUG1k9AZk",
           "date": "2024-03-29",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "3T",
           "runner": "Infernia Rosarum"
         },
@@ -206,7 +207,7 @@
           "title": "Melusine 3T (w. Abby)",
           "link": "https://www.youtube.com/watch?v=BpVSenM9bHY",
           "date": "2024-03-24",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "TopKirby8305"
         },
@@ -214,7 +215,7 @@
           "title": "Melusine 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=H-vQOgCZ6sM",
           "date": "2024-03-24",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "Hentai Daddi"
         },
@@ -222,7 +223,7 @@
           "title": "Melusine 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=13dXuoO9oaE",
           "date": "2024-03-24",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -230,7 +231,7 @@
           "title": "Vritra 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=PEqr6jTGEbM",
           "date": "2024-03-25",
-          "servant": "vritra",
+          "servant": "300",
           "turns": "3T",
           "runner": "Tinesh"
         },
@@ -238,7 +239,7 @@
           "title": "Ereshkigal 3T (FLO)",
           "link": "https://twitter.com/yang_766/status/1774051778234839122",
           "date": "2024-03-30",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "3T",
           "runner": "yang_766"
         }
diff --git a/src/content/teslafest/eq-2020-finale-ii.json b/src/content/teslafest/eq-2020/finale-ii.json
similarity index 87%
rename from src/content/teslafest/eq-2020-finale-ii.json
rename to src/content/teslafest/eq-2020/finale-ii.json
index 7411f80..bf4eb2d 100644
--- a/src/content/teslafest/eq-2020-finale-ii.json
+++ b/src/content/teslafest/eq-2020/finale-ii.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Grand Finale - The Golden Metropolis Returns",
     "releaseDate": "2024-03-18",
@@ -14,7 +15,7 @@
           "title": "Melusine 3T",
           "link": "https://www.youtube.com/watch?v=jdzfh2L7C30",
           "date": "2024-03-18",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -22,7 +23,7 @@
           "title": "Ereshkigal 3T",
           "link": "https://www.youtube.com/watch?v=xXppPoi6z7E",
           "date": "2024-03-22",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -30,7 +31,7 @@
           "title": "Romulus 3T (4man)",
           "link": "https://www.youtube.com/watch?v=3H65DgMm2CQ",
           "date": "2024-03-26",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -38,7 +39,7 @@
           "title": "Morgan 3T",
           "link": "https://www.youtube.com/watch?v=8cVyOWVxkKk",
           "date": "2024-03-18",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -46,7 +47,7 @@
           "title": "Morgan 3T (No 5* Support)",
           "link": "https://twitter.com/santoryuiai3/status/1770102234711273812",
           "date": "2024-03-19",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -54,7 +55,7 @@
           "title": "Arjuna Alter 3T",
           "link": "https://www.youtube.com/watch?v=Ts9kNHgVQCc",
           "date": "2024-03-18",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -62,7 +63,7 @@
           "title": "Arjuna Alter 3T (5man)",
           "link": "https://www.youtube.com/watch?v=fyAEETeNf8Q",
           "date": "2024-03-24",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Sakazuki"
         }
diff --git a/src/content/teslafest/eq-2020-flame-gate.json b/src/content/teslafest/eq-2020/flame-gate.json
similarity index 88%
rename from src/content/teslafest/eq-2020-flame-gate.json
rename to src/content/teslafest/eq-2020/flame-gate.json
index e15e598..5327dd4 100644
--- a/src/content/teslafest/eq-2020-flame-gate.json
+++ b/src/content/teslafest/eq-2020/flame-gate.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Flame Gate",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Artoria 2T",
           "link": "https://www.youtube.com/watch?v=GIk9UhjgO8w",
           "date": "2024-03-15",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "2T",
           "runner": "First_TLN"
         },
@@ -22,7 +23,7 @@
           "title": "Altera 2T",
           "link": "https://www.youtube.com/watch?v=dMOj81oyQi4",
           "date": "2024-03-17",
-          "servant": "altera",
+          "servant": "8",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -30,7 +31,7 @@
           "title": "Okita 2T (w. Helena & Arash)",
           "link": "https://www.youtube.com/watch?v=mJq61IjuaR4",
           "date": "2024-03-18",
-          "servant": "okita",
+          "servant": "68",
           "turns": "2T",
           "runner": "Nyxi"
         },
@@ -38,7 +39,7 @@
           "title": "Okita 2T (w. Nitocris & Taigong Wang)",
           "link": "https://www.youtube.com/watch?v=tuJrX2gxiTE",
           "date": "2024-03-17",
-          "servant": "okita",
+          "servant": "68",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -46,7 +47,7 @@
           "title": "Musashi 2T (w. Morgan)",
           "link": "https://twitter.com/santoryuiai3/status/1769165469427118302",
           "date": "2024-03-17",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "2T",
           "runner": "Ray"
         },
@@ -54,7 +55,7 @@
           "title": "Muramasa 2T",
           "link": "https://www.youtube.com/watch?v=R2spWJxXSfY",
           "date": "2024-03-16",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -62,7 +63,7 @@
           "title": "Ibuki 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=SRNv98fujUQ",
           "date": "2024-03-15",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -70,7 +71,7 @@
           "title": "Barghest 2T",
           "link": "https://www.youtube.com/watch?v=5WMt8kf_loE",
           "date": "2024-03-15",
-          "servant": "barghest",
+          "servant": "310",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -78,7 +79,7 @@
           "title": "Okita Alter (Summer) 2T",
           "link": "https://www.youtube.com/watch?v=CiLA1lHd_E4",
           "date": "2024-03-17",
-          "servant": "summerokitaalter",
+          "servant": "317",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -86,7 +87,7 @@
           "title": "Nero 2T",
           "link": "https://www.youtube.com/watch?v=Yfop1b4o1Us",
           "date": "2024-03-20",
-          "servant": "nero",
+          "servant": "5",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -94,7 +95,7 @@
           "title": "Romulus 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=EhOEeDYidrM",
           "date": "2024-03-18",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -102,7 +103,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=bRfdcSstPLE",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -110,7 +111,7 @@
           "title": "Ereshkigal 2T",
           "link": "https://www.youtube.com/watch?v=NriopMKja-w",
           "date": "2024-03-15",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "2T",
           "runner": "Swarmlord2"
         },
@@ -118,7 +119,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=rREch6zsjGI",
           "date": "2024-03-16",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Gorgeous P."
         },
@@ -126,7 +127,7 @@
           "title": "Morgan 2T (NDCE)",
           "link": "https://twitter.com/santoryuiai3/status/1768687213921874128",
           "date": "2024-03-15",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Ray"
         },
@@ -134,7 +135,7 @@
           "title": "Arjuna Alter 2T (NDCE 4man)",
           "link": "https://www.youtube.com/watch?v=3ev0cmERbtA",
           "date": "2024-03-17",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -142,7 +143,7 @@
           "title": "Jalter 2T (w. Morgan & Oberon)",
           "link": "https://twitter.com/santoryuiai3/status/1768813813468373494",
           "date": "2024-03-16",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "2T",
           "runner": "Ray"
         }
diff --git a/src/content/teslafest/eq-2020-jaguar-forest.json b/src/content/teslafest/eq-2020/jaguar-forest.json
similarity index 87%
rename from src/content/teslafest/eq-2020-jaguar-forest.json
rename to src/content/teslafest/eq-2020/jaguar-forest.json
index d46e55f..c6a2e16 100644
--- a/src/content/teslafest/eq-2020-jaguar-forest.json
+++ b/src/content/teslafest/eq-2020/jaguar-forest.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Welcome to Jaguar Country",
     "releaseDate": "2024-03-16",
@@ -14,7 +15,7 @@
           "title": "Artoria 2T",
           "link": "https://www.youtube.com/watch?v=gpX3D4iQcVo",
           "date": "2024-03-16",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "2T",
           "runner": "Tinesh"
         },
@@ -22,7 +23,7 @@
           "title": "Saber Alter 2T",
           "link": "https://www.youtube.com/watch?v=0fco4_aaahw",
           "date": "2024-03-18",
-          "servant": "saberalter",
+          "servant": "3",
           "turns": "2T",
           "runner": "Lyud"
         },
@@ -30,7 +31,7 @@
           "title": "Barghest 2T",
           "link": "https://www.youtube.com/watch?v=lkgA_qV9IrA",
           "date": "2024-03-16",
-          "servant": "barghest",
+          "servant": "310",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -38,7 +39,7 @@
           "title": "Nero 2T",
           "link": "https://www.youtube.com/watch?v=Rn25x0ZonVs",
           "date": "2024-03-24",
-          "servant": "nero",
+          "servant": "5",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -46,7 +47,7 @@
           "title": "Romulus 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=pd-uY8F4iVM",
           "date": "2024-03-20",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -54,7 +55,7 @@
           "title": "Ereshkigal 2T",
           "link": "https://www.youtube.com/watch?v=_GbNnxxpS0M",
           "date": "2024-03-19",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "2T",
           "runner": "Anthony J"
         },
@@ -62,7 +63,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=zIo0O92S7Us",
           "date": "2024-03-16",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -70,7 +71,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=9nDmoHc-eig",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Sesshou01"
         },
@@ -78,7 +79,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=yookE0tGeZA",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -86,7 +87,7 @@
           "title": "Melt Lambda 2T",
           "link": "https://www.youtube.com/watch?v=5ykZzT3qTN4",
           "date": "2024-03-16",
-          "servant": "meltlambda",
+          "servant": "266",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -94,7 +95,7 @@
           "title": "Karna 2T",
           "link": "https://www.youtube.com/watch?v=o4gZZtTxszs",
           "date": "2024-03-24",
-          "servant": "karna",
+          "servant": "85",
           "turns": "2T",
           "runner": "Blocklv55"
         },
@@ -102,7 +103,7 @@
           "title": "Janta 2T",
           "link": "https://www.youtube.com/watch?v=PtiKVcoMRNs",
           "date": "2024-03-20",
-          "servant": "janta",
+          "servant": "141",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -110,7 +111,7 @@
           "title": "Arjuna Alter 2T",
           "link": "https://www.youtube.com/watch?v=3CSggM4lARY",
           "date": "2024-03-16",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "First_TLN"
         },
@@ -118,7 +119,7 @@
           "title": "Arjuna Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=JYM7ZnZNo2U",
           "date": "2024-03-16",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Ray the II"
         },
@@ -126,7 +127,7 @@
           "title": "Arjuna Alter 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=Pyh4X2SQwGo",
           "date": "2024-03-16",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -134,7 +135,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=wD34eiRINXg&t=190s",
           "date": "2024-03-16",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Liz Happy Club"
         },
@@ -142,7 +143,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=NlJmc2-6rs8",
           "date": "2024-03-21",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Nyxi"
         },
@@ -150,7 +151,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=sNvNP5N-RUU",
           "date": "2024-03-17",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Duplexubiquitary"
         },
@@ -158,7 +159,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=5bgJZs-ryCQ",
           "date": "2024-03-17",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Gorgeous P."
         },
@@ -166,7 +167,7 @@
           "title": "Morgan 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=SB8X13BhLJY",
           "date": "2024-03-17",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -174,7 +175,7 @@
           "title": "Morgan 2T (19 Cost)",
           "link": "https://www.youtube.com/watch?v=tRGrSlgq2Pc",
           "date": "2024-03-17",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -182,7 +183,7 @@
           "title": "Maou Nobu 2T",
           "link": "https://www.youtube.com/watch?v=V6wHrLHDQ50",
           "date": "2024-03-21",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "2T",
           "runner": "Sigrdrífa"
         },
@@ -190,7 +191,7 @@
           "title": "Summer Kama 2T",
           "link": "https://www.youtube.com/watch?v=CfJha9gPuOM",
           "date": "2024-03-19",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "2T",
           "runner": "Kamager III"
         },
@@ -198,7 +199,7 @@
           "title": "Koyanskaya of Darkness 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=XnLoGdfscT8",
           "date": "2024-03-20",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -206,7 +207,7 @@
           "title": "Summer BB 2T",
           "link": "https://www.youtube.com/watch?v=bE75VZ8Mh9w",
           "date": "2024-03-19",
-          "servant": "bbsummer",
+          "servant": "220",
           "turns": "2T",
           "runner": "Zoropp"
         },
@@ -214,7 +215,7 @@
           "title": "Scathach 4T",
           "link": "https://www.youtube.com/watch?v=9JR-gz5RcpI",
           "date": "2024-03-17",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "4T",
           "runner": "Requiem"
         }
diff --git a/src/content/teslafest/eq-2020-pawn-shop.json b/src/content/teslafest/eq-2020/pawn-shop.json
similarity index 87%
rename from src/content/teslafest/eq-2020-pawn-shop.json
rename to src/content/teslafest/eq-2020/pawn-shop.json
index 24b3859..2972a78 100644
--- a/src/content/teslafest/eq-2020-pawn-shop.json
+++ b/src/content/teslafest/eq-2020/pawn-shop.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Moolah's Pawn Shop",
     "releaseDate": "2024-03-17",
@@ -14,7 +15,7 @@
           "title": "Ozymandias 5T",
           "link": "https://www.youtube.com/watch?v=5FotXqLi8eA",
           "date": "2024-03-21",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "5T",
           "runner": "Zectry"
         },
@@ -22,7 +23,7 @@
           "title": "Cindereli 5T",
           "link": "https://www.youtube.com/watch?v=B8gWE4c8qM0",
           "date": "2024-03-21",
-          "servant": "cindereli",
+          "servant": "326",
           "turns": "5T",
           "runner": "Sakazuki"
         }
diff --git a/src/content/teslafest/eq-2020-rice-ball-shop.json b/src/content/teslafest/eq-2020/rice-ball-shop.json
similarity index 87%
rename from src/content/teslafest/eq-2020-rice-ball-shop.json
rename to src/content/teslafest/eq-2020/rice-ball-shop.json
index c55adca..0a91157 100644
--- a/src/content/teslafest/eq-2020-rice-ball-shop.json
+++ b/src/content/teslafest/eq-2020/rice-ball-shop.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Rice Ball Franchise Shop No. 1",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Tamamo (Summer) 2T",
           "link": "https://www.youtube.com/watch?v=wbV0VkxkgVo",
           "date": "2024-03-15",
-          "servant": "summertamamo",
+          "servant": "128",
           "turns": "2T",
           "runner": "Liz Happy Club"
         },
@@ -22,7 +23,7 @@
           "title": "Brynhild 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=Kme2sdkMvBo",
           "date": "2024-03-18",
-          "servant": "brynhild",
+          "servant": "88",
           "turns": "2T",
           "runner": "Sigrdrífa"
         },
@@ -30,7 +31,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=YXUwwY0e5Uw",
           "date": "2024-03-16",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "2T",
           "runner": "Sesshou01"
         },
@@ -38,7 +39,7 @@
           "title": "Melusine 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=YXUwwY0e5Uw",
           "date": "2024-03-15",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -46,7 +47,7 @@
           "title": "Kagetora 2T",
           "link": "https://www.youtube.com/watch?v=aU8Y8lpc12s",
           "date": "2024-03-16",
-          "servant": "kagetora",
+          "servant": "252",
           "turns": "2T",
           "runner": "Tinesh"
         },
@@ -54,7 +55,7 @@
           "title": "Scathach 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=I4dGfI8K2Xo",
           "date": "2024-03-17",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -62,7 +63,7 @@
           "title": "Enkidu 2T (4man)",
           "link": "https://www.youtube.com/watch?v=k68VDhh480Y",
           "date": "2024-03-16",
-          "servant": "enkidu",
+          "servant": "143",
           "turns": "2T",
           "runner": "Ise(Kai)"
         },
@@ -70,7 +71,7 @@
           "title": "Enkidu 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=NUBljJdeN4U",
           "date": "2024-03-22",
-          "servant": "enkidu",
+          "servant": "143",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -78,7 +79,7 @@
           "title": "Kiyohime (Summer) 2T",
           "link": "https://www.youtube.com/watch?v=JUTlUlRV2Fs",
           "date": "2024-03-16",
-          "servant": "summerkiyohime",
+          "servant": "134",
           "turns": "2T",
           "runner": "Gorgeous P."
         },
@@ -86,7 +87,7 @@
           "title": "Taiga 2T",
           "link": "https://www.youtube.com/watch?v=JOvEqH81VbU",
           "date": "2024-03-18",
-          "servant": "taiga",
+          "servant": "148",
           "turns": "2T",
           "runner": "Taiga"
         },
@@ -94,7 +95,7 @@
           "title": "Taiga 2T",
           "link": "https://www.youtube.com/watch?v=HxLOn7QlRTA",
           "date": "2024-03-16",
-          "servant": "taiga",
+          "servant": "148",
           "turns": "2T",
           "runner": "Ray the II"
         },
@@ -102,7 +103,7 @@
           "title": "Romulus 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=AfggRidr_Uo",
           "date": "2024-03-17",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -110,7 +111,7 @@
           "title": "Ereshkigal 2T",
           "link": "https://www.youtube.com/watch?v=9FobAzm8ZHY",
           "date": "2024-03-17",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -118,7 +119,7 @@
           "title": "Ereshkigal 2T (NoCE)",
           "link": "https://www.youtube.com/watch?v=M_tf5DuvvTI",
           "date": "2024-03-17",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "2T",
           "runner": "Swarmlord2"
         },
@@ -126,7 +127,7 @@
           "title": "Karna 2T (4man)",
           "link": "https://www.youtube.com/watch?v=ZZdQE_el_SA",
           "date": "2024-04-07",
-          "servant": "karna",
+          "servant": "85",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -134,7 +135,7 @@
           "title": "Summer Yu 2T",
           "link": "https://www.youtube.com/watch?v=62vkxTWUBIY",
           "date": "2024-03-18",
-          "servant": "summeryu",
+          "servant": "288",
           "turns": "2T",
           "runner": "Lyud"
         },
@@ -142,7 +143,7 @@
           "title": "Summer Yu 2T",
           "link": "https://www.youtube.com/watch?v=59BXpBG84OU",
           "date": "2024-03-16",
-          "servant": "summeryu",
+          "servant": "288",
           "turns": "2T",
           "runner": "Kamager III"
         },
@@ -150,7 +151,7 @@
           "title": "Summer Yu 2T",
           "link": "https://www.youtube.com/watch?v=aGQ3RuG_-RM",
           "date": "2024-03-23",
-          "servant": "summeryu",
+          "servant": "288",
           "turns": "2T",
           "runner": "Nyxi"
         },
@@ -158,7 +159,7 @@
           "title": "Melt Lambda 2T",
           "link": "https://www.youtube.com/watch?v=uFOcbGj5yzc",
           "date": "2024-03-16",
-          "servant": "meltlambda",
+          "servant": "266",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -166,7 +167,7 @@
           "title": "Ozymandias 2T",
           "link": "https://www.youtube.com/watch?v=l9TuRq4WD2o",
           "date": "2024-03-15",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -174,7 +175,7 @@
           "title": "Arjuna Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=EBtlKA8Zebc",
           "date": "2024-03-16",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -182,7 +183,7 @@
           "title": "Morgan 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=qHPczHi65Ps",
           "date": "2024-03-15",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -190,7 +191,7 @@
           "title": "MHXA 2T",
           "link": "https://www.youtube.com/watch?v=HohUbwoU5DE",
           "date": "2024-03-18",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "2T",
           "runner": "Anthony J"
         },
@@ -198,7 +199,7 @@
           "title": "Cu Alter 2T (4man)",
           "link": "https://www.youtube.com/watch?v=IDkaXVUVMm4",
           "date": "2024-03-15",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -206,7 +207,7 @@
           "title": "Da Vinci Ruler 2T",
           "link": "https://twitter.com/LutrecTA/status/1769450074822574261",
           "date": "2024-03-17",
-          "servant": "summerdavinci",
+          "servant": "320",
           "turns": "2T",
           "runner": "Lutrec"
         }
diff --git a/src/content/teslafest/eq-2020-skyscraper-monster.json b/src/content/teslafest/eq-2020/skyscraper-monster.json
similarity index 87%
rename from src/content/teslafest/eq-2020-skyscraper-monster.json
rename to src/content/teslafest/eq-2020/skyscraper-monster.json
index 213b01a..d16671c 100644
--- a/src/content/teslafest/eq-2020-skyscraper-monster.json
+++ b/src/content/teslafest/eq-2020/skyscraper-monster.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Skyscraper Monster",
     "releaseDate": "2024-03-16",
@@ -14,7 +15,7 @@
           "title": "Baobhan Sith 2T",
           "link": "https://www.youtube.com/watch?v=KgM20h_Y3d0",
           "date": "2024-03-17",
-          "servant": "baobhansith",
+          "servant": "311",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -22,7 +23,7 @@
           "title": "Sei 2T",
           "link": "https://www.youtube.com/watch?v=2XgPUSHqvck",
           "date": "2024-03-17",
-          "servant": "sei",
+          "servant": "276",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -30,7 +31,7 @@
           "title": "Melusine 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=RiBu3tNtimU",
           "date": "2024-03-17",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -38,7 +39,7 @@
           "title": "Romulus 2T (NoCE)",
           "link": "https://www.youtube.com/watch?v=0DAcqHq9xdU",
           "date": "2024-03-19",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -46,7 +47,7 @@
           "title": "Ereshkigal 2T",
           "link": "https://www.youtube.com/watch?v=tmVdPXf7LbU",
           "date": "2024-03-17",
-          "servant": "ereshkigal",
+          "servant": "196",
           "turns": "2T",
           "runner": "Conry"
         },
@@ -54,7 +55,7 @@
           "title": "Izumo no Okuni 2T",
           "link": "https://www.youtube.com/watch?v=YE5SNty6Ci8",
           "date": "2024-03-16",
-          "servant": "okuni",
+          "servant": "327",
           "turns": "2T",
           "runner": "Kamager III"
         },
@@ -62,7 +63,7 @@
           "title": "Izumo no Okuni 2T (10Cost)",
           "link": "https://www.youtube.com/watch?v=of5avLvMihw",
           "date": "2024-03-18",
-          "servant": "okuni",
+          "servant": "327",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -70,7 +71,7 @@
           "title": "Illya 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=hSzGgc1mP-U",
           "date": "2024-03-22",
-          "servant": "illya",
+          "servant": "136",
           "turns": "2T",
           "runner": "Zoropp"
         },
@@ -78,7 +79,7 @@
           "title": "Nero Caster 2T (FLO NoCE)",
           "link": "https://twitter.com/LutrecTA/status/1769746018113831158",
           "date": "2024-03-18",
-          "servant": "nerocaster",
+          "servant": "175",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -86,7 +87,7 @@
           "title": "Shuten Caster 2T",
           "link": "https://www.youtube.com/watch?v=y0Cls8YiWeI",
           "date": "2024-03-17",
-          "servant": "shutencaster",
+          "servant": "225",
           "turns": "2T",
           "runner": "Tinesh"
         },
@@ -94,7 +95,7 @@
           "title": "Merlin 2T",
           "link": "https://www.youtube.com/watch?v=IXx86fVnbSk",
           "date": "2024-03-16",
-          "servant": "merlin",
+          "servant": "150",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -102,7 +103,7 @@
           "title": "Merlin 2T",
           "link": "https://www.youtube.com/watch?v=yHGt8CQ2Rs8",
           "date": "2024-03-18",
-          "servant": "merlin",
+          "servant": "150",
           "turns": "2T",
           "runner": "Ise(Kai)"
         },
@@ -110,7 +111,7 @@
           "title": "Skadi 2T",
           "link": "https://www.youtube.com/watch?v=aSTr2G7IW_M",
           "date": "2024-03-17",
-          "servant": "skadi",
+          "servant": "215",
           "turns": "2T",
           "runner": "Firq"
         },
@@ -118,7 +119,7 @@
           "title": "Castoria 2T",
           "link": "https://www.youtube.com/watch?v=NG7iI5febaQ",
           "date": "2024-03-21",
-          "servant": "castoria",
+          "servant": "284",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -126,7 +127,7 @@
           "title": "Miss Crane 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=ymjOgTgmnPQ",
           "date": "2024-03-18",
-          "servant": "misscrane",
+          "servant": "307",
           "turns": "2T",
           "runner": "QP Dangerous"
         },
@@ -134,7 +135,7 @@
           "title": "Hans 2T",
           "link": "https://www.youtube.com/watch?v=nZftQeoFBds",
           "date": "2024-03-18",
-          "servant": "hans",
+          "servant": "33",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -142,7 +143,7 @@
           "title": "Jekyll & Hyde 2T",
           "link": "https://www.youtube.com/watch?v=v_s7mKBWNyc",
           "date": "2024-03-18",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "2T",
           "runner": "Rikohaiji"
         },
@@ -150,7 +151,7 @@
           "title": "Arjuna Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=iWYMM6C3vbQ",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -158,7 +159,7 @@
           "title": "Arjuna Alter 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=0A1B2Yc_NVw",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -166,7 +167,7 @@
           "title": "Morgan 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=susehGkuxfQ",
           "date": "2024-03-16",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -174,7 +175,7 @@
           "title": "Morgan 2T (FLO NoCE NoNP)",
           "link": "https://www.youtube.com/watch?v=lA_t9fNV6Nk",
           "date": "2024-03-16",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -182,7 +183,7 @@
           "title": "Summer Jalter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=PKrPJNndlW0",
           "date": "2024-03-16",
-          "servant": "jaltersummer",
+          "servant": "219",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -190,7 +191,7 @@
           "title": "Summer Sei 2T",
           "link": "https://www.youtube.com/watch?v=QZpVNKGouyg",
           "date": "2024-03-16",
-          "servant": "summersei",
+          "servant": "323",
           "turns": "2T",
           "runner": "Ise(Kai)"
         },
@@ -198,7 +199,7 @@
           "title": "Tamamo Cat 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=_VhJwYMiUB4",
           "date": "2024-03-19",
-          "servant": "tamamocat",
+          "servant": "58",
           "turns": "2T",
           "runner": "Rikohaiji"
         },
@@ -206,7 +207,7 @@
           "title": "Cu Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=EcoE7REerfg",
           "date": "2024-03-16",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "2T",
           "runner": "Ryougi Bobby"
         },
@@ -214,7 +215,7 @@
           "title": "Taira 2T",
           "link": "https://www.youtube.com/watch?v=XuM9Eq2CZJY",
           "date": "2024-03-16",
-          "servant": "taira",
+          "servant": "303",
           "turns": "2T",
           "runner": "Anthony J"
         },
@@ -222,7 +223,7 @@
           "title": "Okita Alter 2T",
           "link": "https://www.youtube.com/watch?v=7j03DlcgHIE",
           "date": "2024-03-16",
-          "servant": "okitaalter",
+          "servant": "209",
           "turns": "2T",
           "runner": "Blocklv55"
         }
diff --git a/src/content/teslafest/eq-2020-sweet-universe.json b/src/content/teslafest/eq-2020/sweet-universe.json
similarity index 87%
rename from src/content/teslafest/eq-2020-sweet-universe.json
rename to src/content/teslafest/eq-2020/sweet-universe.json
index cfe2731..b22bca9 100644
--- a/src/content/teslafest/eq-2020-sweet-universe.json
+++ b/src/content/teslafest/eq-2020/sweet-universe.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Sweets Universe",
     "releaseDate": "2024-03-17",
@@ -14,7 +15,7 @@
           "title": "Maou Nobu 3T",
           "link": "https://www.youtube.com/watch?v=bdimFAP0cXc",
           "date": "2024-03-17",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "3T",
           "runner": "Ray the II"
         },
@@ -22,7 +23,7 @@
           "title": "Musashi 2T",
           "link": "https://www.youtube.com/watch?v=S3omeS0AYgo",
           "date": "2024-03-24",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "2T",
           "runner": "Sunder"
         },
@@ -30,7 +31,7 @@
           "title": "Musashi 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=ybK4XV7v7e0",
           "date": "2024-03-27",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -38,7 +39,7 @@
           "title": "Ibuki 2T",
           "link": "https://www.youtube.com/watch?v=VLgnnmx4D7g",
           "date": "2024-03-17",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -46,7 +47,7 @@
           "title": "Saber Alter 2T",
           "link": "https://www.youtube.com/watch?v=KNEK2fL-ptw",
           "date": "2024-03-24",
-          "servant": "saberalter",
+          "servant": "3",
           "turns": "2T",
           "runner": "Shawn Sun"
         },
@@ -54,7 +55,7 @@
           "title": "Nero Bride 2T (w. Casgil & Medb)",
           "link": "https://www.youtube.com/watch?v=1Blot2gjslw",
           "date": "2024-04-11",
-          "servant": "nerobride",
+          "servant": "90",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -62,7 +63,7 @@
           "title": "Romulus 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=ltv8Cr0GPPg",
           "date": "2024-03-22",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -70,7 +71,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=QtofiRzGGXw",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -78,7 +79,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=v9TIfEXx_HU",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Felt"
         },
@@ -86,7 +87,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=LKX3jLg57q4",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -94,7 +95,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=TRwF6JU4BEQ",
           "date": "2024-03-17",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -102,7 +103,7 @@
           "title": "Karna 2T",
           "link": "https://www.youtube.com/watch?v=CqQcZFWZwCk",
           "date": "2024-03-17",
-          "servant": "karna",
+          "servant": "85",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -110,7 +111,7 @@
           "title": "Scathach 2T",
           "link": "https://www.youtube.com/watch?v=_mKuvVL7KtU",
           "date": "2024-03-17",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -118,7 +119,7 @@
           "title": "Ozymandias 2T",
           "link": "https://www.youtube.com/watch?v=3n-OPY99Qcw",
           "date": "2024-03-17",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -126,7 +127,7 @@
           "title": "Illya 2T",
           "link": "https://www.youtube.com/watch?v=S7VWJyJWRd8",
           "date": "2024-03-22",
-          "servant": "illya",
+          "servant": "136",
           "turns": "2T",
           "runner": "MCR"
         },
@@ -134,7 +135,7 @@
           "title": "Charlotte Summer 2T",
           "link": "https://www.youtube.com/watch?v=_Bok9VXgRmA",
           "date": "2024-03-17",
-          "servant": "summercharlotte",
+          "servant": "319",
           "turns": "2T",
           "runner": "Dante"
         },
@@ -142,7 +143,7 @@
           "title": "MHX 2T",
           "link": "https://www.youtube.com/watch?v=GGnzoHtHGbs",
           "date": "2024-03-17",
-          "servant": "mhx",
+          "servant": "86",
           "turns": "2T",
           "runner": "Ayumi"
         },
@@ -150,7 +151,7 @@
           "title": "Koyanskaya of Light 2T",
           "link": "https://www.youtube.com/watch?v=HfQte4l549A",
           "date": "2024-03-27",
-          "servant": "koyanlight",
+          "servant": "314",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -158,7 +159,7 @@
           "title": "Arjuna Alter 2T",
           "link": "https://www.youtube.com/watch?v=8xsxfCBv4FE",
           "date": "2024-03-22",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -166,7 +167,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=eDZr8a2BrZs",
           "date": "2024-03-22",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Ray"
         },
@@ -174,7 +175,7 @@
           "title": "Cu Alter 2T",
           "link": "https://www.youtube.com/watch?v=6cMEXtmgBTM",
           "date": "2024-03-22",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -182,7 +183,7 @@
           "title": "Astrea 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=PAsyKNWPsfg",
           "date": "2024-03-28",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -190,7 +191,7 @@
           "title": "Da Vinci Ruler 2T",
           "link": "https://twitter.com/LutrecTA/status/1770049305702813787",
           "date": "2024-03-19",
-          "servant": "summerdavinci",
+          "servant": "320",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -198,7 +199,7 @@
           "title": "Jalter 2T (w. Elizabeth)",
           "link": "https://www.youtube.com/watch?v=iwVJRGk-tO4",
           "date": "2024-03-18",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "2T",
           "runner": "Ray the II"
         },
@@ -206,7 +207,7 @@
           "title": "Jalter 2T",
           "link": "https://www.youtube.com/watch?v=m7OBOU7DBk4",
           "date": "2024-03-17",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "2T",
           "runner": "Ray"
         },
@@ -214,7 +215,7 @@
           "title": "Jalter 2T (NoCE)",
           "link": "https://twitter.com/santoryuiai3/status/1770250552619814933",
           "date": "2024-03-20",
-          "servant": "jalter",
+          "servant": "106",
           "turns": "2T",
           "runner": "Ray"
         },
@@ -222,7 +223,7 @@
           "title": "Taira 2T",
           "link": "https://www.youtube.com/watch?v=EgfPk-cSXus",
           "date": "2024-03-17",
-          "servant": "taira",
+          "servant": "303",
           "turns": "2T",
           "runner": "Felt"
         },
@@ -230,7 +231,7 @@
           "title": "Space Ishtar 2T",
           "link": "https://www.youtube.com/watch?v=lWlcu4W_4Go",
           "date": "2024-03-21",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "2T",
           "runner": "Nirrin"
         },
@@ -238,7 +239,7 @@
           "title": "Koyanskaya of Darkness 2T",
           "link": "https://www.youtube.com/watch?v=3zydh0QEmu0",
           "date": "2024-03-19",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -246,7 +247,7 @@
           "title": "Abby 2T",
           "link": "https://www.youtube.com/watch?v=FftWUVnah2I",
           "date": "2024-03-19",
-          "servant": "abby",
+          "servant": "195",
           "turns": "2T",
           "runner": "Sol Sovereign"
         }
diff --git a/src/content/teslafest/eq-2021-bewitched.json b/src/content/teslafest/eq-2021/bewitched.json
similarity index 87%
rename from src/content/teslafest/eq-2021-bewitched.json
rename to src/content/teslafest/eq-2021/bewitched.json
index d32648e..c9ddf6b 100644
--- a/src/content/teslafest/eq-2021-bewitched.json
+++ b/src/content/teslafest/eq-2021/bewitched.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "BE-Witched (Curse)",
     "releaseDate": "2024-03-19",
@@ -14,7 +15,7 @@
           "title": "Sigurd 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=rpeRrBzZ8y4",
           "date": "2024-03-22",
-          "servant": "sigurd",
+          "servant": "213",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         },
@@ -22,7 +23,7 @@
           "title": "Nero Bride 3T (F2P Support)",
           "link": "https://www.youtube.com/watch?v=DpUiSyzOyXQ",
           "date": "2024-03-25",
-          "servant": "nerobride",
+          "servant": "90",
           "turns": "3T",
           "runner": "Infernia Rosarum"
         },
@@ -30,7 +31,7 @@
           "title": "Nero Bride 3T (Lvl. 2)",
           "link": "https://twitter.com/LutrecTA/status/1771177568747635118",
           "date": "2024-03-22",
-          "servant": "nerobride",
+          "servant": "90",
           "turns": "3T",
           "runner": "Lutrec"
         },
@@ -38,7 +39,7 @@
           "title": "Gilgamesh 3T",
           "link": "https://www.youtube.com/watch?v=q6yMWO2LFUM",
           "date": "2024-03-20",
-          "servant": "gilgamesh",
+          "servant": "12",
           "turns": "3T",
           "runner": "Gorgeous P."
         },
@@ -46,7 +47,7 @@
           "title": "Fujino 3T",
           "link": "https://www.youtube.com/watch?v=CFlUil7cXqE",
           "date": "2024-03-25",
-          "servant": "fujino",
+          "servant": "200",
           "turns": "3T",
           "runner": "Blocklv55"
         },
@@ -54,7 +55,7 @@
           "title": "Baobhan Sith 3T",
           "link": "https://www.youtube.com/watch?v=6whjNuNHnnI",
           "date": "2024-03-24",
-          "servant": "baobhansith",
+          "servant": "311",
           "turns": "3T",
           "runner": "Nyxi"
         },
@@ -62,7 +63,7 @@
           "title": "Summer Illya 3T",
           "link": "https://www.youtube.com/watch?v=wVloyS4HwSo",
           "date": "2024-03-21",
-          "servant": "summerillya",
+          "servant": "286",
           "turns": "3T",
           "runner": "zoropp"
         },
@@ -70,7 +71,7 @@
           "title": "Brynhild 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=gVusXCtt0g8",
           "date": "2024-03-21",
-          "servant": "brynhild",
+          "servant": "88",
           "turns": "3T",
           "runner": "Sigrdrífa"
         },
@@ -78,7 +79,7 @@
           "title": "Romulus 3T (3 Cost)",
           "link": "https://www.youtube.com/watch?v=O9COj4g60-M",
           "date": "2024-03-28",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -86,7 +87,7 @@
           "title": "Melusine 3T (Lvl. 1)",
           "link": "https://www.youtube.com/watch?v=WH7G1uBtEHk",
           "date": "2024-03-22",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -94,7 +95,7 @@
           "title": "Taiga 3T",
           "link": "https://www.youtube.com/watch?v=V95BpzpFWoI",
           "date": "2024-03-25",
-          "servant": "taiga",
+          "servant": "148",
           "turns": "3T",
           "runner": "Taiga"
         },
@@ -102,7 +103,7 @@
           "title": "Ozymandias 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=H7zBBN7RUXo",
           "date": "2024-03-19",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -110,7 +111,7 @@
           "title": "Summer Caenis 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=dfOFE-vF-vI",
           "date": "2024-03-20",
-          "servant": "summercaenis",
+          "servant": "322",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -118,7 +119,7 @@
           "title": "Rider Ishtar 3T",
           "link": "https://www.youtube.com/watch?v=_IpVYgtMOqI",
           "date": "2024-03-22",
-          "servant": "riderishtar",
+          "servant": "182",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -126,7 +127,7 @@
           "title": "Sanzang 3T",
           "link": "https://www.youtube.com/watch?v=BdpfqnGsCyA&t=224s",
           "date": "2024-03-19",
-          "servant": "sanzang",
+          "servant": "113",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -134,7 +135,7 @@
           "title": "Castoria 3T",
           "link": "https://www.youtube.com/watch?v=kYn5Ubz4g9o",
           "date": "2024-03-22",
-          "servant": "castoria",
+          "servant": "284",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -142,7 +143,7 @@
           "title": "Miss Crane 3T",
           "link": "https://www.youtube.com/watch?v=iikUbWWA-Xc",
           "date": "2024-03-22",
-          "servant": "misscrane",
+          "servant": "307",
           "turns": "3T",
           "runner": "QP Dangerous"
         },
@@ -150,7 +151,7 @@
           "title": "Kojirou 3T",
           "link": "https://www.youtube.com/watch?v=cITjpOzF7vg",
           "date": "2024-03-22",
-          "servant": "kojirou",
+          "servant": "39",
           "turns": "3T",
           "runner": "Conry"
         },
@@ -158,7 +159,7 @@
           "title": "Jekyll & Hyde 3T (4man)",
           "link": "https://www.youtube.com/watch?v=m6ZJIfeTtWU",
           "date": "2024-03-19",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "3T",
           "runner": "Rikohaiji"
         },
@@ -166,7 +167,7 @@
           "title": "Stheno 3T",
           "link": "https://www.youtube.com/watch?v=eUWnXU7Xgjs",
           "date": "2024-03-25",
-          "servant": "stheno",
+          "servant": "41",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -174,7 +175,7 @@
           "title": "Morgan 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=Ok4ylQvEjwA",
           "date": "2024-03-23",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -182,7 +183,7 @@
           "title": "Morgan 3T (6 Cost)",
           "link": "https://www.youtube.com/watch?v=zrMN7DeyHIw",
           "date": "2024-03-19",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -190,7 +191,7 @@
           "title": "Arjuna Alter 3T (6 Cost)",
           "link": "https://www.youtube.com/watch?v=upGvLuoe2L4",
           "date": "2024-03-28",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -198,7 +199,7 @@
           "title": "Da Vinci Ruler 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=m7hsS5ppPaI",
           "date": "2024-03-20",
-          "servant": "summerdavinci",
+          "servant": "320",
           "turns": "3T",
           "runner": "Tinesh"
         },
@@ -206,7 +207,7 @@
           "title": "Taira 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=JOaUhugHI6U",
           "date": "2024-03-20",
-          "servant": "taira",
+          "servant": "303",
           "turns": "3T",
           "runner": "Anthony J"
         },
@@ -214,7 +215,7 @@
           "title": "Summer Kama 3T",
           "link": "https://www.youtube.com/watch?v=-v0-vGpG-gI",
           "date": "2024-03-19",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -222,7 +223,7 @@
           "title": "Bazett 2T",
           "link": "https://www.youtube.com/watch?v=kMQzJlKvMrs",
           "date": "2024-03-19",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "First_TLN"
         },
@@ -230,7 +231,7 @@
           "title": "Bazett 2T (3 Cost)",
           "link": "https://www.youtube.com/watch?v=nx50uGiCYNw",
           "date": "2024-03-24",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/eq-2021-bride-main-event.json b/src/content/teslafest/eq-2021/bride-main-event.json
similarity index 87%
rename from src/content/teslafest/eq-2021-bride-main-event.json
rename to src/content/teslafest/eq-2021/bride-main-event.json
index 1349833..979508b 100644
--- a/src/content/teslafest/eq-2021-bride-main-event.json
+++ b/src/content/teslafest/eq-2021/bride-main-event.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Main Event - Final Match",
     "releaseDate": "2024-03-19",
@@ -14,7 +15,7 @@
           "title": "Artoria 2T",
           "link": "https://www.youtube.com/watch?v=xomwwyFIJAY",
           "date": "2024-03-22",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "2T",
           "runner": "Tinesh"
         },
@@ -22,7 +23,7 @@
           "title": "Ibuki 2T",
           "link": "https://www.youtube.com/watch?v=rKV3hiVP_jg",
           "date": "2024-03-19",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -30,7 +31,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=N1nQev7Vxag",
           "date": "2024-03-19",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -38,7 +39,7 @@
           "title": "Melusine 2T",
           "link": "https://www.youtube.com/watch?v=TgeO9w_xkXI",
           "date": "2024-03-20",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -46,7 +47,7 @@
           "title": "Romulus 2T",
           "link": "https://www.youtube.com/watch?v=oaJCHQgFWGc",
           "date": "2024-03-27",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -54,7 +55,7 @@
           "title": "Ivan 2T",
           "link": "https://www.youtube.com/watch?v=7VVT3ibdx3w",
           "date": "2024-03-24",
-          "servant": "ivan",
+          "servant": "205",
           "turns": "2T",
           "runner": "ProbablyAParrot"
         },
@@ -62,7 +63,7 @@
           "title": "Nero Caster 2T",
           "link": "https://www.youtube.com/watch?v=PrR2elnsCD8",
           "date": "2024-03-22",
-          "servant": "nerocaster",
+          "servant": "175",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -70,7 +71,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=eG1SIfC8FCU",
           "date": "2024-03-19",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Gorgeous P."
         },
@@ -78,7 +79,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=xqXIW6V-Xj0",
           "date": "2024-03-26",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Nyxi"
         },
@@ -86,7 +87,7 @@
           "title": "Morgan 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=vtzwVCVX1DY",
           "date": "2024-03-19",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -94,7 +95,7 @@
           "title": "Arjuna Alter 2T",
           "link": "https://www.youtube.com/watch?v=BdpfqnGsCyA",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Liz Happy Club"
         },
@@ -102,7 +103,7 @@
           "title": "Arjuna Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=WhLmfJrZyTA",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -110,7 +111,7 @@
           "title": "Arjuna Alter 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=AIVvSa8fOdk",
           "date": "2024-03-27",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -118,7 +119,7 @@
           "title": "Summer Musashi 2T",
           "link": "https://www.youtube.com/watch?v=4MSIbjrEA7M",
           "date": "2024-03-19",
-          "servant": "summermusashi",
+          "servant": "261",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -126,7 +127,7 @@
           "title": "Darius 2T",
           "link": "https://www.youtube.com/watch?v=kNYP36Pcfe8",
           "date": "2024-03-24",
-          "servant": "darius",
+          "servant": "55",
           "turns": "2T",
           "runner": "TR"
         },
@@ -134,7 +135,7 @@
           "title": "Darius 2T",
           "link": "https://www.youtube.com/watch?v=0gUC07HUbKk",
           "date": "2024-03-22",
-          "servant": "darius",
+          "servant": "55",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -142,7 +143,7 @@
           "title": "Space Ishtar 2T",
           "link": "https://www.youtube.com/watch?v=uKEdeu6DJTs",
           "date": "2024-03-25",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -150,7 +151,7 @@
           "title": "Koyanskaya of Darkness 2T",
           "link": "https://www.youtube.com/watch?v=HlF9zmw5XbE",
           "date": "2024-03-23",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "2T",
           "runner": "Alastair Hale"
         }
diff --git a/src/content/teslafest/eq-2021-catch-the-clown.json b/src/content/teslafest/eq-2021/catch-the-clown.json
similarity index 87%
rename from src/content/teslafest/eq-2021-catch-the-clown.json
rename to src/content/teslafest/eq-2021/catch-the-clown.json
index 41a3ce4..ac5421c 100644
--- a/src/content/teslafest/eq-2021-catch-the-clown.json
+++ b/src/content/teslafest/eq-2021/catch-the-clown.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Capture the Clown!",
     "releaseDate": "2024-03-20",
@@ -14,7 +15,7 @@
           "title": "Altera 3T",
           "link": "https://www.youtube.com/watch?v=foNiMNDPAuI",
           "date": "2024-03-25",
-          "servant": "altera",
+          "servant": "8",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -22,7 +23,7 @@
           "title": "Nero 3T",
           "link": "https://twitter.com/LutrecTA/status/1772959434513293518",
           "date": "2024-03-27",
-          "servant": "nero",
+          "servant": "5",
           "turns": "3T",
           "runner": "Lutrec"
         },
@@ -30,7 +31,7 @@
           "title": "Gilgamesh 3T (4man)",
           "link": "https://www.youtube.com/watch?v=fnO6buimUqg",
           "date": "2024-03-20",
-          "servant": "gilgamesh",
+          "servant": "12",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -38,7 +39,7 @@
           "title": "Melusine 3T",
           "link": "https://www.youtube.com/watch?v=YhLV3ARYBSw",
           "date": "2024-03-25",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -46,7 +47,7 @@
           "title": "Summer Caenis 3T",
           "link": "https://www.youtube.com/watch?v=3VPZnvqvev4",
           "date": "2024-03-20",
-          "servant": "summercaenis",
+          "servant": "322",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -54,7 +55,7 @@
           "title": "Drake 3T",
           "link": "https://www.youtube.com/watch?v=JPS48CxAXIY",
           "date": "2024-03-28",
-          "servant": "drake",
+          "servant": "65",
           "turns": "3T",
           "runner": "Tinesh"
         },
@@ -62,7 +63,7 @@
           "title": "Drake 3T (4man)",
           "link": "https://www.youtube.com/watch?v=J2t-WEV6hJk",
           "date": "2024-03-24",
-          "servant": "drake",
+          "servant": "65",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -70,7 +71,7 @@
           "title": "Arjuna Alter 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=2N-JXjXBBU0",
           "date": "2024-03-27",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -78,7 +79,7 @@
           "title": "Arjuna Alter 3T (NDCE 5man)",
           "link": "https://www.youtube.com/watch?v=ItA5mW3SwGk",
           "date": "2024-03-23",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -86,7 +87,7 @@
           "title": "Arjuna Alter 3T (NoCE 4man)",
           "link": "https://www.youtube.com/watch?v=NIiZsn-TBdg",
           "date": "2024-03-31",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Sakazuki"
         },
@@ -94,7 +95,7 @@
           "title": "Morgan 3T",
           "link": "https://www.youtube.com/watch?v=BKiMQwQPRjM",
           "date": "2024-03-20",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "im poketar"
         },
@@ -102,7 +103,7 @@
           "title": "Morgan 3T",
           "link": "https://www.youtube.com/watch?v=aVgm6kfjNNA",
           "date": "2024-03-22",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Gorgeous P."
         },
@@ -110,7 +111,7 @@
           "title": "Morgan 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=E8aWa7GdTqE",
           "date": "2024-03-20",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -118,7 +119,7 @@
           "title": "Bazett 2T",
           "link": "https://www.youtube.com/watch?v=pAeBIcdtAgg",
           "date": "2024-03-20",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "First_TLN"
         },
@@ -126,7 +127,7 @@
           "title": "Bazett 2T",
           "link": "https://www.youtube.com/watch?v=1xaPz3sVxqA",
           "date": "2024-03-21",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "GregoryZero"
         },
@@ -134,7 +135,7 @@
           "title": "Koyanskaya of Darkness 3T",
           "link": "https://www.youtube.com/watch?v=0Yx9jxEU0eU",
           "date": "2024-03-29",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "3T",
           "runner": "Alastair Hale"
         }
diff --git a/src/content/teslafest/eq-2021-crimson-hero.json b/src/content/teslafest/eq-2021/crimson-hero.json
similarity index 86%
rename from src/content/teslafest/eq-2021-crimson-hero.json
rename to src/content/teslafest/eq-2021/crimson-hero.json
index 3875872..d83c3b8 100644
--- a/src/content/teslafest/eq-2021-crimson-hero.json
+++ b/src/content/teslafest/eq-2021/crimson-hero.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Legend of the Crimson Hero - HD Remastered",
     "releaseDate": "2024-03-21",
diff --git a/src/content/teslafest/eq-2021-finale-ii.json b/src/content/teslafest/eq-2021/finale-ii.json
similarity index 87%
rename from src/content/teslafest/eq-2021-finale-ii.json
rename to src/content/teslafest/eq-2021/finale-ii.json
index eab19aa..e551b3a 100644
--- a/src/content/teslafest/eq-2021-finale-ii.json
+++ b/src/content/teslafest/eq-2021/finale-ii.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Finale - The Eternal City Triumphus",
     "releaseDate": "2024-03-22",
@@ -14,7 +15,7 @@
           "title": "Musashi 3T",
           "link": "https://www.youtube.com/watch?v=N1_fKU3N6eM",
           "date": "2024-03-22",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Ryougi Bobby"
         },
@@ -22,7 +23,7 @@
           "title": "Musashi 3T",
           "link": "https://www.youtube.com/watch?v=-YiKOerg-JQ",
           "date": "2024-03-26",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Sigrdrífa"
         },
@@ -30,7 +31,7 @@
           "title": "Musashi 3T",
           "link": "https://www.youtube.com/watch?v=ivlzuhjRmQs",
           "date": "2024-03-22",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "First_TLN"
         },
@@ -38,7 +39,7 @@
           "title": "Musashi 3T",
           "link": "https://twitter.com/LutrecTA/status/1771597714309927260",
           "date": "2024-03-23",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Lutrec"
         },
@@ -46,7 +47,7 @@
           "title": "Musashi 3T",
           "link": "https://www.youtube.com/watch?v=Uh3qycGalF4",
           "date": "2024-03-23",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -54,7 +55,7 @@
           "title": "Musashi 3T (NoCE)",
           "link": "https://www.youtube.com/watch?v=dj8yoMdEwkY",
           "date": "2024-03-26",
-          "servant": "musashi",
+          "servant": "153",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -62,7 +63,7 @@
           "title": "Sigurd 3T (NCDE)",
           "link": "https://www.youtube.com/watch?v=FDFcW8usavE",
           "date": "2024-03-23",
-          "servant": "sigurd",
+          "servant": "213",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         },
@@ -70,7 +71,7 @@
           "title": "Beni-Enma 3T",
           "link": "https://www.youtube.com/watch?v=8GRvuL3BLEk",
           "date": "2024-03-22",
-          "servant": "benienma",
+          "servant": "234",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -78,7 +79,7 @@
           "title": "Beni-Enma 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=IvTK0Q0JfsY",
           "date": "2024-03-27",
-          "servant": "benienma",
+          "servant": "234",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -86,7 +87,7 @@
           "title": "Bedivere 3T",
           "link": "https://www.youtube.com/watch?v=6WKnji9jctc",
           "date": "2024-03-22",
-          "servant": "bedivere",
+          "servant": "126",
           "turns": "3T",
           "runner": "Ray the II"
         },
@@ -94,7 +95,7 @@
           "title": "Summer Hokusai 3T",
           "link": "https://www.youtube.com/watch?v=Ly3K6wUapSE",
           "date": "2024-03-22",
-          "servant": "summerhokusai",
+          "servant": "264",
           "turns": "3T",
           "runner": "Tinesh"
         },
@@ -102,7 +103,7 @@
           "title": "Summer Hokusai 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=4NuCMMovksg",
           "date": "2024-03-25",
-          "servant": "summerhokusai",
+          "servant": "264",
           "turns": "3T",
           "runner": "inv4der"
         },
@@ -110,7 +111,7 @@
           "title": "Muramasa 3T",
           "link": "https://www.youtube.com/watch?v=MsiloyQxDfs",
           "date": "2024-03-23",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -118,7 +119,7 @@
           "title": "Muramasa 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=ge_PU19eMWM",
           "date": "2024-03-25",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -126,7 +127,7 @@
           "title": "Saber Alter 3T",
           "link": "https://www.youtube.com/watch?v=Moe1-i-NVX8",
           "date": "2024-03-29",
-          "servant": "saberalter",
+          "servant": "3",
           "turns": "3T",
           "runner": "Shawn Sun"
         },
@@ -134,7 +135,7 @@
           "title": "Melusine 3T",
           "link": "https://www.youtube.com/watch?v=ahGiqivoUqA",
           "date": "2024-03-22",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -142,7 +143,7 @@
           "title": "Li Shuwen 3T",
           "link": "https://www.youtube.com/watch?v=R5XkPmaImWE",
           "date": "2024-03-25",
-          "servant": "oldli",
+          "servant": "235",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -150,7 +151,7 @@
           "title": "MHXA 3T",
           "link": "https://www.youtube.com/watch?v=01WPieF-EAQ",
           "date": "2024-03-22",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "3T",
           "runner": "Ayumi"
         },
@@ -158,7 +159,7 @@
           "title": "Morgan 3T",
           "link": "https://twitter.com/santoryuiai3/status/1771260206090965013",
           "date": "2024-03-22",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Ray"
         },
@@ -166,7 +167,7 @@
           "title": "Arjuna Alter 3T",
           "link": "https://www.youtube.com/watch?v=VElGV2WdQQQ",
           "date": "2024-03-22",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -174,7 +175,7 @@
           "title": "Yang Guifei 3T",
           "link": "https://www.youtube.com/watch?v=F0mVvLtx9uE",
           "date": "2024-03-24",
-          "servant": "yangguifei",
+          "servant": "275",
           "turns": "3T",
           "runner": "Requiem"
         }
diff --git a/src/content/teslafest/eq-2021-gorgon-sisters.json b/src/content/teslafest/eq-2021/gorgon-sisters.json
similarity index 87%
rename from src/content/teslafest/eq-2021-gorgon-sisters.json
rename to src/content/teslafest/eq-2021/gorgon-sisters.json
index aea87de..ad50ac0 100644
--- a/src/content/teslafest/eq-2021-gorgon-sisters.json
+++ b/src/content/teslafest/eq-2021/gorgon-sisters.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "The Lovely Gorgon Sisters",
     "releaseDate": "2024-03-20",
@@ -14,7 +15,7 @@
           "title": "Ibuki 2T",
           "link": "https://www.youtube.com/watch?v=nXqrqBPpMik",
           "date": "2024-03-20",
-          "servant": "ibuki",
+          "servant": "299",
           "turns": "2T",
           "runner": "inv4der"
         },
@@ -22,7 +23,7 @@
           "title": "Summer Illya 2T",
           "link": "https://www.youtube.com/watch?v=n9r7K8762ck",
           "date": "2024-03-28",
-          "servant": "summerillya",
+          "servant": "286",
           "turns": "2T",
           "runner": "zoropp"
         },
@@ -30,7 +31,7 @@
           "title": "Romulus 2T",
           "link": "https://www.youtube.com/watch?v=gOID1sTtcVI",
           "date": "2024-03-28",
-          "servant": "romulus",
+          "servant": "280",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -38,7 +39,7 @@
           "title": "Melusine 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=_UThC-CN6do",
           "date": "2024-03-20",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "Hentai Daddi"
         },
@@ -46,7 +47,7 @@
           "title": "Melusine 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=sDuE9IZQ7Ok",
           "date": "2024-03-20",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -54,7 +55,7 @@
           "title": "Nero Caster 2T",
           "link": "https://twitter.com/LutrecTA/status/1772372664838963480",
           "date": "2024-03-25",
-          "servant": "nerocaster",
+          "servant": "175",
           "turns": "2T",
           "runner": "Lutrec"
         },
@@ -62,7 +63,7 @@
           "title": "Arjuna Alter 2T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=2GczluPBHcc",
           "date": "2024-03-20",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -70,7 +71,7 @@
           "title": "Arjuna Alter 2T (16 Cost)",
           "link": "https://www.youtube.com/watch?v=ly6DVlDfcXY",
           "date": "2024-03-28",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -78,7 +79,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=z7AzI8SGTv8",
           "date": "2024-03-20",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "First_TLN"
         },
@@ -86,7 +87,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=Dm2oe-QbK04",
           "date": "2024-03-20",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Liz Happy Club"
         },
@@ -94,7 +95,7 @@
           "title": "Morgan 2T",
           "link": "https://www.youtube.com/watch?v=nBwl3M77GF8",
           "date": "2024-03-21",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Gorgeous P."
         },
@@ -102,7 +103,7 @@
           "title": "Morgan 2T (20 Cost)",
           "link": "https://www.youtube.com/watch?v=rwGo5R9DP3A",
           "date": "2024-03-21",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -110,7 +111,7 @@
           "title": "Morgan 2T (16 Cost)",
           "link": "https://www.youtube.com/watch?v=fQiE5xc2Dv8",
           "date": "2024-03-23",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "2T",
           "runner": "Volcanicz"
         },
@@ -118,7 +119,7 @@
           "title": "Tamamo Cat 2T",
           "link": "https://www.youtube.com/watch?v=nE3mNXVQC04",
           "date": "2024-03-29",
-          "servant": "tamamocat",
+          "servant": "58",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -126,7 +127,7 @@
           "title": "Maou Nobu 2T (NoCE)",
           "link": "https://www.youtube.com/watch?v=hzmKa2vrgAk",
           "date": "2024-03-25",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "2T",
           "runner": "Sigrdrífa"
         },
@@ -134,7 +135,7 @@
           "title": "Summer Kama 2T",
           "link": "https://www.youtube.com/watch?v=axPQJS41hos",
           "date": "2024-03-20",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "2T",
           "runner": "Kamager III"
         },
@@ -142,7 +143,7 @@
           "title": "Kingprotea 2T",
           "link": "https://www.youtube.com/watch?v=wH6ItkkT5wM",
           "date": "2024-03-20",
-          "servant": "kingprotea",
+          "servant": "238",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -150,7 +151,7 @@
           "title": "Summer BB 2T",
           "link": "https://www.youtube.com/watch?v=1xNZTeC-lzY",
           "date": "2024-03-29",
-          "servant": "bbsummer",
+          "servant": "220",
           "turns": "2T",
           "runner": "zoropp"
         },
@@ -158,7 +159,7 @@
           "title": "Koyanskaya of Darkness 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=02utpNgpwTI",
           "date": "2024-03-23",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -166,7 +167,7 @@
           "title": "Voyager 2T",
           "link": "https://www.youtube.com/watch?v=JHTWwb8L0J0",
           "date": "2024-03-21",
-          "servant": "voyager",
+          "servant": "281",
           "turns": "2T",
           "runner": "Kamager III"
         },
@@ -174,7 +175,7 @@
           "title": "Sigurd 3T",
           "link": "https://www.youtube.com/watch?v=2WV4nB45Mx0",
           "date": "2024-03-22",
-          "servant": "sigurd",
+          "servant": "213",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         }
diff --git a/src/content/teslafest/eq-2021-green-comet.json b/src/content/teslafest/eq-2021/green-comet.json
similarity index 87%
rename from src/content/teslafest/eq-2021-green-comet.json
rename to src/content/teslafest/eq-2021/green-comet.json
index 4be58eb..c53e14c 100644
--- a/src/content/teslafest/eq-2021-green-comet.json
+++ b/src/content/teslafest/eq-2021/green-comet.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "The Green Comet",
     "releaseDate": "2024-03-21",
@@ -14,7 +15,7 @@
           "title": "Kama 2T",
           "link": "https://www.youtube.com/watch?v=re1Po7O_kxM",
           "date": "2024-03-23",
-          "servant": "kama",
+          "servant": "239",
           "turns": "2T",
           "runner": "Requiem"
         },
@@ -22,7 +23,7 @@
           "title": "Arjuna Alter 2T",
           "link": "https://www.youtube.com/watch?v=6IabkracLbs",
           "date": "2024-03-31",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Sakazuki"
         },
@@ -30,7 +31,7 @@
           "title": "Arjuna Alter 2T",
           "link": "https://www.youtube.com/watch?v=55bFPChv1bw",
           "date": "2024-03-21",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Akise"
         },
@@ -38,7 +39,7 @@
           "title": "Kintoki 2T",
           "link": "https://www.youtube.com/watch?v=l4xOU8GRATc",
           "date": "2024-03-24",
-          "servant": "kintoki",
+          "servant": "51",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -46,7 +47,7 @@
           "title": "Bazett 2T",
           "link": "https://www.youtube.com/watch?v=F-ueNp9AP8M",
           "date": "2024-03-25",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -54,7 +55,7 @@
           "title": "Summer Tamamo 3T",
           "link": "https://twitter.com/Certain_Bastard/status/1772404717722689709",
           "date": "2024-03-26",
-          "servant": "summertamamo",
+          "servant": "128",
           "turns": "3T",
           "runner": "Certain Bastard"
         },
@@ -62,7 +63,7 @@
           "title": "Ozymandias 3T",
           "link": "https://www.youtube.com/watch?v=3LY4IzdN3rQ",
           "date": "2024-03-21",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -70,7 +71,7 @@
           "title": "Jekyll & Hyde 3T",
           "link": "https://www.youtube.com/watch?v=odX-pAx4csU",
           "date": "2024-03-21",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "3T",
           "runner": "Rikohaiji"
         },
@@ -78,7 +79,7 @@
           "title": "Arjuna Alter 3T",
           "link": "https://www.youtube.com/watch?v=2JWVOe7zu-Y&t=25s",
           "date": "2024-03-21",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -86,7 +87,7 @@
           "title": "Kintoki 3T",
           "link": "https://www.youtube.com/watch?v=D8ClWvbnEdM",
           "date": "2024-03-21",
-          "servant": "kintoki",
+          "servant": "51",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -94,7 +95,7 @@
           "title": "Kintoki 3T",
           "link": "https://www.youtube.com/watch?v=1D0dzlNDOfc",
           "date": "2024-03-24",
-          "servant": "kintoki",
+          "servant": "51",
           "turns": "3T",
           "runner": "Conry"
         },
@@ -102,7 +103,7 @@
           "title": "Cu Alter 3T",
           "link": "https://www.youtube.com/watch?v=VoTat-fDwlE",
           "date": "2024-03-23",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "3T",
           "runner": "Gorgeous P."
         },
@@ -110,7 +111,7 @@
           "title": "Sitonai 3T",
           "link": "https://www.youtube.com/watch?v=-WPUn_z8aq4",
           "date": "2024-03-26",
-          "servant": "sitonai",
+          "servant": "224",
           "turns": "3T",
           "runner": "zoropp"
         }
diff --git a/src/content/teslafest/gc-akihabara-explosion.json b/src/content/teslafest/giga-coil/akihabara-explosion.json
similarity index 80%
rename from src/content/teslafest/gc-akihabara-explosion.json
rename to src/content/teslafest/giga-coil/akihabara-explosion.json
index 3d0b711..b94c2e0 100644
--- a/src/content/teslafest/gc-akihabara-explosion.json
+++ b/src/content/teslafest/giga-coil/akihabara-explosion.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Singularity Gets Restored until You Reach Home",
+    "title": "Singularity Gets Restored until You Reach Home",
     "releaseDate": "2024-03-15",
     "shortdescription": "An interesting, multi-stage quest with plenty of interesting twists",
     "releaseNumber": 2
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Singularity Gets Restored until You Reach Home",
+      "questTitle": "Singularity Gets Restored until You Reach Home",
       "description": "An interesting, multi-stage quest with plenty of interesting twists ... What do you mean 12 Guts stacks is bad quest design????",
       "data": [
         {
           "title": "Juano 7T (Multicore FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=AznMkbg6UMM",
           "date": "2024-03-24",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "7T",
           "runner": "Akise"
         },
@@ -22,7 +23,7 @@
           "title": "Morgan 7T (Multicore)",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=166s",
           "date": "2024-04-11",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "7T",
           "runner": "Zectry"
         },
@@ -30,7 +31,7 @@
           "title": "Kintoki 8T (Multicore)",
           "link": "https://www.youtube.com/watch?v=QqZsNJwsdns",
           "date": "2024-04-05",
-          "servant": "kintoki",
+          "servant": "51",
           "turns": "8T",
           "runner": "Roz"
         },
@@ -38,7 +39,7 @@
           "title": "Bazett 4T (Multicore)",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=110s",
           "date": "2024-03-29",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "4T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/gc-fate-requiem.json b/src/content/teslafest/giga-coil/fate-requiem.json
similarity index 83%
rename from src/content/teslafest/gc-fate-requiem.json
rename to src/content/teslafest/giga-coil/fate-requiem.json
index 5573cd8..3c4ef09 100644
--- a/src/content/teslafest/gc-fate-requiem.json
+++ b/src/content/teslafest/giga-coil/fate-requiem.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Child from the Netherworld",
+    "title": "Child from the Netherworld",
     "releaseDate": "2024-03-15",
     "shortdescription": "Can Erice stop the racers this time?",
     "releaseNumber": 5
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Child from the Netherworld",
+      "questTitle": "Child from the Netherworld",
       "description": "Can Erice stop the racers this time? Well, she might just if she has more and more ghosts in stock. A real throwback to the Fate/Requiem Collab Event.",
       "data": [
         {
           "title": "Muramasa 3T",
           "link": "https://www.youtube.com/watch?v=gb249dDmfl0",
           "date": "2024-03-28",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "3T",
           "runner": "Alastair Hale"
         },
@@ -22,7 +23,7 @@
           "title": "Summer Okitan 3T",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=566s",
           "date": "2024-03-29",
-          "servant": "summerokitaalter",
+          "servant": "317",
           "turns": "3T",
           "runner": "Tokuher0"
         },
@@ -30,7 +31,7 @@
           "title": "Saito Hajime 3T",
           "link": "https://www.youtube.com/watch?v=QmAmBxJKXWk&t=757s",
           "date": "2024-03-27",
-          "servant": "saitohajime",
+          "servant": "293",
           "turns": "3T",
           "runner": "Conry"
         },
@@ -38,7 +39,7 @@
           "title": "Morgan 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=ZLGXjXCW-bE",
           "date": "2024-03-27",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -46,7 +47,7 @@
           "title": "Arjuna Alter 3T",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=829s",
           "date": "2024-04-11",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -54,7 +55,7 @@
           "title": "Summer Musashi 3T",
           "link": "https://www.youtube.com/watch?v=yE6Mv6VTnCc&t=876s",
           "date": "2024-03-28",
-          "servant": "summermusashi",
+          "servant": "261",
           "turns": "3T",
           "runner": "Patrick Bandeira"
         },
@@ -62,7 +63,7 @@
           "title": "Cu Alter 3T (NoNP)",
           "link": "https://www.youtube.com/watch?v=2xMvkmtp-gk",
           "date": "2024-04-04",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "3T",
           "runner": "Volcanicz"
         }
diff --git a/src/content/teslafest/gc-gudaguda-2021.json b/src/content/teslafest/giga-coil/gudaguda-2021.json
similarity index 84%
rename from src/content/teslafest/gc-gudaguda-2021.json
rename to src/content/teslafest/giga-coil/gudaguda-2021.json
index 3c820e0..05f3507 100644
--- a/src/content/teslafest/gc-gudaguda-2021.json
+++ b/src/content/teslafest/giga-coil/gudaguda-2021.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Raging Billows! Kakare Shibata!",
+    "title": "Raging Billows! Kakare Shibata!",
     "releaseDate": "2024-03-15",
     "shortdescription": "Stacking defences and damage cut - what an interesting strategy",
     "releaseNumber": 6
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Raging Billows! Kakare Shibata!",
+      "questTitle": "Raging Billows! Kakare Shibata!",
       "description": "Stacking defences and damage cut - what an interesting strategy ... Let's see how it works out against the racers",
       "data": [
         {
           "title": "Sigurd 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=ow5KRkoFWYs",
           "date": "2024-03-29",
-          "servant": "sigurd",
+          "servant": "213",
           "turns": "3T",
           "runner": "ProbablyAParrot"
         },
@@ -22,7 +23,7 @@
           "title": "Barghest 3T",
           "link": "https://www.youtube.com/watch?v=tkSdcRKT-bg",
           "date": "2024-03-25",
-          "servant": "barghest",
+          "servant": "310",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -30,7 +31,7 @@
           "title": "Melusine 3T (Asc1/2)",
           "link": "https://www.youtube.com/watch?v=yE6Mv6VTnCc&t=1030s",
           "date": "2024-03-28",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "Patrick Bandeira"
         },
@@ -38,7 +39,7 @@
           "title": "Melusine 3T (Asc1/2)",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=1014s",
           "date": "2024-04-11",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "zectry"
         },
@@ -46,7 +47,7 @@
           "title": "Morgan 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=tnq0ACSoBZE",
           "date": "2024-03-28",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -54,7 +55,7 @@
           "title": "Morgan 3T (NDCE 5Man)",
           "link": "https://www.youtube.com/watch?v=PNLeiRqC9wM",
           "date": "2024-03-31",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -62,7 +63,7 @@
           "title": "Arjuna Alter 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=8d0ZBjI6Pd8",
           "date": "2024-03-28",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -70,7 +71,7 @@
           "title": "Cu Alter 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=FjNoeuMgf2w",
           "date": "2024-03-29",
-          "servant": "cualter",
+          "servant": "98",
           "turns": "3T",
           "runner": "Volcanicz"
         },
@@ -78,7 +79,7 @@
           "title": "Bazett 3T",
           "link": "https://www.youtube.com/watch?v=SvQYbPxPGwc&t=1949s",
           "date": "2024-03-25",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "3T",
           "runner": "Paradise"
         },
@@ -86,7 +87,7 @@
           "title": "Van Gogh 3T",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=691s",
           "date": "2024-03-29",
-          "servant": "vangogh",
+          "servant": "295",
           "turns": "3T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/gc-saber-wars-2.json b/src/content/teslafest/giga-coil/saber-wars-2.json
similarity index 83%
rename from src/content/teslafest/gc-saber-wars-2.json
rename to src/content/teslafest/giga-coil/saber-wars-2.json
index 501302b..6610167 100644
--- a/src/content/teslafest/gc-saber-wars-2.json
+++ b/src/content/teslafest/giga-coil/saber-wars-2.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Galaxy Guardian",
+    "title": "Galaxy Guardian",
     "releaseDate": "2024-03-15",
     "shortdescription": "The one to keep the Galaxy in order - will her two forms be enough against the racers?",
     "releaseNumber": 3
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Galaxy Guardian",
+      "questTitle": "Galaxy Guardian",
       "description": "The one to keep the Galaxy in order - will her two forms be enough against the racers?",
       "data": [
         {
           "title": "Sitonai 2T",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=297s",
           "date": "2024-03-29",
-          "servant": "sitonai",
+          "servant": "224",
           "turns": "2T",
           "runner": "TokuHer0"
         },
@@ -22,7 +23,7 @@
           "title": "Bazett 1T (FLO)",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=491s",
           "date": "2024-04-11",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "Zectry"
         },
@@ -30,7 +31,7 @@
           "title": "Yang Guifei 2T",
           "link": "https://www.youtube.com/watch?v=yE6Mv6VTnCc&t=492s",
           "date": "2024-03-28",
-          "servant": "yangguifei",
+          "servant": "275",
           "turns": "2T",
           "runner": "Patrick Bandeira"
         },
@@ -38,7 +39,7 @@
           "title": "Koyanskaya of Darkness 2T",
           "link": "https://www.youtube.com/watch?v=uZDNzw9tTWo",
           "date": "2024-03-24",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "2T",
           "runner": "Loki"
         },
@@ -46,7 +47,7 @@
           "title": "MIXA 2T (NoNP)",
           "link": "https://www.youtube.com/watch?v=6AbWuaLxfzM",
           "date": "2024-03-26",
-          "servant": "mixa",
+          "servant": "308",
           "turns": "2T",
           "runner": "Rikohaiji"
         }
diff --git a/src/content/teslafest/gc-summer-2021.json b/src/content/teslafest/giga-coil/summer-2021.json
similarity index 84%
rename from src/content/teslafest/gc-summer-2021.json
rename to src/content/teslafest/giga-coil/summer-2021.json
index 6fe620f..69eb1d8 100644
--- a/src/content/teslafest/gc-summer-2021.json
+++ b/src/content/teslafest/giga-coil/summer-2021.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Western Ninja Arts Book",
+    "title": "Western Ninja Arts Book",
     "releaseDate": "2024-03-15",
     "shortdescription": "Can Fuuma, his clones and his arsenal of debuffs stop the racers?",
     "releaseNumber": 1
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Western Ninja Arts Book",
+      "questTitle": "Western Ninja Arts Book",
       "description": "Can Fuuma, his clones and his arsenal of debuffs stop the racers? One of the most obnoxious quests in the history of Challenge Quests - and this time, with a harder cap on party cost.",
       "data": [
         {
           "title": "Skadi 3T",
           "link": "https://www.youtube.com/watch?v=VMVus__ZYXE",
           "date": "2024-03-30",
-          "servant": "skadi",
+          "servant": "215",
           "turns": "3T",
           "runner": "Firq"
         },
@@ -22,7 +23,7 @@
           "title": "Melusine 3T",
           "link": "https://www.youtube.com/watch?v=yE6Mv6VTnCc",
           "date": "2024-03-28",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "Patrick Bandeira"
         },
@@ -30,7 +31,7 @@
           "title": "Ozymandias 3T",
           "link": "https://www.youtube.com/watch?v=gv9YuMvfTYM",
           "date": "2024-03-24",
-          "servant": "ozymandias",
+          "servant": "118",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -38,7 +39,7 @@
           "title": "Sanzang 3T",
           "link": "https://www.youtube.com/watch?v=OJrs2Gbh_KI",
           "date": "2024-03-24",
-          "servant": "sanzang",
+          "servant": "113",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -46,7 +47,7 @@
           "title": "Okuni 3T",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs",
           "date": "2024-04-11",
-          "servant": "okuni",
+          "servant": "327",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -54,7 +55,7 @@
           "title": "Kojirou 3T",
           "link": "https://www.youtube.com/watch?v=QmAmBxJKXWk",
           "date": "2024-03-27",
-          "servant": "kojirou",
+          "servant": "39",
           "turns": "3T",
           "runner": "Conry"
         },
@@ -62,7 +63,7 @@
           "title": "MHXA 3T (NDCE)",
           "link": "https://youtu.be/7-fPdCtGaks",
           "date": "2024-03-29",
-          "servant": "mhxa",
+          "servant": "155",
           "turns": "3T",
           "runner": "Requiem"
         },
@@ -70,7 +71,7 @@
           "title": "Morgan 3T (FLO NDCE NoBG)",
           "link": "https://youtu.be/ls0p-tsH_10",
           "date": "2024-03-24",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "3T",
           "runner": "Loki"
         },
@@ -78,7 +79,7 @@
           "title": "Junao 3T (FLO NDCE)",
           "link": "https://youtu.be/GX9gqQ0YfW0",
           "date": "2024-03-27",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Akise"
         },
@@ -86,7 +87,7 @@
           "title": "Kintoki 3T",
           "link": "https://youtu.be/pITWIii6JjM",
           "date": "2024-03-29",
-          "servant": "kintoki",
+          "servant": "51",
           "turns": "3T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/gc-valentines-2023.json b/src/content/teslafest/giga-coil/valentines-2023.json
similarity index 82%
rename from src/content/teslafest/gc-valentines-2023.json
rename to src/content/teslafest/giga-coil/valentines-2023.json
index 5556158..b0cdaef 100644
--- a/src/content/teslafest/gc-valentines-2023.json
+++ b/src/content/teslafest/giga-coil/valentines-2023.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - True Love",
+    "title": "True Love",
     "releaseDate": "2024-03-15",
     "shortdescription": "Somehow, Orion can now transform - is he a Transformer then?",
     "releaseNumber": 4
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - True Love",
+      "questTitle": "True Love",
       "description": "Somehow, Orion can now transform - is he a Transformer then? But to be fair, he really fits in with all the other pigs.",
       "data": [
         {
           "title": "Percival 4T",
           "link": "https://www.youtube.com/watch?v=MGcyhZMkMrs&t=1292s",
           "date": "2024-03-28",
-          "servant": "percival",
+          "servant": "313",
           "turns": "4T",
           "runner": "Nyxi"
         },
@@ -22,7 +23,7 @@
           "title": "Ryoma 4T (FLO)",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=581s",
           "date": "2024-04-11",
-          "servant": "ryomalancer",
+          "servant": "329",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -30,7 +31,7 @@
           "title": "Space Ishtar 4T",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=398s",
           "date": "2024-03-24",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "4T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/gc-white-day-2023.json b/src/content/teslafest/giga-coil/white-day-2023.json
similarity index 85%
rename from src/content/teslafest/gc-white-day-2023.json
rename to src/content/teslafest/giga-coil/white-day-2023.json
index cf06795..5f86a49 100644
--- a/src/content/teslafest/gc-white-day-2023.json
+++ b/src/content/teslafest/giga-coil/white-day-2023.json
@@ -1,20 +1,21 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
-    "title": "Giga Coil - Five Star Idol",
+    "title": "Five Star Idol",
     "releaseDate": "2024-03-15",
     "shortdescription": "A total of 10 HP Bars and some interesting field effects - what will happen on this stage?",
     "releaseNumber": 7
   },
   "quests": [
     {
-      "questTitle": "Giga Coil - Five Star Idol",
+      "questTitle": "Five Star Idol",
       "description": "A total of 10 HP Bars and some interesting field effects - what will happen on this stage? Will the racers idol prevail? Let's enjoy the show and see ...",
       "data": [
         {
           "title": "Baobhan Sith 6T",
           "link": "https://www.youtube.com/watch?v=ZBfamgici20",
           "date": "2024-03-29",
-          "servant": "baobhansith",
+          "servant": "311",
           "turns": "6T",
           "runner": "Requiem"
         },
@@ -22,7 +23,7 @@
           "title": "Nero 4T",
           "link": "https://twitter.com/LutrecTA/status/1773370060603629855",
           "date": "2024-03-28",
-          "servant": "nero",
+          "servant": "5",
           "turns": "4T",
           "runner": "Lutrec"
         },
@@ -30,7 +31,7 @@
           "title": "Melusine 4T (2CS)",
           "link": "https://www.youtube.com/watch?v=8SLr2KAULIc",
           "date": "2024-03-31",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "4T",
           "runner": "TokuHer0"
         },
@@ -38,7 +39,7 @@
           "title": "Zenobia 4T",
           "link": "https://www.youtube.com/watch?v=RFa_RlhksBs&t=1192s",
           "date": "2024-04-11",
-          "servant": "zenobia",
+          "servant": "325",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -46,7 +47,7 @@
           "title": "Morgan 4T (BCE)",
           "link": "https://www.youtube.com/watch?v=81N4DhCQ7Io",
           "date": "2024-03-27",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "4T",
           "runner": "im poketar"
         },
@@ -54,7 +55,7 @@
           "title": "Summer Musashi 4T",
           "link": "https://www.youtube.com/watch?v=yE6Mv6VTnCc&t=1175s",
           "date": "2024-03-28",
-          "servant": "summermusashi",
+          "servant": "261",
           "turns": "4T",
           "runner": "Patrick Bandeira"
         },
@@ -62,7 +63,7 @@
           "title": "Summer Kama 4T",
           "link": "https://www.youtube.com/watch?v=pITWIii6JjM&t=802s",
           "date": "2024-03-29",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "4T",
           "runner": "TokuHer0"
         },
@@ -70,7 +71,7 @@
           "title": "Summer Kama 4T",
           "link": "https://www.youtube.com/watch?v=3MYS_V5Rqhw&t=2985s",
           "date": "2024-03-25",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "4T",
           "runner": "Kamager III"
         },
@@ -78,7 +79,7 @@
           "title": "Summer Kiara 4T",
           "link": "https://www.youtube.com/watch?v=SvQYbPxPGwc&t=2113s",
           "date": "2024-03-25",
-          "servant": "summerkiara",
+          "servant": "285",
           "turns": "4T",
           "runner": "Paradise"
         },
@@ -86,7 +87,7 @@
           "title": "Ishtar 4T (NDCE)",
           "link": "https://www.youtube.com/watch?v=QmAmBxJKXWk&t=1042s",
           "date": "2024-03-27",
-          "servant": "ishtar",
+          "servant": "142",
           "turns": "4T",
           "runner": "Conry"
         }
diff --git a/src/content/teslafest/mc-amazoness-crisis.json b/src/content/teslafest/mega-coil/amazoness-crisis.json
similarity index 88%
rename from src/content/teslafest/mc-amazoness-crisis.json
rename to src/content/teslafest/mega-coil/amazoness-crisis.json
index e1920a8..d22b3fa 100644
--- a/src/content/teslafest/mc-amazoness-crisis.json
+++ b/src/content/teslafest/mega-coil/amazoness-crisis.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Until That Person's Defeated",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Brynhild 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=dkmrzD1X6CQ",
           "date": "2024-03-19",
-          "servant": "brynhild",
+          "servant": "88",
           "turns": "3T",
           "runner": "Sigrdrífa"
         },
@@ -22,7 +23,7 @@
           "title": "Jekyll & Hyde 3T (4Man)",
           "link": "https://www.youtube.com/watch?v=vxAn6PZf2bA",
           "date": "2024-04-05",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "3T",
           "runner": "Rikohaiji"
         },
@@ -30,7 +31,7 @@
           "title": "Muramasa 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=DeQw_tUWTgo",
           "date": "2024-03-24",
-          "servant": "muramasa",
+          "servant": "302",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -38,7 +39,7 @@
           "title": "Artoria 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=EJAhp9Vs_ls",
           "date": "2024-03-16",
-          "servant": "artoria",
+          "servant": "2",
           "turns": "2T",
           "runner": "Sesshou01"
         },
@@ -46,7 +47,7 @@
           "title": "Gilgamesh 2T",
           "link": "https://www.youtube.com/watch?v=p8QkHOC-CgE&t=234s",
           "date": "2024-03-25",
-          "servant": "gilgamesh",
+          "servant": "12",
           "turns": "2T",
           "runner": "Nyxi"
         },
@@ -54,7 +55,7 @@
           "title": "Arash 2T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=6QkpSKA2YNM",
           "date": "2024-03-18",
-          "servant": "arash",
+          "servant": "16",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -62,7 +63,7 @@
           "title": "Bradamante 2T (NDCE)",
           "link": "https://www.youtube.com/watch?v=k5hIGF3FW3o",
           "date": "2024-03-20",
-          "servant": "bradamante",
+          "servant": "232",
           "turns": "2T",
           "runner": "Alastair Hale"
         },
@@ -70,7 +71,7 @@
           "title": "Drake 2T",
           "link": "https://www.youtube.com/watch?v=k5vbEdc_BA4&t=299s",
           "date": "2024-03-27",
-          "servant": "drake",
+          "servant": "65",
           "turns": "2T",
           "runner": "Patrick Bandeira"
         },
@@ -78,7 +79,7 @@
           "title": "Taigong Wang 2T (NoCE FLO)",
           "link": "https://www.youtube.com/watch?v=HROrOxcVnKQ",
           "date": "2024-03-16",
-          "servant": "taigongwang",
+          "servant": "331",
           "turns": "2T",
           "runner": "Ryougi Bobby"
         },
@@ -86,7 +87,7 @@
           "title": "Anastasia 2T (NoCE FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=182s",
           "date": "2024-04-09",
-          "servant": "anastasia",
+          "servant": "201",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -94,7 +95,7 @@
           "title": "Arjuna Alter 2T (4Man)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -102,7 +103,7 @@
           "title": "Caren 2T",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=161s",
           "date": "2024-03-26",
-          "servant": "caren",
+          "servant": "305",
           "turns": "2T",
           "runner": "TokuHer0"
         }
diff --git a/src/content/teslafest/mc-christmas-2018.json b/src/content/teslafest/mega-coil/christmas-2018.json
similarity index 87%
rename from src/content/teslafest/mc-christmas-2018.json
rename to src/content/teslafest/mega-coil/christmas-2018.json
index ad4aa61..2059d86 100644
--- a/src/content/teslafest/mc-christmas-2018.json
+++ b/src/content/teslafest/mega-coil/christmas-2018.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "March of the Holy Reindeer",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Summer Okita Alter 4T",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=409s",
           "date": "2024-03-26",
-          "servant": "summerokitaalter",
+          "servant": "317",
           "turns": "4T",
           "runner": "TokuHer0"
         },
@@ -22,7 +23,7 @@
           "title": "Morgan 4T (Multicore)",
           "link": "https://www.youtube.com/watch?v=QYe-8ijdfnI&t=698s",
           "date": "2024-03-15",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "4T",
           "runner": "Liz Happy Club"
         },
@@ -30,7 +31,7 @@
           "title": "Cleopatra 4T (FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=490s",
           "date": "2024-04-09",
-          "servant": "cleopatra",
+          "servant": "139",
           "turns": "4T",
           "runner": "Zectry"
         },
@@ -38,7 +39,7 @@
           "title": "Morgan 4T (w. Jack)",
           "link": "https://www.youtube.com/watch?v=EJAhp9Vs_ls&t=338s",
           "date": "2024-03-16",
-          "servant": "morgan",
+          "servant": "309",
           "turns": "4T",
           "runner": "Sesshou01"
         },
@@ -46,7 +47,7 @@
           "title": "Arjuna Alter 4T (FLO)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8&t=281s",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "4T",
           "runner": "Kusanagi"
         }
diff --git a/src/content/teslafest/mc-halloween-2019.json b/src/content/teslafest/mega-coil/halloween-2019.json
similarity index 88%
rename from src/content/teslafest/mc-halloween-2019.json
rename to src/content/teslafest/mega-coil/halloween-2019.json
index 0e7885f..b27459a 100644
--- a/src/content/teslafest/mc-halloween-2019.json
+++ b/src/content/teslafest/mega-coil/halloween-2019.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Crime and Punishment - Gray Mustache Must Die",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Melt Lambda 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=323s",
           "date": "2024-04-09",
-          "servant": "meltlambda",
+          "servant": "266",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -22,7 +23,7 @@
           "title": "Scathach 3T",
           "link": "https://www.youtube.com/watch?v=EJAhp9Vs_ls&t=158s",
           "date": "2024-03-16",
-          "servant": "shishou",
+          "servant": "70",
           "turns": "3T",
           "runner": "Sesshou01"
         },
@@ -30,7 +31,7 @@
           "title": "Bryn 3T (Solo NDCE)",
           "link": "https://www.youtube.com/watch?v=2csi-flWJCU",
           "date": "2024-03-20",
-          "servant": "brynhild",
+          "servant": "88",
           "turns": "3T",
           "runner": "Sigrdrífa"
         },
@@ -38,7 +39,7 @@
           "title": "Percival 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=QYe-8ijdfnI&t=483s",
           "date": "2024-03-20",
-          "servant": "percival",
+          "servant": "313",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -46,7 +47,7 @@
           "title": "Melusine 3T",
           "link": "https://www.youtube.com/watch?v=HPNIxDrSFxc",
           "date": "2024-03-19",
-          "servant": "melusine_aoe",
+          "servant": "312_aoe",
           "turns": "3T",
           "runner": "Yamada II"
         },
@@ -54,7 +55,7 @@
           "title": "Melusine 3T (Lvl. 1)",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=284s",
           "date": "2024-03-26",
-          "servant": "melusine_st",
+          "servant": "312_st",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -62,7 +63,7 @@
           "title": "Jekyll & Hyde 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=v_WlwqTJYTc",
           "date": "2024-04-04",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "3T",
           "runner": "Rikohaiji"
         },
@@ -70,7 +71,7 @@
           "title": "Arjuna Alter 3T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8&t=133s",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -78,7 +79,7 @@
           "title": "Astrea 3T (Lvl. 2 FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=9D6L_47msCw",
           "date": "2024-03-21",
-          "servant": "astrea",
+          "servant": "242",
           "turns": "3T",
           "runner": "Alastair Hale"
         }
diff --git a/src/content/teslafest/mc-summer-2018.json b/src/content/teslafest/mega-coil/summer-2018.json
similarity index 87%
rename from src/content/teslafest/mc-summer-2018.json
rename to src/content/teslafest/mega-coil/summer-2018.json
index 71f4ffe..8f15d88 100644
--- a/src/content/teslafest/mc-summer-2018.json
+++ b/src/content/teslafest/mega-coil/summer-2018.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Super My Home Daddy",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Multicore - Douman 3T",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA",
           "date": "2024-03-26",
-          "servant": "douman",
+          "servant": "297",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -22,7 +23,7 @@
           "title": "Multicore - Koyanskaya of Dark 3T",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0",
           "date": "2024-04-09",
-          "servant": "koyandark",
+          "servant": "334",
           "turns": "3T",
           "runner": "Zectry"
         }
diff --git a/src/content/teslafest/mc-summer-2019.json b/src/content/teslafest/mega-coil/summer-2019.json
similarity index 88%
rename from src/content/teslafest/mc-summer-2019.json
rename to src/content/teslafest/mega-coil/summer-2019.json
index 1d91240..d105213 100644
--- a/src/content/teslafest/mc-summer-2019.json
+++ b/src/content/teslafest/mega-coil/summer-2019.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Heart Pounding! The Grand Decisive Swimsuit Battle!",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Nero 3T (FLO)",
           "link": "https://twitter.com/LutrecTA/status/1772766697864249523",
           "date": "2024-03-27",
-          "servant": "nero",
+          "servant": "5",
           "turns": "3T",
           "runner": "Lutrec"
         },
@@ -22,7 +23,7 @@
           "title": "Musashi (Summer) 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=agZb8zyHsfY&t=1373s",
           "date": "2024-03-16",
-          "servant": "summermusashi",
+          "servant": "261",
           "turns": "3T",
           "runner": "Paradise"
         },
@@ -30,7 +31,7 @@
           "title": "Musashi (Summer) 3T",
           "link": "https://www.youtube.com/watch?v=QYe-8ijdfnI&t=1312s",
           "date": "2024-03-15",
-          "servant": "summermusashi",
+          "servant": "261",
           "turns": "3T",
           "runner": "Liz Happy Club"
         },
@@ -38,7 +39,7 @@
           "title": "Arjuna Alter 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8&t=676s",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -46,7 +47,7 @@
           "title": "Space Ishtar 3T",
           "link": "https://www.youtube.com/watch?v=EJAhp9Vs_ls&t=821s",
           "date": "2024-03-16",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "3T",
           "runner": "Sesshou01"
         },
@@ -54,7 +55,7 @@
           "title": "Space Ishtar 3T",
           "link": "https://www.youtube.com/watch?v=p8QkHOC-CgE&t=1231s",
           "date": "2024-03-25",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "3T",
           "runner": "Nyxi"
         },
@@ -62,7 +63,7 @@
           "title": "Space Ishtar 3T (NDCE)",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=740s",
           "date": "2024-03-26",
-          "servant": "spaceishtar",
+          "servant": "268",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -70,7 +71,7 @@
           "title": "Summer Kama 3T",
           "link": "https://www.youtube.com/watch?v=B2Buu8F2PMI&t=1736s",
           "date": "2024-03-17",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "3T",
           "runner": "Kamager III"
         },
@@ -78,7 +79,7 @@
           "title": "Summer Kama 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=989s",
           "date": "2024-04-09",
-          "servant": "summerkama",
+          "servant": "321",
           "turns": "3T",
           "runner": "Zectry"
         },
@@ -86,7 +87,7 @@
           "title": "BB (Summer) 3T",
           "link": "https://www.youtube.com/watch?v=qgaWv5dvMe0",
           "date": "2024-03-25",
-          "servant": "bbsummer",
+          "servant": "220",
           "turns": "3T",
           "runner": "Rikohaiji"
         }
diff --git a/src/content/teslafest/mc-valentines-2021.json b/src/content/teslafest/mega-coil/valentines-2021.json
similarity index 88%
rename from src/content/teslafest/mc-valentines-2021.json
rename to src/content/teslafest/mega-coil/valentines-2021.json
index c2ba263..7574ab0 100644
--- a/src/content/teslafest/mc-valentines-2021.json
+++ b/src/content/teslafest/mega-coil/valentines-2021.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "The Librarian's Job",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Sei 2T",
           "link": "https://www.youtube.com/watch?v=-Id8YIoJpN0",
           "date": "2024-03-17",
-          "servant": "sei",
+          "servant": "276",
           "turns": "2T",
           "runner": "Ise(Kai)"
         },
@@ -22,7 +23,7 @@
           "title": "Kintoki (Rider) 2T (w. Arash)",
           "link": "https://www.youtube.com/watch?v=EJAhp9Vs_ls&t=560s",
           "date": "2024-03-16",
-          "servant": "kintokirider",
+          "servant": "115",
           "turns": "2T",
           "runner": "Sesshou01"
         },
@@ -30,7 +31,7 @@
           "title": "Odysseus 2T (FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=707s",
           "date": "2024-04-09",
-          "servant": "odysseus",
+          "servant": "277",
           "turns": "2T",
           "runner": "Zectry"
         },
@@ -38,7 +39,7 @@
           "title": "Taigong Wang 2T (FLO NoCE)",
           "link": "https://www.youtube.com/watch?v=-3srNDj0opg",
           "date": "2024-03-16",
-          "servant": "taigongwang",
+          "servant": "331",
           "turns": "2T",
           "runner": "Ryougi Bobby"
         },
@@ -46,7 +47,7 @@
           "title": "Arjuna Alter 2T (FLO NoCEs)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8&t=413s",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "2T",
           "runner": "Kusanagi"
         },
@@ -54,7 +55,7 @@
           "title": "Maou Nobu 2T (FLO NoCEs)",
           "link": "https://www.youtube.com/watch?v=_Sb7j2XAT5U",
           "date": "2024-03-19",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "2T",
           "runner": "Sigrdrífa"
         },
@@ -62,7 +63,7 @@
           "title": "Bazett 1T (w. Ozy)",
           "link": "https://www.youtube.com/watch?v=agZb8zyHsfY&t=1014s",
           "date": "2024-03-16",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "Paradise"
         },
@@ -70,7 +71,7 @@
           "title": "Bazett 1T (w. Cindereli)",
           "link": "https://www.youtube.com/watch?v=tJLGb9xye6Y",
           "date": "2024-03-24",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "Alastair Hale"
         },
@@ -78,7 +79,7 @@
           "title": "Bazett 1T (w. Maid Alter)",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=558s",
           "date": "2024-03-26",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "TokuHer0"
         },
@@ -86,7 +87,7 @@
           "title": "Bazett 1T (w. Ozy)",
           "link": "https://www.youtube.com/watch?v=QYe-8ijdfnI&t=958s",
           "date": "2024-03-15",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "Liz Happy Club"
         },
@@ -94,7 +95,7 @@
           "title": "Bazett 1T (w. Arash)",
           "link": "https://www.youtube.com/watch?v=p8QkHOC-CgE&t=797s",
           "date": "2024-03-25",
-          "servant": "bazett",
+          "servant": "336",
           "turns": "1T",
           "runner": "Nyxi"
         }
diff --git a/src/content/teslafest/mc-white-day-2021.json b/src/content/teslafest/mega-coil/white-day-2021.json
similarity index 88%
rename from src/content/teslafest/mc-white-day-2021.json
rename to src/content/teslafest/mega-coil/white-day-2021.json
index c8d0d8a..495bd66 100644
--- a/src/content/teslafest/mc-white-day-2021.json
+++ b/src/content/teslafest/mega-coil/white-day-2021.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "../../../../.astro/collections/teslafest.schema.json",
   "info": {
     "title": "Rematch at Reichenbach Falls",
     "releaseDate": "2024-03-15",
@@ -14,7 +15,7 @@
           "title": "Jekyll & Hyde 3T",
           "link": "https://www.youtube.com/watch?v=v_WlwqTJYTc&t=155s",
           "date": "2024-04-04",
-          "servant": "jekyllhyde",
+          "servant": "81",
           "turns": "3T",
           "runner": "Rikohaiji"
         },
@@ -22,7 +23,7 @@
           "title": "Arjuna Alter 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=pLX_4PDIai8&t=526s",
           "date": "2024-03-19",
-          "servant": "arjunaalter",
+          "servant": "247",
           "turns": "3T",
           "runner": "Kusanagi"
         },
@@ -30,7 +31,7 @@
           "title": "Xiang Yu 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=JdlpwZKanJA&t=641s",
           "date": "2024-04-04",
-          "servant": "xiangyu",
+          "servant": "226",
           "turns": "3T",
           "runner": "TokuHer0"
         },
@@ -38,7 +39,7 @@
           "title": "Maou Nobu 3T (FLO NDCE)",
           "link": "https://www.youtube.com/watch?v=CvvXasgp-iY",
           "date": "2024-03-20",
-          "servant": "maounobu",
+          "servant": "250",
           "turns": "3T",
           "runner": "Sigrdrífa"
         },
@@ -46,7 +47,7 @@
           "title": "Taira 3T (FLO)",
           "link": "https://www.youtube.com/watch?v=3NebOHW5IC0&t=839s",
           "date": "2024-04-04",
-          "servant": "taira",
+          "servant": "303",
           "turns": "3T",
           "runner": "Zectry"
         }
diff --git a/src/content/teslafestgroups/eq-2020.json b/src/content/teslafestgroups/eq-2020.json
new file mode 100644
index 0000000..73fb69f
--- /dev/null
+++ b/src/content/teslafestgroups/eq-2020.json
@@ -0,0 +1,10 @@
+{
+  "$schema": "../../../.astro/collections/teslafestgroups.schema.json",
+  "info": {
+    "title": "Exhibition Quests 2020",
+    "releaseDate": "2024-03-15",
+    "shortdescription": "The return of the 2020 Nerofest Exhibition Quests - time to go for round 2",
+    "releaseNumber": 1,
+    "type": "group"
+  }
+}
diff --git a/src/content/teslafestgroups/eq-2021.json b/src/content/teslafestgroups/eq-2021.json
new file mode 100644
index 0000000..2c33206
--- /dev/null
+++ b/src/content/teslafestgroups/eq-2021.json
@@ -0,0 +1,10 @@
+{
+  "$schema": "../../../.astro/collections/teslafestgroups.schema.json",
+  "info": {
+    "title": "Exhibition Quests 2021",
+    "releaseDate": "2024-03-15",
+    "shortdescription": "The return of the 2021 Ishtarfest Exhibition Quests - time to run those again",
+    "releaseNumber": 2,
+    "type": "group"
+  }
+}
diff --git a/src/content/teslafestgroups/giga-coil.json b/src/content/teslafestgroups/giga-coil.json
new file mode 100644
index 0000000..f0c774a
--- /dev/null
+++ b/src/content/teslafestgroups/giga-coil.json
@@ -0,0 +1,10 @@
+{
+  "$schema": "../../../.astro/collections/teslafestgroups.schema.json",
+  "info": {
+    "title": "Giga Coil",
+    "releaseDate": "2024-03-15",
+    "shortdescription": "The second collection of old Challenge Quests that requires strategic of servants - let's go again",
+    "releaseNumber": 4,
+    "type": "group"
+  }
+}
diff --git a/src/content/teslafestgroups/mega-coil.json b/src/content/teslafestgroups/mega-coil.json
new file mode 100644
index 0000000..9b65bc7
--- /dev/null
+++ b/src/content/teslafestgroups/mega-coil.json
@@ -0,0 +1,10 @@
+{
+  "$schema": "../../../.astro/collections/teslafestgroups.schema.json",
+  "info": {
+    "title": "Mega Coil",
+    "releaseDate": "2024-03-15",
+    "shortdescription": "A collection of old Challenge Quests that requires strategic use of a full servant roster - be prepared",
+    "releaseNumber": 3,
+    "type": "group"
+  }
+}
\ No newline at end of file
diff --git a/static/data/_navdata.json b/src/data/_navdata.json
similarity index 100%
rename from static/data/_navdata.json
rename to src/data/_navdata.json
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 669267d..39e99c5 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,7 +1,7 @@
 ---
 import Navbar from '../components/navbar.astro'
 import NavbarEntry from '../components/navbarEntry.astro'
-import navdata from '../../static/data/_navdata.json'
+import navdata from '../data/_navdata.json'
 import embed from '../assets/embed.png'
 import home from 'iconoir/icons/home.svg'
 import database from 'iconoir/icons/database.svg'
@@ -9,6 +9,9 @@ import databasestar from 'iconoir/icons/database-star.svg'
 import mail from 'iconoir/icons/mail.svg'
 import type { IconsLookup } from '../types/generic'
 
+import workSans800 from '@fontsource/work-sans/files/work-sans-latin-800-normal.woff2?url';
+import workSans600 from '@fontsource/work-sans/files/work-sans-latin-600-normal.woff2?url';
+
 export interface Props {
   title: string
   currentpage: string
@@ -58,7 +61,11 @@ const mapped_navdata = navdata.map((item) => ({
     <meta property="og:type" content="website" />
     <meta property="og:locale" content="en_US" />
     <meta name="theme-color" content="#b86cff" />
+    <!-- Disable DarkReader, as site is already in dark mode -->
+    <meta name="darkreader-lock" content="this site only has darkmode"> 
     <!-- Links -->
+    <link rel="preload" as="font" type="font/woff2" href={workSans600} crossorigin="anonymous" />
+    <link rel="preload" as="font" type="font/woff2" href={workSans800} crossorigin="anonymous" />
     <link rel="icon" type="image/ico" href="/favicon.ico" />
     <link rel="sitemap" href="/sitemap-index.xml" />
     <link href="https://mastodon.neshweb.net/@Firq" rel="me" />
diff --git a/src/layouts/baseSection.astro b/src/layouts/baseSection.astro
index 2bf0cad..eea3647 100644
--- a/src/layouts/baseSection.astro
+++ b/src/layouts/baseSection.astro
@@ -1,15 +1,17 @@
 ---
 export interface Props {
   title: string
+  hidetitle?: boolean
   description: string
 }
 
-const { title, description } = Astro.props
+const { title, hidetitle, description } = Astro.props
+const override = hidetitle ? "display: None" : ""
 ---
 
 <div class="base">
-  <h1>{title}</h1>
-  <h2>{description}</h2>
+  <h1 style={override}>{title}</h1>
+  <h2 style={override}>{description}</h2>
   <div>
     <slot />
   </div>
diff --git a/src/layouts/databaseSection.astro b/src/layouts/databaseSection.astro
index ba82048..9fdf39a 100644
--- a/src/layouts/databaseSection.astro
+++ b/src/layouts/databaseSection.astro
@@ -12,9 +12,10 @@ const line = displayLine ? "flex" : "none"
 <section>
   <h1 style={display}>{title}</h1>
   <div class="wrapper">
+    <div class="start hightlighter"></div>
     <div class="line"></div>
     <slot />
-    <div class="drop"></div>
+    <div class="drop hightlighter"></div>
   </div>
 </section>
 
@@ -24,21 +25,35 @@ const line = displayLine ? "flex" : "none"
     padding-right: 0.25em;
     padding-bottom: 5rem;
   }
-  .drop {
+
+  .hightlighter {
+    left: 0;
+    right: 0;
     display: flex;
     position: absolute;
     visibility: visible;
-    left: 0;
-    right: 0;
-    bottom: -5rem;
     margin-left: auto;
     margin-right: auto;
     height: 1.5rem;
     width: 1.5rem;
+  }
+
+  .drop {
+    bottom: -5rem;
     border-radius: 0% 50% 50% 50%;
     transform: rotate(45deg);
     background-color: var(--c-darkpurple);
   }
+
+  .start {
+    top: -2rem;
+    border-radius: 40%;
+    border-style: solid;
+    border-width: 0.25rem;
+    border-color: var(--c-lightgray);
+    background-color: var(--c-darkpurple);
+  }
+
   .line {
     display: flex;
     position: absolute;
@@ -89,6 +104,9 @@ const line = displayLine ? "flex" : "none"
     .drop {
       margin-left: 1.5rem;
     }
+    .start {
+      margin-left: 1.25rem;
+    }
     .line {
       margin-left: 2.1rem;
     }
@@ -106,15 +124,17 @@ const line = displayLine ? "flex" : "none"
     section {
       padding-bottom: unset;
     }
-    .drop {
+    .drop, .start, .line {
       display: var(--line);
       margin-left: 2rem;
     }
+    .start {
+      margin-left: 1.75rem;
+    }
     .line {
-      display: var(--line);
       margin-left: 2.6rem;
-      height: calc(100% + 4rem);
-      translate: unset;
+      height: calc(100% + 6rem);
+      translate: 0px -2rem;
     }
     h1 {
       margin-left: 15rem;
diff --git a/src/layouts/taShowcaseLayout.astro b/src/layouts/taShowcaseLayout.astro
index 4bb7ff8..a9eb502 100644
--- a/src/layouts/taShowcaseLayout.astro
+++ b/src/layouts/taShowcaseLayout.astro
@@ -5,17 +5,19 @@ import TACard from '../components/taCard.astro'
 import { plsLoadTAEntry } from '../utils/tools'
 import { Image } from 'astro:assets'
 import lizsad from '../assets/lizsad.png'
+import SmallTitle from '../components/smallTitle.astro'
 
 export interface Props {
-  collection: "teslafest" | "taInfoData"
+  collection: 'teslafest' | 'taInfoData'
   collectionKey: string
-  baseurl: "database" | "teslafest"
+  baseurl: string
 }
 
 const { collection, collectionKey, baseurl } = Astro.props
 const taEntry = await plsLoadTAEntry(collectionKey, collection)
 const pagetitle = `${taEntry.info.title} - FGO TA`
-const displaystate = taEntry.quests[0].data.length > 0 ? "none" : "flex"
+const displaystate = taEntry.quests[0].data.length > 0 ? 'none' : 'flex'
+const hidetitle = taEntry.quests.length <= 1
 ---
 
 <Layout
@@ -23,10 +25,16 @@ const displaystate = taEntry.quests[0].data.length > 0 ? "none" : "flex"
   currentpage="database-entry"
   descriptionOverride={taEntry.info.shortdescription}
 >
-  <a href=`/${baseurl}`>&lt&lt Back to database</a>
+  <SmallTitle
+    maintext={taEntry.info.title}
+    subtext={taEntry.info.shortdescription}
+    fadeout={true}
+    baseurl={baseurl}
+    returnbutton={true}
+  />
   {
     taEntry.quests.map((item) => (
-      <BaseSection title={item.questTitle} description={item.description}>
+      <BaseSection title={item.questTitle} description={item.description} hidetitle={hidetitle}>
         {item.data
           .sort((a, b) => b.date.valueOf() - a.date.valueOf())
           .map((item) => (
@@ -36,7 +44,12 @@ const displaystate = taEntry.quests[0].data.length > 0 ? "none" : "flex"
     ))
   }
   <div style=`display: ${displaystate}` class="overridewrapper">
-    <Image class="overrideimage" src={lizsad} alt="Sad override if there are no runs" loading="eager"></Image>
+    <Image
+      class="overrideimage"
+      src={lizsad}
+      alt="Sad override if there are no runs"
+      loading="eager"
+    />
   </div>
   <div class="placeholder"></div>
 </Layout>
diff --git a/src/pages/database/[...slug].astro b/src/pages/database/[...slug].astro
index 597615c..e425539 100644
--- a/src/pages/database/[...slug].astro
+++ b/src/pages/database/[...slug].astro
@@ -52,7 +52,7 @@ export async function getStaticPaths() {
   const full = slugdata.concat(groups as any)
   full.map((data) => {
     if (data.group) {
-      const coll = fulldata.filter((d) => d.id.startsWith(data.slug))
+      const coll = fulldata.filter((d) => d.id.split("/", 1)[0] == data.slug)
       data.questinfo = coll.map((d) => {
         return { slug: d.id, info: d.data.info }
       })
@@ -78,6 +78,12 @@ export async function getStaticPaths() {
 }
 
 const { key, group, questinfo, pageinfo } = Astro.props
+
+let baseurl_return = "database"
+if (key.includes("/")) {
+  baseurl_return = baseurl_return + "/" + key.split("/", 1)[0]
+}
+
 ---
 
 {
@@ -85,7 +91,7 @@ const { key, group, questinfo, pageinfo } = Astro.props
     <TaShowcaseLayout
       collection="taInfoData"
       collectionKey={key}
-      baseurl="database"
+      baseurl={baseurl_return}
     />
   )
 }
@@ -101,6 +107,7 @@ const { key, group, questinfo, pageinfo } = Astro.props
         subtext={pageinfo!.shortdescription}
         fadeout={true}
         baseurl="database"
+        returnbutton={true}
       />
       <DatabaseSection title="" titlehidden={true}>
         {questinfo!.map((quest) => (
diff --git a/src/pages/database/index.astro b/src/pages/database/index.astro
index 5b4516d..1208bf9 100644
--- a/src/pages/database/index.astro
+++ b/src/pages/database/index.astro
@@ -4,9 +4,9 @@ import Layout from '../../layouts/Layout.astro'
 import QuestListing from '../../components/listings/questListingLine.astro'
 import EventListing from '../../components/listings/eventListingLine.astro'
 import DatabaseSection from '../../layouts/databaseSection.astro'
-import Title from '../../components/title.astro'
+import SmallTitle from '../../components/smallTitle.astro'
 
-const description = 'FGO NA TA Database'
+const description = 'A mostly up-to-date list of NA TA runs'
 const fulldata = await getCollection('taInfoData')
 const groups = await getCollection('groups')
 const changes = await getCollection('changes')
@@ -29,8 +29,8 @@ combined.sort(
   currentpage="database"
   descriptionOverride={description}
 >
-  <Title
-    maintext="TA DATA­BASE"
+  <SmallTitle
+    maintext="TA DATA&shy;BASE"
     subtext="A mostly up-to-date list of NA TA runs"
     fadeout={true}
   />
diff --git a/src/pages/index.astro b/src/pages/index.astro
index e407c5d..a5dec7f 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -12,7 +12,7 @@ const description =
   currentpage="home"
   descriptionOverride={description}
 >
-  <Title maintext='FGO NA TA DATA&shy;BASE' subtext='The all-in-one lookup for your all TA needs'/>
+  <Title maintext='FGO NA TA DATA&shy;BASE' subtext='The all-in-one lookup for all your TA needs'/>
   <Hero fadeout={true}/>
 </Layout>
 
diff --git a/src/pages/teslafest/[...slug].astro b/src/pages/teslafest/[...slug].astro
new file mode 100644
index 0000000..2527418
--- /dev/null
+++ b/src/pages/teslafest/[...slug].astro
@@ -0,0 +1,122 @@
+---
+import { getCollection } from 'astro:content'
+import TaShowcaseLayout from '../../layouts/taShowcaseLayout.astro'
+import Layout from '../../layouts/Layout.astro'
+import DatabaseSection from '../../layouts/databaseSection.astro'
+import QuestListing from '../../components/listings/questListingCard.astro'
+import SmallTitle from '../../components/smallTitle.astro'
+
+interface store {
+  slug: string
+  group: boolean
+  questinfo:
+    | undefined
+    | {
+        slug: string
+        info: {
+          title: string
+          releaseDate: Date
+          shortdescription: string
+          releaseNumber: number
+        }
+      }[]
+  pageinfo:
+    | undefined
+    | {
+        title: string
+        shortdescription: string
+      }
+}
+
+export async function getStaticPaths() {
+  const fulldata = await getCollection('teslafest')
+  const slugdata: store[] = fulldata.map((data) => {
+    return {
+      slug: data.id,
+      group: false,
+      questinfo: undefined,
+      pageinfo: undefined,
+    }
+  })
+
+  const groupdata = await getCollection('teslafestgroups')
+  const groups: store[] = groupdata.map((data) => {
+    return {
+      slug: data.id,
+      group: true,
+      questinfo: undefined,
+      pageinfo: undefined,
+    }
+  })
+
+  const full = slugdata.concat(groups as any)
+  full.map((data) => {
+    if (data.group) {
+      const coll = fulldata.filter((d) => d.id.split("/", 1)[0] == data.slug)
+      data.questinfo = coll.map((d) => {
+        return { slug: d.id, info: d.data.info }
+      })
+      data.questinfo.sort(
+        (a, b) =>
+          b.info.releaseDate.valueOf() - a.info.releaseDate.valueOf() ||
+          b.info.releaseNumber - a.info.releaseNumber
+      )
+      const page = groupdata.find((d) => d.id === data.slug)
+      data.pageinfo = page?.data.info
+    }
+  })
+
+  return full.map((data) => ({
+    params: { slug: data.slug },
+    props: {
+      key: data.slug,
+      group: data.group,
+      questinfo: data.questinfo,
+      pageinfo: data.pageinfo,
+    },
+  }))
+}
+
+const { key, group, questinfo, pageinfo } = Astro.props
+
+let baseurl_return = "teslafest"
+if (key.includes("/")) {
+  baseurl_return = baseurl_return + "/" + key.split("/", 1)[0]
+}
+
+---
+
+{
+  !group && (
+    <TaShowcaseLayout
+      collection="teslafest"
+      collectionKey={key}
+      baseurl={baseurl_return}
+    />
+  )
+}
+{
+  group && (
+    <Layout
+      title={`${pageinfo!.title} - Teslafest - FGO TA`}
+      currentpage="teslafest"
+      descriptionOverride={pageinfo!.shortdescription}
+    >
+      <SmallTitle
+        maintext={pageinfo!.title}
+        subtext={pageinfo!.shortdescription}
+        fadeout={true}
+        baseurl="teslafest"
+        returnbutton={true}
+      />
+      <DatabaseSection title="" titlehidden={true}>
+        {questinfo!.map((quest) => (
+          <QuestListing
+            {...{ ...quest.info, slug: quest.slug }}
+            baseurl="teslafest"
+          />
+        ))}
+      </DatabaseSection>
+    </Layout>
+  )
+}
diff --git a/src/pages/teslafest/[slug].astro b/src/pages/teslafest/[slug].astro
deleted file mode 100644
index efc33a1..0000000
--- a/src/pages/teslafest/[slug].astro
+++ /dev/null
@@ -1,13 +0,0 @@
----
-import { getCollection } from 'astro:content';
-import TaShowcaseLayout from '../../layouts/taShowcaseLayout.astro'
-
-export async function getStaticPaths() {
-  const fulldata = (await getCollection('teslafest')).map((data) => data.id)
-  return fulldata.map((slug) => ({ params: { slug } }))
-}
-
-const { slug } = Astro.params
----
-
-<TaShowcaseLayout collection="teslafest" collectionKey={slug} baseurl="teslafest" />
diff --git a/src/pages/teslafest/index.astro b/src/pages/teslafest/index.astro
index c822f20..f307056 100644
--- a/src/pages/teslafest/index.astro
+++ b/src/pages/teslafest/index.astro
@@ -1,24 +1,26 @@
 ---
-import { getCollection } from 'astro:content';
+import { getCollection } from 'astro:content'
 import Layout from '../../layouts/Layout.astro'
-import QuestListing from '../../components/listings/questListingCard.astro'
+import QuestListing from '../../components/listings/questListingLine.astro'
 import DatabaseSection from '../../layouts/databaseSection.astro'
-import GenericHero from '../../components/genericHero.astro';
-import Title from '../../components/title.astro';
+import SmallTitle from '../../components/smallTitle.astro'
 
-const description = 'One of the most anticipated events of 2024 - Teslafest. Were the two weeks of time enough for all those quests, even with a parallel lottery?'
+const description =
+  'One of the most anticipated events of 2024 - Teslafest. Were the two weeks of time enough for all those quests, even with a parallel lottery?'
 const fulldata = await getCollection('teslafest')
+const groups = await getCollection('teslafestgroups')
 
-fulldata.sort(
-  (a, b) => b.data.info.releaseDate.valueOf()  - a.data.info.releaseDate.valueOf()  ||  b.data.info.releaseNumber - a.data.info.releaseNumber
+let combined = fulldata
+for (const group of groups) {
+  combined = combined.filter((data) => !data.id.startsWith(group.id))
+}
+combined = combined.concat(groups as any)
+
+combined.sort(
+  (a, b) =>
+    b.data.info.releaseDate.valueOf() - a.data.info.releaseDate.valueOf() ||
+    b.data.info.releaseNumber - a.data.info.releaseNumber
 )
-
-const gc = fulldata.filter((value) => value.id.startsWith("gc-"))
-const mc = fulldata.filter((value) => value.id.startsWith("mc-"))
-const cq = fulldata.filter((value) => value.id.startsWith("cq-"))
-const eq_2021 = fulldata.filter((value) => value.id.startsWith("eq-2021"))
-const eq_2020 = fulldata.filter((value) => value.id.startsWith("eq-2020"))
-
 ---
 
 <Layout
@@ -26,21 +28,11 @@ const eq_2020 = fulldata.filter((value) => value.id.startsWith("eq-2020"))
   currentpage="teslafest"
   descriptionOverride={description}
 >
-  <Title maintext='TESLA&shy;FEST' subtext='' fadeout={true}/>
-  <DatabaseSection title="Challenge Quest">
-    {cq.map((quest) => <QuestListing { ...{...quest.data.info, slug: quest.id} } baseurl="teslafest" />)}
-  </DatabaseSection>
-  <DatabaseSection title="Giga Coil">
-    {gc.map((quest) => <QuestListing { ...{...quest.data.info, slug: quest.id} } baseurl="teslafest" />)}
-  </DatabaseSection>
-  <DatabaseSection title="Mega Coil">
-    {mc.map((quest) => <QuestListing { ...{...quest.data.info, slug: quest.id} } baseurl="teslafest" />)}
-  </DatabaseSection>
-  <DatabaseSection title="Exhibition Quests: 2020 Revival">
-    {eq_2020.map((quest) => <QuestListing { ...{...quest.data.info, slug: quest.id} } baseurl="teslafest" />)}
-  </DatabaseSection>
-  <DatabaseSection title="Exhibition Quests: 2021 Revival">
-    {eq_2021.map((quest) => <QuestListing { ...{...quest.data.info, slug: quest.id} } baseurl="teslafest" />)}
+  <SmallTitle maintext="TESLA­FEST" subtext={description} fadeout={true} />
+  <DatabaseSection title="NA Runs" titlehidden={true} displayLine={true}>
+    {
+      combined.map((quest) => { return (<QuestListing {...{ ...quest.data.info, slug: quest.id }} baseurl="teslafest" />)})
+    }
   </DatabaseSection>
 </Layout>
 
diff --git a/unlighthouse.config.ts b/unlighthouse.config.ts
index 4d2881a..6f7d007 100644
--- a/unlighthouse.config.ts
+++ b/unlighthouse.config.ts
@@ -1,10 +1,32 @@
 export default {
+    lighthouseOptions: {
+        throttlingMethod: "devtools",
+        throttling: {
+            cpuSlowdownMultiplier: 4,
+            requestLatencyMs: 150,
+            downloadThroughputKbps: 1638.4,
+            uploadThroughputKbps: 1638.4,
+        },
+        screenEmulation: {
+            width: 412,
+            height: 823,
+            deviceScaleFactor: 1.75,
+        }
+    },
     puppeteerOptions: {
-        args: ["--no-sandbox", "--disable-setuid-sandbox"],
+        args: [ 
+            "--no-sandbox",
+            "--disable-setuid-sandbox"
+        ],
     },
     ci: {
         budget: 50,
-        buildStatic: true
+        buildStatic: true,
+    },
+    scanner: {
+        sitemap: true,
+        dynamicSampling: false,
+        samples: 3,
     },
     outputPath: "unlighthouse-reports",
 }