]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
ui: PWA support (#23871)
authorAleksander Grygier <redacted>
Fri, 12 Jun 2026 13:53:26 +0000 (15:53 +0200)
committerGitHub <redacted>
Fri, 12 Jun 2026 13:53:26 +0000 (15:53 +0200)
* feat: Add basic PWA support and service worker for offline caching

* feat: Vite PWA implementation WIP

* feat: Improve PWA icons generation

* feat: Add PWA workbox to server routes

* feat: Include `version.json` in static assets

* feat: Add HTTP cache headers for PWA static assets

* feat: Update app name for `apple-mobile-web-app-title`

* feat: Implement PWA versioning and automatic update detection

* chore: Update `.gitignore` files

* feat: Splash Screens

* feat: Add dark mode favicon support

* refactor: Cleanup

* fix: Use dark logo for dark splash screens

* refactor: Simplify favicons SVG code

* fix: Adjust caching and polling for reliable service worker updates

* fix: Add missing favicon entry

* fix: Align PWA service worker configuration with SvelteKit build structure

* fix: Replace hashed bundle paths with versioned static paths

* test: Add PWA tests

* ci: Add build output for unit tests

* refactor: Cleanup

* fix: Server build & release versioning

* chore: Update package-lock.json

* chore: Increase PWA cache size

* chore: Update packages

* feat: Update favicons

* refactor: Post-merge fix

* feat: support explicit build version for PWA cache busting

* fix: CI

* feat: Improve PWA Refresh Alert UI

* feat: Add toggleable build version display

* refactor: Cleanup

* feat: Add version mismatch detection and manual app reload

* refactor: replace dynamic imports with static

* refactor: Cleanup

* feat: Add safe space for `pwa-<size>.png` rendered icons

* fix: use relative paths for PWA assets to support base path deployment

* feat: add PWA mode detection via URL query parameter

* feat: Use ?cache=true for SW-cached PWA assets

* refactor: Build process cleanup

* refactor: Decouple PWA versioning and remove ?cache=true workaround

* chore: Update README logo

* feat: Include PWA Assets generation in build script

* refactor: `usePwa` hook for core layout

* fix: Relativize base vite plugin

* fix: remove unnecessary backslash escapes in test regexes

* test: update static asset paths for API Key test

* refactor: Move SvelteKit PWA Options config to constants

* ui: fix update notification never appearing

Keep the PWA hook object intact instead of destructuring needRefreshByStorage,
which freezes the reactive getter. Also exclude loading.html from PWA
precache to prevent 404 errors and broken SW installation.

54 files changed:
.github/workflows/release.yml
.github/workflows/ui-build.yml
.github/workflows/ui-self-hosted.yml
.github/workflows/ui.yml
.gitignore
README.md
scripts/ui-assets.cmake
tools/server/server-http.cpp
tools/server/tests/unit/test_security.py
tools/ui/.gitignore
tools/ui/CMakeLists.txt
tools/ui/package-lock.json
tools/ui/package.json
tools/ui/playwright.config.ts
tools/ui/pwa-assets-dark.config.ts [new file with mode: 0644]
tools/ui/pwa-assets.config.ts [new file with mode: 0644]
tools/ui/scripts/make-icons-circular.js [new file with mode: 0644]
tools/ui/scripts/vite-plugin-build-info.ts [new file with mode: 0644]
tools/ui/scripts/vite-plugin-llama-cpp-build.ts [deleted file]
tools/ui/scripts/vite-plugin-relativize-base.ts [new file with mode: 0644]
tools/ui/scripts/vite-plugin-splash-screen.ts [new file with mode: 0644]
tools/ui/src/app.d.ts
tools/ui/src/app.html
tools/ui/src/lib/components/app/settings/SettingsChat/SettingsChat.svelte
tools/ui/src/lib/components/pwa/PwaMetaTags.svelte [new file with mode: 0644]
tools/ui/src/lib/components/pwa/PwaRefreshAlert.svelte [new file with mode: 0644]
tools/ui/src/lib/components/pwa/index.ts [new file with mode: 0644]
tools/ui/src/lib/constants/app.ts [new file with mode: 0644]
tools/ui/src/lib/constants/code.ts
tools/ui/src/lib/constants/index.ts
tools/ui/src/lib/constants/pwa.ts [new file with mode: 0644]
tools/ui/src/lib/constants/settings-keys.ts
tools/ui/src/lib/constants/settings-registry.ts
tools/ui/src/lib/constants/storage.ts
tools/ui/src/lib/constants/ui.ts
tools/ui/src/lib/enums/index.ts
tools/ui/src/lib/enums/splash.enums.ts [new file with mode: 0644]
tools/ui/src/lib/hooks/use-pwa.svelte.ts [new file with mode: 0644]
tools/ui/src/lib/stores/build-info.svelte.ts [new file with mode: 0644]
tools/ui/src/lib/stores/mcp.svelte.ts
tools/ui/src/lib/stores/theme.svelte.ts [new file with mode: 0644]
tools/ui/src/lib/stores/version.svelte.ts [new file with mode: 0644]
tools/ui/src/lib/types/index.ts
tools/ui/src/lib/types/splash.ts [new file with mode: 0644]
tools/ui/src/lib/utils/pdf-processing.ts
tools/ui/src/routes/+layout.svelte
tools/ui/static/favicon-dark.svg [new file with mode: 0644]
tools/ui/static/favicon.svg
tools/ui/svelte.config.js
tools/ui/tests/e2e/demo.test.ts [deleted file]
tools/ui/tests/e2e/pwa.e2e.ts [new file with mode: 0644]
tools/ui/tests/stories/PwaRefreshAlert.stories.svelte [new file with mode: 0644]
tools/ui/tests/unit/pwa.spec.ts [new file with mode: 0644]
tools/ui/vite.config.ts

index efd9ceef4d09ad8076a96c23d969eac609a762b0..ea6138034c0841844de546b70e1e7afe9c0c337d 100644 (file)
@@ -59,8 +59,31 @@ jobs:
             echo "should_release=false" >> $GITHUB_OUTPUT
           fi
 
+  get-version:
+    runs-on: ubuntu-slim
+    outputs:
+      ui_version: ${{ steps.version.outputs.ui_version }}
+    steps:
+      - uses: actions/checkout@v6
+        with:
+          fetch-depth: 0
+      - id: version
+        run: |
+          # Resolve UI version: BUILD_NUMBER from cmake/build-info.cmake > git hash + epoch > fallback
+          version=""
+          if grep -q "BUILD_NUMBER" cmake/build-info.cmake; then
+            build_number=$(grep "set(BUILD_NUMBER" cmake/build-info.cmake | grep -oP '\d+')
+            if [ -n "$build_number" ] && [ "$build_number" -gt 0 ]; then
+              version="b${build_number}"
+            fi
+          fi
+          if [ -z "$version" ]; then
+            version=$(git rev-parse --short HEAD)-$(date +%s)
+          fi
+          echo "ui_version=${version}" >> $GITHUB_OUTPUT
+
   macos-cpu:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
     strategy:
       matrix:
@@ -116,6 +139,7 @@ jobs:
             -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
             -DLLAMA_FATAL_WARNINGS=ON \
             -DLLAMA_BUILD_BORINGSSL=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }} \
             ${{ env.CMAKE_ARGS }}
           cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
 
@@ -141,7 +165,7 @@ jobs:
           name: llama-bin-macos-${{ matrix.build }}.tar.gz
 
   ubuntu-cpu:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
     strategy:
       matrix:
@@ -201,6 +225,7 @@ jobs:
             -DGGML_NATIVE=OFF \
             -DGGML_CPU_ALL_VARIANTS=ON \
             -DLLAMA_FATAL_WARNINGS=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }}
             ${{ env.CMAKE_ARGS }}
           cmake --build build --config Release -j $(nproc)
 
@@ -227,7 +252,7 @@ jobs:
           name: llama-bin-ubuntu-${{ matrix.build }}.tar.gz
 
   ubuntu-vulkan:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
 
     strategy:
@@ -287,6 +312,7 @@ jobs:
             -DGGML_NATIVE=OFF \
             -DGGML_CPU_ALL_VARIANTS=ON \
             -DGGML_VULKAN=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }}
             ${{ env.CMAKE_ARGS }}
           cmake --build build --config Release -j $(nproc)
 
@@ -312,7 +338,7 @@ jobs:
           name: llama-bin-ubuntu-vulkan-${{ matrix.build }}.tar.gz
 
   android-arm64:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
 
     runs-on: ubuntu-latest
@@ -379,6 +405,7 @@ jobs:
             -DLLAMA_FATAL_WARNINGS=ON \
             -DGGML_OPENMP=OFF \
             -DLLAMA_BUILD_BORINGSSL=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }}
             ${{ env.CMAKE_ARGS }}
           cmake --build build --config Release -j $(nproc)
 
@@ -404,7 +431,7 @@ jobs:
           name: llama-bin-android-arm64.tar.gz
 
   ubuntu-24-openvino:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
 
     runs-on: ubuntu-24.04
@@ -476,7 +503,8 @@ jobs:
           source ./openvino_toolkit/setupvars.sh
           cmake -B build/ReleaseOV -G Ninja \
             -DCMAKE_BUILD_TYPE=Release \
-            -DGGML_OPENVINO=ON
+            -DGGML_OPENVINO=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }}
           cmake --build build/ReleaseOV --config Release -j $(nproc)
 
       - name: ccache-clear
@@ -952,7 +980,7 @@ jobs:
           name: llama-bin-ubuntu-sycl-${{ matrix.build }}-x64.tar.gz
 
   ubuntu-22-rocm:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
 
     runs-on: ubuntu-22.04
@@ -1044,6 +1072,7 @@ jobs:
             -DGGML_HIP=ON \
             -DHIP_PLATFORM=amd \
             -DGGML_HIP_ROCWMMA_FATTN=ON \
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }} \
             ${{ env.CMAKE_ARGS }}
           cmake --build build --config Release -j $(nproc)
 
@@ -1072,7 +1101,7 @@ jobs:
           name: llama-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz
 
   windows-hip:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
 
     runs-on: windows-2022
@@ -1168,6 +1197,7 @@ jobs:
             -DGPU_TARGETS="${{ matrix.gpu_targets }}" `
             -DGGML_HIP_ROCWMMA_FATTN=ON `
             -DGGML_HIP=ON `
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }} `
             -DLLAMA_BUILD_BORINGSSL=ON
           cmake --build build --target ggml-hip -j ${env:NUMBER_OF_PROCESSORS}
           md "build\bin\rocblas\library\"
@@ -1195,7 +1225,7 @@ jobs:
           name: llama-bin-win-hip-${{ matrix.name }}-x64.zip
 
   ios-xcode:
-    needs: [check-release]
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
     runs-on: macos-26
 
@@ -1225,6 +1255,7 @@ jobs:
             -DCMAKE_SYSTEM_NAME=iOS \
             -DCMAKE_OSX_DEPLOYMENT_TARGET=16.0 \
             -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml
+            -DHF_UI_VERSION=${{ needs.get-version.outputs.ui_version }}
           cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO
 
       - name: xcodebuild for swift package
@@ -1344,10 +1375,12 @@ jobs:
 #          path: llama-${{ steps.tag.outputs.name }}-bin-${{ matrix.chip_type }}-openEuler-${{ matrix.arch }}${{ matrix.use_acl_graph == 'on' && '-aclgraph' || '' }}.tar.gz
 #          name: llama-bin-${{ matrix.chip_type }}-openEuler-${{ matrix.arch }}${{ matrix.use_acl_graph == 'on' && '-aclgraph' || '' }}.tar.gz
 
-  ui:
-    needs: [check-release]
+  ui-build:
+    needs: [check-release, get-version]
     if: ${{ needs.check-release.outputs.should_release == 'true' }}
     uses: ./.github/workflows/ui-build.yml
+    with:
+      hf_ui_version: ${{ needs.get-version.outputs.ui_version }}
 
   release:
     if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
@@ -1360,6 +1393,7 @@ jobs:
     runs-on: ubuntu-slim
 
     needs:
+      - get-version
       - windows
       - windows-cpu
       - windows-cuda
index 92b0573fb8d20e96a073db8aa9b09694521d7f43..67327c24b49383f4a93a6c8093e6519a15810709 100644 (file)
@@ -2,6 +2,11 @@ name: UI Build
 
 on:
   workflow_call:
+    inputs:
+      hf_ui_version:
+        description: 'Version string for version.json (e.g. 12345)'
+        required: false
+        type: string
 
 jobs:
   build:
@@ -25,9 +30,20 @@ jobs:
         working-directory: tools/ui
 
       - name: Build application
+        env:
+          HF_UI_VERSION: ${{ inputs.hf_ui_version || '' }}
+          LLAMA_UI_VERSION: ${{ inputs.hf_ui_version || 'b0000' }}
         run: npm run build
         working-directory: tools/ui
 
+      - name: Run PWA unit tests (versioned build output)
+        run: npx vitest --project=unit --run tests/unit/pwa.spec.ts
+        working-directory: tools/ui
+
+      - name: Run build-utils unit tests (both paths)
+        run: npx vitest --project=unit --run tests/unit/build-utils.spec.ts
+        working-directory: tools/ui
+
       - name: Generate checksums
         run: |
           cd tools/ui/dist
index 5457d900c872e76b710160c7ca52e9b0117bd411..79d7800d6bbd2060b627a15c500f845b9c64fe97 100644 (file)
@@ -1,8 +1,8 @@
 name: UI (self-hosted)
 
 # these are the same as ui.yml, but with self-hosted runners
-# the runners come with pre-installed Playwright browsers version: 1.56.1
-# the jobs are much lighter because they don't need to install node and playwright browsers
+# the jobs are lighter because they don't need to install Node.js or Playwright browsers
+# the runner has pre-installed Playwright browsers for @playwright/test (1.56.1) at /ms-playwright/
 
 on:
   workflow_dispatch:
@@ -61,6 +61,12 @@ jobs:
         run: npm ci
         working-directory: tools/ui
 
+      - name: Download built UI artifacts
+        uses: actions/download-artifact@v6
+        with:
+          name: ui-build
+          path: tools/ui/dist/
+
       - name: Run type checking
         if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run check
@@ -72,12 +78,12 @@ jobs:
         working-directory: tools/ui
 
       - name: Run Client tests
-        if: ${{ always() }}
+        if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run test:client
         working-directory: tools/ui
 
       - name: Run Unit tests
-        if: ${{ always() }}
+        if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run test:unit
         working-directory: tools/ui
 
@@ -97,22 +103,23 @@ jobs:
         run: npm ci
         working-directory: tools/ui
 
-      - name: Build application
-        if: ${{ always() && steps.setup.conclusion == 'success' }}
-        run: npm run build
-        working-directory: tools/ui
+      - name: Download built UI artifacts
+        uses: actions/download-artifact@v6
+        with:
+          name: ui-build
+          path: tools/ui/dist/
 
       - name: Build Storybook
-        if: ${{ always() }}
+        if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run build-storybook
         working-directory: tools/ui
 
       - name: Run UI tests
-        if: ${{ always() }}
+        if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run test:ui -- --testTimeout=60000
         working-directory: tools/ui
 
       - name: Run E2E tests
-        if: ${{ always() }}
+        if: ${{ always() && steps.setup.conclusion == 'success' }}
         run: npm run test:e2e
         working-directory: tools/ui
index b3712e450592d467fce938c0eb35b5deab8f0ea4..fa99a0cda2cf356d89555db860b0e5a876daeefd 100644 (file)
@@ -43,7 +43,7 @@ jobs:
   ui-checks:
     name: Checks
     needs: ui-build
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     continue-on-error: true
     steps:
       - name: Checkout code
@@ -60,6 +60,12 @@ jobs:
           cache: "npm"
           cache-dependency-path: "tools/ui/package-lock.json"
 
+      - name: Download built UI artifacts
+        uses: actions/download-artifact@v6
+        with:
+          name: ui-build
+          path: tools/ui/dist/
+
       - name: Install dependencies
         id: setup
         if: ${{ steps.node.conclusion == 'success' }}
@@ -87,7 +93,7 @@ jobs:
         run: npm run test:client
         working-directory: tools/ui
 
-      - name: Run Unit tests
+      - name: Run Unit tests (uses pre-built dist/ from ui-build)
         if: ${{ always() && steps.playwright.conclusion == 'success' }}
         run: npm run test:unit
         working-directory: tools/ui
@@ -95,7 +101,7 @@ jobs:
   e2e-tests:
     name: E2E Tests
     needs: ui-build
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     steps:
       - name: Checkout code
         uses: actions/checkout@v6
@@ -117,10 +123,11 @@ jobs:
         run: npm ci
         working-directory: tools/ui
 
-      - name: Build application
-        if: ${{ always() && steps.setup.conclusion == 'success' }}
-        run: npm run build
-        working-directory: tools/ui
+      - name: Download built UI artifacts (reuses ui-build)
+        uses: actions/download-artifact@v6
+        with:
+          name: ui-build
+          path: tools/ui/dist/
 
       - name: Install Playwright browsers
         id: playwright
@@ -138,7 +145,7 @@ jobs:
         run: npm run test:ui -- --testTimeout=60000
         working-directory: tools/ui
 
-      - name: Run E2E tests
+      - name: Run E2E tests (uses pre-built dist/ from ui-build)
         if: ${{ always() && steps.playwright.conclusion == 'success' }}
         run: npm run test:e2e
         working-directory: tools/ui
index 8dc9d7d0b8dd30f3ed0a8b8ff3166ebfc243d496..9b589615a402350efb3765177c701ef5a3d37608 100644 (file)
 !/examples/sycl/*.bat
 !/examples/sycl/*.sh
 
-# Server Web UI temporary files (+ legacy directory)
-
-/tools/server/webui/node_modules
-/tools/server/webui/dist
-/tools/ui/node_modules
-/tools/ui/dist
-
 # Python
 
 /.venv
index d9f2e18231c7bb9aa71a0b40ee910d439dd9ddc7..41c904f39da080c6062131c271e8913596a454bb 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # llama.cpp
 
-![llama](https://user-images.githubusercontent.com/1991296/230134379-7181e485-c521-4d23-a0d6-f7b3b61ba524.png)
+![llama](https://raw.githubusercontent.com/ggml-org/llama.brand/refs/heads/master/cover/llama-cpp/cover-llama-cpp-dark.svg)
 
 [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
 [![Release](https://img.shields.io/github/v/release/ggml-org/llama.cpp)](https://github.com/ggml-org/llama.cpp/releases)
index f85c562bd0e5fdcd925e542d494ab11d9ab81409..6069d9816e305a5902825460dac685634b6a5748 100644 (file)
@@ -16,11 +16,80 @@ set(HF_ENABLED        "" CACHE STRING "Whether to allow HF Bucket download (ON/O
 set(BUILD_UI          "" CACHE STRING "Build UI via npm (ON/OFF)")
 set(LLAMA_UI_EMBED    "" CACHE STRING "Path to llama-ui-embed helper")
 
+# IMPORTANT: When adding PWA assets, sync across all 3 places:
+#   1. tools/ui/src/lib/constants/pwa.ts   (APPLE_DEVICES, PUBLIC_ENDPOINTS)
+#   2. tools/server/server-http.cpp        (public_endpoints)
+#   3. scripts/ui-assets.cmake             (ASSETS list)
+# - C++ (server-http.cpp) - public endpoints (splash screens generated via helper)
+# - TypeScript (constants/pwa.ts) - APPLE_DEVICES, PWA_MANIFEST, PUBLIC_ENDPOINTS
+#
+# When adding/changing PWA assets, update tools/ui/src/lib/constants/pwa.ts first,
+# then sync any new file names here and in server-http.cpp.
 set(ASSETS
-    bundle.css
-    bundle.js
     index.html
     loading.html
+    # PWA assets
+    favicon.ico
+    favicon-dark.ico
+    favicon.svg
+    favicon-dark.svg
+    pwa-64x64.png
+    pwa-192x192.png
+    pwa-512x512.png
+    maskable-icon-512x512.png
+    apple-touch-icon-180x180.png
+    # iOS splash screens
+    apple-splash-portrait-640x1136.png
+    apple-splash-landscape-1136x640.png
+    apple-splash-portrait-750x1334.png
+    apple-splash-landscape-1334x750.png
+    apple-splash-portrait-1170x2532.png
+    apple-splash-landscape-2532x1170.png
+    apple-splash-portrait-1179x2556.png
+    apple-splash-landscape-2556x1179.png
+    apple-splash-portrait-1206x2622.png
+    apple-splash-landscape-2622x1206.png
+    apple-splash-portrait-1284x2778.png
+    apple-splash-landscape-2778x1284.png
+    apple-splash-portrait-1290x2796.png
+    apple-splash-landscape-2796x1290.png
+    apple-splash-portrait-1320x2868.png
+    apple-splash-landscape-2868x1320.png
+    apple-splash-portrait-1488x2266.png
+    apple-splash-landscape-2266x1488.png
+    apple-splash-portrait-1640x2360.png
+    apple-splash-landscape-2360x1640.png
+    apple-splash-portrait-1668x2388.png
+    apple-splash-landscape-2388x1668.png
+    apple-splash-portrait-2048x2732.png
+    apple-splash-landscape-2732x2048.png
+    # iOS dark splash screens
+    apple-splash-portrait-dark-640x1136.png
+    apple-splash-landscape-dark-1136x640.png
+    apple-splash-portrait-dark-750x1334.png
+    apple-splash-landscape-dark-1334x750.png
+    apple-splash-portrait-dark-1170x2532.png
+    apple-splash-landscape-dark-2532x1170.png
+    apple-splash-portrait-dark-1179x2556.png
+    apple-splash-landscape-dark-2556x1179.png
+    apple-splash-portrait-dark-1206x2622.png
+    apple-splash-landscape-dark-2622x1206.png
+    apple-splash-portrait-dark-1284x2778.png
+    apple-splash-landscape-dark-2778x1284.png
+    apple-splash-portrait-dark-1290x2796.png
+    apple-splash-landscape-dark-2796x1290.png
+    apple-splash-portrait-dark-1320x2868.png
+    apple-splash-landscape-dark-2868x1320.png
+    apple-splash-portrait-dark-1640x2360.png
+    apple-splash-landscape-dark-2360x1640.png
+    apple-splash-portrait-dark-1668x2388.png
+    apple-splash-landscape-dark-2388x1668.png
+    apple-splash-portrait-dark-2048x2732.png
+    apple-splash-landscape-dark-2732x2048.png
+    manifest.webmanifest
+    sw.js
+    _app/version.json
+    build.json
 )
 
 set(DIST_DIR     "${UI_BINARY_DIR}/dist")
@@ -159,7 +228,7 @@ function(npm_build out_var)
 
     message(STATUS "UI: running npm run build, output -> ${DIST_DIR}")
     execute_process(
-        COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}"
+        COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}" "LLAMA_UI_VERSION=${HF_VERSION}" "LLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
                 ${NPM_EXECUTABLE} run build
         WORKING_DIRECTORY "${UI_SOURCE_DIR}"
         RESULT_VARIABLE rc
@@ -274,8 +343,35 @@ function(emit_files)
         foreach(asset ${ASSETS})
             list(APPEND args "${asset}" "${DIST_DIR}/${asset}")
         endforeach()
+
+        # Bundle files live in _app/immutable/ — vanilla SvelteKit output, no plugin
+        # rewriting. Embedded names must match the exact _app/ paths that index.html
+        # and sw.js reference.
+        file(GLOB_RECURSE detected_bundle_js "${DIST_DIR}/_app/immutable/bundle.*.js")
+        file(GLOB_RECURSE detected_bundle_css "${DIST_DIR}/_app/immutable/assets/bundle.*.css")
+        file(GLOB_RECURSE detected_workbox "${DIST_DIR}/workbox-*.js")
+        # Compute relative path from DIST_DIR to each found file.
+        # e.g. /path/to/build/tools/ui/dist/_app/immutable/bundle.XXX.js
+        #      -> _app/immutable/bundle.XXX.js
+        foreach(f ${detected_bundle_js})
+            string(REPLACE "${DIST_DIR}/" "" rel "${f}")
+            list(APPEND args "${rel}" "${f}")
+        endforeach()
+        foreach(f ${detected_bundle_css})
+            string(REPLACE "${DIST_DIR}/" "" rel "${f}")
+            list(APPEND args "${rel}" "${f}")
+        endforeach()
+        foreach(f ${detected_workbox})
+            string(REPLACE "${DIST_DIR}/" "" rel "${f}")
+            list(APPEND args "${rel}" "${f}")
+        endforeach()
     endif()
 
+    # Create build.json with the llama.cpp build number for UI version display.
+    # This is separate from SvelteKit's _app/version.json (used for SW cache invalidation).
+    # build.json is generated by the vite plugin (buildInfoPlugin) during npm build.
+    # CMake just embeds it from the dist that npm produced.
+
     execute_process(
         COMMAND "${LLAMA_UI_EMBED}" ${args}
         RESULT_VARIABLE rc
@@ -300,6 +396,8 @@ endif()
 set(provisioned FALSE)
 
 if(BUILD_UI)
+    # Resolve version from git build-info if not explicitly set
+    resolve_version(HF_VERSION)
     npm_build(NPM_OK)
     if(NPM_OK)
         set(provisioned TRUE)
index 34a20c9d22de25b2f21b0293d9d5573e34f7890e..9f6d3b9d1ef17755b689da29ef3d0487bbd702e8 100644 (file)
@@ -169,29 +169,108 @@ bool server_http_context::init(const common_params & params) {
         SRV_INF("api_keys: %zu keys loaded\n", params.api_keys.size());
     }
 
+    //
+    // Helper: Generate iOS splash screen paths from device dimensions
+    // This centralizes PWA asset paths to avoid duplication across CMake, C++, and TypeScript.
+    // Source of truth: tools/ui/src/lib/constants/pwa.ts (APPLE_DEVICES)
+    //
+    auto generate_splash_endpoints = []() -> std::vector<std::string> {
+        // Apple device dimensions (width x height) with orientation and color scheme
+        // Format: "orientation-dimension1xdimension2.png" or "orientation-dark-dimension1xdimension2.png"
+        // Based on https://developer.apple.com/design/human-interface-guidelines/app-icons
+        static const std::vector<std::pair<std::string, std::string>> splash_specs = {
+            // Portrait screens (light)
+            {"portrait", "640x1136"},     {"portrait", "750x1334"},
+            {"portrait", "1170x2532"},    {"portrait", "1179x2556"},
+            {"portrait", "1206x2622"},    {"portrait", "1284x2778"},
+            {"portrait", "1290x2796"},    {"portrait", "1320x2868"},
+            {"portrait", "1488x2266"},    {"portrait", "1640x2360"},
+            {"portrait", "1668x2388"},    {"portrait", "2048x2732"},
+            // Landscape screens (light) - dimensions swapped
+            {"landscape", "1136x640"},    {"landscape", "1334x750"},
+            {"landscape", "2532x1170"},   {"landscape", "2556x1179"},
+            {"landscape", "2622x1206"},   {"landscape", "2778x1284"},
+            {"landscape", "2796x1290"},   {"landscape", "2868x1320"},
+            {"landscape", "2266x1488"},   {"landscape", "2360x1640"},
+            {"landscape", "2388x1668"},   {"landscape", "2732x2048"},
+            // Portrait screens (dark)
+            {"portrait-dark", "640x1136"}, {"portrait-dark", "750x1334"},
+            {"portrait-dark", "1170x2532"}, {"portrait-dark", "1179x2556"},
+            {"portrait-dark", "1206x2622"}, {"portrait-dark", "1284x2778"},
+            {"portrait-dark", "1290x2796"}, {"portrait-dark", "1320x2868"},
+            {"portrait-dark", "1488x2266"}, {"portrait-dark", "1640x2360"},
+            {"portrait-dark", "1668x2388"}, {"portrait-dark", "2048x2732"},
+            // Landscape screens (dark)
+            {"landscape-dark", "1136x640"}, {"landscape-dark", "1334x750"},
+            {"landscape-dark", "2532x1170"}, {"landscape-dark", "2556x1179"},
+            {"landscape-dark", "2622x1206"}, {"landscape-dark", "2778x1284"},
+            {"landscape-dark", "2796x1290"}, {"landscape-dark", "2868x1320"},
+            {"landscape-dark", "2266x1488"}, {"landscape-dark", "2360x1640"},
+            {"landscape-dark", "2388x1668"}, {"landscape-dark", "2732x2048"}
+        };
+
+        std::vector<std::string> endpoints;
+        endpoints.reserve(splash_specs.size());
+        for (const auto & [orientation, dimensions] : splash_specs) {
+            endpoints.push_back("/apple-splash-" + orientation + "-" + dimensions + ".png");
+        }
+        return endpoints;
+    };
+
     //
     // Middlewares
     //
 
-    auto middleware_validate_api_key = [api_keys = params.api_keys](const httplib::Request & req, httplib::Response & res) {
-        static const std::unordered_set<std::string> public_endpoints = {
+    // Public endpoints list - includes health, UI, and PWA assets
+    // Source of truth for splash screen paths: tools/ui/src/lib/constants/pwa.ts (APPLE_DEVICES)
+    static const std::unordered_set<std::string> get_public_endpoints = [generate_splash_endpoints]() {
+        std::unordered_set<std::string> endpoints {
             "/health",
             "/v1/health",
             "/models",
             "/v1/models",
             "/",
             "/index.html",
-            "/bundle.js",
-            "/bundle.css",
+            // PWA assets
+            "/favicon.ico",
+            "/favicon-dark.ico",
+            "/favicon.svg",
+            "/favicon-dark.svg",
+            "/pwa-64x64.png",
+            "/pwa-192x192.png",
+            "/pwa-512x512.png",
+            "/maskable-icon-512x512.png",
+            "/apple-touch-icon-180x180.png",
+            // iOS splash screens (generated from APPLE_DEVICES in TypeScript)
+            // PWA runtime files
+            "/manifest.webmanifest",
+            "/sw.js",
+            "/version.json",
+            "/workbox-<hash>.js",
+            "/_app/version.json",
+            "/build.json"
         };
+        // Add all splash screen endpoints
+        auto splash = generate_splash_endpoints();
+        for (const auto & path : splash) {
+            endpoints.insert(path);
+        }
+        return endpoints;
+    }();
 
+    auto middleware_validate_api_key = [api_keys = params.api_keys](const httplib::Request & req, httplib::Response & res) {
         // If API key is not set, skip validation
         if (api_keys.empty()) {
             return true;
         }
 
         // If path is public or static file, skip validation
-        if (public_endpoints.find(req.path) != public_endpoints.end()) {
+        if (get_public_endpoints.find(req.path) != get_public_endpoints.end()) {
+            return true;
+        }
+        // Static assets (_app/ files, workbox runtime). These are embedded at build time
+        // so no API key is needed — browsers fetch them directly.
+        if (req.path.find("/_app/") == 0 || req.path.find("/workbox-") == 0) {
             return true;
         }
 
@@ -315,7 +394,11 @@ bool server_http_context::init(const common_params & params) {
             }
         } else {
 #if defined(LLAMA_UI_HAS_ASSETS)
-            auto serve_asset = [](const std::string & name, const char * mime, bool with_isolation_headers) {
+            // Embedded assets are immutable — cache aggressively for PWA/sw offline support.
+            // PWA runtime files (sw.js, manifest, version.json) use no-cache for revalidation.
+            // Bundle files use Vite content hashes (bundle.<hash>.js/css) so each build
+            // produces a different filename — browsers naturally get a fresh copy on upgrade.
+            auto serve_asset_cached = [](const std::string & name, const char * mime, bool with_isolation_headers) {
                 return [name, mime, with_isolation_headers](const httplib::Request & req, httplib::Response & res) {
                     const llama_ui_asset * a = llama_ui_find_asset(name.c_str());
                     if (!a) {
@@ -334,14 +417,129 @@ bool server_http_context::init(const common_params & params) {
                         res.set_header("Cross-Origin-Embedder-Policy", "require-corp");
                         res.set_header("Cross-Origin-Opener-Policy", "same-origin");
                     }
+                    res.set_header("Cache-Control", "public, max-age=31536000, immutable");
+                    res.set_content(reinterpret_cast<const char*>(a->data), a->size, mime);
+                    return false;
+                };
+            };
+
+            auto serve_asset_nocache = [](const std::string & name, const char * mime, bool with_isolation_headers) {
+                return [name, mime, with_isolation_headers](const httplib::Request & /*req*/, httplib::Response & res) {
+                    const llama_ui_asset * a = llama_ui_find_asset(name.c_str());
+                    if (!a) {
+                        res.status = 404;
+                        return false;
+                    }
+                    if (with_isolation_headers) {
+                        res.set_header("Cross-Origin-Embedder-Policy", "require-corp");
+                        res.set_header("Cross-Origin-Opener-Policy", "same-origin");
+                    }
+                    res.set_header("Cache-Control", "no-cache");
                     res.set_content(reinterpret_cast<const char*>(a->data), a->size, mime);
                     return false;
                 };
             };
 
-            srv->Get(params.api_prefix + "/",           serve_asset("index.html", "text/html; charset=utf-8",              true));
-            srv->Get(params.api_prefix + "/bundle.js",  serve_asset("bundle.js",  "application/javascript; charset=utf-8", false));
-            srv->Get(params.api_prefix + "/bundle.css", serve_asset("bundle.css", "text/css; charset=utf-8",               false));
+            // Bundle files in _app/immutable/ — SvelteKit outputs them here and index.html
+            // and sw.js reference them via these paths (vanilla build, no plugin).
+            auto serve_bundle = [serve_asset_cached](const httplib::Request & req, httplib::Response & res) {
+                std::string path = req.path;
+                std::string name;
+                const char * mime;
+                if (path.rfind("/_app/immutable/bundle.", 0) == 0 && path.size() > 22) {
+                    name = path.substr(1);  // strip leading /
+                    mime = "application/javascript; charset=utf-8";
+                } else if (path.rfind("/_app/immutable/assets/bundle.", 0) == 0 && path.size() > 30) {
+                    name = path.substr(1);  // strip leading /
+                    mime = "text/css; charset=utf-8";
+                } else {
+                    res.status = 404;
+                    return false;
+                }
+                return serve_asset_cached(name, mime, false)(req, res);
+            };
+
+            // _app/ paths — vanilla SvelteKit output, index.html and sw.js reference
+            // bundles and version.json here directly.
+            srv->Get(params.api_prefix + R"(/_app/immutable/bundle\.[^/]+\.js)",  serve_bundle);
+            srv->Get(params.api_prefix + R"(/_app/immutable/assets/bundle\.[^/]+\.css)", serve_bundle);
+            srv->Get(params.api_prefix + "/_app/version.json",                    serve_asset_cached("_app/version.json", "application/json; charset=utf-8", false));
+
+            auto serve_workbox = [serve_asset_cached](const httplib::Request & req, httplib::Response & res) {
+                std::string name = req.path.substr(1);
+                if (name.rfind("workbox-", 0) == 0 && name.size() > 10) {
+                    return serve_asset_cached(name, "application/javascript; charset=utf-8", false)(req, res);
+                }
+                res.status = 404;
+                return false;
+            };
+            srv->Get(params.api_prefix + R"(/workbox-[^/]+\.js)",               serve_workbox);
+            srv->Get(params.api_prefix + R"(/sw\.js)",                          serve_asset_cached("sw.js",               "application/javascript; charset=utf-8", false));
+            srv->Get(params.api_prefix + "/manifest.webmanifest",                serve_asset_cached("manifest.webmanifest", "application/manifest+json; charset=utf-8", false));
+            srv->Get(params.api_prefix + "/version.json",                        serve_asset_cached("_app/version.json",  "application/json; charset=utf-8",       false));
+            srv->Get(params.api_prefix + "/build.json",                          serve_asset_cached("build.json",         "application/json; charset=utf-8",       false));
+
+            // Finally serve index.html for all other routes (SPA fallback)
+            srv->Get(params.api_prefix + "/",                               serve_asset_cached("index.html",                   "text/html; charset=utf-8",                 true));
+            srv->Get(params.api_prefix + "/favicon.ico",                    serve_asset_cached("favicon.ico",                  "image/x-icon",                             false));
+            srv->Get(params.api_prefix + "/favicon-dark.ico",                serve_asset_cached("favicon-dark.ico",              "image/x-icon",                             false));
+            srv->Get(params.api_prefix + "/favicon.svg",                    serve_asset_cached("favicon.svg",                  "image/svg+xml",                            false));
+            srv->Get(params.api_prefix + "/favicon-dark.svg",              serve_asset_cached("favicon-dark.svg",            "image/svg+xml",                            false));
+            srv->Get(params.api_prefix + "/pwa-64x64.png",                  serve_asset_cached("pwa-64x64.png",                "image/png",                                false));
+            srv->Get(params.api_prefix + "/pwa-192x192.png",                serve_asset_cached("pwa-192x192.png",              "image/png",                                false));
+            srv->Get(params.api_prefix + "/pwa-512x512.png",                serve_asset_cached("pwa-512x512.png",              "image/png",                                false));
+            srv->Get(params.api_prefix + "/maskable-icon-512x512.png",      serve_asset_cached("maskable-icon-512x512.png",    "image/png",                                false));
+            srv->Get(params.api_prefix + "/apple-touch-icon-180x180.png",   serve_asset_cached("apple-touch-icon-180x180.png", "image/png",                                false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-640x1136.png",          serve_asset_cached("apple-splash-portrait-640x1136.png",          "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-1136x640.png",         serve_asset_cached("apple-splash-landscape-1136x640.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-750x1334.png",          serve_asset_cached("apple-splash-portrait-750x1334.png",          "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-1334x750.png",         serve_asset_cached("apple-splash-landscape-1334x750.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1170x2532.png",         serve_asset_cached("apple-splash-portrait-1170x2532.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2532x1170.png",        serve_asset_cached("apple-splash-landscape-2532x1170.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1179x2556.png",         serve_asset_cached("apple-splash-portrait-1179x2556.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2556x1179.png",        serve_asset_cached("apple-splash-landscape-2556x1179.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1206x2622.png",         serve_asset_cached("apple-splash-portrait-1206x2622.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2622x1206.png",        serve_asset_cached("apple-splash-landscape-2622x1206.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1284x2778.png",         serve_asset_cached("apple-splash-portrait-1284x2778.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2778x1284.png",        serve_asset_cached("apple-splash-landscape-2778x1284.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1290x2796.png",         serve_asset_cached("apple-splash-portrait-1290x2796.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2796x1290.png",        serve_asset_cached("apple-splash-landscape-2796x1290.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1320x2868.png",         serve_asset_cached("apple-splash-portrait-1320x2868.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2868x1320.png",        serve_asset_cached("apple-splash-landscape-2868x1320.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1488x2266.png",         serve_asset_cached("apple-splash-portrait-1488x2266.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2266x1488.png",        serve_asset_cached("apple-splash-landscape-2266x1488.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1640x2360.png",         serve_asset_cached("apple-splash-portrait-1640x2360.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2360x1640.png",        serve_asset_cached("apple-splash-landscape-2360x1640.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-1668x2388.png",         serve_asset_cached("apple-splash-portrait-1668x2388.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2388x1668.png",        serve_asset_cached("apple-splash-landscape-2388x1668.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-2048x2732.png",         serve_asset_cached("apple-splash-portrait-2048x2732.png",         "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-2732x2048.png",        serve_asset_cached("apple-splash-landscape-2732x2048.png",        "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-640x1136.png",     serve_asset_cached("apple-splash-portrait-dark-640x1136.png",     "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-1136x640.png",    serve_asset_cached("apple-splash-landscape-dark-1136x640.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-750x1334.png",     serve_asset_cached("apple-splash-portrait-dark-750x1334.png",     "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-1334x750.png",    serve_asset_cached("apple-splash-landscape-dark-1334x750.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1170x2532.png",    serve_asset_cached("apple-splash-portrait-dark-1170x2532.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2532x1170.png",   serve_asset_cached("apple-splash-landscape-dark-2532x1170.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1179x2556.png",    serve_asset_cached("apple-splash-portrait-dark-1179x2556.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2556x1179.png",   serve_asset_cached("apple-splash-landscape-dark-2556x1179.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1206x2622.png",    serve_asset_cached("apple-splash-portrait-dark-1206x2622.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2622x1206.png",   serve_asset_cached("apple-splash-landscape-dark-2622x1206.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1284x2778.png",    serve_asset_cached("apple-splash-portrait-dark-1284x2778.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2778x1284.png",   serve_asset_cached("apple-splash-landscape-dark-2778x1284.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1290x2796.png",    serve_asset_cached("apple-splash-portrait-dark-1290x2796.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2796x1290.png",   serve_asset_cached("apple-splash-landscape-dark-2796x1290.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1320x2868.png",    serve_asset_cached("apple-splash-portrait-dark-1320x2868.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2868x1320.png",   serve_asset_cached("apple-splash-landscape-dark-2868x1320.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1640x2360.png",    serve_asset_cached("apple-splash-portrait-dark-1640x2360.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2360x1640.png",   serve_asset_cached("apple-splash-landscape-dark-2360x1640.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-1668x2388.png",    serve_asset_cached("apple-splash-portrait-dark-1668x2388.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2388x1668.png",   serve_asset_cached("apple-splash-landscape-dark-2388x1668.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-portrait-dark-2048x2732.png",    serve_asset_cached("apple-splash-portrait-dark-2048x2732.png",    "image/png", false));
+            srv->Get(params.api_prefix + "/apple-splash-landscape-dark-2732x2048.png",   serve_asset_cached("apple-splash-landscape-dark-2732x2048.png",   "image/png", false));
+            srv->Get(params.api_prefix + "/manifest.webmanifest",           serve_asset_nocache("manifest.webmanifest",        "application/manifest+json",                false));
+            srv->Get(params.api_prefix + "/sw.js",                          serve_asset_nocache("sw.js",                       "application/javascript; charset=utf-8",    false));
+            srv->Get(params.api_prefix + "/version.json",                   serve_asset_nocache("version.json",                 "application/json",                         false));
+
 #endif
         }
     }
index bb22095f125ca09027387911dbd0449fb30074bd..02d0b1afbc466abef523d6ee9cf0405a6e6a5ebb 100644 (file)
@@ -26,7 +26,7 @@ def test_access_static_assets_without_api_key():
     """Static web UI assets should not require API key authentication (issue #21229)"""
     global server
     server.start()
-    for path in ["/", "/bundle.js", "/bundle.css"]:
+    for path in ["/", "/sw.js", "/manifest.webmanifest", "/_app/version.json"]:
         res = server.make_request("GET", path)
         assert res.status_code == 200, f"Expected 200 for {path}, got {res.status_code}"
 
index 22ed6125f4ca8327b32d1e2385810760cb2a1665..ddcfe2e60f946b9fdcb260f60abf160017cc904f 100644 (file)
@@ -8,6 +8,8 @@ node_modules
 .wrangler
 /.svelte-kit
 /build
+dev-dist
+dist
 
 # OS
 .DS_Store
@@ -23,6 +25,15 @@ Thumbs.db
 vite.config.js.timestamp-*
 vite.config.ts.timestamp-*
 
+# PWA Artifacts
+apple-splash-*.png
+apple-touch-icon-*.png
+favicon.ico
+favicon-dark.ico
+maskable-icon-*.png
+pwa-*.png
+
+# Storybook
 *storybook.log
 storybook-static
 *.code-workspace
index 60d9020da389c19dc823a41a01ecea84c6612425..b17f85f3bec8f468639b20f6fdf1046e5ea9571f 100644 (file)
@@ -77,6 +77,7 @@ add_custom_target(llama-ui-assets ALL
         "-DUI_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
         "-DUI_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
         "-DLLAMA_SOURCE_DIR=${PROJECT_SOURCE_DIR}"
+        "-DLLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
         "-DHF_BUCKET=${LLAMA_UI_HF_BUCKET}"
         "-DHF_VERSION=${HF_UI_VERSION}"
         "-DHF_ENABLED=${LLAMA_USE_PREBUILT_UI}"
index ffd4f6ca029abf2fb7c9c1f174b16a2736507e4f..f46a98d1ad401d7b25ccb710628be8ff41061273 100644 (file)
                                "@tailwindcss/forms": "0.5.10",
                                "@tailwindcss/typography": "0.5.16",
                                "@tailwindcss/vite": "4.1.11",
-                               "@types/node": "^24",
+                               "@types/node": "24.13.0",
+                               "@vite-pwa/assets-generator": "1.0.2",
+                               "@vite-pwa/sveltekit": "1.1.0",
                                "@vitest/browser": "4.1.8",
                                "@vitest/browser-playwright": "4.1.8",
                                "@vitest/coverage-v8": "4.1.8",
                                "bits-ui": "2.18.1",
                                "clsx": "2.1.1",
-                               "dexie": "4.0.11",
-                               "eslint": "9.39.2",
+                               "dexie": "4.4.3",
+                               "eslint": "9.39.4",
                                "eslint-config-prettier": "10.1.8",
-                               "eslint-plugin-storybook": "10.2.4",
-                               "eslint-plugin-svelte": "3.15.0",
-                               "globals": "16.3.0",
+                               "eslint-plugin-storybook": "10.4.2",
+                               "eslint-plugin-svelte": "3.19.0",
+                               "globals": "16.5.0",
                                "highlight.js": "11.11.1",
                                "http-server": "14.1.1",
                                "mdast": "3.0.0",
-                               "mdsvex": "0.12.6",
+                               "mdsvex": "0.12.7",
                                "mermaid": "11.15.0",
                                "mode-watcher": "1.1.0",
                                "pdfjs-dist": "5.4.54",
                                "playwright": "1.56.1",
-                               "prettier": "3.6.2",
-                               "prettier-plugin-svelte": "3.4.0",
-                               "prettier-plugin-tailwindcss": "0.6.14",
+                               "prettier": "3.8.3",
+                               "prettier-plugin-svelte": "4.1.0",
+                               "prettier-plugin-tailwindcss": "0.8.0",
                                "rehype-highlight": "7.0.2",
                                "rehype-katex": "7.0.1",
                                "rehype-stringify": "10.0.1",
                                "remark-html": "16.0.1",
                                "remark-math": "6.0.0",
                                "remark-rehype": "11.1.2",
-                               "sass": "1.93.3",
-                               "storybook": "10.3.3",
-                               "svelte": "5.55.7",
-                               "svelte-check": "4.3.0",
-                               "svelte-sonner": "1.0.5",
-                               "tailwind-merge": "3.3.1",
+                               "sass": "1.100.0",
+                               "storybook": "10.4.2",
+                               "svelte": "5.56.1",
+                               "svelte-check": "4.6.0",
+                               "svelte-sonner": "1.1.1",
+                               "tailwind-merge": "3.6.0",
                                "tailwind-variants": "3.2.2",
-                               "tailwindcss": "4.1.11",
-                               "tw-animate-css": "1.3.5",
-                               "typescript": "5.8.3",
-                               "typescript-eslint": "8.56.0",
+                               "tailwindcss": "4.3.0",
+                               "tw-animate-css": "1.4.0",
+                               "typescript": "5.9.3",
+                               "typescript-eslint": "8.60.1",
                                "unified": "11.0.5",
-                               "unist-util-visit": "5.0.0",
+                               "unist-util-visit": "5.1.0",
                                "uuid": "13.0.2",
-                               "vite": "7.3.2",
+                               "vite": "7.3.5",
                                "vite-plugin-devtools-json": "0.2.1",
                                "vitest": "4.1.8",
                                "vitest-browser-svelte": "2.1.1",
-                               "zod": "4.2.1"
+                               "workbox-window": "7.4.1"
                        }
                },
                "node_modules/@adobe/css-tools": {
-                       "version": "4.4.4",
-                       "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
-                       "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
+                       "version": "4.5.0",
+                       "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz",
+                       "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==",
                        "dev": true,
                        "license": "MIT"
                },
                                "url": "https://github.com/sponsors/antfu"
                        }
                },
+               "node_modules/@apideck/better-ajv-errors": {
+                       "version": "0.3.7",
+                       "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz",
+                       "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "jsonpointer": "^5.0.1",
+                               "leven": "^3.1.0"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       },
+                       "peerDependencies": {
+                               "ajv": ">=8"
+                       }
+               },
                "node_modules/@babel/code-frame": {
                        "version": "7.29.7",
                        "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
                        "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
                        "dev": true,
                        "license": "MIT",
-                       "peer": true,
                        "dependencies": {
                                "@babel/helper-validator-identifier": "^7.29.7",
                                "js-tokens": "^4.0.0",
                                "node": ">=6.9.0"
                        }
                },
-               "node_modules/@babel/code-frame/node_modules/js-tokens": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-                       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-                       "dev": true,
-                       "license": "MIT",
-                       "peer": true
-               },
-               "node_modules/@babel/helper-string-parser": {
+               "node_modules/@babel/compat-data": {
                        "version": "7.29.7",
-                       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
-                       "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+                       "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+                       "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                                "node": ">=6.9.0"
                        }
                },
-               "node_modules/@babel/helper-validator-identifier": {
+               "node_modules/@babel/core": {
                        "version": "7.29.7",
-                       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
-                       "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+                       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+                       "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/code-frame": "^7.29.7",
+                               "@babel/generator": "^7.29.7",
+                               "@babel/helper-compilation-targets": "^7.29.7",
+                               "@babel/helper-module-transforms": "^7.29.7",
+                               "@babel/helpers": "^7.29.7",
+                               "@babel/parser": "^7.29.7",
+                               "@babel/template": "^7.29.7",
+                               "@babel/traverse": "^7.29.7",
+                               "@babel/types": "^7.29.7",
+                               "@jridgewell/remapping": "^2.3.5",
+                               "convert-source-map": "^2.0.0",
+                               "debug": "^4.1.0",
+                               "gensync": "^1.0.0-beta.2",
+                               "json5": "^2.2.3",
+                               "semver": "^6.3.1"
+                       },
                        "engines": {
                                "node": ">=6.9.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/babel"
                        }
                },
-               "node_modules/@babel/parser": {
+               "node_modules/@babel/core/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+                       "dev": true,
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
+                       }
+               },
+               "node_modules/@babel/generator": {
                        "version": "7.29.7",
-                       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
-                       "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+                       "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
+                       "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@babel/types": "^7.29.7"
-                       },
-                       "bin": {
-                               "parser": "bin/babel-parser.js"
+                               "@babel/parser": "^7.29.7",
+                               "@babel/types": "^7.29.7",
+                               "@jridgewell/gen-mapping": "^0.3.12",
+                               "@jridgewell/trace-mapping": "^0.3.28",
+                               "jsesc": "^3.0.2"
                        },
                        "engines": {
-                               "node": ">=6.0.0"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@babel/runtime": {
+               "node_modules/@babel/helper-annotate-as-pure": {
                        "version": "7.29.7",
-                       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
-                       "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz",
+                       "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==",
                        "dev": true,
                        "license": "MIT",
-                       "peer": true,
+                       "dependencies": {
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
                                "node": ">=6.9.0"
                        }
                },
-               "node_modules/@babel/types": {
+               "node_modules/@babel/helper-compilation-targets": {
                        "version": "7.29.7",
-                       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
-                       "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+                       "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@babel/helper-string-parser": "^7.29.7",
-                               "@babel/helper-validator-identifier": "^7.29.7"
+                               "@babel/compat-data": "^7.29.7",
+                               "@babel/helper-validator-option": "^7.29.7",
+                               "browserslist": "^4.24.0",
+                               "lru-cache": "^5.1.1",
+                               "semver": "^6.3.1"
                        },
                        "engines": {
                                "node": ">=6.9.0"
                        }
                },
-               "node_modules/@bcoe/v8-coverage": {
-                       "version": "1.0.2",
-                       "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
-                       "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
+               "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+                       "version": "5.1.1",
+                       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+                       "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
                        "dev": true,
-                       "license": "MIT",
-                       "engines": {
-                               "node": ">=18"
+                       "license": "ISC",
+                       "dependencies": {
+                               "yallist": "^3.0.2"
                        }
                },
-               "node_modules/@blazediff/core": {
-                       "version": "1.9.1",
-                       "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz",
-                       "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==",
+               "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
+                       }
                },
-               "node_modules/@braintree/sanitize-url": {
-                       "version": "7.1.2",
-                       "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz",
-                       "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
+               "node_modules/@babel/helper-create-class-features-plugin": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz",
+                       "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-annotate-as-pure": "^7.29.7",
+                               "@babel/helper-member-expression-to-functions": "^7.29.7",
+                               "@babel/helper-optimise-call-expression": "^7.29.7",
+                               "@babel/helper-replace-supers": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+                               "@babel/traverse": "^7.29.7",
+                               "semver": "^6.3.1"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
+                       }
                },
-               "node_modules/@chevrotain/types": {
-                       "version": "11.1.2",
-                       "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz",
-                       "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==",
+               "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
                        "dev": true,
-                       "license": "Apache-2.0"
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
+                       }
                },
-               "node_modules/@chromatic-com/storybook": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-5.0.0.tgz",
-                       "integrity": "sha512-8wUsqL8kg6R5ue8XNE7Jv/iD1SuE4+6EXMIGIuE+T2loBITEACLfC3V8W44NJviCLusZRMWbzICddz0nU0bFaw==",
+               "node_modules/@babel/helper-create-regexp-features-plugin": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz",
+                       "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@neoconfetti/react": "^1.0.0",
-                               "chromatic": "^13.3.4",
-                               "filesize": "^10.0.12",
-                               "jsonfile": "^6.1.0",
-                               "strip-ansi": "^7.1.0"
+                               "@babel/helper-annotate-as-pure": "^7.29.7",
+                               "regexpu-core": "^6.3.1",
+                               "semver": "^6.3.1"
                        },
                        "engines": {
-                               "node": ">=20.0.0",
-                               "yarn": ">=1.22.18"
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "storybook": "^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0"
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/aix-ppc64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
-                       "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
-                       "cpu": [
-                               "ppc64"
-                       ],
+               "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "aix"
-                       ],
-                       "engines": {
-                               "node": ">=18"
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
                        }
                },
-               "node_modules/@esbuild/android-arm": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
-                       "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@babel/helper-define-polyfill-provider": {
+                       "version": "0.6.8",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+                       "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
-                       "engines": {
-                               "node": ">=18"
+                       "dependencies": {
+                               "@babel/helper-compilation-targets": "^7.28.6",
+                               "@babel/helper-plugin-utils": "^7.28.6",
+                               "debug": "^4.4.3",
+                               "lodash.debounce": "^4.0.8",
+                               "resolve": "^1.22.11"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
                        }
                },
-               "node_modules/@esbuild/android-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
-                       "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/helper-globals": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+                       "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/android-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
-                       "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/helper-member-expression-to-functions": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz",
+                       "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
+                       "dependencies": {
+                               "@babel/traverse": "^7.29.7",
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/darwin-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
-                       "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/helper-module-imports": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+                       "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/traverse": "^7.29.7",
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/darwin-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
-                       "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/helper-module-transforms": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+                       "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-module-imports": "^7.29.7",
+                               "@babel/helper-validator-identifier": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/freebsd-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
-                       "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/helper-optimise-call-expression": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz",
+                       "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "freebsd"
-                       ],
+                       "dependencies": {
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/freebsd-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
-                       "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/helper-plugin-utils": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+                       "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "freebsd"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-arm": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
-                       "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@babel/helper-remap-async-to-generator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz",
+                       "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-annotate-as-pure": "^7.29.7",
+                               "@babel/helper-wrap-function": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/linux-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
-                       "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/helper-replace-supers": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz",
+                       "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-member-expression-to-functions": "^7.29.7",
+                               "@babel/helper-optimise-call-expression": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/linux-ia32": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
-                       "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
-                       "cpu": [
-                               "ia32"
-                       ],
+               "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz",
+                       "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/traverse": "^7.29.7",
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-loong64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
-                       "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
-                       "cpu": [
-                               "loong64"
-                       ],
+               "node_modules/@babel/helper-string-parser": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+                       "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-mips64el": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
-                       "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
-                       "cpu": [
-                               "mips64el"
-                       ],
+               "node_modules/@babel/helper-validator-identifier": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+                       "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-ppc64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
-                       "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
-                       "cpu": [
-                               "ppc64"
-                       ],
+               "node_modules/@babel/helper-validator-option": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+                       "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-riscv64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
-                       "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
-                       "cpu": [
-                               "riscv64"
-                       ],
+               "node_modules/@babel/helper-wrap-function": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz",
+                       "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/template": "^7.29.7",
+                               "@babel/traverse": "^7.29.7",
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-s390x": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
-                       "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
-                       "cpu": [
-                               "s390x"
-                       ],
+               "node_modules/@babel/helpers": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+                       "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/template": "^7.29.7",
+                               "@babel/types": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@esbuild/linux-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
-                       "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/parser": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
+                       "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/types": "^7.29.7"
+                       },
+                       "bin": {
+                               "parser": "bin/babel-parser.js"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.0.0"
                        }
                },
-               "node_modules/@esbuild/netbsd-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
-                       "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz",
+                       "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "netbsd"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/netbsd-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
-                       "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz",
+                       "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "netbsd"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/openbsd-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
-                       "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz",
+                       "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "openbsd"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/openbsd-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
-                       "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz",
+                       "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "openbsd"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/openharmony-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
-                       "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz",
+                       "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "openharmony"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+                               "@babel/plugin-transform-optional-chaining": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.13.0"
                        }
                },
-               "node_modules/@esbuild/sunos-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
-                       "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz",
+                       "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "sunos"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@esbuild/win32-arm64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
-                       "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-proposal-private-property-in-object": {
+                       "version": "7.21.0-placeholder-for-preset-env.2",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+                       "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@esbuild/win32-ia32": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
-                       "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
-                       "cpu": [
-                               "ia32"
-                       ],
+               "node_modules/@babel/plugin-syntax-import-assertions": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz",
+                       "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@esbuild/win32-x64": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
-                       "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-syntax-import-attributes": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz",
+                       "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint-community/eslint-utils": {
-                       "version": "4.9.1",
-                       "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
-                       "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+               "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+                       "version": "7.18.6",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+                       "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "eslint-visitor-keys": "^3.4.3"
+                               "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+                               "@babel/helper-plugin-utils": "^7.18.6"
                        },
                        "engines": {
-                               "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/eslint"
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-                       "version": "3.4.3",
-                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-                       "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+               "node_modules/@babel/plugin-transform-arrow-functions": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz",
+                       "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "url": "https://opencollective.com/eslint"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint-community/regexpp": {
-                       "version": "4.12.2",
-                       "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
-                       "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+               "node_modules/@babel/plugin-transform-async-generator-functions": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz",
+                       "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-remap-async-to-generator": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/compat": {
-                       "version": "1.4.1",
-                       "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.1.tgz",
-                       "integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==",
+               "node_modules/@babel/plugin-transform-async-to-generator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz",
+                       "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@eslint/core": "^0.17.0"
+                               "@babel/helper-module-imports": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-remap-async-to-generator": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "eslint": "^8.40 || 9"
-                       },
-                       "peerDependenciesMeta": {
-                               "eslint": {
-                                       "optional": true
-                               }
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/config-array": {
-                       "version": "0.21.1",
-                       "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
-                       "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+               "node_modules/@babel/plugin-transform-block-scoped-functions": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz",
+                       "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@eslint/object-schema": "^2.1.7",
-                               "debug": "^4.3.1",
-                               "minimatch": "^3.1.2"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/config-helpers": {
-                       "version": "0.4.2",
-                       "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
-                       "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+               "node_modules/@babel/plugin-transform-block-scoping": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz",
+                       "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@eslint/core": "^0.17.0"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/core": {
-                       "version": "0.17.0",
-                       "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
-                       "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+               "node_modules/@babel/plugin-transform-class-properties": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz",
+                       "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@types/json-schema": "^7.0.15"
+                               "@babel/helper-create-class-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/eslintrc": {
-                       "version": "3.3.3",
-                       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
-                       "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+               "node_modules/@babel/plugin-transform-class-static-block": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz",
+                       "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "ajv": "^6.12.4",
-                               "debug": "^4.3.2",
-                               "espree": "^10.0.1",
-                               "globals": "^14.0.0",
-                               "ignore": "^5.2.0",
-                               "import-fresh": "^3.2.1",
-                               "js-yaml": "^4.1.1",
-                               "minimatch": "^3.1.2",
-                               "strip-json-comments": "^3.1.1"
+                               "@babel/helper-create-class-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "url": "https://opencollective.com/eslint"
+                       "peerDependencies": {
+                               "@babel/core": "^7.12.0"
                        }
                },
-               "node_modules/@eslint/eslintrc/node_modules/globals": {
-                       "version": "14.0.0",
-                       "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-                       "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+               "node_modules/@babel/plugin-transform-classes": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz",
+                       "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-annotate-as-pure": "^7.29.7",
+                               "@babel/helper-compilation-targets": "^7.29.7",
+                               "@babel/helper-globals": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-replace-supers": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/js": {
-                       "version": "9.39.2",
-                       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
-                       "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+               "node_modules/@babel/plugin-transform-computed-properties": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz",
+                       "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/template": "^7.29.7"
+                       },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "url": "https://eslint.org/donate"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/object-schema": {
-                       "version": "2.1.7",
-                       "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
-                       "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+               "node_modules/@babel/plugin-transform-destructuring": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz",
+                       "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@eslint/plugin-kit": {
-                       "version": "0.4.1",
-                       "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
-                       "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+               "node_modules/@babel/plugin-transform-dotall-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz",
+                       "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@eslint/core": "^0.17.0",
-                               "levn": "^0.4.1"
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@floating-ui/core": {
-                       "version": "1.7.2",
-                       "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz",
-                       "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==",
+               "node_modules/@babel/plugin-transform-duplicate-keys": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz",
+                       "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@floating-ui/utils": "^0.2.10"
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@floating-ui/dom": {
-                       "version": "1.7.2",
-                       "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz",
-                       "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==",
+               "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz",
+                       "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@floating-ui/core": "^1.7.2",
-                               "@floating-ui/utils": "^0.2.10"
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@floating-ui/utils": {
-                       "version": "0.2.10",
-                       "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
-                       "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@hono/node-server": {
-                       "version": "1.19.13",
-                       "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz",
-                       "integrity": "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==",
+               "node_modules/@babel/plugin-transform-dynamic-import": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz",
+                       "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18.14.1"
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "hono": "^4"
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@humanfs/core": {
-                       "version": "0.19.1",
-                       "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
-                       "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+               "node_modules/@babel/plugin-transform-explicit-resource-management": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz",
+                       "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/plugin-transform-destructuring": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18.18.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@humanfs/node": {
-                       "version": "0.16.6",
-                       "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
-                       "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+               "node_modules/@babel/plugin-transform-exponentiation-operator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz",
+                       "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@humanfs/core": "^0.19.1",
-                               "@humanwhocodes/retry": "^0.3.0"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": ">=18.18.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
-                       "version": "0.3.1",
-                       "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
-                       "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+               "node_modules/@babel/plugin-transform-export-namespace-from": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz",
+                       "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18.18"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/nzakas"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@humanwhocodes/module-importer": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-                       "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+               "node_modules/@babel/plugin-transform-for-of": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz",
+                       "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=12.22"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/nzakas"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@humanwhocodes/retry": {
-                       "version": "0.4.3",
-                       "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
-                       "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+               "node_modules/@babel/plugin-transform-function-name": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz",
+                       "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-compilation-targets": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=18.18"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/nzakas"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@iconify/types": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
-                       "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@iconify/utils": {
-                       "version": "3.1.3",
-                       "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.3.tgz",
-                       "integrity": "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==",
+               "node_modules/@babel/plugin-transform-json-strings": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz",
+                       "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@antfu/install-pkg": "^1.1.0",
-                               "@iconify/types": "^2.0.0",
-                               "import-meta-resolve": "^4.2.0"
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@internationalized/date": {
-                       "version": "3.10.1",
-                       "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.1.tgz",
-                       "integrity": "sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==",
+               "node_modules/@babel/plugin-transform-literals": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz",
+                       "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "@swc/helpers": "^0.5.0"
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@isaacs/fs-minipass": {
-                       "version": "4.0.1",
-                       "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
-                       "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+               "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz",
+                       "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "minipass": "^7.0.4"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": ">=18.0.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@jridgewell/gen-mapping": {
-                       "version": "0.3.12",
-                       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
-                       "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+               "node_modules/@babel/plugin-transform-member-expression-literals": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz",
+                       "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@jridgewell/sourcemap-codec": "^1.5.0",
-                               "@jridgewell/trace-mapping": "^0.3.24"
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@jridgewell/remapping": {
-                       "version": "2.3.5",
-                       "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
-                       "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+               "node_modules/@babel/plugin-transform-modules-amd": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz",
+                       "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@jridgewell/gen-mapping": "^0.3.5",
-                               "@jridgewell/trace-mapping": "^0.3.24"
+                               "@babel/helper-module-transforms": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@jridgewell/resolve-uri": {
-                       "version": "3.1.2",
-                       "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-                       "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+               "node_modules/@babel/plugin-transform-modules-commonjs": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz",
+                       "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-module-transforms": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">=6.0.0"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@jridgewell/sourcemap-codec": {
-                       "version": "1.5.5",
-                       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-                       "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@jridgewell/trace-mapping": {
-                       "version": "0.3.31",
-                       "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
-                       "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+               "node_modules/@babel/plugin-transform-modules-systemjs": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz",
+                       "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@jridgewell/resolve-uri": "^3.1.0",
-                               "@jridgewell/sourcemap-codec": "^1.4.14"
+                               "@babel/helper-module-transforms": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-validator-identifier": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@lucide/svelte": {
-                       "version": "0.515.0",
-                       "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.515.0.tgz",
-                       "integrity": "sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA==",
+               "node_modules/@babel/plugin-transform-modules-umd": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz",
+                       "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-module-transforms": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
                        "peerDependencies": {
-                               "svelte": "^5"
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@mdx-js/react": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz",
-                       "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==",
+               "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz",
+                       "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/mdx": "^2.0.0"
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "@types/react": ">=16",
-                               "react": ">=16"
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@mermaid-js/parser": {
-                       "version": "1.1.1",
-                       "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.1.tgz",
-                       "integrity": "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==",
+               "node_modules/@babel/plugin-transform-new-target": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz",
+                       "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@chevrotain/types": "~11.1.1"
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@modelcontextprotocol/sdk": {
-                       "version": "1.26.0",
-                       "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz",
-                       "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==",
+               "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz",
+                       "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@hono/node-server": "^1.19.9",
-                               "ajv": "^8.17.1",
-                               "ajv-formats": "^3.0.1",
-                               "content-type": "^1.0.5",
-                               "cors": "^2.8.5",
-                               "cross-spawn": "^7.0.5",
-                               "eventsource": "^3.0.2",
-                               "eventsource-parser": "^3.0.0",
-                               "express": "^5.2.1",
-                               "express-rate-limit": "^8.2.1",
-                               "hono": "^4.11.4",
-                               "jose": "^6.1.3",
-                               "json-schema-typed": "^8.0.2",
-                               "pkce-challenge": "^5.0.0",
-                               "raw-body": "^3.0.0",
-                               "zod": "^3.25 || ^4.0",
-                               "zod-to-json-schema": "^3.25.1"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=6.9.0"
                        },
                        "peerDependencies": {
-                               "@cfworker/json-schema": "^4.1.1",
-                               "zod": "^3.25 || ^4.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "@cfworker/json-schema": {
-                                       "optional": true
-                               },
-                               "zod": {
-                                       "optional": false
-                               }
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
-                       "version": "8.18.0",
-                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
-                       "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+               "node_modules/@babel/plugin-transform-numeric-separator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz",
+                       "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==",
                        "dev": true,
                        "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"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/epoberezkin"
+                       "engines": {
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@modelcontextprotocol/sdk/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==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@napi-rs/canvas": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.76.tgz",
-                       "integrity": "sha512-YIk5okeNN53GzjvWmAyCQFE9xrLeQXzYpudX4TiLvqaz9SqXgIgxIuKPe4DKyB5nccsQMIev7JGKTzZaN5rFdw==",
+               "node_modules/@babel/plugin-transform-object-rest-spread": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz",
+                       "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "workspaces": [
-                               "e2e/*"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-compilation-targets": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/plugin-transform-destructuring": "^7.29.7",
+                               "@babel/plugin-transform-parameters": "^7.29.7",
+                               "@babel/traverse": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
                        },
-                       "optionalDependencies": {
-                               "@napi-rs/canvas-android-arm64": "0.1.76",
-                               "@napi-rs/canvas-darwin-arm64": "0.1.76",
-                               "@napi-rs/canvas-darwin-x64": "0.1.76",
-                               "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.76",
-                               "@napi-rs/canvas-linux-arm64-gnu": "0.1.76",
-                               "@napi-rs/canvas-linux-arm64-musl": "0.1.76",
-                               "@napi-rs/canvas-linux-riscv64-gnu": "0.1.76",
-                               "@napi-rs/canvas-linux-x64-gnu": "0.1.76",
-                               "@napi-rs/canvas-linux-x64-musl": "0.1.76",
-                               "@napi-rs/canvas-win32-x64-msvc": "0.1.76"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-android-arm64": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.76.tgz",
-                       "integrity": "sha512-7EAfkLBQo2QoEzpHdInFbfEUYTXsiO2hvtFo1D9zfTzcQM8n5piZdOpJ3EIkmpe8yLoSV8HLyUQtq4bv11x6Tg==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-object-super": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz",
+                       "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-replace-supers": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-darwin-arm64": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.76.tgz",
-                       "integrity": "sha512-Cs8WRMzaWSJWeWY8tvnCe+TuduHUbB0xFhZ0FmOrNy2prPxT4A6aU3FQu8hR9XJw8kKZ7v902wzaDmy9SdhG8A==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-optional-catch-binding": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz",
+                       "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-darwin-x64": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.76.tgz",
-                       "integrity": "sha512-ya+T6gV9XAq7YAnMa2fKhWXAuRR5cpRny2IoHacoMxgtOARnUkJO/k3hIb52FtMoq7UxLi5+IFGVHU6ZiMu4Ag==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-optional-chaining": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz",
+                       "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.76.tgz",
-                       "integrity": "sha512-fgnPb+FKVuixACvkHGldJqYXExORBwvqGgL0K80uE6SGH2t0UKD2auHw2CtBy14DUzfg82PkupO2ix2w7kB+Xw==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@babel/plugin-transform-parameters": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz",
+                       "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.76.tgz",
-                       "integrity": "sha512-r8OxIenvBPOa4I014k1ZWTCz2dB0ZTsxMP7+ovMOKO7jkl1Z+YZo2OTAqxArpMhN0wdEeI3Lw9zUcn2HgwEgDA==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-private-methods": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz",
+                       "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-create-class-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-arm64-musl": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.76.tgz",
-                       "integrity": "sha512-smxwzKfHYaOYG7QXUuDPrFEC7WqjL3Lx4AM6mk8/FxDAS+8o0eoZJwSu+zXsaBLimEQUozEYgEGtJ2JJ0RdL4A==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-private-property-in-object": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz",
+                       "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-annotate-as-pure": "^7.29.7",
+                               "@babel/helper-create-class-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.76.tgz",
-                       "integrity": "sha512-G2PsFwsP+r4syEoNLStV3n1wtNAClwf8s/qB57bexG08R4f4WaiBd+x+d4iYS0Y5o90YIEm8/ewZn4bLIa0wNQ==",
-                       "cpu": [
-                               "riscv64"
-                       ],
+               "node_modules/@babel/plugin-transform-property-literals": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz",
+                       "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-x64-gnu": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.76.tgz",
-                       "integrity": "sha512-SNK+vgge4DnuONYdYE3Y09LivGgUiUPQDU+PdGNZJIzIi0hRDLcA59eag8LGeQfPmJW84c1aZD04voihybKFog==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-regenerator": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz",
+                       "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@napi-rs/canvas-linux-x64-musl": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.76.tgz",
-                       "integrity": "sha512-tWHLBI9iVoR1NsfpHz1MGERTkqcca8akbH/CzX6JQUNC+lJOeYYXeRuK8hKqMIg1LI+4QOMAtHNVeZu8NvjEug==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-regexp-modifiers": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz",
+                       "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@napi-rs/canvas-win32-x64-msvc": {
-                       "version": "0.1.76",
-                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.76.tgz",
-                       "integrity": "sha512-ifM5HOGw2hP5QLQzCB41Riw3Pq5yKAAjZpn+lJC0sYBmyS2s/Kq6KpTOKxf0CuptkI1wMcRcYQfhLRdeWiYvIg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-reserved-words": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz",
+                       "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=6.9.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@neoconfetti/react": {
-                       "version": "1.0.0",
-                       "resolved": "https://registry.npmjs.org/@neoconfetti/react/-/react-1.0.0.tgz",
-                       "integrity": "sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@parcel/watcher": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
-                       "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+               "node_modules/@babel/plugin-transform-shorthand-properties": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz",
+                       "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==",
                        "dev": true,
-                       "hasInstallScript": true,
                        "license": "MIT",
-                       "optional": true,
                        "dependencies": {
-                               "detect-libc": "^1.0.3",
-                               "is-glob": "^4.0.3",
-                               "micromatch": "^4.0.5",
-                               "node-addon-api": "^7.0.0"
+                               "@babel/helper-plugin-utils": "^7.29.7"
                        },
                        "engines": {
-                               "node": ">= 10.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                               "node": ">=6.9.0"
                        },
-                       "optionalDependencies": {
-                               "@parcel/watcher-android-arm64": "2.5.1",
-                               "@parcel/watcher-darwin-arm64": "2.5.1",
-                               "@parcel/watcher-darwin-x64": "2.5.1",
-                               "@parcel/watcher-freebsd-x64": "2.5.1",
-                               "@parcel/watcher-linux-arm-glibc": "2.5.1",
-                               "@parcel/watcher-linux-arm-musl": "2.5.1",
-                               "@parcel/watcher-linux-arm64-glibc": "2.5.1",
-                               "@parcel/watcher-linux-arm64-musl": "2.5.1",
-                               "@parcel/watcher-linux-x64-glibc": "2.5.1",
-                               "@parcel/watcher-linux-x64-musl": "2.5.1",
-                               "@parcel/watcher-win32-arm64": "2.5.1",
-                               "@parcel/watcher-win32-ia32": "2.5.1",
-                               "@parcel/watcher-win32-x64": "2.5.1"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-android-arm64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
-                       "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-spread": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz",
+                       "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-darwin-arm64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
-                       "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-sticky-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz",
+                       "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-darwin-x64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
-                       "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-template-literals": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz",
+                       "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-freebsd-x64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
-                       "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/plugin-transform-typeof-symbol": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz",
+                       "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "freebsd"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-arm-glibc": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
-                       "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@babel/plugin-transform-unicode-escapes": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz",
+                       "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-arm-musl": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
-                       "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@babel/plugin-transform-unicode-property-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz",
+                       "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-arm64-glibc": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
-                       "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-unicode-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz",
+                       "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-arm64-musl": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
-                       "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz",
+                       "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+                       "dependencies": {
+                               "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-x64-glibc": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
-                       "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
-                       "cpu": [
-                               "x64"
-                       ],
-                       "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
+               "node_modules/@babel/preset-env": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz",
+                       "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/compat-data": "^7.29.7",
+                               "@babel/helper-compilation-targets": "^7.29.7",
+                               "@babel/helper-plugin-utils": "^7.29.7",
+                               "@babel/helper-validator-option": "^7.29.7",
+                               "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7",
+                               "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7",
+                               "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7",
+                               "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7",
+                               "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7",
+                               "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7",
+                               "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+                               "@babel/plugin-syntax-import-assertions": "^7.29.7",
+                               "@babel/plugin-syntax-import-attributes": "^7.29.7",
+                               "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+                               "@babel/plugin-transform-arrow-functions": "^7.29.7",
+                               "@babel/plugin-transform-async-generator-functions": "^7.29.7",
+                               "@babel/plugin-transform-async-to-generator": "^7.29.7",
+                               "@babel/plugin-transform-block-scoped-functions": "^7.29.7",
+                               "@babel/plugin-transform-block-scoping": "^7.29.7",
+                               "@babel/plugin-transform-class-properties": "^7.29.7",
+                               "@babel/plugin-transform-class-static-block": "^7.29.7",
+                               "@babel/plugin-transform-classes": "^7.29.7",
+                               "@babel/plugin-transform-computed-properties": "^7.29.7",
+                               "@babel/plugin-transform-destructuring": "^7.29.7",
+                               "@babel/plugin-transform-dotall-regex": "^7.29.7",
+                               "@babel/plugin-transform-duplicate-keys": "^7.29.7",
+                               "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7",
+                               "@babel/plugin-transform-dynamic-import": "^7.29.7",
+                               "@babel/plugin-transform-explicit-resource-management": "^7.29.7",
+                               "@babel/plugin-transform-exponentiation-operator": "^7.29.7",
+                               "@babel/plugin-transform-export-namespace-from": "^7.29.7",
+                               "@babel/plugin-transform-for-of": "^7.29.7",
+                               "@babel/plugin-transform-function-name": "^7.29.7",
+                               "@babel/plugin-transform-json-strings": "^7.29.7",
+                               "@babel/plugin-transform-literals": "^7.29.7",
+                               "@babel/plugin-transform-logical-assignment-operators": "^7.29.7",
+                               "@babel/plugin-transform-member-expression-literals": "^7.29.7",
+                               "@babel/plugin-transform-modules-amd": "^7.29.7",
+                               "@babel/plugin-transform-modules-commonjs": "^7.29.7",
+                               "@babel/plugin-transform-modules-systemjs": "^7.29.7",
+                               "@babel/plugin-transform-modules-umd": "^7.29.7",
+                               "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7",
+                               "@babel/plugin-transform-new-target": "^7.29.7",
+                               "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7",
+                               "@babel/plugin-transform-numeric-separator": "^7.29.7",
+                               "@babel/plugin-transform-object-rest-spread": "^7.29.7",
+                               "@babel/plugin-transform-object-super": "^7.29.7",
+                               "@babel/plugin-transform-optional-catch-binding": "^7.29.7",
+                               "@babel/plugin-transform-optional-chaining": "^7.29.7",
+                               "@babel/plugin-transform-parameters": "^7.29.7",
+                               "@babel/plugin-transform-private-methods": "^7.29.7",
+                               "@babel/plugin-transform-private-property-in-object": "^7.29.7",
+                               "@babel/plugin-transform-property-literals": "^7.29.7",
+                               "@babel/plugin-transform-regenerator": "^7.29.7",
+                               "@babel/plugin-transform-regexp-modifiers": "^7.29.7",
+                               "@babel/plugin-transform-reserved-words": "^7.29.7",
+                               "@babel/plugin-transform-shorthand-properties": "^7.29.7",
+                               "@babel/plugin-transform-spread": "^7.29.7",
+                               "@babel/plugin-transform-sticky-regex": "^7.29.7",
+                               "@babel/plugin-transform-template-literals": "^7.29.7",
+                               "@babel/plugin-transform-typeof-symbol": "^7.29.7",
+                               "@babel/plugin-transform-unicode-escapes": "^7.29.7",
+                               "@babel/plugin-transform-unicode-property-regex": "^7.29.7",
+                               "@babel/plugin-transform-unicode-regex": "^7.29.7",
+                               "@babel/plugin-transform-unicode-sets-regex": "^7.29.7",
+                               "@babel/preset-modules": "0.1.6-no-external-plugins",
+                               "babel-plugin-polyfill-corejs2": "^0.4.15",
+                               "babel-plugin-polyfill-corejs3": "^0.14.0",
+                               "babel-plugin-polyfill-regenerator": "^0.6.6",
+                               "core-js-compat": "^3.48.0",
+                               "semver": "^6.3.1"
+                       },
                        "engines": {
-                               "node": ">= 10.0.0"
+                               "node": ">=6.9.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0"
                        }
                },
-               "node_modules/@parcel/watcher-linux-x64-musl": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
-                       "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/preset-env/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "linux"
-                       ],
-                       "engines": {
-                               "node": ">= 10.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
                        }
                },
-               "node_modules/@parcel/watcher-win32-arm64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
-                       "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@babel/preset-modules": {
+                       "version": "0.1.6-no-external-plugins",
+                       "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+                       "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
-                       "engines": {
-                               "node": ">= 10.0.0"
+                       "dependencies": {
+                               "@babel/helper-plugin-utils": "^7.0.0",
+                               "@babel/types": "^7.4.4",
+                               "esutils": "^2.0.2"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
                        }
                },
-               "node_modules/@parcel/watcher-win32-ia32": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
-                       "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
-                       "cpu": [
-                               "ia32"
-                       ],
+               "node_modules/@babel/runtime": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+                       "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
                        "engines": {
-                               "node": ">= 10.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@parcel/watcher-win32-x64": {
-                       "version": "2.5.1",
-                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
-                       "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
-                       "cpu": [
-                               "x64"
-                       ],
+               "node_modules/@babel/template": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+                       "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "win32"
-                       ],
-                       "engines": {
-                               "node": ">= 10.0.0"
+                       "dependencies": {
+                               "@babel/code-frame": "^7.29.7",
+                               "@babel/parser": "^7.29.7",
+                               "@babel/types": "^7.29.7"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/parcel"
+                       "engines": {
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@parcel/watcher/node_modules/detect-libc": {
-                       "version": "1.0.3",
-                       "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
-                       "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+               "node_modules/@babel/traverse": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
+                       "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
                        "dev": true,
-                       "license": "Apache-2.0",
-                       "optional": true,
-                       "bin": {
-                               "detect-libc": "bin/detect-libc.js"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/code-frame": "^7.29.7",
+                               "@babel/generator": "^7.29.7",
+                               "@babel/helper-globals": "^7.29.7",
+                               "@babel/parser": "^7.29.7",
+                               "@babel/template": "^7.29.7",
+                               "@babel/types": "^7.29.7",
+                               "debug": "^4.3.1"
                        },
                        "engines": {
-                               "node": ">=0.10"
+                               "node": ">=6.9.0"
                        }
                },
-               "node_modules/@playwright/test": {
-                       "version": "1.56.1",
-                       "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz",
-                       "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==",
+               "node_modules/@babel/types": {
+                       "version": "7.29.7",
+                       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
+                       "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "playwright": "1.56.1"
-                       },
-                       "bin": {
-                               "playwright": "cli.js"
+                               "@babel/helper-string-parser": "^7.29.7",
+                               "@babel/helper-validator-identifier": "^7.29.7"
                        },
+                       "engines": {
+                               "node": ">=6.9.0"
+                       }
+               },
+               "node_modules/@bcoe/v8-coverage": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
+                       "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
+                       "dev": true,
+                       "license": "MIT",
                        "engines": {
                                "node": ">=18"
                        }
                },
-               "node_modules/@polka/url": {
-                       "version": "1.0.0-next.29",
-                       "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
-                       "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+               "node_modules/@blazediff/core": {
+                       "version": "1.9.1",
+                       "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz",
+                       "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/@rollup/rollup-android-arm-eabi": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz",
-                       "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==",
-                       "cpu": [
-                               "arm"
-                       ],
+               "node_modules/@braintree/sanitize-url": {
+                       "version": "7.1.2",
+                       "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz",
+                       "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@canvas/image-data": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.1.0.tgz",
+                       "integrity": "sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@chevrotain/types": {
+                       "version": "11.1.2",
+                       "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz",
+                       "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==",
+                       "dev": true,
+                       "license": "Apache-2.0"
+               },
+               "node_modules/@chromatic-com/storybook": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-5.0.0.tgz",
+                       "integrity": "sha512-8wUsqL8kg6R5ue8XNE7Jv/iD1SuE4+6EXMIGIuE+T2loBITEACLfC3V8W44NJviCLusZRMWbzICddz0nU0bFaw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@neoconfetti/react": "^1.0.0",
+                               "chromatic": "^13.3.4",
+                               "filesize": "^10.0.12",
+                               "jsonfile": "^6.1.0",
+                               "strip-ansi": "^7.1.0"
+                       },
+                       "engines": {
+                               "node": ">=20.0.0",
+                               "yarn": ">=1.22.18"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0"
+                       }
+               },
+               "node_modules/@emnapi/core": {
+                       "version": "1.9.2",
+                       "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
+                       "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
-                       "os": [
-                               "android"
-                       ]
+                       "dependencies": {
+                               "@emnapi/wasi-threads": "1.2.1",
+                               "tslib": "^2.4.0"
+                       }
                },
-               "node_modules/@rollup/rollup-android-arm64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz",
-                       "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@emnapi/runtime": {
+                       "version": "1.10.0",
+                       "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+                       "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
-                       "os": [
-                               "android"
-                       ]
+                       "dependencies": {
+                               "tslib": "^2.4.0"
+                       }
                },
-               "node_modules/@rollup/rollup-darwin-arm64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz",
-                       "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@emnapi/wasi-threads": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+                       "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
-                       "os": [
-                               "darwin"
-                       ]
+                       "dependencies": {
+                               "tslib": "^2.4.0"
+                       }
                },
-               "node_modules/@rollup/rollup-darwin-x64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz",
-                       "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==",
+               "node_modules/@esbuild/aix-ppc64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
+                       "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
                        "cpu": [
-                               "x64"
+                               "ppc64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "darwin"
-                       ]
+                               "aix"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-freebsd-arm64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz",
-                       "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==",
+               "node_modules/@esbuild/android-arm": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
+                       "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
                        "cpu": [
-                               "arm64"
+                               "arm"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "freebsd"
-                       ]
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-freebsd-x64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz",
-                       "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==",
+               "node_modules/@esbuild/android-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
+                       "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
                        "cpu": [
-                               "x64"
+                               "arm64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "freebsd"
-                       ]
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz",
-                       "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==",
+               "node_modules/@esbuild/android-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
+                       "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
                        "cpu": [
-                               "arm"
+                               "x64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "linux"
-                       ]
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz",
-                       "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==",
+               "node_modules/@esbuild/darwin-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
+                       "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
                        "cpu": [
-                               "arm"
+                               "arm64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "linux"
-                       ]
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-arm64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==",
+               "node_modules/@esbuild/darwin-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
+                       "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
                        "cpu": [
-                               "arm64"
+                               "x64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "linux"
-                       ]
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-arm64-musl": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz",
-                       "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==",
+               "node_modules/@esbuild/freebsd-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
+                       "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
                        "cpu": [
                                "arm64"
                        ],
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "linux"
-                       ]
+                               "freebsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-loong64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==",
+               "node_modules/@esbuild/freebsd-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
+                       "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
                        "cpu": [
-                               "loong64"
+                               "x64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "linux"
-                       ]
+                               "freebsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-loong64-musl": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz",
-                       "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==",
+               "node_modules/@esbuild/linux-arm": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
+                       "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
                        "cpu": [
-                               "loong64"
+                               "arm"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-ppc64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==",
+               "node_modules/@esbuild/linux-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
+                       "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
                        "cpu": [
-                               "ppc64"
+                               "arm64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-ppc64-musl": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz",
-                       "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==",
+               "node_modules/@esbuild/linux-ia32": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
+                       "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
                        "cpu": [
-                               "ppc64"
+                               "ia32"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==",
+               "node_modules/@esbuild/linux-loong64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
+                       "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
                        "cpu": [
-                               "riscv64"
+                               "loong64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-riscv64-musl": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz",
-                       "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==",
+               "node_modules/@esbuild/linux-mips64el": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
+                       "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
                        "cpu": [
-                               "riscv64"
+                               "mips64el"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-s390x-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz",
-                       "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==",
+               "node_modules/@esbuild/linux-ppc64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
+                       "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
                        "cpu": [
-                               "s390x"
+                               "ppc64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-x64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==",
+               "node_modules/@esbuild/linux-riscv64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
+                       "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
                        "cpu": [
-                               "x64"
+                               "riscv64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-linux-x64-musl": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz",
-                       "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==",
+               "node_modules/@esbuild/linux-s390x": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
+                       "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
                        "cpu": [
-                               "x64"
+                               "s390x"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
                                "linux"
-                       ]
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-openbsd-x64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz",
-                       "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==",
+               "node_modules/@esbuild/linux-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
+                       "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
                        "cpu": [
                                "x64"
                        ],
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "openbsd"
-                       ]
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-openharmony-arm64": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz",
-                       "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==",
+               "node_modules/@esbuild/netbsd-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
+                       "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
                        "cpu": [
                                "arm64"
                        ],
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "openharmony"
-                       ]
+                               "netbsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-win32-arm64-msvc": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz",
-                       "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==",
+               "node_modules/@esbuild/netbsd-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
+                       "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
                        "cpu": [
-                               "arm64"
+                               "x64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "win32"
-                       ]
+                               "netbsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-win32-ia32-msvc": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz",
-                       "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==",
+               "node_modules/@esbuild/openbsd-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
+                       "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
                        "cpu": [
-                               "ia32"
+                               "arm64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "win32"
-                       ]
+                               "openbsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-win32-x64-gnu": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz",
-                       "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==",
+               "node_modules/@esbuild/openbsd-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
+                       "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
                        "cpu": [
                                "x64"
                        ],
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "win32"
-                       ]
+                               "openbsd"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@rollup/rollup-win32-x64-msvc": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz",
-                       "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==",
+               "node_modules/@esbuild/openharmony-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
+                       "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
                        "cpu": [
-                               "x64"
+                               "arm64"
                        ],
                        "dev": true,
                        "license": "MIT",
                        "optional": true,
                        "os": [
-                               "win32"
-                       ]
-               },
-               "node_modules/@standard-schema/spec": {
-                       "version": "1.1.0",
-                       "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
-                       "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
-                       "dev": true,
-                       "license": "MIT"
+                               "openharmony"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
                },
-               "node_modules/@storybook/addon-a11y": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-10.2.4.tgz",
-                       "integrity": "sha512-VGhdZ+iP2l/CSulIKV2kt3SMWVHntOigqWqGkNYf6YNYofynUYEKdsNqBvHx4ySuNEl/eXJ8LRO8FKYnU7LxZQ==",
+               "node_modules/@esbuild/sunos-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
+                       "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+                       "cpu": [
+                               "x64"
+                       ],
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@storybook/global": "^5.0.0",
-                               "axe-core": "^4.2.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
-                       },
-                       "peerDependencies": {
-                               "storybook": "^10.2.4"
+                       "optional": true,
+                       "os": [
+                               "sunos"
+                       ],
+                       "engines": {
+                               "node": ">=18"
                        }
                },
-               "node_modules/@storybook/addon-docs": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.4.tgz",
-                       "integrity": "sha512-FzscAmdBiOGnGrxiEM+8eTg43kjqgjLfObg+lbJVRR/a0DmZ3xfAPNB0+VKYQbN0FacNcWLM9LZ/7U0hRBPBnQ==",
+               "node_modules/@esbuild/win32-arm64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
+                       "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+                       "cpu": [
+                               "arm64"
+                       ],
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@mdx-js/react": "^3.0.0",
-                               "@storybook/csf-plugin": "10.2.4",
-                               "@storybook/icons": "^2.0.1",
-                               "@storybook/react-dom-shim": "10.2.4",
-                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
-                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
-                               "ts-dedent": "^2.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
-                       },
-                       "peerDependencies": {
-                               "storybook": "^10.2.4"
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">=18"
                        }
                },
-               "node_modules/@storybook/addon-svelte-csf": {
-                       "version": "5.0.10",
-                       "resolved": "https://registry.npmjs.org/@storybook/addon-svelte-csf/-/addon-svelte-csf-5.0.10.tgz",
-                       "integrity": "sha512-poSvTS7VdaQ42ZoqW5e4+2Hv1iLO0mekH9fwn/QuBNse48R4WlTyR8XFbHRTfatl9gdc9ZYC4uWzazrmV6zGIA==",
+               "node_modules/@esbuild/win32-ia32": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
+                       "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+                       "cpu": [
+                               "ia32"
+                       ],
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@storybook/csf": "^0.1.13",
-                               "dedent": "^1.5.3",
-                               "es-toolkit": "^1.26.1",
-                               "esrap": "^1.2.2",
-                               "magic-string": "^0.30.12",
-                               "svelte-ast-print": "^0.4.0",
-                               "zimmerframe": "^1.1.2"
-                       },
-                       "peerDependencies": {
-                               "@storybook/svelte": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0",
-                               "@sveltejs/vite-plugin-svelte": "^4.0.0 || ^5.0.0 || ^6.0.0",
-                               "storybook": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0",
-                               "svelte": "^5.0.0",
-                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">=18"
                        }
                },
-               "node_modules/@storybook/addon-vitest": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/addon-vitest/-/addon-vitest-10.2.4.tgz",
-                       "integrity": "sha512-BT1iP89U4wcbpzTURU8WYTAeUcdNh4WIt0BqsnATmMwR/jKNJW6QgXCVqGQTSpRjWj40hX5e2JkQYCNXdjKsPw==",
+               "node_modules/@esbuild/win32-x64": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
+                       "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
+               "node_modules/@eslint-community/eslint-utils": {
+                       "version": "4.9.1",
+                       "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+                       "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@storybook/global": "^5.0.0",
-                               "@storybook/icons": "^2.0.1"
+                               "eslint-visitor-keys": "^3.4.3"
+                       },
+                       "engines": {
+                               "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
+                               "url": "https://opencollective.com/eslint"
                        },
                        "peerDependencies": {
-                               "@vitest/browser": "^3.0.0 || ^4.0.0",
-                               "@vitest/browser-playwright": "^4.0.0",
-                               "@vitest/runner": "^3.0.0 || ^4.0.0",
-                               "storybook": "^10.2.4",
-                               "vitest": "^3.0.0 || ^4.0.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "@vitest/browser": {
-                                       "optional": true
-                               },
-                               "@vitest/browser-playwright": {
-                                       "optional": true
-                               },
-                               "@vitest/runner": {
-                                       "optional": true
-                               },
-                               "vitest": {
-                                       "optional": true
-                               }
+                               "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
                        }
                },
-               "node_modules/@storybook/builder-vite": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.4.tgz",
-                       "integrity": "sha512-/hcT1xj3CL5GkJ5v5/EguZdttDwNE6weNXK7vKzp034tnGcLycOossDsTiUQkBowSL+Ylc8aKj+ZgvddPNfOig==",
+               "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+                       "version": "3.4.3",
+                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+                       "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@storybook/csf-plugin": "10.2.4",
-                               "ts-dedent": "^2.0.0"
+                       "license": "Apache-2.0",
+                       "engines": {
+                               "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
-                       },
-                       "peerDependencies": {
-                               "storybook": "^10.2.4",
-                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                               "url": "https://opencollective.com/eslint"
                        }
                },
-               "node_modules/@storybook/csf": {
-                       "version": "0.1.13",
-                       "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.13.tgz",
-                       "integrity": "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==",
+               "node_modules/@eslint-community/regexpp": {
+                       "version": "4.12.2",
+                       "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+                       "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "type-fest": "^2.19.0"
+                       "engines": {
+                               "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
                        }
                },
-               "node_modules/@storybook/csf-plugin": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.4.tgz",
-                       "integrity": "sha512-kupPQEV+4N9mzsZHYaokvhO/KHBjYdWda9PNmPQwy0TR7r2mzthgaNH72TjmgN1L6DIbsuyOG1wtczcPJn4+Jg==",
+               "node_modules/@eslint/compat": {
+                       "version": "1.4.1",
+                       "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.1.tgz",
+                       "integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "unplugin": "^2.3.5"
+                               "@eslint/core": "^0.17.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
                        "peerDependencies": {
-                               "esbuild": "*",
-                               "rollup": "*",
-                               "storybook": "^10.2.4",
-                               "vite": "*",
-                               "webpack": "*"
+                               "eslint": "^8.40 || 9"
                        },
                        "peerDependenciesMeta": {
-                               "esbuild": {
-                                       "optional": true
-                               },
-                               "rollup": {
-                                       "optional": true
-                               },
-                               "vite": {
-                                       "optional": true
-                               },
-                               "webpack": {
+                               "eslint": {
                                        "optional": true
                                }
                        }
                },
-               "node_modules/@storybook/global": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
-                       "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@storybook/icons": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-2.0.1.tgz",
-                       "integrity": "sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==",
+               "node_modules/@eslint/config-array": {
+                       "version": "0.21.2",
+                       "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+                       "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
                        "dev": true,
-                       "license": "MIT",
-                       "peerDependencies": {
-                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
-                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "@eslint/object-schema": "^2.1.7",
+                               "debug": "^4.3.1",
+                               "minimatch": "^3.1.5"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        }
                },
-               "node_modules/@storybook/react-dom-shim": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.4.tgz",
-                       "integrity": "sha512-i22OtrZ7GeZPt/odLf0vqyDhRSKyaLsHkkKSBcANQfzRRnBZmiz2FchOtWm9uvoDWybQsTruZq7kTdtpEhwyGw==",
+               "node_modules/@eslint/config-helpers": {
+                       "version": "0.4.2",
+                       "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+                       "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "@eslint/core": "^0.17.0"
                        },
-                       "peerDependencies": {
-                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
-                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
-                               "storybook": "^10.2.4"
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        }
                },
-               "node_modules/@storybook/svelte": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-10.2.4.tgz",
-                       "integrity": "sha512-W9R51zUCd2iHOQBg/D93+bdpYv6kbtFx+kft5X8lPKQl6yEu0aKs9i5N5GyCASOhIApgx/tkqZIJ7vgM4cqrHA==",
+               "node_modules/@eslint/core": {
+                       "version": "0.17.0",
+                       "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+                       "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "ts-dedent": "^2.0.0",
-                               "type-fest": "~2.19"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
+                               "@types/json-schema": "^7.0.15"
                        },
-                       "peerDependencies": {
-                               "storybook": "^10.2.4",
-                               "svelte": "^5.0.0"
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        }
                },
-               "node_modules/@storybook/svelte-vite": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-10.2.4.tgz",
-                       "integrity": "sha512-FMgKMRdoZFDwPD6eIDMldcgp6d6NtIGuXyUJjb29qLias/gE5TI6hg+cWmmWXQRTrXwdyepeMBmIfRcZbB6REQ==",
+               "node_modules/@eslint/eslintrc": {
+                       "version": "3.3.5",
+                       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
+                       "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@storybook/builder-vite": "10.2.4",
-                               "@storybook/svelte": "10.2.4",
-                               "magic-string": "^0.30.0",
-                               "svelte2tsx": "^0.7.44",
-                               "typescript": "^4.9.4 || ^5.0.0"
+                               "ajv": "^6.14.0",
+                               "debug": "^4.3.2",
+                               "espree": "^10.0.1",
+                               "globals": "^14.0.0",
+                               "ignore": "^5.2.0",
+                               "import-fresh": "^3.2.1",
+                               "js-yaml": "^4.1.1",
+                               "minimatch": "^3.1.5",
+                               "strip-json-comments": "^3.1.1"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
-                       "peerDependencies": {
-                               "@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
-                               "storybook": "^10.2.4",
-                               "svelte": "^5.0.0",
-                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       "funding": {
+                               "url": "https://opencollective.com/eslint"
                        }
                },
-               "node_modules/@storybook/sveltekit": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-10.2.4.tgz",
-                       "integrity": "sha512-1qDX35iSJHWo1AOd7HMzJtCHBfgahXqTWNiyZa/JMEKJ3qC1otaU8XMmTjsZ6fCRF99piNdgqtWM8+s1TJOldg==",
+               "node_modules/@eslint/eslintrc/node_modules/ajv": {
+                       "version": "6.15.0",
+                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+                       "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@storybook/builder-vite": "10.2.4",
-                               "@storybook/svelte": "10.2.4",
-                               "@storybook/svelte-vite": "10.2.4"
+                               "fast-deep-equal": "^3.1.1",
+                               "fast-json-stable-stringify": "^2.0.0",
+                               "json-schema-traverse": "^0.4.1",
+                               "uri-js": "^4.2.2"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/storybook"
-                       },
-                       "peerDependencies": {
-                               "storybook": "^10.2.4",
-                               "svelte": "^5.0.0",
-                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/epoberezkin"
                        }
                },
-               "node_modules/@sveltejs/acorn-typescript": {
-                       "version": "1.0.5",
-                       "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz",
-                       "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
+               "node_modules/@eslint/eslintrc/node_modules/globals": {
+                       "version": "14.0.0",
+                       "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+                       "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
                        "dev": true,
                        "license": "MIT",
-                       "peerDependencies": {
-                               "acorn": "^8.9.0"
+                       "engines": {
+                               "node": ">=18"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/@sveltejs/adapter-static": {
-                       "version": "3.0.10",
-                       "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz",
-                       "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==",
+               "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+                       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
                        "dev": true,
-                       "license": "MIT",
-                       "peerDependencies": {
-                               "@sveltejs/kit": "^2.0.0"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/@sveltejs/kit": {
-                       "version": "2.60.1",
-                       "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.60.1.tgz",
-                       "integrity": "sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==",
+               "node_modules/@eslint/js": {
+                       "version": "9.39.2",
+                       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
+                       "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@standard-schema/spec": "^1.0.0",
-                               "@sveltejs/acorn-typescript": "^1.0.5",
-                               "@types/cookie": "^0.6.0",
-                               "acorn": "^8.14.1",
-                               "cookie": "^0.6.0",
-                               "devalue": "^5.8.1",
-                               "esm-env": "^1.2.2",
-                               "kleur": "^4.1.5",
-                               "magic-string": "^0.30.5",
-                               "mrmime": "^2.0.0",
-                               "set-cookie-parser": "^3.0.0",
-                               "sirv": "^3.0.0"
-                       },
-                       "bin": {
-                               "svelte-kit": "svelte-kit.js"
-                       },
                        "engines": {
-                               "node": ">=18.13"
-                       },
-                       "peerDependencies": {
-                               "@opentelemetry/api": "^1.0.0",
-                               "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0",
-                               "svelte": "^4.0.0 || ^5.0.0-next.0",
-                               "typescript": "^5.3.3 || ^6.0.0",
-                               "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
-                       "peerDependenciesMeta": {
-                               "@opentelemetry/api": {
-                                       "optional": true
-                               },
-                               "typescript": {
-                                       "optional": true
-                               }
+                       "funding": {
+                               "url": "https://eslint.org/donate"
                        }
                },
-               "node_modules/@sveltejs/vite-plugin-svelte": {
-                       "version": "6.2.1",
-                       "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz",
-                       "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
+               "node_modules/@eslint/object-schema": {
+                       "version": "2.1.7",
+                       "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+                       "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
-                               "debug": "^4.4.1",
-                               "deepmerge": "^4.3.1",
-                               "magic-string": "^0.30.17",
-                               "vitefu": "^1.1.1"
-                       },
+                       "license": "Apache-2.0",
                        "engines": {
-                               "node": "^20.19 || ^22.12 || >=24"
-                       },
-                       "peerDependencies": {
-                               "svelte": "^5.0.0",
-                               "vite": "^6.3.0 || ^7.0.0"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        }
                },
-               "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.0.tgz",
-                       "integrity": "sha512-iwQ8Z4ET6ZFSt/gC+tVfcsSBHwsqc6RumSaiLUkAurW3BCpJam65cmHw0oOlDMTO0u+PZi9hilBRYN+LZNHTUQ==",
+               "node_modules/@eslint/plugin-kit": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+                       "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "debug": "^4.4.1"
+                               "@eslint/core": "^0.17.0",
+                               "levn": "^0.4.1"
                        },
                        "engines": {
-                               "node": "^20.19 || ^22.12 || >=24"
-                       },
-                       "peerDependencies": {
-                               "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0",
-                               "svelte": "^5.0.0",
-                               "vite": "^6.3.0 || ^7.0.0"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        }
                },
-               "node_modules/@swc/helpers": {
-                       "version": "0.5.17",
-                       "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
-                       "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+               "node_modules/@floating-ui/core": {
+                       "version": "1.7.5",
+                       "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
+                       "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "tslib": "^2.8.0"
+                               "@floating-ui/utils": "^0.2.11"
                        }
                },
-               "node_modules/@tailwindcss/forms": {
-                       "version": "0.5.10",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
-                       "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
+               "node_modules/@floating-ui/dom": {
+                       "version": "1.7.6",
+                       "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
+                       "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "mini-svg-data-uri": "^1.2.3"
+                               "@floating-ui/core": "^1.7.5",
+                               "@floating-ui/utils": "^0.2.11"
+                       }
+               },
+               "node_modules/@floating-ui/utils": {
+                       "version": "0.2.11",
+                       "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
+                       "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@hono/node-server": {
+                       "version": "1.19.14",
+                       "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz",
+                       "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=18.14.1"
                        },
                        "peerDependencies": {
-                               "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
+                               "hono": "^4"
                        }
                },
-               "node_modules/@tailwindcss/node": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
-                       "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
+               "node_modules/@humanfs/core": {
+                       "version": "0.19.2",
+                       "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+                       "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "@ampproject/remapping": "^2.3.0",
-                               "enhanced-resolve": "^5.18.1",
-                               "jiti": "^2.4.2",
-                               "lightningcss": "1.30.1",
-                               "magic-string": "^0.30.17",
-                               "source-map-js": "^1.2.1",
-                               "tailwindcss": "4.1.11"
+                               "@humanfs/types": "^0.15.0"
+                       },
+                       "engines": {
+                               "node": ">=18.18.0"
                        }
                },
-               "node_modules/@tailwindcss/oxide": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
-                       "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
+               "node_modules/@humanfs/node": {
+                       "version": "0.16.8",
+                       "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+                       "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
                        "dev": true,
-                       "hasInstallScript": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "detect-libc": "^2.0.4",
-                               "tar": "^7.4.3"
+                               "@humanfs/core": "^0.19.2",
+                               "@humanfs/types": "^0.15.0",
+                               "@humanwhocodes/retry": "^0.4.0"
                        },
                        "engines": {
-                               "node": ">= 10"
-                       },
-                       "optionalDependencies": {
-                               "@tailwindcss/oxide-android-arm64": "4.1.11",
-                               "@tailwindcss/oxide-darwin-arm64": "4.1.11",
-                               "@tailwindcss/oxide-darwin-x64": "4.1.11",
-                               "@tailwindcss/oxide-freebsd-x64": "4.1.11",
-                               "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
-                               "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
-                               "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
-                               "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
-                               "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
-                               "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
-                               "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
-                               "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
+                               "node": ">=18.18.0"
                        }
                },
-               "node_modules/@tailwindcss/oxide-android-arm64": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
-                       "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
-                       "cpu": [
-                               "arm64"
-                       ],
+               "node_modules/@humanfs/types": {
+                       "version": "0.15.0",
+                       "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+                       "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "android"
-                       ],
+                       "license": "Apache-2.0",
                        "engines": {
-                               "node": ">= 10"
+                               "node": ">=18.18.0"
                        }
                },
-               "node_modules/@tailwindcss/oxide-darwin-arm64": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
-                       "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
+               "node_modules/@humanwhocodes/module-importer": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+                       "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "engines": {
+                               "node": ">=12.22"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/nzakas"
+                       }
+               },
+               "node_modules/@humanwhocodes/retry": {
+                       "version": "0.4.3",
+                       "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+                       "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "engines": {
+                               "node": ">=18.18"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/nzakas"
+                       }
+               },
+               "node_modules/@iconify/types": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+                       "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@iconify/utils": {
+                       "version": "3.1.3",
+                       "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.3.tgz",
+                       "integrity": "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@antfu/install-pkg": "^1.1.0",
+                               "@iconify/types": "^2.0.0",
+                               "import-meta-resolve": "^4.2.0"
+                       }
+               },
+               "node_modules/@img/sharp-darwin-arm64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+                       "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
                        "cpu": [
                                "arm64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
                        "os": [
                                "darwin"
                        ],
                        "engines": {
-                               "node": ">= 10"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-darwin-arm64": "1.0.4"
                        }
                },
-               "node_modules/@tailwindcss/oxide-darwin-x64": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
-                       "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
+               "node_modules/@img/sharp-darwin-x64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+                       "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
                        "cpu": [
                                "x64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
                        "os": [
                                "darwin"
                        ],
                        "engines": {
-                               "node": ">= 10"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-darwin-x64": "1.0.4"
                        }
                },
-               "node_modules/@tailwindcss/oxide-freebsd-x64": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
-                       "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
+               "node_modules/@img/sharp-libvips-darwin-arm64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+                       "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
                        "cpu": [
-                               "x64"
+                               "arm64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
-                               "freebsd"
+                               "darwin"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
-                       "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
+               "node_modules/@img/sharp-libvips-darwin-x64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+                       "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
                        "cpu": [
-                               "arm"
+                               "x64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
-                               "linux"
+                               "darwin"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
-                       "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
+               "node_modules/@img/sharp-libvips-linux-arm": {
+                       "version": "1.0.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+                       "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
                        "cpu": [
-                               "arm64"
+                               "arm"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
                                "linux"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
-                       "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
+               "node_modules/@img/sharp-libvips-linux-arm64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+                       "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
                        "cpu": [
                                "arm64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
                                "linux"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
-                       "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
+               "node_modules/@img/sharp-libvips-linux-s390x": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+                       "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
                        "cpu": [
-                               "x64"
+                               "s390x"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
                                "linux"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-linux-x64-musl": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
-                       "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
+               "node_modules/@img/sharp-libvips-linux-x64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+                       "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
                        "cpu": [
                                "x64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
                        "os": [
                                "linux"
                        ],
-                       "engines": {
-                               "node": ">= 10"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
-                       "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
-                       "bundleDependencies": [
-                               "@napi-rs/wasm-runtime",
-                               "@emnapi/core",
-                               "@emnapi/runtime",
-                               "@tybys/wasm-util",
-                               "@emnapi/wasi-threads",
-                               "tslib"
-                       ],
+               "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+                       "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
                        "cpu": [
-                               "wasm32"
+                               "arm64"
                        ],
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "dependencies": {
-                               "@emnapi/core": "^1.4.3",
-                               "@emnapi/runtime": "^1.4.3",
-                               "@emnapi/wasi-threads": "^1.0.2",
-                               "@napi-rs/wasm-runtime": "^0.2.11",
-                               "@tybys/wasm-util": "^0.9.0",
-                               "tslib": "^2.8.0"
-                       },
-                       "engines": {
-                               "node": ">=14.0.0"
-                       }
-               },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
-                       "version": "1.4.3",
-                       "dev": true,
-                       "inBundle": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "dependencies": {
-                               "@emnapi/wasi-threads": "1.0.2",
-                               "tslib": "^2.4.0"
-                       }
-               },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
-                       "version": "1.4.3",
-                       "dev": true,
-                       "inBundle": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
-                       "dependencies": {
-                               "tslib": "^2.4.0"
+                       "os": [
+                               "linux"
+                       ],
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
-                       "version": "1.0.2",
+               "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+                       "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+                       "cpu": [
+                               "x64"
+                       ],
                        "dev": true,
-                       "inBundle": true,
-                       "license": "MIT",
+                       "license": "LGPL-3.0-or-later",
                        "optional": true,
-                       "dependencies": {
-                               "tslib": "^2.4.0"
+                       "os": [
+                               "linux"
+                       ],
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
-                       "version": "0.2.11",
+               "node_modules/@img/sharp-linux-arm": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+                       "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+                       "cpu": [
+                               "arm"
+                       ],
                        "dev": true,
-                       "inBundle": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
-                       "dependencies": {
-                               "@emnapi/core": "^1.4.3",
-                               "@emnapi/runtime": "^1.4.3",
-                               "@tybys/wasm-util": "^0.9.0"
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linux-arm": "1.0.5"
                        }
                },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
-                       "version": "0.9.0",
+               "node_modules/@img/sharp-linux-arm64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+                       "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+                       "cpu": [
+                               "arm64"
+                       ],
                        "dev": true,
-                       "inBundle": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
-                       "dependencies": {
-                               "tslib": "^2.4.0"
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linux-arm64": "1.0.4"
                        }
                },
-               "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
-                       "version": "2.8.0",
-                       "dev": true,
-                       "inBundle": true,
-                       "license": "0BSD",
-                       "optional": true
-               },
-               "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
-                       "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
+               "node_modules/@img/sharp-linux-s390x": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+                       "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
                        "cpu": [
-                               "arm64"
+                               "s390x"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
                        "os": [
-                               "win32"
+                               "linux"
                        ],
                        "engines": {
-                               "node": ">= 10"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linux-s390x": "1.0.4"
                        }
                },
-               "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
-                       "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
+               "node_modules/@img/sharp-linux-x64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+                       "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
                        "cpu": [
                                "x64"
                        ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "optional": true,
                        "os": [
-                               "win32"
+                               "linux"
                        ],
                        "engines": {
-                               "node": ">= 10"
-                       }
-               },
-               "node_modules/@tailwindcss/typography": {
-                       "version": "0.5.16",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
-                       "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "lodash.castarray": "^4.4.0",
-                               "lodash.isplainobject": "^4.0.6",
-                               "lodash.merge": "^4.6.2",
-                               "postcss-selector-parser": "6.0.10"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
                        },
-                       "peerDependencies": {
-                               "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linux-x64": "1.0.4"
                        }
                },
-               "node_modules/@tailwindcss/vite": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz",
-                       "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==",
+               "node_modules/@img/sharp-linuxmusl-arm64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+                       "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+                       "cpu": [
+                               "arm64"
+                       ],
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@tailwindcss/node": "4.1.11",
-                               "@tailwindcss/oxide": "4.1.11",
-                               "tailwindcss": "4.1.11"
+                       "license": "Apache-2.0",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
                        },
-                       "peerDependencies": {
-                               "vite": "^5.2.0 || ^6 || ^7"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
                        }
                },
-               "node_modules/@testing-library/dom": {
-                       "version": "10.4.1",
-                       "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
-                       "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+               "node_modules/@img/sharp-linuxmusl-x64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+                       "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+                       "cpu": [
+                               "x64"
+                       ],
                        "dev": true,
-                       "license": "MIT",
-                       "peer": true,
-                       "dependencies": {
-                               "@babel/code-frame": "^7.10.4",
-                               "@babel/runtime": "^7.12.5",
-                               "@types/aria-query": "^5.0.1",
-                               "aria-query": "5.3.0",
-                               "dom-accessibility-api": "^0.5.9",
-                               "lz-string": "^1.5.0",
-                               "picocolors": "1.1.1",
-                               "pretty-format": "^27.0.2"
-                       },
+                       "license": "Apache-2.0",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
                        "engines": {
-                               "node": ">=18"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
                        }
                },
-               "node_modules/@testing-library/jest-dom": {
-                       "version": "6.9.1",
-                       "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz",
-                       "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==",
+               "node_modules/@img/sharp-wasm32": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+                       "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+                       "cpu": [
+                               "wasm32"
+                       ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+                       "optional": true,
                        "dependencies": {
-                               "@adobe/css-tools": "^4.4.0",
-                               "aria-query": "^5.0.0",
-                               "css.escape": "^1.5.1",
-                               "dom-accessibility-api": "^0.6.3",
-                               "picocolors": "^1.1.1",
-                               "redent": "^3.0.0"
+                               "@emnapi/runtime": "^1.2.0"
                        },
                        "engines": {
-                               "node": ">=14",
-                               "npm": ">=6",
-                               "yarn": ">=1"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
-                       "version": "0.6.3",
-                       "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
-                       "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@testing-library/svelte-core": {
-                       "version": "1.0.0",
-                       "resolved": "https://registry.npmjs.org/@testing-library/svelte-core/-/svelte-core-1.0.0.tgz",
-                       "integrity": "sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==",
+               "node_modules/@img/sharp-win32-ia32": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+                       "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+                       "cpu": [
+                               "ia32"
+                       ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0 AND LGPL-3.0-or-later",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
                        "engines": {
-                               "node": ">=16"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
                        },
-                       "peerDependencies": {
-                               "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@testing-library/user-event": {
-                       "version": "14.6.1",
-                       "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
-                       "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
+               "node_modules/@img/sharp-win32-x64": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+                       "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+                       "cpu": [
+                               "x64"
+                       ],
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0 AND LGPL-3.0-or-later",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
                        "engines": {
-                               "node": ">=12",
-                               "npm": ">=6"
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
                        },
-                       "peerDependencies": {
-                               "@testing-library/dom": ">=7.21.4"
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
                        }
                },
-               "node_modules/@types/aria-query": {
-                       "version": "5.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
-                       "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
-                       "dev": true,
-                       "license": "MIT",
-                       "peer": true
-               },
-               "node_modules/@types/chai": {
-                       "version": "5.2.2",
-                       "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
-                       "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
+               "node_modules/@internationalized/date": {
+                       "version": "3.10.1",
+                       "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.1.tgz",
+                       "integrity": "sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "@types/deep-eql": "*"
+                               "@swc/helpers": "^0.5.0"
                        }
                },
-               "node_modules/@types/cookie": {
-                       "version": "0.6.0",
-                       "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
-                       "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+               "node_modules/@isaacs/fs-minipass": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+                       "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "dependencies": {
+                               "minipass": "^7.0.4"
+                       },
+                       "engines": {
+                               "node": ">=18.0.0"
+                       }
                },
-               "node_modules/@types/d3": {
-                       "version": "7.4.3",
-                       "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
-                       "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+               "node_modules/@jridgewell/gen-mapping": {
+                       "version": "0.3.13",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+                       "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-array": "*",
-                               "@types/d3-axis": "*",
-                               "@types/d3-brush": "*",
-                               "@types/d3-chord": "*",
-                               "@types/d3-color": "*",
-                               "@types/d3-contour": "*",
-                               "@types/d3-delaunay": "*",
-                               "@types/d3-dispatch": "*",
-                               "@types/d3-drag": "*",
-                               "@types/d3-dsv": "*",
-                               "@types/d3-ease": "*",
-                               "@types/d3-fetch": "*",
-                               "@types/d3-force": "*",
-                               "@types/d3-format": "*",
-                               "@types/d3-geo": "*",
-                               "@types/d3-hierarchy": "*",
-                               "@types/d3-interpolate": "*",
-                               "@types/d3-path": "*",
-                               "@types/d3-polygon": "*",
-                               "@types/d3-quadtree": "*",
-                               "@types/d3-random": "*",
-                               "@types/d3-scale": "*",
-                               "@types/d3-scale-chromatic": "*",
-                               "@types/d3-selection": "*",
-                               "@types/d3-shape": "*",
-                               "@types/d3-time": "*",
-                               "@types/d3-time-format": "*",
-                               "@types/d3-timer": "*",
-                               "@types/d3-transition": "*",
-                               "@types/d3-zoom": "*"
+                               "@jridgewell/sourcemap-codec": "^1.5.0",
+                               "@jridgewell/trace-mapping": "^0.3.24"
                        }
                },
-               "node_modules/@types/d3-array": {
-                       "version": "3.2.2",
-                       "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
-                       "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@types/d3-axis": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
-                       "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+               "node_modules/@jridgewell/remapping": {
+                       "version": "2.3.5",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+                       "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-selection": "*"
+                               "@jridgewell/gen-mapping": "^0.3.5",
+                               "@jridgewell/trace-mapping": "^0.3.24"
                        }
                },
-               "node_modules/@types/d3-brush": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
-                       "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
+               "node_modules/@jridgewell/resolve-uri": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+                       "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/d3-selection": "*"
+                       "engines": {
+                               "node": ">=6.0.0"
                        }
                },
-               "node_modules/@types/d3-chord": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
-                       "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
+               "node_modules/@jridgewell/source-map": {
+                       "version": "0.3.11",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+                       "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@jridgewell/gen-mapping": "^0.3.5",
+                               "@jridgewell/trace-mapping": "^0.3.25"
+                       }
                },
-               "node_modules/@types/d3-color": {
-                       "version": "3.1.3",
-                       "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
-                       "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+               "node_modules/@jridgewell/sourcemap-codec": {
+                       "version": "1.5.5",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+                       "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/@types/d3-contour": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
-                       "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
+               "node_modules/@jridgewell/trace-mapping": {
+                       "version": "0.3.31",
+                       "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+                       "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-array": "*",
-                               "@types/geojson": "*"
+                               "@jridgewell/resolve-uri": "^3.1.0",
+                               "@jridgewell/sourcemap-codec": "^1.4.14"
+                       }
+               },
+               "node_modules/@lucide/svelte": {
+                       "version": "0.515.0",
+                       "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.515.0.tgz",
+                       "integrity": "sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA==",
+                       "dev": true,
+                       "license": "ISC",
+                       "peerDependencies": {
+                               "svelte": "^5"
+                       }
+               },
+               "node_modules/@mdx-js/react": {
+                       "version": "3.1.1",
+                       "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
+                       "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/mdx": "^2.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
+                       },
+                       "peerDependencies": {
+                               "@types/react": ">=16",
+                               "react": ">=16"
+                       }
+               },
+               "node_modules/@mermaid-js/parser": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.1.tgz",
+                       "integrity": "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@chevrotain/types": "~11.1.1"
+                       }
+               },
+               "node_modules/@modelcontextprotocol/sdk": {
+                       "version": "1.26.0",
+                       "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz",
+                       "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@hono/node-server": "^1.19.9",
+                               "ajv": "^8.17.1",
+                               "ajv-formats": "^3.0.1",
+                               "content-type": "^1.0.5",
+                               "cors": "^2.8.5",
+                               "cross-spawn": "^7.0.5",
+                               "eventsource": "^3.0.2",
+                               "eventsource-parser": "^3.0.0",
+                               "express": "^5.2.1",
+                               "express-rate-limit": "^8.2.1",
+                               "hono": "^4.11.4",
+                               "jose": "^6.1.3",
+                               "json-schema-typed": "^8.0.2",
+                               "pkce-challenge": "^5.0.0",
+                               "raw-body": "^3.0.0",
+                               "zod": "^3.25 || ^4.0",
+                               "zod-to-json-schema": "^3.25.1"
+                       },
+                       "engines": {
+                               "node": ">=18"
+                       },
+                       "peerDependencies": {
+                               "@cfworker/json-schema": "^4.1.1",
+                               "zod": "^3.25 || ^4.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@cfworker/json-schema": {
+                                       "optional": true
+                               },
+                               "zod": {
+                                       "optional": false
+                               }
+                       }
+               },
+               "node_modules/@napi-rs/canvas": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz",
+                       "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "workspaces": [
+                               "e2e/*"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       },
+                       "optionalDependencies": {
+                               "@napi-rs/canvas-android-arm64": "0.1.100",
+                               "@napi-rs/canvas-darwin-arm64": "0.1.100",
+                               "@napi-rs/canvas-darwin-x64": "0.1.100",
+                               "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100",
+                               "@napi-rs/canvas-linux-arm64-gnu": "0.1.100",
+                               "@napi-rs/canvas-linux-arm64-musl": "0.1.100",
+                               "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100",
+                               "@napi-rs/canvas-linux-x64-gnu": "0.1.100",
+                               "@napi-rs/canvas-linux-x64-musl": "0.1.100",
+                               "@napi-rs/canvas-win32-arm64-msvc": "0.1.100",
+                               "@napi-rs/canvas-win32-x64-msvc": "0.1.100"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-android-arm64": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz",
+                       "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-darwin-arm64": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz",
+                       "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-darwin-x64": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz",
+                       "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz",
+                       "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz",
+                       "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-arm64-musl": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz",
+                       "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz",
+                       "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-x64-gnu": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz",
+                       "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-linux-x64-musl": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz",
+                       "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-win32-arm64-msvc": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz",
+                       "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/canvas-win32-x64-msvc": {
+                       "version": "0.1.100",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz",
+                       "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       }
+               },
+               "node_modules/@napi-rs/wasm-runtime": {
+                       "version": "1.1.4",
+                       "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
+                       "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "@tybys/wasm-util": "^0.10.1"
+                       },
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/Brooooooklyn"
+                       },
+                       "peerDependencies": {
+                               "@emnapi/core": "^1.7.1",
+                               "@emnapi/runtime": "^1.7.1"
+                       }
+               },
+               "node_modules/@neoconfetti/react": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/@neoconfetti/react/-/react-1.0.0.tgz",
+                       "integrity": "sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@oxc-parser/binding-android-arm-eabi": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.127.0.tgz",
+                       "integrity": "sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-android-arm64": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.127.0.tgz",
+                       "integrity": "sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-darwin-arm64": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.127.0.tgz",
+                       "integrity": "sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-darwin-x64": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.127.0.tgz",
+                       "integrity": "sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-freebsd-x64": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.127.0.tgz",
+                       "integrity": "sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.127.0.tgz",
+                       "integrity": "sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-arm-musleabihf": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.127.0.tgz",
+                       "integrity": "sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-arm64-gnu": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.127.0.tgz",
+                       "integrity": "sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-arm64-musl": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.127.0.tgz",
+                       "integrity": "sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-ppc64-gnu": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.127.0.tgz",
+                       "integrity": "sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==",
+                       "cpu": [
+                               "ppc64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-riscv64-gnu": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.127.0.tgz",
+                       "integrity": "sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-riscv64-musl": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.127.0.tgz",
+                       "integrity": "sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-s390x-gnu": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.127.0.tgz",
+                       "integrity": "sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==",
+                       "cpu": [
+                               "s390x"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-x64-gnu": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.127.0.tgz",
+                       "integrity": "sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-linux-x64-musl": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.127.0.tgz",
+                       "integrity": "sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-openharmony-arm64": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.127.0.tgz",
+                       "integrity": "sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "openharmony"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-wasm32-wasi": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.127.0.tgz",
+                       "integrity": "sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==",
+                       "cpu": [
+                               "wasm32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "@emnapi/core": "1.9.2",
+                               "@emnapi/runtime": "1.9.2",
+                               "@napi-rs/wasm-runtime": "^1.1.4"
+                       },
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
+                       "version": "1.9.2",
+                       "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
+                       "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "tslib": "^2.4.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-win32-arm64-msvc": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.127.0.tgz",
+                       "integrity": "sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-win32-ia32-msvc": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.127.0.tgz",
+                       "integrity": "sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==",
+                       "cpu": [
+                               "ia32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-parser/binding-win32-x64-msvc": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.127.0.tgz",
+                       "integrity": "sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       }
+               },
+               "node_modules/@oxc-project/types": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz",
+                       "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "funding": {
+                               "url": "https://github.com/sponsors/Boshen"
+                       }
+               },
+               "node_modules/@oxc-resolver/binding-android-arm-eabi": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.20.0.tgz",
+                       "integrity": "sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-android-arm64": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.20.0.tgz",
+                       "integrity": "sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-darwin-arm64": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.20.0.tgz",
+                       "integrity": "sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-darwin-x64": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.20.0.tgz",
+                       "integrity": "sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-freebsd-x64": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.20.0.tgz",
+                       "integrity": "sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.20.0.tgz",
+                       "integrity": "sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.20.0.tgz",
+                       "integrity": "sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-arm64-gnu": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.20.0.tgz",
+                       "integrity": "sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-arm64-musl": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.20.0.tgz",
+                       "integrity": "sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.20.0.tgz",
+                       "integrity": "sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==",
+                       "cpu": [
+                               "ppc64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.20.0.tgz",
+                       "integrity": "sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-riscv64-musl": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.20.0.tgz",
+                       "integrity": "sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-s390x-gnu": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.20.0.tgz",
+                       "integrity": "sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==",
+                       "cpu": [
+                               "s390x"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-x64-gnu": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.20.0.tgz",
+                       "integrity": "sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-linux-x64-musl": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.20.0.tgz",
+                       "integrity": "sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-openharmony-arm64": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.20.0.tgz",
+                       "integrity": "sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "openharmony"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-wasm32-wasi": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.20.0.tgz",
+                       "integrity": "sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==",
+                       "cpu": [
+                               "wasm32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "@emnapi/core": "1.10.0",
+                               "@emnapi/runtime": "1.10.0",
+                               "@napi-rs/wasm-runtime": "^1.1.4"
+                       },
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
+               },
+               "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@emnapi/core": {
+                       "version": "1.10.0",
+                       "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
+                       "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "@emnapi/wasi-threads": "1.2.1",
+                               "tslib": "^2.4.0"
+                       }
+               },
+               "node_modules/@oxc-resolver/binding-win32-arm64-msvc": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.20.0.tgz",
+                       "integrity": "sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@oxc-resolver/binding-win32-x64-msvc": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.20.0.tgz",
+                       "integrity": "sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@parcel/watcher": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
+                       "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
+                       "dev": true,
+                       "hasInstallScript": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "detect-libc": "^2.0.3",
+                               "is-glob": "^4.0.3",
+                               "node-addon-api": "^7.0.0",
+                               "picomatch": "^4.0.3"
+                       },
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       },
+                       "optionalDependencies": {
+                               "@parcel/watcher-android-arm64": "2.5.6",
+                               "@parcel/watcher-darwin-arm64": "2.5.6",
+                               "@parcel/watcher-darwin-x64": "2.5.6",
+                               "@parcel/watcher-freebsd-x64": "2.5.6",
+                               "@parcel/watcher-linux-arm-glibc": "2.5.6",
+                               "@parcel/watcher-linux-arm-musl": "2.5.6",
+                               "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+                               "@parcel/watcher-linux-arm64-musl": "2.5.6",
+                               "@parcel/watcher-linux-x64-glibc": "2.5.6",
+                               "@parcel/watcher-linux-x64-musl": "2.5.6",
+                               "@parcel/watcher-win32-arm64": "2.5.6",
+                               "@parcel/watcher-win32-ia32": "2.5.6",
+                               "@parcel/watcher-win32-x64": "2.5.6"
+                       }
+               },
+               "node_modules/@parcel/watcher-android-arm64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+                       "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-darwin-arm64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+                       "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-darwin-x64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+                       "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-freebsd-x64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+                       "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-arm-glibc": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+                       "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-arm-musl": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+                       "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-arm64-glibc": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+                       "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-arm64-musl": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+                       "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-x64-glibc": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+                       "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-linux-x64-musl": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+                       "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-win32-arm64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+                       "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-win32-ia32": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+                       "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
+                       "cpu": [
+                               "ia32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@parcel/watcher-win32-x64": {
+                       "version": "2.5.6",
+                       "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+                       "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/parcel"
+                       }
+               },
+               "node_modules/@playwright/test": {
+                       "version": "1.56.1",
+                       "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz",
+                       "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "playwright": "1.56.1"
+                       },
+                       "bin": {
+                               "playwright": "cli.js"
+                       },
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
+               "node_modules/@polka/url": {
+                       "version": "1.0.0-next.29",
+                       "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+                       "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@quansync/fs": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz",
+                       "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "quansync": "^1.0.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sxzz"
+                       }
+               },
+               "node_modules/@rollup/plugin-babel": {
+                       "version": "6.1.0",
+                       "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz",
+                       "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@babel/helper-module-imports": "^7.18.6",
+                               "@rollup/pluginutils": "^5.0.1"
+                       },
+                       "engines": {
+                               "node": ">=14.0.0"
+                       },
+                       "peerDependencies": {
+                               "@babel/core": "^7.0.0",
+                               "@types/babel__core": "^7.1.9",
+                               "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@types/babel__core": {
+                                       "optional": true
+                               },
+                               "rollup": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@rollup/plugin-node-resolve": {
+                       "version": "16.0.3",
+                       "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz",
+                       "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@rollup/pluginutils": "^5.0.1",
+                               "@types/resolve": "1.20.2",
+                               "deepmerge": "^4.2.2",
+                               "is-module": "^1.0.0",
+                               "resolve": "^1.22.1"
+                       },
+                       "engines": {
+                               "node": ">=14.0.0"
+                       },
+                       "peerDependencies": {
+                               "rollup": "^2.78.0||^3.0.0||^4.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "rollup": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@rollup/plugin-replace": {
+                       "version": "6.0.3",
+                       "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz",
+                       "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@rollup/pluginutils": "^5.0.1",
+                               "magic-string": "^0.30.3"
+                       },
+                       "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/plugin-terser": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz",
+                       "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "serialize-javascript": "^7.0.3",
+                               "smob": "^1.0.0",
+                               "terser": "^5.17.4"
+                       },
+                       "engines": {
+                               "node": ">=20.0.0"
+                       },
+                       "peerDependencies": {
+                               "rollup": "^2.0.0||^3.0.0||^4.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "rollup": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@rollup/pluginutils": {
+                       "version": "5.4.0",
+                       "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz",
+                       "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/estree": "^1.0.0",
+                               "estree-walker": "^2.0.2",
+                               "picomatch": "^4.0.2"
+                       },
+                       "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==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@rollup/rollup-android-arm-eabi": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz",
+                       "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ]
+               },
+               "node_modules/@rollup/rollup-android-arm64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz",
+                       "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ]
+               },
+               "node_modules/@rollup/rollup-darwin-arm64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz",
+                       "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ]
+               },
+               "node_modules/@rollup/rollup-darwin-x64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz",
+                       "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ]
+               },
+               "node_modules/@rollup/rollup-freebsd-arm64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz",
+                       "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ]
+               },
+               "node_modules/@rollup/rollup-freebsd-x64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz",
+                       "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz",
+                       "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz",
+                       "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-arm64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-arm64-musl": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz",
+                       "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-loong64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==",
+                       "cpu": [
+                               "loong64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-loong64-musl": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz",
+                       "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==",
+                       "cpu": [
+                               "loong64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==",
+                       "cpu": [
+                               "ppc64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-ppc64-musl": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz",
+                       "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==",
+                       "cpu": [
+                               "ppc64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-riscv64-musl": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz",
+                       "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==",
+                       "cpu": [
+                               "riscv64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-s390x-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz",
+                       "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==",
+                       "cpu": [
+                               "s390x"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-x64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-linux-x64-musl": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz",
+                       "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ]
+               },
+               "node_modules/@rollup/rollup-openbsd-x64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz",
+                       "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "openbsd"
+                       ]
+               },
+               "node_modules/@rollup/rollup-openharmony-arm64": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz",
+                       "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "openharmony"
+                       ]
+               },
+               "node_modules/@rollup/rollup-win32-arm64-msvc": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz",
+                       "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@rollup/rollup-win32-ia32-msvc": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz",
+                       "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==",
+                       "cpu": [
+                               "ia32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@rollup/rollup-win32-x64-gnu": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz",
+                       "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@rollup/rollup-win32-x64-msvc": {
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz",
+                       "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ]
+               },
+               "node_modules/@standard-schema/spec": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+                       "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@storybook/addon-a11y": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-10.2.4.tgz",
+                       "integrity": "sha512-VGhdZ+iP2l/CSulIKV2kt3SMWVHntOigqWqGkNYf6YNYofynUYEKdsNqBvHx4ySuNEl/eXJ8LRO8FKYnU7LxZQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/global": "^5.0.0",
+                               "axe-core": "^4.2.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^10.2.4"
+                       }
+               },
+               "node_modules/@storybook/addon-docs": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.4.tgz",
+                       "integrity": "sha512-FzscAmdBiOGnGrxiEM+8eTg43kjqgjLfObg+lbJVRR/a0DmZ3xfAPNB0+VKYQbN0FacNcWLM9LZ/7U0hRBPBnQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@mdx-js/react": "^3.0.0",
+                               "@storybook/csf-plugin": "10.2.4",
+                               "@storybook/icons": "^2.0.1",
+                               "@storybook/react-dom-shim": "10.2.4",
+                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "ts-dedent": "^2.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^10.2.4"
+                       }
+               },
+               "node_modules/@storybook/addon-svelte-csf": {
+                       "version": "5.0.10",
+                       "resolved": "https://registry.npmjs.org/@storybook/addon-svelte-csf/-/addon-svelte-csf-5.0.10.tgz",
+                       "integrity": "sha512-poSvTS7VdaQ42ZoqW5e4+2Hv1iLO0mekH9fwn/QuBNse48R4WlTyR8XFbHRTfatl9gdc9ZYC4uWzazrmV6zGIA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/csf": "^0.1.13",
+                               "dedent": "^1.5.3",
+                               "es-toolkit": "^1.26.1",
+                               "esrap": "^1.2.2",
+                               "magic-string": "^0.30.12",
+                               "svelte-ast-print": "^0.4.0",
+                               "zimmerframe": "^1.1.2"
+                       },
+                       "peerDependencies": {
+                               "@storybook/svelte": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0",
+                               "@sveltejs/vite-plugin-svelte": "^4.0.0 || ^5.0.0 || ^6.0.0",
+                               "storybook": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0",
+                               "svelte": "^5.0.0",
+                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@storybook/addon-vitest": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/addon-vitest/-/addon-vitest-10.2.4.tgz",
+                       "integrity": "sha512-BT1iP89U4wcbpzTURU8WYTAeUcdNh4WIt0BqsnATmMwR/jKNJW6QgXCVqGQTSpRjWj40hX5e2JkQYCNXdjKsPw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/global": "^5.0.0",
+                               "@storybook/icons": "^2.0.1"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "@vitest/browser": "^3.0.0 || ^4.0.0",
+                               "@vitest/browser-playwright": "^4.0.0",
+                               "@vitest/runner": "^3.0.0 || ^4.0.0",
+                               "storybook": "^10.2.4",
+                               "vitest": "^3.0.0 || ^4.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@vitest/browser": {
+                                       "optional": true
+                               },
+                               "@vitest/browser-playwright": {
+                                       "optional": true
+                               },
+                               "@vitest/runner": {
+                                       "optional": true
+                               },
+                               "vitest": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@storybook/builder-vite": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.4.tgz",
+                       "integrity": "sha512-/hcT1xj3CL5GkJ5v5/EguZdttDwNE6weNXK7vKzp034tnGcLycOossDsTiUQkBowSL+Ylc8aKj+ZgvddPNfOig==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/csf-plugin": "10.2.4",
+                               "ts-dedent": "^2.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^10.2.4",
+                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@storybook/csf": {
+                       "version": "0.1.13",
+                       "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.13.tgz",
+                       "integrity": "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "type-fest": "^2.19.0"
+                       }
+               },
+               "node_modules/@storybook/csf-plugin": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.4.tgz",
+                       "integrity": "sha512-kupPQEV+4N9mzsZHYaokvhO/KHBjYdWda9PNmPQwy0TR7r2mzthgaNH72TjmgN1L6DIbsuyOG1wtczcPJn4+Jg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "unplugin": "^2.3.5"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "esbuild": "*",
+                               "rollup": "*",
+                               "storybook": "^10.2.4",
+                               "vite": "*",
+                               "webpack": "*"
+                       },
+                       "peerDependenciesMeta": {
+                               "esbuild": {
+                                       "optional": true
+                               },
+                               "rollup": {
+                                       "optional": true
+                               },
+                               "vite": {
+                                       "optional": true
+                               },
+                               "webpack": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@storybook/global": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+                       "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@storybook/icons": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-2.0.2.tgz",
+                       "integrity": "sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peerDependencies": {
+                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+                       }
+               },
+               "node_modules/@storybook/react-dom-shim": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.4.tgz",
+                       "integrity": "sha512-i22OtrZ7GeZPt/odLf0vqyDhRSKyaLsHkkKSBcANQfzRRnBZmiz2FchOtWm9uvoDWybQsTruZq7kTdtpEhwyGw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "storybook": "^10.2.4"
+                       }
+               },
+               "node_modules/@storybook/svelte": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-10.2.4.tgz",
+                       "integrity": "sha512-W9R51zUCd2iHOQBg/D93+bdpYv6kbtFx+kft5X8lPKQl6yEu0aKs9i5N5GyCASOhIApgx/tkqZIJ7vgM4cqrHA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "ts-dedent": "^2.0.0",
+                               "type-fest": "~2.19"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^10.2.4",
+                               "svelte": "^5.0.0"
+                       }
+               },
+               "node_modules/@storybook/svelte-vite": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-10.2.4.tgz",
+                       "integrity": "sha512-FMgKMRdoZFDwPD6eIDMldcgp6d6NtIGuXyUJjb29qLias/gE5TI6hg+cWmmWXQRTrXwdyepeMBmIfRcZbB6REQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/builder-vite": "10.2.4",
+                               "@storybook/svelte": "10.2.4",
+                               "magic-string": "^0.30.0",
+                               "svelte2tsx": "^0.7.44",
+                               "typescript": "^4.9.4 || ^5.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
+                               "storybook": "^10.2.4",
+                               "svelte": "^5.0.0",
+                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@storybook/sveltekit": {
+                       "version": "10.2.4",
+                       "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-10.2.4.tgz",
+                       "integrity": "sha512-1qDX35iSJHWo1AOd7HMzJtCHBfgahXqTWNiyZa/JMEKJ3qC1otaU8XMmTjsZ6fCRF99piNdgqtWM8+s1TJOldg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@storybook/builder-vite": "10.2.4",
+                               "@storybook/svelte": "10.2.4",
+                               "@storybook/svelte-vite": "10.2.4"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/storybook"
+                       },
+                       "peerDependencies": {
+                               "storybook": "^10.2.4",
+                               "svelte": "^5.0.0",
+                               "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@sveltejs/acorn-typescript": {
+                       "version": "1.0.10",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.10.tgz",
+                       "integrity": "sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peerDependencies": {
+                               "acorn": "^8.9.0"
+                       }
+               },
+               "node_modules/@sveltejs/adapter-static": {
+                       "version": "3.0.10",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz",
+                       "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peerDependencies": {
+                               "@sveltejs/kit": "^2.0.0"
+                       }
+               },
+               "node_modules/@sveltejs/kit": {
+                       "version": "2.60.1",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.60.1.tgz",
+                       "integrity": "sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@standard-schema/spec": "^1.0.0",
+                               "@sveltejs/acorn-typescript": "^1.0.5",
+                               "@types/cookie": "^0.6.0",
+                               "acorn": "^8.14.1",
+                               "cookie": "^0.6.0",
+                               "devalue": "^5.8.1",
+                               "esm-env": "^1.2.2",
+                               "kleur": "^4.1.5",
+                               "magic-string": "^0.30.5",
+                               "mrmime": "^2.0.0",
+                               "set-cookie-parser": "^3.0.0",
+                               "sirv": "^3.0.0"
+                       },
+                       "bin": {
+                               "svelte-kit": "svelte-kit.js"
+                       },
+                       "engines": {
+                               "node": ">=18.13"
+                       },
+                       "peerDependencies": {
+                               "@opentelemetry/api": "^1.0.0",
+                               "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0",
+                               "svelte": "^4.0.0 || ^5.0.0-next.0",
+                               "typescript": "^5.3.3 || ^6.0.0",
+                               "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@opentelemetry/api": {
+                                       "optional": true
+                               },
+                               "typescript": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@sveltejs/load-config": {
+                       "version": "0.1.1",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.1.1.tgz",
+                       "integrity": "sha512-BXXm+VOH/9X4N7Dd1iZ2MqA1h7M+9i2noI8QYuLDY8QcN2WHYn7D/VK/+IJNfcAmRw7ACNJ538UT9GXIhnBTiA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 18.0.0"
+                       }
+               },
+               "node_modules/@sveltejs/vite-plugin-svelte": {
+                       "version": "6.2.1",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz",
+                       "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
+                               "debug": "^4.4.1",
+                               "deepmerge": "^4.3.1",
+                               "magic-string": "^0.30.17",
+                               "vitefu": "^1.1.1"
+                       },
+                       "engines": {
+                               "node": "^20.19 || ^22.12 || >=24"
+                       },
+                       "peerDependencies": {
+                               "svelte": "^5.0.0",
+                               "vite": "^6.3.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
+                       "version": "5.0.2",
+                       "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz",
+                       "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "obug": "^2.1.0"
+                       },
+                       "engines": {
+                               "node": "^20.19 || ^22.12 || >=24"
+                       },
+                       "peerDependencies": {
+                               "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0",
+                               "svelte": "^5.0.0",
+                               "vite": "^6.3.0 || ^7.0.0"
+                       }
+               },
+               "node_modules/@swc/helpers": {
+                       "version": "0.5.23",
+                       "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz",
+                       "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "tslib": "^2.8.0"
+                       }
+               },
+               "node_modules/@tailwindcss/forms": {
+                       "version": "0.5.10",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
+                       "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "mini-svg-data-uri": "^1.2.3"
+                       },
+                       "peerDependencies": {
+                               "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
+                       }
+               },
+               "node_modules/@tailwindcss/node": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
+                       "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@ampproject/remapping": "^2.3.0",
+                               "enhanced-resolve": "^5.18.1",
+                               "jiti": "^2.4.2",
+                               "lightningcss": "1.30.1",
+                               "magic-string": "^0.30.17",
+                               "source-map-js": "^1.2.1",
+                               "tailwindcss": "4.1.11"
+                       }
+               },
+               "node_modules/@tailwindcss/node/node_modules/tailwindcss": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
+                       "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@tailwindcss/oxide": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
+                       "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
+                       "dev": true,
+                       "hasInstallScript": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "detect-libc": "^2.0.4",
+                               "tar": "^7.4.3"
+                       },
+                       "engines": {
+                               "node": ">= 10"
+                       },
+                       "optionalDependencies": {
+                               "@tailwindcss/oxide-android-arm64": "4.1.11",
+                               "@tailwindcss/oxide-darwin-arm64": "4.1.11",
+                               "@tailwindcss/oxide-darwin-x64": "4.1.11",
+                               "@tailwindcss/oxide-freebsd-x64": "4.1.11",
+                               "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
+                               "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
+                               "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
+                               "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
+                               "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
+                               "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
+                               "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
+                               "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-android-arm64": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
+                       "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "android"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-darwin-arm64": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
+                       "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-darwin-x64": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
+                       "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-freebsd-x64": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
+                       "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "freebsd"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
+                       "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
+                       "cpu": [
+                               "arm"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
+                       "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
+                       "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
+                       "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
+                       "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "linux"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
+                       "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
+                       "bundleDependencies": [
+                               "@napi-rs/wasm-runtime",
+                               "@emnapi/core",
+                               "@emnapi/runtime",
+                               "@tybys/wasm-util",
+                               "@emnapi/wasi-threads",
+                               "tslib"
+                       ],
+                       "cpu": [
+                               "wasm32"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "@emnapi/core": "^1.4.3",
+                               "@emnapi/runtime": "^1.4.3",
+                               "@emnapi/wasi-threads": "^1.0.2",
+                               "@napi-rs/wasm-runtime": "^0.2.11",
+                               "@tybys/wasm-util": "^0.9.0",
+                               "tslib": "^2.8.0"
+                       },
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
+                       "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
+                       "cpu": [
+                               "arm64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
+                       "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
+                       "cpu": [
+                               "x64"
+                       ],
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "win32"
+                       ],
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/@tailwindcss/typography": {
+                       "version": "0.5.16",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
+                       "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "lodash.castarray": "^4.4.0",
+                               "lodash.isplainobject": "^4.0.6",
+                               "lodash.merge": "^4.6.2",
+                               "postcss-selector-parser": "6.0.10"
+                       },
+                       "peerDependencies": {
+                               "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+                       }
+               },
+               "node_modules/@tailwindcss/vite": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz",
+                       "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@tailwindcss/node": "4.1.11",
+                               "@tailwindcss/oxide": "4.1.11",
+                               "tailwindcss": "4.1.11"
+                       },
+                       "peerDependencies": {
+                               "vite": "^5.2.0 || ^6 || ^7"
+                       }
+               },
+               "node_modules/@tailwindcss/vite/node_modules/tailwindcss": {
+                       "version": "4.1.11",
+                       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
+                       "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@testing-library/dom": {
+                       "version": "10.4.1",
+                       "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
+                       "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peer": true,
+                       "dependencies": {
+                               "@babel/code-frame": "^7.10.4",
+                               "@babel/runtime": "^7.12.5",
+                               "@types/aria-query": "^5.0.1",
+                               "aria-query": "5.3.0",
+                               "dom-accessibility-api": "^0.5.9",
+                               "lz-string": "^1.5.0",
+                               "picocolors": "1.1.1",
+                               "pretty-format": "^27.0.2"
+                       },
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
+               "node_modules/@testing-library/jest-dom": {
+                       "version": "6.9.1",
+                       "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz",
+                       "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@adobe/css-tools": "^4.4.0",
+                               "aria-query": "^5.0.0",
+                               "css.escape": "^1.5.1",
+                               "dom-accessibility-api": "^0.6.3",
+                               "picocolors": "^1.1.1",
+                               "redent": "^3.0.0"
+                       },
+                       "engines": {
+                               "node": ">=14",
+                               "npm": ">=6",
+                               "yarn": ">=1"
+                       }
+               },
+               "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+                       "version": "0.6.3",
+                       "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+                       "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@testing-library/svelte-core": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/@testing-library/svelte-core/-/svelte-core-1.0.0.tgz",
+                       "integrity": "sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=16"
+                       },
+                       "peerDependencies": {
+                               "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0"
+                       }
+               },
+               "node_modules/@testing-library/user-event": {
+                       "version": "14.6.1",
+                       "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
+                       "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=12",
+                               "npm": ">=6"
+                       },
+                       "peerDependencies": {
+                               "@testing-library/dom": ">=7.21.4"
+                       }
+               },
+               "node_modules/@trickfilm400/rollup-plugin-off-main-thread": {
+                       "version": "3.0.0-pre1",
+                       "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz",
+                       "integrity": "sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "ejs": "^3.1.10",
+                               "json5": "^2.2.3",
+                               "magic-string": "^0.30.21",
+                               "string.prototype.matchall": "^4.0.12"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/@tybys/wasm-util": {
+                       "version": "0.10.2",
+                       "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
+                       "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "dependencies": {
+                               "tslib": "^2.4.0"
+                       }
+               },
+               "node_modules/@types/aria-query": {
+                       "version": "5.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+                       "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peer": true
+               },
+               "node_modules/@types/chai": {
+                       "version": "5.2.3",
+                       "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+                       "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/deep-eql": "*",
+                               "assertion-error": "^2.0.1"
+                       }
+               },
+               "node_modules/@types/cookie": {
+                       "version": "0.6.0",
+                       "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+                       "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3": {
+                       "version": "7.4.3",
+                       "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
+                       "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-array": "*",
+                               "@types/d3-axis": "*",
+                               "@types/d3-brush": "*",
+                               "@types/d3-chord": "*",
+                               "@types/d3-color": "*",
+                               "@types/d3-contour": "*",
+                               "@types/d3-delaunay": "*",
+                               "@types/d3-dispatch": "*",
+                               "@types/d3-drag": "*",
+                               "@types/d3-dsv": "*",
+                               "@types/d3-ease": "*",
+                               "@types/d3-fetch": "*",
+                               "@types/d3-force": "*",
+                               "@types/d3-format": "*",
+                               "@types/d3-geo": "*",
+                               "@types/d3-hierarchy": "*",
+                               "@types/d3-interpolate": "*",
+                               "@types/d3-path": "*",
+                               "@types/d3-polygon": "*",
+                               "@types/d3-quadtree": "*",
+                               "@types/d3-random": "*",
+                               "@types/d3-scale": "*",
+                               "@types/d3-scale-chromatic": "*",
+                               "@types/d3-selection": "*",
+                               "@types/d3-shape": "*",
+                               "@types/d3-time": "*",
+                               "@types/d3-time-format": "*",
+                               "@types/d3-timer": "*",
+                               "@types/d3-transition": "*",
+                               "@types/d3-zoom": "*"
+                       }
+               },
+               "node_modules/@types/d3-array": {
+                       "version": "3.2.2",
+                       "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+                       "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-axis": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
+                       "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-selection": "*"
+                       }
+               },
+               "node_modules/@types/d3-brush": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
+                       "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-selection": "*"
+                       }
+               },
+               "node_modules/@types/d3-chord": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
+                       "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-color": {
+                       "version": "3.1.3",
+                       "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+                       "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-contour": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
+                       "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-array": "*",
+                               "@types/geojson": "*"
                        }
                },
                "node_modules/@types/d3-delaunay": {
                        "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
                        "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-dispatch": {
+                       "version": "3.0.7",
+                       "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
+                       "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-drag": {
+                       "version": "3.0.7",
+                       "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
+                       "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-selection": "*"
+                       }
+               },
+               "node_modules/@types/d3-dsv": {
+                       "version": "3.0.7",
+                       "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
+                       "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-ease": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+                       "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-fetch": {
+                       "version": "3.0.7",
+                       "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
+                       "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-dsv": "*"
+                       }
+               },
+               "node_modules/@types/d3-force": {
+                       "version": "3.0.10",
+                       "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
+                       "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-format": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
+                       "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-geo": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
+                       "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/geojson": "*"
+                       }
+               },
+               "node_modules/@types/d3-hierarchy": {
+                       "version": "3.1.7",
+                       "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
+                       "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-interpolate": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+                       "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-color": "*"
+                       }
+               },
+               "node_modules/@types/d3-path": {
+                       "version": "3.1.1",
+                       "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+                       "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-polygon": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
+                       "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-quadtree": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
+                       "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-random": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
+                       "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-scale": {
+                       "version": "4.0.9",
+                       "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+                       "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-time": "*"
+                       }
+               },
+               "node_modules/@types/d3-scale-chromatic": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+                       "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-selection": {
+                       "version": "3.0.11",
+                       "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
+                       "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-shape": {
+                       "version": "3.1.8",
+                       "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
+                       "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-path": "*"
+                       }
+               },
+               "node_modules/@types/d3-time": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+                       "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-time-format": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
+                       "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-timer": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+                       "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/d3-transition": {
+                       "version": "3.0.9",
+                       "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
+                       "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-selection": "*"
+                       }
+               },
+               "node_modules/@types/d3-zoom": {
+                       "version": "3.0.8",
+                       "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
+                       "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/d3-interpolate": "*",
+                               "@types/d3-selection": "*"
+                       }
+               },
+               "node_modules/@types/debug": {
+                       "version": "4.1.13",
+                       "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+                       "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/ms": "*"
+                       }
+               },
+               "node_modules/@types/deep-eql": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+                       "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/estree": {
+                       "version": "1.0.9",
+                       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+                       "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/geojson": {
+                       "version": "7946.0.16",
+                       "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+                       "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/hast": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+                       "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/unist": "*"
+                       }
+               },
+               "node_modules/@types/json-schema": {
+                       "version": "7.0.15",
+                       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+                       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/katex": {
+                       "version": "0.16.8",
+                       "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz",
+                       "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/mdast": {
+                       "version": "4.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+                       "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/unist": "*"
+                       }
+               },
+               "node_modules/@types/mdx": {
+                       "version": "2.0.13",
+                       "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+                       "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/ms": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+                       "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/node": {
+                       "version": "24.13.0",
+                       "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.0.tgz",
+                       "integrity": "sha512-5vtOqGQr4NJKeEzV441FcOi2MeG9UTWq9LqVLGneDdu4vlX17H8kQ2PA2UmNwCUGPVDj4oBjNhS7ReVEIWJJrg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "undici-types": "~7.18.0"
+                       }
+               },
+               "node_modules/@types/react": {
+                       "version": "19.2.17",
+                       "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
+                       "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "peer": true,
+                       "dependencies": {
+                               "csstype": "^3.2.2"
+                       }
+               },
+               "node_modules/@types/resolve": {
+                       "version": "1.20.2",
+                       "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+                       "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/trusted-types": {
+                       "version": "2.0.7",
+                       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+                       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@types/unist": {
+                       "version": "2.0.11",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+                       "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/@typescript-eslint/eslint-plugin": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz",
+                       "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@eslint-community/regexpp": "^4.12.2",
+                               "@typescript-eslint/scope-manager": "8.60.1",
+                               "@typescript-eslint/type-utils": "8.60.1",
+                               "@typescript-eslint/utils": "8.60.1",
+                               "@typescript-eslint/visitor-keys": "8.60.1",
+                               "ignore": "^7.0.5",
+                               "natural-compare": "^1.4.0",
+                               "ts-api-utils": "^2.5.0"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "@typescript-eslint/parser": "^8.60.1",
+                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+                       "version": "7.0.5",
+                       "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+                       "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 4"
+                       }
+               },
+               "node_modules/@typescript-eslint/parser": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz",
+                       "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/scope-manager": "8.60.1",
+                               "@typescript-eslint/types": "8.60.1",
+                               "@typescript-eslint/typescript-estree": "8.60.1",
+                               "@typescript-eslint/visitor-keys": "8.60.1",
+                               "debug": "^4.4.3"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/project-service": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz",
+                       "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/tsconfig-utils": "^8.60.1",
+                               "@typescript-eslint/types": "^8.60.1",
+                               "debug": "^4.4.3"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/scope-manager": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz",
+                       "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/types": "8.60.1",
+                               "@typescript-eslint/visitor-keys": "8.60.1"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       }
+               },
+               "node_modules/@typescript-eslint/tsconfig-utils": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz",
+                       "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/type-utils": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz",
+                       "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/types": "8.60.1",
+                               "@typescript-eslint/typescript-estree": "8.60.1",
+                               "@typescript-eslint/utils": "8.60.1",
+                               "debug": "^4.4.3",
+                               "ts-api-utils": "^2.5.0"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/types": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz",
+                       "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       }
+               },
+               "node_modules/@typescript-eslint/typescript-estree": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz",
+                       "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/project-service": "8.60.1",
+                               "@typescript-eslint/tsconfig-utils": "8.60.1",
+                               "@typescript-eslint/types": "8.60.1",
+                               "@typescript-eslint/visitor-keys": "8.60.1",
+                               "debug": "^4.4.3",
+                               "minimatch": "^10.2.2",
+                               "semver": "^7.7.3",
+                               "tinyglobby": "^0.2.15",
+                               "ts-api-utils": "^2.5.0"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+                       "version": "4.0.4",
+                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+                       "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       }
+               },
+               "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+                       "version": "5.0.6",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
+                       "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "balanced-match": "^4.0.2"
+                       },
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       }
+               },
+               "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+                       "version": "10.2.5",
+                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+                       "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "dependencies": {
+                               "brace-expansion": "^5.0.5"
+                       },
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/@typescript-eslint/utils": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz",
+                       "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@eslint-community/eslint-utils": "^4.9.1",
+                               "@typescript-eslint/scope-manager": "8.60.1",
+                               "@typescript-eslint/types": "8.60.1",
+                               "@typescript-eslint/typescript-estree": "8.60.1"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       },
+                       "peerDependencies": {
+                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/@typescript-eslint/visitor-keys": {
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz",
+                       "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@typescript-eslint/types": "8.60.1",
+                               "eslint-visitor-keys": "^5.0.0"
+                       },
+                       "engines": {
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/typescript-eslint"
+                       }
+               },
+               "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+                       "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "engines": {
+                               "node": "^20.19.0 || ^22.13.0 || >=24"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/eslint"
+                       }
+               },
+               "node_modules/@ungap/structured-clone": {
+                       "version": "1.3.1",
+                       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz",
+                       "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==",
+                       "dev": true,
+                       "license": "ISC"
+               },
+               "node_modules/@upsetjs/venn.js": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz",
+                       "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "optionalDependencies": {
+                               "d3-selection": "^3.0.0",
+                               "d3-transition": "^3.0.1"
+                       }
+               },
+               "node_modules/@vite-pwa/assets-generator": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/@vite-pwa/assets-generator/-/assets-generator-1.0.2.tgz",
+                       "integrity": "sha512-MCbrb508JZHqe7bUibmZj/lyojdhLRnfkmyXnkrCM2zVrjTgL89U8UEfInpKTvPeTnxsw2hmyZxnhsdNR6yhwg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "cac": "^6.7.14",
+                               "colorette": "^2.0.20",
+                               "consola": "^3.4.2",
+                               "sharp": "^0.33.5",
+                               "sharp-ico": "^0.1.5",
+                               "unconfig": "^7.3.1"
+                       },
+                       "bin": {
+                               "pwa-assets-generator": "bin/pwa-assets-generator.mjs"
+                       },
+                       "engines": {
+                               "node": ">=16.14.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/antfu"
+                       }
+               },
+               "node_modules/@vite-pwa/sveltekit": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/@vite-pwa/sveltekit/-/sveltekit-1.1.0.tgz",
+                       "integrity": "sha512-mMIf2tY+7Hg8jecpu/WY+Ki2ikoXy3hVmt3tOxi0K+lYYnKQrDYthuHireI0S+26Mg9BXzL7qQF1xeB5VYlYlg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "kolorist": "^1.8.0",
+                               "tinyglobby": "^0.2.9",
+                               "vite-plugin-pwa": "^1.2.0"
+                       },
+                       "engines": {
+                               "node": ">=18.13"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/antfu"
+                       },
+                       "peerDependencies": {
+                               "@sveltejs/kit": "^1.3.1 || ^2.0.1",
+                               "@vite-pwa/assets-generator": "^1.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@vite-pwa/assets-generator": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/@vitest/browser": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.8.tgz",
+                       "integrity": "sha512-u21VzX07HzlJYpFgkxmjEXar/tG2UqWGgyGG/46SrrPc7rSdCTPw5vuowopO9CIqF8UCUQzDFdbVnNpw6N0BfQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@blazediff/core": "1.9.1",
+                               "@vitest/mocker": "4.1.8",
+                               "@vitest/utils": "4.1.8",
+                               "magic-string": "^0.30.21",
+                               "pngjs": "^7.0.0",
+                               "sirv": "^3.0.2",
+                               "tinyrainbow": "^3.1.0",
+                               "ws": "^8.19.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       },
+                       "peerDependencies": {
+                               "vitest": "4.1.8"
+                       }
+               },
+               "node_modules/@vitest/browser-playwright": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.8.tgz",
+                       "integrity": "sha512-SR7FqgegaexEg73xvf3ArtygXegagMdXnL0EZMpxrWvvhQxvicD/E8p0ib0J91riPRtQUViyh67Xjw3NqvyhVg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@vitest/browser": "4.1.8",
+                               "@vitest/mocker": "4.1.8",
+                               "tinyrainbow": "^3.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       },
+                       "peerDependencies": {
+                               "playwright": "*",
+                               "vitest": "4.1.8"
+                       },
+                       "peerDependenciesMeta": {
+                               "playwright": {
+                                       "optional": false
+                               }
+                       }
                },
-               "node_modules/@types/d3-dispatch": {
-                       "version": "3.0.7",
-                       "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
-                       "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
+               "node_modules/@vitest/browser-playwright/node_modules/tinyrainbow": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
                },
-               "node_modules/@types/d3-drag": {
-                       "version": "3.0.7",
-                       "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
-                       "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
+               "node_modules/@vitest/browser/node_modules/tinyrainbow": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/d3-selection": "*"
+                       "engines": {
+                               "node": ">=14.0.0"
                        }
                },
-               "node_modules/@types/d3-dsv": {
-                       "version": "3.0.7",
-                       "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
-                       "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
+               "node_modules/@vitest/coverage-v8": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.8.tgz",
+                       "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@bcoe/v8-coverage": "^1.0.2",
+                               "@vitest/utils": "4.1.8",
+                               "ast-v8-to-istanbul": "^1.0.0",
+                               "istanbul-lib-coverage": "^3.2.2",
+                               "istanbul-lib-report": "^3.0.1",
+                               "istanbul-reports": "^3.2.0",
+                               "magicast": "^0.5.2",
+                               "obug": "^2.1.1",
+                               "std-env": "^4.0.0-rc.1",
+                               "tinyrainbow": "^3.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       },
+                       "peerDependencies": {
+                               "@vitest/browser": "4.1.8",
+                               "vitest": "4.1.8"
+                       },
+                       "peerDependenciesMeta": {
+                               "@vitest/browser": {
+                                       "optional": true
+                               }
+                       }
                },
-               "node_modules/@types/d3-ease": {
-                       "version": "3.0.2",
-                       "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
-                       "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+               "node_modules/@vitest/coverage-v8/node_modules/tinyrainbow": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
                },
-               "node_modules/@types/d3-fetch": {
-                       "version": "3.0.7",
-                       "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
-                       "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
+               "node_modules/@vitest/expect": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+                       "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-dsv": "*"
+                               "@types/chai": "^5.2.2",
+                               "@vitest/spy": "3.2.4",
+                               "@vitest/utils": "3.2.4",
+                               "chai": "^5.2.0",
+                               "tinyrainbow": "^2.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
                        }
                },
-               "node_modules/@types/d3-force": {
-                       "version": "3.0.10",
-                       "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
-                       "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
+               "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+                       "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "tinyrainbow": "^2.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
                },
-               "node_modules/@types/d3-format": {
-                       "version": "3.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
-                       "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
+               "node_modules/@vitest/expect/node_modules/@vitest/spy": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+                       "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "tinyspy": "^4.0.3"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
                },
-               "node_modules/@types/d3-geo": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
-                       "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+               "node_modules/@vitest/expect/node_modules/@vitest/utils": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+                       "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/geojson": "*"
+                               "@vitest/pretty-format": "3.2.4",
+                               "loupe": "^3.1.4",
+                               "tinyrainbow": "^2.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
                        }
                },
-               "node_modules/@types/d3-hierarchy": {
-                       "version": "3.1.7",
-                       "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
-                       "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
+               "node_modules/@vitest/mocker": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz",
+                       "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@vitest/spy": "4.1.8",
+                               "estree-walker": "^3.0.3",
+                               "magic-string": "^0.30.21"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       },
+                       "peerDependencies": {
+                               "msw": "^2.4.9",
+                               "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "msw": {
+                                       "optional": true
+                               },
+                               "vite": {
+                                       "optional": true
+                               }
+                       }
                },
-               "node_modules/@types/d3-interpolate": {
-                       "version": "3.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
-                       "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+               "node_modules/@vitest/pretty-format": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
+                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-color": "*"
+                               "tinyrainbow": "^3.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
                        }
                },
-               "node_modules/@types/d3-path": {
-                       "version": "3.1.1",
-                       "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
-                       "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+               "node_modules/@vitest/pretty-format/node_modules/tinyrainbow": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
                },
-               "node_modules/@types/d3-polygon": {
-                       "version": "3.0.2",
-                       "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
-                       "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
+               "node_modules/@vitest/runner": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz",
+                       "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@vitest/utils": "4.1.8",
+                               "pathe": "^2.0.3"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
                },
-               "node_modules/@types/d3-quadtree": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
-                       "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
+               "node_modules/@vitest/snapshot": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz",
+                       "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@vitest/pretty-format": "4.1.8",
+                               "@vitest/utils": "4.1.8",
+                               "magic-string": "^0.30.21",
+                               "pathe": "^2.0.3"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
                },
-               "node_modules/@types/d3-random": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
-                       "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
+               "node_modules/@vitest/spy": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz",
+                       "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
                },
-               "node_modules/@types/d3-scale": {
-                       "version": "4.0.9",
-                       "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
-                       "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+               "node_modules/@vitest/utils": {
+                       "version": "4.1.8",
+                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
+                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-time": "*"
+                               "@vitest/pretty-format": "4.1.8",
+                               "convert-source-map": "^2.0.0",
+                               "tinyrainbow": "^3.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
                        }
                },
-               "node_modules/@types/d3-scale-chromatic": {
+               "node_modules/@vitest/utils/node_modules/tinyrainbow": {
                        "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
-                       "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
+                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=14.0.0"
+                       }
                },
-               "node_modules/@types/d3-selection": {
-                       "version": "3.0.11",
-                       "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
-                       "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
+               "node_modules/@webcontainer/env": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/@webcontainer/env/-/env-1.1.1.tgz",
+                       "integrity": "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/@types/d3-shape": {
-                       "version": "3.1.8",
-                       "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
-                       "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+               "node_modules/accepts": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+                       "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-path": "*"
+                               "mime-types": "^3.0.0",
+                               "negotiator": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.6"
                        }
                },
-               "node_modules/@types/d3-time": {
-                       "version": "3.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
-                       "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+               "node_modules/acorn": {
+                       "version": "8.16.0",
+                       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+                       "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "bin": {
+                               "acorn": "bin/acorn"
+                       },
+                       "engines": {
+                               "node": ">=0.4.0"
+                       }
                },
-               "node_modules/@types/d3-time-format": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
-                       "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
+               "node_modules/acorn-jsx": {
+                       "version": "5.3.2",
+                       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+                       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "peerDependencies": {
+                               "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+                       }
                },
-               "node_modules/@types/d3-timer": {
-                       "version": "3.0.2",
-                       "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
-                       "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+               "node_modules/ajv": {
+                       "version": "8.20.0",
+                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+                       "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
                        "dev": true,
-                       "license": "MIT"
+                       "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/@types/d3-transition": {
-                       "version": "3.0.9",
-                       "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
-                       "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+               "node_modules/ajv-formats": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+                       "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/d3-selection": "*"
+                               "ajv": "^8.0.0"
+                       },
+                       "peerDependencies": {
+                               "ajv": "^8.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "ajv": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/@types/d3-zoom": {
-                       "version": "3.0.8",
-                       "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
-                       "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+               "node_modules/ansi-regex": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+                       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/d3-interpolate": "*",
-                               "@types/d3-selection": "*"
+                       "peer": true,
+                       "engines": {
+                               "node": ">=8"
                        }
                },
-               "node_modules/@types/debug": {
-                       "version": "4.1.12",
-                       "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
-                       "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+               "node_modules/ansi-styles": {
+                       "version": "4.3.0",
+                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/ms": "*"
+                               "color-convert": "^2.0.1"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       },
+                       "funding": {
+                               "url": "https://github.com/chalk/ansi-styles?sponsor=1"
                        }
                },
-               "node_modules/@types/deep-eql": {
-                       "version": "4.0.2",
-                       "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
-                       "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+               "node_modules/argparse": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+                       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "Python-2.0"
                },
-               "node_modules/@types/estree": {
-                       "version": "1.0.8",
-                       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
-                       "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+               "node_modules/aria-query": {
+                       "version": "5.3.0",
+                       "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+                       "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "dequal": "^2.0.3"
+                       }
                },
-               "node_modules/@types/geojson": {
-                       "version": "7946.0.16",
-                       "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
-                       "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+               "node_modules/array-buffer-byte-length": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+                       "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "is-array-buffer": "^3.0.5"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
                },
-               "node_modules/@types/hast": {
-                       "version": "3.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
-                       "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+               "node_modules/arraybuffer.prototype.slice": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+                       "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/unist": "*"
+                               "array-buffer-byte-length": "^1.0.1",
+                               "call-bind": "^1.0.8",
+                               "define-properties": "^1.2.1",
+                               "es-abstract": "^1.23.5",
+                               "es-errors": "^1.3.0",
+                               "get-intrinsic": "^1.2.6",
+                               "is-array-buffer": "^3.0.4"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/@types/json-schema": {
-                       "version": "7.0.15",
-                       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-                       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+               "node_modules/assertion-error": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+                       "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=12"
+                       }
                },
-               "node_modules/@types/katex": {
-                       "version": "0.16.7",
-                       "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz",
-                       "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==",
+               "node_modules/ast-types": {
+                       "version": "0.16.1",
+                       "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+                       "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "tslib": "^2.0.1"
+                       },
+                       "engines": {
+                               "node": ">=4"
+                       }
                },
-               "node_modules/@types/mdast": {
-                       "version": "4.0.4",
-                       "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-                       "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+               "node_modules/ast-v8-to-istanbul": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz",
+                       "integrity": "sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/unist": "*"
+                               "@jridgewell/trace-mapping": "^0.3.31",
+                               "estree-walker": "^3.0.3",
+                               "js-tokens": "^10.0.0"
                        }
                },
-               "node_modules/@types/mdx": {
-                       "version": "2.0.13",
-                       "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
-                       "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+               "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": {
+                       "version": "10.0.0",
+                       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
+                       "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/@types/ms": {
-                       "version": "2.1.0",
-                       "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
-                       "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+               "node_modules/async": {
+                       "version": "3.2.6",
+                       "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+                       "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/@types/node": {
-                       "version": "24.10.10",
-                       "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.10.tgz",
-                       "integrity": "sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "undici-types": "~7.16.0"
-                       }
-               },
-               "node_modules/@types/react": {
-                       "version": "19.2.16",
-                       "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.16.tgz",
-                       "integrity": "sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==",
+               "node_modules/async-function": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+                       "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
                        "dev": true,
                        "license": "MIT",
-                       "peer": true,
-                       "dependencies": {
-                               "csstype": "^3.2.2"
+                       "engines": {
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/@types/trusted-types": {
-                       "version": "2.0.7",
-                       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
-                       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/@types/unist": {
-                       "version": "2.0.11",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
-                       "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+               "node_modules/at-least-node": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+                       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">= 4.0.0"
+                       }
                },
-               "node_modules/@typescript-eslint/eslint-plugin": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz",
-                       "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==",
+               "node_modules/available-typed-arrays": {
+                       "version": "1.0.7",
+                       "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+                       "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@eslint-community/regexpp": "^4.12.2",
-                               "@typescript-eslint/scope-manager": "8.56.0",
-                               "@typescript-eslint/type-utils": "8.56.0",
-                               "@typescript-eslint/utils": "8.56.0",
-                               "@typescript-eslint/visitor-keys": "8.56.0",
-                               "ignore": "^7.0.5",
-                               "natural-compare": "^1.4.0",
-                               "ts-api-utils": "^2.4.0"
+                               "possible-typed-array-names": "^1.0.0"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
-                       },
-                       "peerDependencies": {
-                               "@typescript-eslint/parser": "^8.56.0",
-                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
-                       "version": "7.0.5",
-                       "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
-                       "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+               "node_modules/axe-core": {
+                       "version": "4.12.0",
+                       "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.0.tgz",
+                       "integrity": "sha512-FTavr/7Ba0IptwGOPxnQvdyW2tAsdLBMTBXz7rKH6xJ2skpyxpBxyHkDdBs4lf69yRqYpkqCdfhnwS8YULGOmg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "MPL-2.0",
                        "engines": {
-                               "node": ">= 4"
+                               "node": ">=4"
                        }
                },
-               "node_modules/@typescript-eslint/parser": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz",
-                       "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==",
+               "node_modules/axobject-query": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+                       "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@typescript-eslint/scope-manager": "8.56.0",
-                               "@typescript-eslint/types": "8.56.0",
-                               "@typescript-eslint/typescript-estree": "8.56.0",
-                               "@typescript-eslint/visitor-keys": "8.56.0",
-                               "debug": "^4.4.3"
-                       },
+                       "license": "Apache-2.0",
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
-                       },
-                       "peerDependencies": {
-                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/@typescript-eslint/project-service": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz",
-                       "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==",
+               "node_modules/babel-plugin-polyfill-corejs2": {
+                       "version": "0.4.17",
+                       "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+                       "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@typescript-eslint/tsconfig-utils": "^8.56.0",
-                               "@typescript-eslint/types": "^8.56.0",
-                               "debug": "^4.4.3"
-                       },
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                               "@babel/compat-data": "^7.28.6",
+                               "@babel/helper-define-polyfill-provider": "^0.6.8",
+                               "semver": "^6.3.1"
                        },
                        "peerDependencies": {
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
                        }
                },
-               "node_modules/@typescript-eslint/scope-manager": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz",
-                       "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==",
+               "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+                       "version": "6.3.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@typescript-eslint/types": "8.56.0",
-                               "@typescript-eslint/visitor-keys": "8.56.0"
-                       },
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                       "license": "ISC",
+                       "bin": {
+                               "semver": "bin/semver.js"
                        }
                },
-               "node_modules/@typescript-eslint/tsconfig-utils": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz",
-                       "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==",
+               "node_modules/babel-plugin-polyfill-corejs3": {
+                       "version": "0.14.2",
+                       "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+                       "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                       "dependencies": {
+                               "@babel/helper-define-polyfill-provider": "^0.6.8",
+                               "core-js-compat": "^3.48.0"
                        },
                        "peerDependencies": {
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
                        }
                },
-               "node_modules/@typescript-eslint/type-utils": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz",
-                       "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==",
+               "node_modules/babel-plugin-polyfill-regenerator": {
+                       "version": "0.6.8",
+                       "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+                       "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@typescript-eslint/types": "8.56.0",
-                               "@typescript-eslint/typescript-estree": "8.56.0",
-                               "@typescript-eslint/utils": "8.56.0",
-                               "debug": "^4.4.3",
-                               "ts-api-utils": "^2.4.0"
-                       },
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                               "@babel/helper-define-polyfill-provider": "^0.6.8"
                        },
                        "peerDependencies": {
-                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
                        }
                },
-               "node_modules/@typescript-eslint/types": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz",
-                       "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==",
+               "node_modules/bail": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+                       "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/@typescript-eslint/typescript-estree": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz",
-                       "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==",
+               "node_modules/balanced-match": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+                       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@typescript-eslint/project-service": "8.56.0",
-                               "@typescript-eslint/tsconfig-utils": "8.56.0",
-                               "@typescript-eslint/types": "8.56.0",
-                               "@typescript-eslint/visitor-keys": "8.56.0",
-                               "debug": "^4.4.3",
-                               "minimatch": "^9.0.5",
-                               "semver": "^7.7.3",
-                               "tinyglobby": "^0.2.15",
-                               "ts-api-utils": "^2.4.0"
+                       "license": "MIT"
+               },
+               "node_modules/baseline-browser-mapping": {
+                       "version": "2.10.33",
+                       "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz",
+                       "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "bin": {
+                               "baseline-browser-mapping": "dist/cli.cjs"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
-                       },
-                       "peerDependencies": {
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "node": ">=6.0.0"
                        }
                },
-               "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
-                       "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
+               "node_modules/basic-auth": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+                       "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "balanced-match": "^1.0.0"
-                       }
-               },
-               "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-                       "version": "9.0.9",
-                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
-                       "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
-                       "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "brace-expansion": "^2.0.2"
+                               "safe-buffer": "5.1.2"
                        },
                        "engines": {
-                               "node": ">=16 || 14 >=14.17"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/isaacs"
+                               "node": ">= 0.8"
                        }
                },
-               "node_modules/@typescript-eslint/utils": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz",
-                       "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==",
+               "node_modules/bits-ui": {
+                       "version": "2.18.1",
+                       "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.18.1.tgz",
+                       "integrity": "sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@eslint-community/eslint-utils": "^4.9.1",
-                               "@typescript-eslint/scope-manager": "8.56.0",
-                               "@typescript-eslint/types": "8.56.0",
-                               "@typescript-eslint/typescript-estree": "8.56.0"
+                               "@floating-ui/core": "^1.7.1",
+                               "@floating-ui/dom": "^1.7.1",
+                               "esm-env": "^1.1.2",
+                               "runed": "^0.35.1",
+                               "svelte-toolbelt": "^0.10.6",
+                               "tabbable": "^6.2.0"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=20"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
+                               "url": "https://github.com/sponsors/huntabyte"
                        },
                        "peerDependencies": {
-                               "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "@internationalized/date": "^3.8.1",
+                               "svelte": "^5.33.0"
                        }
                },
-               "node_modules/@typescript-eslint/visitor-keys": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz",
-                       "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==",
+               "node_modules/body-parser": {
+                       "version": "2.2.2",
+                       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
+                       "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@typescript-eslint/types": "8.56.0",
-                               "eslint-visitor-keys": "^5.0.0"
+                               "bytes": "^3.1.2",
+                               "content-type": "^1.0.5",
+                               "debug": "^4.4.3",
+                               "http-errors": "^2.0.0",
+                               "iconv-lite": "^0.7.0",
+                               "on-finished": "^2.4.1",
+                               "qs": "^6.14.1",
+                               "raw-body": "^3.0.1",
+                               "type-is": "^2.0.1"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=18"
                        },
                        "funding": {
                                "type": "opencollective",
-                               "url": "https://opencollective.com/typescript-eslint"
-                       }
-               },
-               "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz",
-                       "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==",
-                       "dev": true,
-                       "license": "Apache-2.0",
-                       "engines": {
-                               "node": "^20.19.0 || ^22.13.0 || >=24"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/eslint"
-                       }
-               },
-               "node_modules/@ungap/structured-clone": {
-                       "version": "1.3.0",
-                       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
-                       "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
-                       "dev": true,
-                       "license": "ISC"
-               },
-               "node_modules/@upsetjs/venn.js": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz",
-                       "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
-                       "dev": true,
-                       "license": "MIT",
-                       "optionalDependencies": {
-                               "d3-selection": "^3.0.0",
-                               "d3-transition": "^3.0.1"
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/@vitest/browser": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.8.tgz",
-                       "integrity": "sha512-u21VzX07HzlJYpFgkxmjEXar/tG2UqWGgyGG/46SrrPc7rSdCTPw5vuowopO9CIqF8UCUQzDFdbVnNpw6N0BfQ==",
+               "node_modules/brace-expansion": {
+                       "version": "1.1.15",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz",
+                       "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@blazediff/core": "1.9.1",
-                               "@vitest/mocker": "4.1.8",
-                               "@vitest/utils": "4.1.8",
-                               "magic-string": "^0.30.21",
-                               "pngjs": "^7.0.0",
-                               "sirv": "^3.0.2",
-                               "tinyrainbow": "^3.1.0",
-                               "ws": "^8.19.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
-                       },
-                       "peerDependencies": {
-                               "vitest": "4.1.8"
+                               "balanced-match": "^1.0.0",
+                               "concat-map": "0.0.1"
                        }
                },
-               "node_modules/@vitest/browser-playwright": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.8.tgz",
-                       "integrity": "sha512-SR7FqgegaexEg73xvf3ArtygXegagMdXnL0EZMpxrWvvhQxvicD/E8p0ib0J91riPRtQUViyh67Xjw3NqvyhVg==",
+               "node_modules/browserslist": {
+                       "version": "4.28.2",
+                       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
+                       "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
                        "dev": true,
+                       "funding": [
+                               {
+                                       "type": "opencollective",
+                                       "url": "https://opencollective.com/browserslist"
+                               },
+                               {
+                                       "type": "tidelift",
+                                       "url": "https://tidelift.com/funding/github/npm/browserslist"
+                               },
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/ai"
+                               }
+                       ],
                        "license": "MIT",
                        "dependencies": {
-                               "@vitest/browser": "4.1.8",
-                               "@vitest/mocker": "4.1.8",
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "baseline-browser-mapping": "^2.10.12",
+                               "caniuse-lite": "^1.0.30001782",
+                               "electron-to-chromium": "^1.5.328",
+                               "node-releases": "^2.0.36",
+                               "update-browserslist-db": "^1.2.3"
                        },
-                       "peerDependencies": {
-                               "playwright": "*",
-                               "vitest": "4.1.8"
+                       "bin": {
+                               "browserslist": "cli.js"
                        },
-                       "peerDependenciesMeta": {
-                               "playwright": {
-                                       "optional": false
-                               }
+                       "engines": {
+                               "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
                        }
                },
-               "node_modules/@vitest/browser-playwright/node_modules/tinyrainbow": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
-                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+               "node_modules/buffer-from": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+                       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "engines": {
-                               "node": ">=14.0.0"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
-                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
+               "node_modules/bundle-name": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+                       "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "tinyrainbow": "^3.1.0"
+                               "run-applescript": "^7.0.0"
+                       },
+                       "engines": {
+                               "node": ">=18"
                        },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/@vitest/browser/node_modules/@vitest/utils": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
-                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
+               "node_modules/bytes": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+                       "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "convert-source-map": "^2.0.0",
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                       "engines": {
+                               "node": ">= 0.8"
                        }
                },
-               "node_modules/@vitest/browser/node_modules/tinyrainbow": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
-                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+               "node_modules/cac": {
+                       "version": "6.7.14",
+                       "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+                       "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=14.0.0"
+                               "node": ">=8"
                        }
                },
-               "node_modules/@vitest/coverage-v8": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.8.tgz",
-                       "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==",
+               "node_modules/call-bind": {
+                       "version": "1.0.9",
+                       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
+                       "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@bcoe/v8-coverage": "^1.0.2",
-                               "@vitest/utils": "4.1.8",
-                               "ast-v8-to-istanbul": "^1.0.0",
-                               "istanbul-lib-coverage": "^3.2.2",
-                               "istanbul-lib-report": "^3.0.1",
-                               "istanbul-reports": "^3.2.0",
-                               "magicast": "^0.5.2",
-                               "obug": "^2.1.1",
-                               "std-env": "^4.0.0-rc.1",
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "call-bind-apply-helpers": "^1.0.2",
+                               "es-define-property": "^1.0.1",
+                               "get-intrinsic": "^1.3.0",
+                               "set-function-length": "^1.2.2"
                        },
-                       "peerDependencies": {
-                               "@vitest/browser": "4.1.8",
-                               "vitest": "4.1.8"
+                       "engines": {
+                               "node": ">= 0.4"
                        },
-                       "peerDependenciesMeta": {
-                               "@vitest/browser": {
-                                       "optional": true
-                               }
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/@vitest/coverage-v8/node_modules/@vitest/pretty-format": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
-                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
+               "node_modules/call-bind-apply-helpers": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+                       "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "tinyrainbow": "^3.1.0"
+                               "es-errors": "^1.3.0",
+                               "function-bind": "^1.1.2"
                        },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                       "engines": {
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/@vitest/coverage-v8/node_modules/@vitest/utils": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
-                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
+               "node_modules/call-bound": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+                       "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "convert-source-map": "^2.0.0",
-                               "tinyrainbow": "^3.1.0"
+                               "call-bind-apply-helpers": "^1.0.2",
+                               "get-intrinsic": "^1.3.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/@vitest/coverage-v8/node_modules/tinyrainbow": {
+               "node_modules/callsites": {
                        "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
-                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+                       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+                       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=14.0.0"
+                               "node": ">=6"
                        }
                },
-               "node_modules/@vitest/expect": {
-                       "version": "3.2.4",
-                       "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
-                       "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+               "node_modules/caniuse-lite": {
+                       "version": "1.0.30001793",
+                       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
+                       "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
+                       "dev": true,
+                       "funding": [
+                               {
+                                       "type": "opencollective",
+                                       "url": "https://opencollective.com/browserslist"
+                               },
+                               {
+                                       "type": "tidelift",
+                                       "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+                               },
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/ai"
+                               }
+                       ],
+                       "license": "CC-BY-4.0"
+               },
+               "node_modules/ccount": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+                       "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/chai": "^5.2.2",
-                               "@vitest/spy": "3.2.4",
-                               "@vitest/utils": "3.2.4",
-                               "chai": "^5.2.0",
-                               "tinyrainbow": "^2.0.0"
-                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/@vitest/mocker": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz",
-                       "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==",
+               "node_modules/chai": {
+                       "version": "5.3.3",
+                       "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+                       "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@vitest/spy": "4.1.8",
-                               "estree-walker": "^3.0.3",
-                               "magic-string": "^0.30.21"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
-                       },
-                       "peerDependencies": {
-                               "msw": "^2.4.9",
-                               "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+                               "assertion-error": "^2.0.1",
+                               "check-error": "^2.1.1",
+                               "deep-eql": "^5.0.1",
+                               "loupe": "^3.1.0",
+                               "pathval": "^2.0.0"
                        },
-                       "peerDependenciesMeta": {
-                               "msw": {
-                                       "optional": true
-                               },
-                               "vite": {
-                                       "optional": true
-                               }
+                       "engines": {
+                               "node": ">=18"
                        }
                },
-               "node_modules/@vitest/mocker/node_modules/@vitest/spy": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz",
-                       "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==",
+               "node_modules/chalk": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "ansi-styles": "^4.1.0",
+                               "supports-color": "^7.1.0"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "url": "https://github.com/chalk/chalk?sponsor=1"
                        }
                },
-               "node_modules/@vitest/pretty-format": {
-                       "version": "3.2.4",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
-                       "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+               "node_modules/character-entities": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+                       "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "tinyrainbow": "^2.0.0"
-                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/@vitest/runner": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz",
-                       "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==",
+               "node_modules/character-entities-html4": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+                       "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@vitest/utils": "4.1.8",
-                               "pathe": "^2.0.3"
-                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
-                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
+               "node_modules/character-entities-legacy": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+                       "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "tinyrainbow": "^3.1.0"
-                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/@vitest/runner/node_modules/@vitest/utils": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
-                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
+               "node_modules/check-error": {
+                       "version": "2.1.3",
+                       "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
+                       "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "convert-source-map": "^2.0.0",
-                               "tinyrainbow": "^3.1.0"
+                       "engines": {
+                               "node": ">= 16"
+                       }
+               },
+               "node_modules/chokidar": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
+                       "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "readdirp": "^5.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 20.19.0"
                        },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "url": "https://paulmillr.com/funding/"
                        }
                },
-               "node_modules/@vitest/runner/node_modules/tinyrainbow": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
-                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+               "node_modules/chownr": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+                       "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "BlueOak-1.0.0",
                        "engines": {
-                               "node": ">=14.0.0"
+                               "node": ">=18"
                        }
                },
-               "node_modules/@vitest/snapshot": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz",
-                       "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==",
+               "node_modules/chromatic": {
+                       "version": "13.3.5",
+                       "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-13.3.5.tgz",
+                       "integrity": "sha512-MzPhxpl838qJUo0A55osCF2ifwPbjcIPeElr1d4SHcjnHoIcg7l1syJDrAYK/a+PcCBrOGi06jPNpQAln5hWgw==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "@vitest/utils": "4.1.8",
-                               "magic-string": "^0.30.21",
-                               "pathe": "^2.0.3"
+                       "bin": {
+                               "chroma": "dist/bin.js",
+                               "chromatic": "dist/bin.js",
+                               "chromatic-cli": "dist/bin.js"
                        },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                       "peerDependencies": {
+                               "@chromatic-com/cypress": "^0.*.* || ^1.0.0",
+                               "@chromatic-com/playwright": "^0.*.* || ^1.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@chromatic-com/cypress": {
+                                       "optional": true
+                               },
+                               "@chromatic-com/playwright": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
-                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
+               "node_modules/clsx": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+                       "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                       "engines": {
+                               "node": ">=6"
                        }
                },
-               "node_modules/@vitest/snapshot/node_modules/@vitest/utils": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
-                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
+               "node_modules/color": {
+                       "version": "4.2.3",
+                       "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+                       "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "convert-source-map": "^2.0.0",
-                               "tinyrainbow": "^3.1.0"
+                               "color-convert": "^2.0.1",
+                               "color-string": "^1.9.0"
                        },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                       "engines": {
+                               "node": ">=12.5.0"
                        }
                },
-               "node_modules/@vitest/snapshot/node_modules/tinyrainbow": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
-                       "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+               "node_modules/color-convert": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+                       "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "color-name": "~1.1.4"
+                       },
                        "engines": {
-                               "node": ">=14.0.0"
+                               "node": ">=7.0.0"
                        }
                },
-               "node_modules/@vitest/spy": {
-                       "version": "3.2.4",
-                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
-                       "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+               "node_modules/color-name": {
+                       "version": "1.1.4",
+                       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+                       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/color-string": {
+                       "version": "1.9.1",
+                       "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+                       "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "tinyspy": "^4.0.3"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "color-name": "^1.0.0",
+                               "simple-swizzle": "^0.2.2"
                        }
                },
-               "node_modules/@vitest/utils": {
-                       "version": "3.2.4",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
-                       "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+               "node_modules/colorette": {
+                       "version": "2.0.20",
+                       "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+                       "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/comma-separated-tokens": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+                       "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@vitest/pretty-format": "3.2.4",
-                               "loupe": "^3.1.4",
-                               "tinyrainbow": "^2.0.0"
-                       },
                        "funding": {
-                               "url": "https://opencollective.com/vitest"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/accepts": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
-                       "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+               "node_modules/commander": {
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+                       "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "mime-types": "^3.0.0",
-                               "negotiator": "^1.0.0"
-                       },
                        "engines": {
-                               "node": ">= 0.6"
+                               "node": ">= 10"
                        }
                },
-               "node_modules/acorn": {
-                       "version": "8.15.0",
-                       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
-                       "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+               "node_modules/common-tags": {
+                       "version": "1.8.2",
+                       "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+                       "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
                        "dev": true,
                        "license": "MIT",
-                       "bin": {
-                               "acorn": "bin/acorn"
-                       },
                        "engines": {
-                               "node": ">=0.4.0"
+                               "node": ">=4.0.0"
                        }
                },
-               "node_modules/acorn-jsx": {
-                       "version": "5.3.2",
-                       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-                       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+               "node_modules/concat-map": {
+                       "version": "0.0.1",
+                       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+                       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/consola": {
+                       "version": "3.4.2",
+                       "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+                       "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
                        "dev": true,
                        "license": "MIT",
-                       "peerDependencies": {
-                               "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+                       "engines": {
+                               "node": "^14.18.0 || >=16.10.0"
                        }
                },
-               "node_modules/ajv": {
-                       "version": "6.14.0",
-                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
-                       "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
+               "node_modules/content-disposition": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
+                       "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "fast-deep-equal": "^3.1.1",
-                               "fast-json-stable-stringify": "^2.0.0",
-                               "json-schema-traverse": "^0.4.1",
-                               "uri-js": "^4.2.2"
+                       "engines": {
+                               "node": ">=18"
                        },
                        "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/epoberezkin"
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/ajv-formats": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
-                       "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+               "node_modules/content-type": {
+                       "version": "1.0.5",
+                       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+                       "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "ajv": "^8.0.0"
-                       },
-                       "peerDependencies": {
-                               "ajv": "^8.0.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "ajv": {
-                                       "optional": true
-                               }
+                       "engines": {
+                               "node": ">= 0.6"
                        }
                },
-               "node_modules/ajv-formats/node_modules/ajv": {
-                       "version": "8.18.0",
-                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
-                       "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+               "node_modules/convert-source-map": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+                       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/cookie": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
+                       "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
                        "dev": true,
                        "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"
+                       "engines": {
+                               "node": ">=18"
                        },
                        "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/epoberezkin"
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/ajv-formats/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==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/ansi-regex": {
-                       "version": "5.0.1",
-                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-                       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+               "node_modules/cookie-signature": {
+                       "version": "1.2.2",
+                       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+                       "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
                        "dev": true,
                        "license": "MIT",
-                       "peer": true,
                        "engines": {
-                               "node": ">=8"
+                               "node": ">=6.6.0"
                        }
                },
-               "node_modules/ansi-styles": {
-                       "version": "4.3.0",
-                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+               "node_modules/core-js-compat": {
+                       "version": "3.49.0",
+                       "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz",
+                       "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "color-convert": "^2.0.1"
-                       },
-                       "engines": {
-                               "node": ">=8"
+                               "browserslist": "^4.28.1"
                        },
                        "funding": {
-                               "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/core-js"
                        }
                },
-               "node_modules/argparse": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-                       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-                       "dev": true,
-                       "license": "Python-2.0"
-               },
-               "node_modules/aria-query": {
-                       "version": "5.3.0",
-                       "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
-                       "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+               "node_modules/cors": {
+                       "version": "2.8.6",
+                       "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
+                       "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
                        "dev": true,
-                       "license": "Apache-2.0",
+                       "license": "MIT",
                        "dependencies": {
-                               "dequal": "^2.0.3"
+                               "object-assign": "^4",
+                               "vary": "^1"
+                       },
+                       "engines": {
+                               "node": ">= 0.10"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/assertion-error": {
+               "node_modules/corser": {
                        "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
-                       "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+                       "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+                       "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4.0"
                        }
                },
-               "node_modules/ast-types": {
-                       "version": "0.16.1",
-                       "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
-                       "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+               "node_modules/cose-base": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
+                       "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "tslib": "^2.0.1"
+                               "layout-base": "^1.0.0"
+                       }
+               },
+               "node_modules/cross-spawn": {
+                       "version": "7.0.6",
+                       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+                       "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "path-key": "^3.1.0",
+                               "shebang-command": "^2.0.0",
+                               "which": "^2.0.1"
                        },
                        "engines": {
-                               "node": ">=4"
+                               "node": ">= 8"
                        }
                },
-               "node_modules/ast-v8-to-istanbul": {
-                       "version": "1.0.3",
-                       "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz",
-                       "integrity": "sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==",
+               "node_modules/crypto-random-string": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+                       "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@jridgewell/trace-mapping": "^0.3.31",
-                               "estree-walker": "^3.0.3",
-                               "js-tokens": "^10.0.0"
+                       "engines": {
+                               "node": ">=8"
                        }
                },
-               "node_modules/async": {
-                       "version": "3.2.6",
-                       "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
-                       "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+               "node_modules/css.escape": {
+                       "version": "1.5.1",
+                       "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+                       "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/axe-core": {
-                       "version": "4.10.3",
-                       "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
-                       "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
+               "node_modules/cssesc": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+                       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
                        "dev": true,
-                       "license": "MPL-2.0",
+                       "license": "MIT",
+                       "bin": {
+                               "cssesc": "bin/cssesc"
+                       },
                        "engines": {
                                "node": ">=4"
                        }
                },
-               "node_modules/axobject-query": {
-                       "version": "4.1.0",
-                       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
-                       "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+               "node_modules/csstype": {
+                       "version": "3.2.3",
+                       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+                       "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
-                       "engines": {
-                               "node": ">= 0.4"
-                       }
+                       "license": "MIT",
+                       "peer": true
                },
-               "node_modules/bail": {
-                       "version": "2.0.2",
-                       "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
-                       "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+               "node_modules/cytoscape": {
+                       "version": "3.34.0",
+                       "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz",
+                       "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==",
                        "dev": true,
                        "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "engines": {
+                               "node": ">=0.10"
                        }
                },
-               "node_modules/balanced-match": {
-                       "version": "1.0.2",
-                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-                       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/basic-auth": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
-                       "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+               "node_modules/cytoscape-cose-bilkent": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
+                       "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "safe-buffer": "5.1.2"
+                               "cose-base": "^1.0.0"
                        },
-                       "engines": {
-                               "node": ">= 0.8"
+                       "peerDependencies": {
+                               "cytoscape": "^3.2.0"
                        }
                },
-               "node_modules/bits-ui": {
-                       "version": "2.18.1",
-                       "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.18.1.tgz",
-                       "integrity": "sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==",
+               "node_modules/cytoscape-fcose": {
+                       "version": "2.2.0",
+                       "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
+                       "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@floating-ui/core": "^1.7.1",
-                               "@floating-ui/dom": "^1.7.1",
-                               "esm-env": "^1.1.2",
-                               "runed": "^0.35.1",
-                               "svelte-toolbelt": "^0.10.6",
-                               "tabbable": "^6.2.0"
-                       },
-                       "engines": {
-                               "node": ">=20"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/huntabyte"
+                               "cose-base": "^2.2.0"
                        },
                        "peerDependencies": {
-                               "@internationalized/date": "^3.8.1",
-                               "svelte": "^5.33.0"
+                               "cytoscape": "^3.2.0"
                        }
                },
-               "node_modules/bits-ui/node_modules/runed": {
-                       "version": "0.35.1",
-                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.35.1.tgz",
-                       "integrity": "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==",
+               "node_modules/cytoscape-fcose/node_modules/cose-base": {
+                       "version": "2.2.0",
+                       "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
+                       "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
                        "dev": true,
-                       "funding": [
-                               "https://github.com/sponsors/huntabyte",
-                               "https://github.com/sponsors/tglide"
-                       ],
                        "license": "MIT",
                        "dependencies": {
-                               "dequal": "^2.0.3",
-                               "esm-env": "^1.0.0",
-                               "lz-string": "^1.5.0"
-                       },
-                       "peerDependencies": {
-                               "@sveltejs/kit": "^2.21.0",
-                               "svelte": "^5.7.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "@sveltejs/kit": {
-                                       "optional": true
-                               }
+                               "layout-base": "^2.0.0"
                        }
                },
-               "node_modules/bits-ui/node_modules/svelte-toolbelt": {
-                       "version": "0.10.6",
-                       "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz",
-                       "integrity": "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==",
+               "node_modules/cytoscape-fcose/node_modules/layout-base": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
+                       "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
                        "dev": true,
-                       "funding": [
-                               "https://github.com/sponsors/huntabyte"
-                       ],
+                       "license": "MIT"
+               },
+               "node_modules/d3": {
+                       "version": "7.9.0",
+                       "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+                       "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+                       "dev": true,
+                       "license": "ISC",
                        "dependencies": {
-                               "clsx": "^2.1.1",
-                               "runed": "^0.35.1",
-                               "style-to-object": "^1.0.8"
+                               "d3-array": "3",
+                               "d3-axis": "3",
+                               "d3-brush": "3",
+                               "d3-chord": "3",
+                               "d3-color": "3",
+                               "d3-contour": "4",
+                               "d3-delaunay": "6",
+                               "d3-dispatch": "3",
+                               "d3-drag": "3",
+                               "d3-dsv": "3",
+                               "d3-ease": "3",
+                               "d3-fetch": "3",
+                               "d3-force": "3",
+                               "d3-format": "3",
+                               "d3-geo": "3",
+                               "d3-hierarchy": "3",
+                               "d3-interpolate": "3",
+                               "d3-path": "3",
+                               "d3-polygon": "3",
+                               "d3-quadtree": "3",
+                               "d3-random": "3",
+                               "d3-scale": "4",
+                               "d3-scale-chromatic": "3",
+                               "d3-selection": "3",
+                               "d3-shape": "3",
+                               "d3-time": "3",
+                               "d3-time-format": "4",
+                               "d3-timer": "3",
+                               "d3-transition": "3",
+                               "d3-zoom": "3"
                        },
                        "engines": {
-                               "node": ">=18",
-                               "pnpm": ">=8.7.0"
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-array": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+                       "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+                       "dev": true,
+                       "license": "ISC",
+                       "dependencies": {
+                               "internmap": "1 - 2"
                        },
-                       "peerDependencies": {
-                               "svelte": "^5.30.2"
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/body-parser": {
-                       "version": "2.2.2",
-                       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
-                       "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
+               "node_modules/d3-axis": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+                       "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-brush": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+                       "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+                       "dev": true,
+                       "license": "ISC",
                        "dependencies": {
-                               "bytes": "^3.1.2",
-                               "content-type": "^1.0.5",
-                               "debug": "^4.4.3",
-                               "http-errors": "^2.0.0",
-                               "iconv-lite": "^0.7.0",
-                               "on-finished": "^2.4.1",
-                               "qs": "^6.14.1",
-                               "raw-body": "^3.0.1",
-                               "type-is": "^2.0.1"
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "3",
+                               "d3-transition": "3"
                        },
                        "engines": {
-                               "node": ">=18"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                               "node": ">=12"
                        }
                },
-               "node_modules/body-parser/node_modules/iconv-lite": {
-                       "version": "0.7.2",
-                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
-                       "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
+               "node_modules/d3-chord": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+                       "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "safer-buffer": ">= 2.1.2 < 3.0.0"
+                               "d3-path": "1 - 3"
                        },
                        "engines": {
-                               "node": ">=0.10.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                               "node": ">=12"
                        }
                },
-               "node_modules/brace-expansion": {
-                       "version": "1.1.13",
-                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
-                       "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
+               "node_modules/d3-color": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+                       "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "balanced-match": "^1.0.0",
-                               "concat-map": "0.0.1"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/braces": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-                       "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+               "node_modules/d3-contour": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+                       "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
+                       "license": "ISC",
                        "dependencies": {
-                               "fill-range": "^7.1.1"
+                               "d3-array": "^3.2.0"
                        },
                        "engines": {
-                               "node": ">=8"
+                               "node": ">=12"
                        }
                },
-               "node_modules/bundle-name": {
-                       "version": "4.1.0",
-                       "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
-                       "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+               "node_modules/d3-delaunay": {
+                       "version": "6.0.4",
+                       "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+                       "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "run-applescript": "^7.0.0"
+                               "delaunator": "5"
                        },
                        "engines": {
-                               "node": ">=18"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "node": ">=12"
                        }
                },
-               "node_modules/bytes": {
-                       "version": "3.1.2",
-                       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-                       "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+               "node_modules/d3-dispatch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+                       "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "engines": {
-                               "node": ">= 0.8"
+                               "node": ">=12"
                        }
                },
-               "node_modules/call-bind-apply-helpers": {
-                       "version": "1.0.2",
-                       "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-                       "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+               "node_modules/d3-drag": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+                       "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "es-errors": "^1.3.0",
-                               "function-bind": "^1.1.2"
+                               "d3-dispatch": "1 - 3",
+                               "d3-selection": "3"
                        },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=12"
                        }
                },
-               "node_modules/call-bound": {
-                       "version": "1.0.4",
-                       "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-                       "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+               "node_modules/d3-dsv": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+                       "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "call-bind-apply-helpers": "^1.0.2",
-                               "get-intrinsic": "^1.3.0"
+                               "commander": "7",
+                               "iconv-lite": "0.6",
+                               "rw": "1"
                        },
-                       "engines": {
-                               "node": ">= 0.4"
+                       "bin": {
+                               "csv2json": "bin/dsv2json.js",
+                               "csv2tsv": "bin/dsv2dsv.js",
+                               "dsv2dsv": "bin/dsv2dsv.js",
+                               "dsv2json": "bin/dsv2json.js",
+                               "json2csv": "bin/json2dsv.js",
+                               "json2dsv": "bin/json2dsv.js",
+                               "json2tsv": "bin/json2dsv.js",
+                               "tsv2csv": "bin/dsv2dsv.js",
+                               "tsv2json": "bin/dsv2json.js"
                        },
-                       "funding": {
-                               "url": "https://github.com/sponsors/ljharb"
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/callsites": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-                       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+               "node_modules/d3-dsv/node_modules/iconv-lite": {
+                       "version": "0.6.3",
+                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+                       "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "safer-buffer": ">= 2.1.2 < 3.0.0"
+                       },
                        "engines": {
-                               "node": ">=6"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/ccount": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
-                       "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+               "node_modules/d3-ease": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+                       "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "license": "BSD-3-Clause",
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/chai": {
-                       "version": "5.2.1",
-                       "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz",
-                       "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==",
+               "node_modules/d3-fetch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+                       "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "assertion-error": "^2.0.1",
-                               "check-error": "^2.1.1",
-                               "deep-eql": "^5.0.1",
-                               "loupe": "^3.1.0",
-                               "pathval": "^2.0.0"
+                               "d3-dsv": "1 - 3"
                        },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=12"
                        }
                },
-               "node_modules/chalk": {
-                       "version": "4.1.2",
-                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+               "node_modules/d3-force": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+                       "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "ansi-styles": "^4.1.0",
-                               "supports-color": "^7.1.0"
+                               "d3-dispatch": "1 - 3",
+                               "d3-quadtree": "1 - 3",
+                               "d3-timer": "1 - 3"
                        },
                        "engines": {
-                               "node": ">=10"
-                       },
-                       "funding": {
-                               "url": "https://github.com/chalk/chalk?sponsor=1"
+                               "node": ">=12"
                        }
                },
-               "node_modules/character-entities": {
-                       "version": "2.0.2",
-                       "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
-                       "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+               "node_modules/d3-format": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+                       "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/character-entities-html4": {
-                       "version": "2.1.0",
-                       "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
-                       "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+               "node_modules/d3-geo": {
+                       "version": "3.1.1",
+                       "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+                       "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-array": "2.5.0 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/character-entities-legacy": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
-                       "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+               "node_modules/d3-hierarchy": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+                       "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-interpolate": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+                       "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+                       "dev": true,
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-color": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-path": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+                       "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+                       "dev": true,
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/check-error": {
-                       "version": "2.1.1",
-                       "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
-                       "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+               "node_modules/d3-polygon": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+                       "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "engines": {
-                               "node": ">= 16"
+                               "node": ">=12"
                        }
                },
-               "node_modules/chokidar": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-                       "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+               "node_modules/d3-quadtree": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+                       "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "readdirp": "^4.0.1"
-                       },
+                       "license": "ISC",
                        "engines": {
-                               "node": ">= 14.16.0"
-                       },
-                       "funding": {
-                               "url": "https://paulmillr.com/funding/"
+                               "node": ">=12"
                        }
                },
-               "node_modules/chownr": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
-                       "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+               "node_modules/d3-random": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+                       "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
                        "dev": true,
-                       "license": "BlueOak-1.0.0",
+                       "license": "ISC",
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=12"
                        }
                },
-               "node_modules/chromatic": {
-                       "version": "13.3.5",
-                       "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-13.3.5.tgz",
-                       "integrity": "sha512-MzPhxpl838qJUo0A55osCF2ifwPbjcIPeElr1d4SHcjnHoIcg7l1syJDrAYK/a+PcCBrOGi06jPNpQAln5hWgw==",
+               "node_modules/d3-sankey": {
+                       "version": "0.12.3",
+                       "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
+                       "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "bin": {
-                               "chroma": "dist/bin.js",
-                               "chromatic": "dist/bin.js",
-                               "chromatic-cli": "dist/bin.js"
-                       },
-                       "peerDependencies": {
-                               "@chromatic-com/cypress": "^0.*.* || ^1.0.0",
-                               "@chromatic-com/playwright": "^0.*.* || ^1.0.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "@chromatic-com/cypress": {
-                                       "optional": true
-                               },
-                               "@chromatic-com/playwright": {
-                                       "optional": true
-                               }
+                       "license": "BSD-3-Clause",
+                       "dependencies": {
+                               "d3-array": "1 - 2",
+                               "d3-shape": "^1.2.0"
                        }
                },
-               "node_modules/clsx": {
-                       "version": "2.1.1",
-                       "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
-                       "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+               "node_modules/d3-sankey/node_modules/d3-array": {
+                       "version": "2.12.1",
+                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+                       "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "engines": {
-                               "node": ">=6"
+                       "license": "BSD-3-Clause",
+                       "dependencies": {
+                               "internmap": "^1.0.0"
                        }
                },
-               "node_modules/color-convert": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-                       "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+               "node_modules/d3-sankey/node_modules/d3-path": {
+                       "version": "1.0.9",
+                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+                       "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "BSD-3-Clause"
+               },
+               "node_modules/d3-sankey/node_modules/d3-shape": {
+                       "version": "1.3.7",
+                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+                       "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+                       "dev": true,
+                       "license": "BSD-3-Clause",
                        "dependencies": {
-                               "color-name": "~1.1.4"
-                       },
-                       "engines": {
-                               "node": ">=7.0.0"
+                               "d3-path": "1"
                        }
                },
-               "node_modules/color-name": {
-                       "version": "1.1.4",
-                       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-                       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+               "node_modules/d3-sankey/node_modules/internmap": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+                       "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC"
                },
-               "node_modules/comma-separated-tokens": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
-                       "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+               "node_modules/d3-scale": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+                       "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-array": "2.10.0 - 3",
+                               "d3-format": "1 - 3",
+                               "d3-interpolate": "1.2.0 - 3",
+                               "d3-time": "2.1.1 - 3",
+                               "d3-time-format": "2 - 4"
+                       },
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/commander": {
-                       "version": "8.3.0",
-                       "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-                       "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+               "node_modules/d3-scale-chromatic": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+                       "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-color": "1 - 3",
+                               "d3-interpolate": "1 - 3"
+                       },
                        "engines": {
-                               "node": ">= 12"
+                               "node": ">=12"
                        }
                },
-               "node_modules/concat-map": {
-                       "version": "0.0.1",
-                       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-                       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+               "node_modules/d3-selection": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+                       "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
+                       }
                },
-               "node_modules/content-disposition": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
-                       "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
+               "node_modules/d3-shape": {
+                       "version": "3.2.0",
+                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+                       "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-path": "^3.1.0"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-time": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+                       "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+                       "dev": true,
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-array": "2 - 3"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/content-type": {
-                       "version": "1.0.5",
-                       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
-                       "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+               "node_modules/d3-time-format": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+                       "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-time": "1 - 3"
+                       },
                        "engines": {
-                               "node": ">= 0.6"
+                               "node": ">=12"
                        }
                },
-               "node_modules/convert-source-map": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-                       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+               "node_modules/d3-timer": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+                       "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
+                       }
                },
-               "node_modules/cookie": {
-                       "version": "1.1.1",
-                       "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
-                       "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+               "node_modules/d3-transition": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+                       "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-color": "1 - 3",
+                               "d3-dispatch": "1 - 3",
+                               "d3-ease": "1 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-timer": "1 - 3"
+                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=12"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                       "peerDependencies": {
+                               "d3-selection": "2 - 3"
                        }
                },
-               "node_modules/cookie-signature": {
-                       "version": "1.2.2",
-                       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
-                       "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+               "node_modules/d3-zoom": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+                       "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
+                       "dependencies": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "2 - 3",
+                               "d3-transition": "2 - 3"
+                       },
                        "engines": {
-                               "node": ">=6.6.0"
+                               "node": ">=12"
                        }
                },
-               "node_modules/cors": {
-                       "version": "2.8.5",
-                       "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-                       "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+               "node_modules/dagre-d3-es": {
+                       "version": "7.0.14",
+                       "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz",
+                       "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "object-assign": "^4",
-                               "vary": "^1"
-                       },
-                       "engines": {
-                               "node": ">= 0.10"
+                               "d3": "^7.9.0",
+                               "lodash-es": "^4.17.21"
                        }
                },
-               "node_modules/corser": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
-                       "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+               "node_modules/data-view-buffer": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+                       "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "es-errors": "^1.3.0",
+                               "is-data-view": "^1.0.2"
+                       },
                        "engines": {
-                               "node": ">= 0.4.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/cose-base": {
-                       "version": "1.0.3",
-                       "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
-                       "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
+               "node_modules/data-view-byte-length": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+                       "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "layout-base": "^1.0.0"
+                               "call-bound": "^1.0.3",
+                               "es-errors": "^1.3.0",
+                               "is-data-view": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/inspect-js"
                        }
                },
-               "node_modules/cross-spawn": {
-                       "version": "7.0.6",
-                       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-                       "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+               "node_modules/data-view-byte-offset": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+                       "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "path-key": "^3.1.0",
-                               "shebang-command": "^2.0.0",
-                               "which": "^2.0.1"
+                               "call-bound": "^1.0.2",
+                               "es-errors": "^1.3.0",
+                               "is-data-view": "^1.0.1"
                        },
                        "engines": {
-                               "node": ">= 8"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/css.escape": {
-                       "version": "1.5.1",
-                       "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
-                       "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+               "node_modules/dayjs": {
+                       "version": "1.11.21",
+                       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
+                       "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/cssesc": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+               "node_modules/debug": {
+                       "version": "4.4.3",
+                       "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+                       "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
                        "dev": true,
                        "license": "MIT",
-                       "bin": {
-                               "cssesc": "bin/cssesc"
+                       "dependencies": {
+                               "ms": "^2.1.3"
                        },
                        "engines": {
-                               "node": ">=4"
+                               "node": ">=6.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "supports-color": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/csstype": {
-                       "version": "3.2.3",
-                       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
-                       "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+               "node_modules/decode-bmp": {
+                       "version": "0.2.1",
+                       "resolved": "https://registry.npmjs.org/decode-bmp/-/decode-bmp-0.2.1.tgz",
+                       "integrity": "sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==",
                        "dev": true,
                        "license": "MIT",
-                       "peer": true
+                       "dependencies": {
+                               "@canvas/image-data": "^1.0.0",
+                               "to-data-view": "^1.1.0"
+                       },
+                       "engines": {
+                               "node": ">=8.6.0"
+                       }
                },
-               "node_modules/cytoscape": {
-                       "version": "3.34.0",
-                       "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz",
-                       "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==",
+               "node_modules/decode-ico": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/decode-ico/-/decode-ico-0.4.1.tgz",
+                       "integrity": "sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "@canvas/image-data": "^1.0.0",
+                               "decode-bmp": "^0.2.0",
+                               "to-data-view": "^1.1.0"
+                       },
                        "engines": {
-                               "node": ">=0.10"
+                               "node": ">=8.6"
                        }
                },
-               "node_modules/cytoscape-cose-bilkent": {
-                       "version": "4.1.0",
-                       "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
-                       "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
+               "node_modules/decode-named-character-reference": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+                       "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "cose-base": "^1.0.0"
+                               "character-entities": "^2.0.0"
                        },
-                       "peerDependencies": {
-                               "cytoscape": "^3.2.0"
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/cytoscape-fcose": {
-                       "version": "2.2.0",
-                       "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
-                       "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
+               "node_modules/dedent": {
+                       "version": "1.7.2",
+                       "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+                       "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "cose-base": "^2.2.0"
-                       },
                        "peerDependencies": {
-                               "cytoscape": "^3.2.0"
+                               "babel-plugin-macros": "^3.1.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "babel-plugin-macros": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/cytoscape-fcose/node_modules/cose-base": {
-                       "version": "2.2.0",
-                       "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
-                       "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
+               "node_modules/dedent-js": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
+                       "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/deep-eql": {
+                       "version": "5.0.2",
+                       "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+                       "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "layout-base": "^2.0.0"
+                       "engines": {
+                               "node": ">=6"
                        }
                },
-               "node_modules/cytoscape-fcose/node_modules/layout-base": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
-                       "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
+               "node_modules/deep-is": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+                       "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/d3": {
-                       "version": "7.9.0",
-                       "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
-                       "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+               "node_modules/deepmerge": {
+                       "version": "4.3.1",
+                       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+                       "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "d3-array": "3",
-                               "d3-axis": "3",
-                               "d3-brush": "3",
-                               "d3-chord": "3",
-                               "d3-color": "3",
-                               "d3-contour": "4",
-                               "d3-delaunay": "6",
-                               "d3-dispatch": "3",
-                               "d3-drag": "3",
-                               "d3-dsv": "3",
-                               "d3-ease": "3",
-                               "d3-fetch": "3",
-                               "d3-force": "3",
-                               "d3-format": "3",
-                               "d3-geo": "3",
-                               "d3-hierarchy": "3",
-                               "d3-interpolate": "3",
-                               "d3-path": "3",
-                               "d3-polygon": "3",
-                               "d3-quadtree": "3",
-                               "d3-random": "3",
-                               "d3-scale": "4",
-                               "d3-scale-chromatic": "3",
-                               "d3-selection": "3",
-                               "d3-shape": "3",
-                               "d3-time": "3",
-                               "d3-time-format": "4",
-                               "d3-timer": "3",
-                               "d3-transition": "3",
-                               "d3-zoom": "3"
-                       },
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/d3-array": {
-                       "version": "3.2.4",
-                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
-                       "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+               "node_modules/default-browser": {
+                       "version": "5.5.0",
+                       "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+                       "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "internmap": "1 - 2"
+                               "bundle-name": "^4.1.0",
+                               "default-browser-id": "^5.0.0"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=18"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/d3-axis": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
-                       "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+               "node_modules/default-browser-id": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
+                       "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
-                       }
-               },
-               "node_modules/d3-brush": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
-                       "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
-                       "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "d3-dispatch": "1 - 3",
-                               "d3-drag": "2 - 3",
-                               "d3-interpolate": "1 - 3",
-                               "d3-selection": "3",
-                               "d3-transition": "3"
+                               "node": ">=18"
                        },
-                       "engines": {
-                               "node": ">=12"
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/d3-chord": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
-                       "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+               "node_modules/define-data-property": {
+                       "version": "1.1.4",
+                       "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+                       "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-path": "1 - 3"
+                               "es-define-property": "^1.0.0",
+                               "es-errors": "^1.3.0",
+                               "gopd": "^1.0.1"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/d3-color": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
-                       "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+               "node_modules/define-lazy-prop": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+                       "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "engines": {
                                "node": ">=12"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/d3-contour": {
-                       "version": "4.0.2",
-                       "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
-                       "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+               "node_modules/define-properties": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+                       "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-array": "^3.2.0"
+                               "define-data-property": "^1.0.1",
+                               "has-property-descriptors": "^1.0.0",
+                               "object-keys": "^1.1.1"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/d3-delaunay": {
-                       "version": "6.0.4",
-                       "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
-                       "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+               "node_modules/defu": {
+                       "version": "6.1.7",
+                       "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+                       "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/delaunator": {
+                       "version": "5.1.0",
+                       "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
+                       "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
                        "dev": true,
                        "license": "ISC",
                        "dependencies": {
-                               "delaunator": "5"
-                       },
+                               "robust-predicates": "^3.0.2"
+                       }
+               },
+               "node_modules/depd": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+                       "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+                       "dev": true,
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.8"
                        }
                },
-               "node_modules/d3-dispatch": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
-                       "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+               "node_modules/dequal": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+                       "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=6"
                        }
                },
-               "node_modules/d3-drag": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
-                       "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+               "node_modules/detect-libc": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+                       "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "d3-dispatch": "1 - 3",
-                               "d3-selection": "3"
-                       },
+                       "license": "Apache-2.0",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=8"
                        }
                },
-               "node_modules/d3-dsv": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
-                       "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+               "node_modules/devalue": {
+                       "version": "5.8.1",
+                       "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz",
+                       "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT"
+               },
+               "node_modules/devlop": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+                       "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+                       "dev": true,
+                       "license": "MIT",
                        "dependencies": {
-                               "commander": "7",
-                               "iconv-lite": "0.6",
-                               "rw": "1"
-                       },
-                       "bin": {
-                               "csv2json": "bin/dsv2json.js",
-                               "csv2tsv": "bin/dsv2dsv.js",
-                               "dsv2dsv": "bin/dsv2dsv.js",
-                               "dsv2json": "bin/dsv2json.js",
-                               "json2csv": "bin/json2dsv.js",
-                               "json2dsv": "bin/json2dsv.js",
-                               "json2tsv": "bin/json2dsv.js",
-                               "tsv2csv": "bin/dsv2dsv.js",
-                               "tsv2json": "bin/dsv2json.js"
+                               "dequal": "^2.0.0"
                        },
-                       "engines": {
-                               "node": ">=12"
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/d3-dsv/node_modules/commander": {
-                       "version": "7.2.0",
-                       "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-                       "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+               "node_modules/dexie": {
+                       "version": "4.4.3",
+                       "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.4.3.tgz",
+                       "integrity": "sha512-N+3IGQ3HPlyO2YAkntGAwitm42BpBGV86MttzUMiRzWLa4NGh0pltVRcUVF4ybL/OnXjCrr9k7SDPIKkFYP2Lg==",
+                       "dev": true,
+                       "license": "Apache-2.0"
+               },
+               "node_modules/dom-accessibility-api": {
+                       "version": "0.5.16",
+                       "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+                       "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">= 10"
-                       }
+                       "peer": true
                },
-               "node_modules/d3-ease": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
-                       "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+               "node_modules/dompurify": {
+                       "version": "3.4.8",
+                       "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.8.tgz",
+                       "integrity": "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
-                       "engines": {
-                               "node": ">=12"
+                       "license": "(MPL-2.0 OR Apache-2.0)",
+                       "optionalDependencies": {
+                               "@types/trusted-types": "^2.0.7"
                        }
                },
-               "node_modules/d3-fetch": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
-                       "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+               "node_modules/dunder-proto": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+                       "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-dsv": "1 - 3"
+                               "call-bind-apply-helpers": "^1.0.1",
+                               "es-errors": "^1.3.0",
+                               "gopd": "^1.2.0"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/d3-force": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
-                       "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+               "node_modules/ee-first": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+                       "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT"
+               },
+               "node_modules/ejs": {
+                       "version": "3.1.10",
+                       "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+                       "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+                       "dev": true,
+                       "license": "Apache-2.0",
                        "dependencies": {
-                               "d3-dispatch": "1 - 3",
-                               "d3-quadtree": "1 - 3",
-                               "d3-timer": "1 - 3"
+                               "jake": "^10.8.5"
+                       },
+                       "bin": {
+                               "ejs": "bin/cli.js"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/d3-format": {
-                       "version": "3.1.2",
-                       "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
-                       "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+               "node_modules/electron-to-chromium": {
+                       "version": "1.5.367",
+                       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.367.tgz",
+                       "integrity": "sha512-4Mk/mrynCNQ+atY40D3UpmhLWB6AHMbYMlIrPhHcMF6x0L7O0b052FCAsxw1LlaR++UFuNg3D/A6XCuGDa0guQ==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "ISC"
+               },
+               "node_modules/encodeurl": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+                       "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+                       "dev": true,
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.8"
                        }
                },
-               "node_modules/d3-geo": {
-                       "version": "3.1.1",
-                       "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
-                       "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+               "node_modules/enhanced-resolve": {
+                       "version": "5.23.0",
+                       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz",
+                       "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-array": "2.5.0 - 3"
+                               "graceful-fs": "^4.2.4",
+                               "tapable": "^2.3.3"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=10.13.0"
                        }
                },
-               "node_modules/d3-hierarchy": {
-                       "version": "3.1.2",
-                       "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
-                       "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+               "node_modules/entities": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+                       "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "BSD-2-Clause",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=0.12"
+                       },
+                       "funding": {
+                               "url": "https://github.com/fb55/entities?sponsor=1"
                        }
                },
-               "node_modules/d3-interpolate": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
-                       "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+               "node_modules/es-abstract": {
+                       "version": "1.24.2",
+                       "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
+                       "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-color": "1 - 3"
+                               "array-buffer-byte-length": "^1.0.2",
+                               "arraybuffer.prototype.slice": "^1.0.4",
+                               "available-typed-arrays": "^1.0.7",
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.4",
+                               "data-view-buffer": "^1.0.2",
+                               "data-view-byte-length": "^1.0.2",
+                               "data-view-byte-offset": "^1.0.1",
+                               "es-define-property": "^1.0.1",
+                               "es-errors": "^1.3.0",
+                               "es-object-atoms": "^1.1.1",
+                               "es-set-tostringtag": "^2.1.0",
+                               "es-to-primitive": "^1.3.0",
+                               "function.prototype.name": "^1.1.8",
+                               "get-intrinsic": "^1.3.0",
+                               "get-proto": "^1.0.1",
+                               "get-symbol-description": "^1.1.0",
+                               "globalthis": "^1.0.4",
+                               "gopd": "^1.2.0",
+                               "has-property-descriptors": "^1.0.2",
+                               "has-proto": "^1.2.0",
+                               "has-symbols": "^1.1.0",
+                               "hasown": "^2.0.2",
+                               "internal-slot": "^1.1.0",
+                               "is-array-buffer": "^3.0.5",
+                               "is-callable": "^1.2.7",
+                               "is-data-view": "^1.0.2",
+                               "is-negative-zero": "^2.0.3",
+                               "is-regex": "^1.2.1",
+                               "is-set": "^2.0.3",
+                               "is-shared-array-buffer": "^1.0.4",
+                               "is-string": "^1.1.1",
+                               "is-typed-array": "^1.1.15",
+                               "is-weakref": "^1.1.1",
+                               "math-intrinsics": "^1.1.0",
+                               "object-inspect": "^1.13.4",
+                               "object-keys": "^1.1.1",
+                               "object.assign": "^4.1.7",
+                               "own-keys": "^1.0.1",
+                               "regexp.prototype.flags": "^1.5.4",
+                               "safe-array-concat": "^1.1.3",
+                               "safe-push-apply": "^1.0.0",
+                               "safe-regex-test": "^1.1.0",
+                               "set-proto": "^1.0.0",
+                               "stop-iteration-iterator": "^1.1.0",
+                               "string.prototype.trim": "^1.2.10",
+                               "string.prototype.trimend": "^1.0.9",
+                               "string.prototype.trimstart": "^1.0.8",
+                               "typed-array-buffer": "^1.0.3",
+                               "typed-array-byte-length": "^1.0.3",
+                               "typed-array-byte-offset": "^1.0.4",
+                               "typed-array-length": "^1.0.7",
+                               "unbox-primitive": "^1.1.0",
+                               "which-typed-array": "^1.1.19"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/d3-path": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
-                       "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+               "node_modules/es-define-property": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+                       "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/d3-polygon": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
-                       "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+               "node_modules/es-errors": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+                       "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/d3-quadtree": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
-                       "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+               "node_modules/es-module-lexer": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
+                       "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
                        "dev": true,
-                       "license": "ISC",
-                       "engines": {
-                               "node": ">=12"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/d3-random": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
-                       "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+               "node_modules/es-object-atoms": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+                       "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
+                       "dependencies": {
+                               "es-errors": "^1.3.0"
+                       },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/d3-sankey": {
-                       "version": "0.12.3",
-                       "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
-                       "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
+               "node_modules/es-set-tostringtag": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+                       "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-array": "1 - 2",
-                               "d3-shape": "^1.2.0"
+                               "es-errors": "^1.3.0",
+                               "get-intrinsic": "^1.2.6",
+                               "has-tostringtag": "^1.0.2",
+                               "hasown": "^2.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/d3-sankey/node_modules/d3-array": {
-                       "version": "2.12.1",
-                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-                       "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+               "node_modules/es-to-primitive": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+                       "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
+                       "license": "MIT",
                        "dependencies": {
-                               "internmap": "^1.0.0"
+                               "is-callable": "^1.2.7",
+                               "is-date-object": "^1.0.5",
+                               "is-symbol": "^1.0.4"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/d3-sankey/node_modules/d3-path": {
-                       "version": "1.0.9",
-                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-                       "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+               "node_modules/es-toolkit": {
+                       "version": "1.47.0",
+                       "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.47.0.tgz",
+                       "integrity": "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==",
                        "dev": true,
-                       "license": "BSD-3-Clause"
+                       "license": "MIT",
+                       "workspaces": [
+                               "docs",
+                               "benchmarks"
+                       ]
                },
-               "node_modules/d3-sankey/node_modules/d3-shape": {
-                       "version": "1.3.7",
-                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-                       "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+               "node_modules/esbuild": {
+                       "version": "0.27.7",
+                       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
+                       "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
-                       "dependencies": {
-                               "d3-path": "1"
+                       "hasInstallScript": true,
+                       "license": "MIT",
+                       "bin": {
+                               "esbuild": "bin/esbuild"
+                       },
+                       "engines": {
+                               "node": ">=18"
+                       },
+                       "optionalDependencies": {
+                               "@esbuild/aix-ppc64": "0.27.7",
+                               "@esbuild/android-arm": "0.27.7",
+                               "@esbuild/android-arm64": "0.27.7",
+                               "@esbuild/android-x64": "0.27.7",
+                               "@esbuild/darwin-arm64": "0.27.7",
+                               "@esbuild/darwin-x64": "0.27.7",
+                               "@esbuild/freebsd-arm64": "0.27.7",
+                               "@esbuild/freebsd-x64": "0.27.7",
+                               "@esbuild/linux-arm": "0.27.7",
+                               "@esbuild/linux-arm64": "0.27.7",
+                               "@esbuild/linux-ia32": "0.27.7",
+                               "@esbuild/linux-loong64": "0.27.7",
+                               "@esbuild/linux-mips64el": "0.27.7",
+                               "@esbuild/linux-ppc64": "0.27.7",
+                               "@esbuild/linux-riscv64": "0.27.7",
+                               "@esbuild/linux-s390x": "0.27.7",
+                               "@esbuild/linux-x64": "0.27.7",
+                               "@esbuild/netbsd-arm64": "0.27.7",
+                               "@esbuild/netbsd-x64": "0.27.7",
+                               "@esbuild/openbsd-arm64": "0.27.7",
+                               "@esbuild/openbsd-x64": "0.27.7",
+                               "@esbuild/openharmony-arm64": "0.27.7",
+                               "@esbuild/sunos-x64": "0.27.7",
+                               "@esbuild/win32-arm64": "0.27.7",
+                               "@esbuild/win32-ia32": "0.27.7",
+                               "@esbuild/win32-x64": "0.27.7"
                        }
                },
-               "node_modules/d3-sankey/node_modules/internmap": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-                       "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
+               "node_modules/escalade": {
+                       "version": "3.2.0",
+                       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+                       "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
                        "dev": true,
-                       "license": "ISC"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=6"
+                       }
                },
-               "node_modules/d3-scale": {
-                       "version": "4.0.2",
-                       "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
-                       "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+               "node_modules/escape-html": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+                       "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "d3-array": "2.10.0 - 3",
-                               "d3-format": "1 - 3",
-                               "d3-interpolate": "1.2.0 - 3",
-                               "d3-time": "2.1.1 - 3",
-                               "d3-time-format": "2 - 4"
-                       },
+                       "license": "MIT"
+               },
+               "node_modules/escape-string-regexp": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+                       "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+                       "dev": true,
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/d3-scale-chromatic": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
-                       "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+               "node_modules/eslint": {
+                       "version": "9.39.4",
+                       "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
+                       "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-color": "1 - 3",
-                               "d3-interpolate": "1 - 3"
+                               "@eslint-community/eslint-utils": "^4.8.0",
+                               "@eslint-community/regexpp": "^4.12.1",
+                               "@eslint/config-array": "^0.21.2",
+                               "@eslint/config-helpers": "^0.4.2",
+                               "@eslint/core": "^0.17.0",
+                               "@eslint/eslintrc": "^3.3.5",
+                               "@eslint/js": "9.39.4",
+                               "@eslint/plugin-kit": "^0.4.1",
+                               "@humanfs/node": "^0.16.6",
+                               "@humanwhocodes/module-importer": "^1.0.1",
+                               "@humanwhocodes/retry": "^0.4.2",
+                               "@types/estree": "^1.0.6",
+                               "ajv": "^6.14.0",
+                               "chalk": "^4.0.0",
+                               "cross-spawn": "^7.0.6",
+                               "debug": "^4.3.2",
+                               "escape-string-regexp": "^4.0.0",
+                               "eslint-scope": "^8.4.0",
+                               "eslint-visitor-keys": "^4.2.1",
+                               "espree": "^10.4.0",
+                               "esquery": "^1.5.0",
+                               "esutils": "^2.0.2",
+                               "fast-deep-equal": "^3.1.3",
+                               "file-entry-cache": "^8.0.0",
+                               "find-up": "^5.0.0",
+                               "glob-parent": "^6.0.2",
+                               "ignore": "^5.2.0",
+                               "imurmurhash": "^0.1.4",
+                               "is-glob": "^4.0.0",
+                               "json-stable-stringify-without-jsonify": "^1.0.1",
+                               "lodash.merge": "^4.6.2",
+                               "minimatch": "^3.1.5",
+                               "natural-compare": "^1.4.0",
+                               "optionator": "^0.9.3"
+                       },
+                       "bin": {
+                               "eslint": "bin/eslint.js"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "url": "https://eslint.org/donate"
+                       },
+                       "peerDependencies": {
+                               "jiti": "*"
+                       },
+                       "peerDependenciesMeta": {
+                               "jiti": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/d3-selection": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
-                       "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+               "node_modules/eslint-config-prettier": {
+                       "version": "10.1.8",
+                       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+                       "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
                        "dev": true,
-                       "license": "ISC",
-                       "engines": {
-                               "node": ">=12"
+                       "license": "MIT",
+                       "bin": {
+                               "eslint-config-prettier": "bin/cli.js"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/eslint-config-prettier"
+                       },
+                       "peerDependencies": {
+                               "eslint": ">=7.0.0"
                        }
                },
-               "node_modules/d3-shape": {
-                       "version": "3.2.0",
-                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
-                       "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+               "node_modules/eslint-plugin-storybook": {
+                       "version": "10.4.2",
+                       "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.4.2.tgz",
+                       "integrity": "sha512-l3/vzLRmb8VSi3X1Bo6/Pa+64naw1jFsZE5jPPA4izvVdNhH1rF4rGuOC3kDTU926qKVBQtKua8D24XWQtvcGg==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-path": "^3.1.0"
+                               "@typescript-eslint/utils": "^8.48.0"
                        },
-                       "engines": {
-                               "node": ">=12"
+                       "peerDependencies": {
+                               "eslint": ">=8",
+                               "storybook": "^10.4.2"
                        }
                },
-               "node_modules/d3-time": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
-                       "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+               "node_modules/eslint-plugin-svelte": {
+                       "version": "3.19.0",
+                       "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.19.0.tgz",
+                       "integrity": "sha512-t3rNaZeXz4d2gG4uJyMEYfJCFKf22+SWbSizIIXIWKu4wM+XPLiMWuSSr/C5821JmFeN9ogK+eExbG+z+twyxw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-array": "2 - 3"
+                               "@eslint-community/eslint-utils": "^4.6.1",
+                               "@jridgewell/sourcemap-codec": "^1.5.0",
+                               "esutils": "^2.0.3",
+                               "globals": "^16.0.0",
+                               "known-css-properties": "^0.37.0",
+                               "postcss": "^8.4.49",
+                               "postcss-load-config": "^3.1.4",
+                               "postcss-safe-parser": "^7.0.0",
+                               "semver": "^7.6.3",
+                               "svelte-eslint-parser": "^1.7.0"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ota-meshi"
+                       },
+                       "peerDependencies": {
+                               "eslint": "^8.57.1 || ^9.0.0 || ^10.0.0",
+                               "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "svelte": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/d3-time-format": {
-                       "version": "4.1.0",
-                       "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
-                       "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+               "node_modules/eslint-scope": {
+                       "version": "8.4.0",
+                       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+                       "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "BSD-2-Clause",
                        "dependencies": {
-                               "d3-time": "1 - 3"
+                               "esrecurse": "^4.3.0",
+                               "estraverse": "^5.2.0"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/eslint"
                        }
                },
-               "node_modules/d3-timer": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
-                       "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+               "node_modules/eslint-visitor-keys": {
+                       "version": "4.2.1",
+                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+                       "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "Apache-2.0",
                        "engines": {
-                               "node": ">=12"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/eslint"
                        }
                },
-               "node_modules/d3-transition": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
-                       "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+               "node_modules/eslint/node_modules/@eslint/js": {
+                       "version": "9.39.4",
+                       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
+                       "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "d3-color": "1 - 3",
-                               "d3-dispatch": "1 - 3",
-                               "d3-ease": "1 - 3",
-                               "d3-interpolate": "1 - 3",
-                               "d3-timer": "1 - 3"
-                       },
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
-                       "peerDependencies": {
-                               "d3-selection": "2 - 3"
+                       "funding": {
+                               "url": "https://eslint.org/donate"
                        }
                },
-               "node_modules/d3-zoom": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
-                       "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+               "node_modules/eslint/node_modules/ajv": {
+                       "version": "6.15.0",
+                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+                       "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "MIT",
                        "dependencies": {
-                               "d3-dispatch": "1 - 3",
-                               "d3-drag": "2 - 3",
-                               "d3-interpolate": "1 - 3",
-                               "d3-selection": "2 - 3",
-                               "d3-transition": "2 - 3"
+                               "fast-deep-equal": "^3.1.1",
+                               "fast-json-stable-stringify": "^2.0.0",
+                               "json-schema-traverse": "^0.4.1",
+                               "uri-js": "^4.2.2"
                        },
-                       "engines": {
-                               "node": ">=12"
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/epoberezkin"
                        }
                },
-               "node_modules/dagre-d3-es": {
-                       "version": "7.0.14",
-                       "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz",
-                       "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
+               "node_modules/eslint/node_modules/json-schema-traverse": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+                       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "d3": "^7.9.0",
-                               "lodash-es": "^4.17.21"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/dayjs": {
-                       "version": "1.11.21",
-                       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
-                       "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
+               "node_modules/esm-env": {
+                       "version": "1.2.2",
+                       "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
+                       "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/debug": {
-                       "version": "4.4.3",
-                       "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
-                       "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+               "node_modules/espree": {
+                       "version": "10.4.0",
+                       "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+                       "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "BSD-2-Clause",
                        "dependencies": {
-                               "ms": "^2.1.3"
+                               "acorn": "^8.15.0",
+                               "acorn-jsx": "^5.3.2",
+                               "eslint-visitor-keys": "^4.2.1"
                        },
                        "engines": {
-                               "node": ">=6.0"
+                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
-                       "peerDependenciesMeta": {
-                               "supports-color": {
-                                       "optional": true
-                               }
+                       "funding": {
+                               "url": "https://opencollective.com/eslint"
                        }
                },
-               "node_modules/decode-named-character-reference": {
-                       "version": "1.2.0",
-                       "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
-                       "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
+               "node_modules/esprima": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+                       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "character-entities": "^2.0.0"
+                       "license": "BSD-2-Clause",
+                       "bin": {
+                               "esparse": "bin/esparse.js",
+                               "esvalidate": "bin/esvalidate.js"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "engines": {
+                               "node": ">=4"
                        }
                },
-               "node_modules/dedent": {
-                       "version": "1.6.0",
-                       "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
-                       "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
+               "node_modules/esquery": {
+                       "version": "1.7.0",
+                       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+                       "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
                        "dev": true,
-                       "license": "MIT",
-                       "peerDependencies": {
-                               "babel-plugin-macros": "^3.1.0"
+                       "license": "BSD-3-Clause",
+                       "dependencies": {
+                               "estraverse": "^5.1.0"
                        },
-                       "peerDependenciesMeta": {
-                               "babel-plugin-macros": {
-                                       "optional": true
-                               }
+                       "engines": {
+                               "node": ">=0.10"
                        }
                },
-               "node_modules/dedent-js": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
-                       "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/deep-eql": {
-                       "version": "5.0.2",
-                       "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
-                       "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+               "node_modules/esrap": {
+                       "version": "1.4.9",
+                       "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.9.tgz",
+                       "integrity": "sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">=6"
+                       "dependencies": {
+                               "@jridgewell/sourcemap-codec": "^1.4.15"
                        }
                },
-               "node_modules/deep-is": {
-                       "version": "0.1.4",
-                       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-                       "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+               "node_modules/esrecurse": {
+                       "version": "4.3.0",
+                       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+                       "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "BSD-2-Clause",
+                       "dependencies": {
+                               "estraverse": "^5.2.0"
+                       },
+                       "engines": {
+                               "node": ">=4.0"
+                       }
                },
-               "node_modules/deepmerge": {
-                       "version": "4.3.1",
-                       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
-                       "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+               "node_modules/estraverse": {
+                       "version": "5.3.0",
+                       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+                       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "BSD-2-Clause",
                        "engines": {
-                               "node": ">=0.10.0"
+                               "node": ">=4.0"
                        }
                },
-               "node_modules/default-browser": {
-                       "version": "5.5.0",
-                       "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
-                       "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
+               "node_modules/estree-walker": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+                       "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "bundle-name": "^4.1.0",
-                               "default-browser-id": "^5.0.0"
-                       },
+                               "@types/estree": "^1.0.0"
+                       }
+               },
+               "node_modules/esutils": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+                       "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+                       "dev": true,
+                       "license": "BSD-2-Clause",
                        "engines": {
-                               "node": ">=18"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/default-browser-id": {
-                       "version": "5.0.1",
-                       "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
-                       "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
+               "node_modules/eta": {
+                       "version": "4.6.0",
+                       "resolved": "https://registry.npmjs.org/eta/-/eta-4.6.0.tgz",
+                       "integrity": "sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=20"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "url": "https://github.com/bgub/eta?sponsor=1"
                        }
                },
-               "node_modules/define-lazy-prop": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
-                       "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+               "node_modules/etag": {
+                       "version": "1.8.1",
+                       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+                       "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=12"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "node": ">= 0.6"
                        }
                },
-               "node_modules/delaunator": {
-                       "version": "5.1.0",
-                       "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
-                       "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+               "node_modules/eventemitter3": {
+                       "version": "4.0.7",
+                       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+                       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "robust-predicates": "^3.0.2"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/depd": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
-                       "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+               "node_modules/eventsource": {
+                       "version": "3.0.7",
+                       "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
+                       "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "eventsource-parser": "^3.0.1"
+                       },
                        "engines": {
-                               "node": ">= 0.8"
+                               "node": ">=18.0.0"
                        }
                },
-               "node_modules/dequal": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-                       "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+               "node_modules/eventsource-parser": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz",
+                       "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=6"
+                               "node": ">=18.0.0"
                        }
                },
-               "node_modules/detect-libc": {
-                       "version": "2.0.4",
-                       "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
-                       "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+               "node_modules/expect-type": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
+                       "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
                        "dev": true,
                        "license": "Apache-2.0",
                        "engines": {
-                               "node": ">=8"
+                               "node": ">=12.0.0"
                        }
                },
-               "node_modules/devalue": {
-                       "version": "5.8.1",
-                       "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz",
-                       "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==",
+               "node_modules/express": {
+                       "version": "5.2.1",
+                       "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
+                       "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "accepts": "^2.0.0",
+                               "body-parser": "^2.2.1",
+                               "content-disposition": "^1.0.0",
+                               "content-type": "^1.0.5",
+                               "cookie": "^0.7.1",
+                               "cookie-signature": "^1.2.1",
+                               "debug": "^4.4.0",
+                               "depd": "^2.0.0",
+                               "encodeurl": "^2.0.0",
+                               "escape-html": "^1.0.3",
+                               "etag": "^1.8.1",
+                               "finalhandler": "^2.1.0",
+                               "fresh": "^2.0.0",
+                               "http-errors": "^2.0.0",
+                               "merge-descriptors": "^2.0.0",
+                               "mime-types": "^3.0.0",
+                               "on-finished": "^2.4.1",
+                               "once": "^1.4.0",
+                               "parseurl": "^1.3.3",
+                               "proxy-addr": "^2.0.7",
+                               "qs": "^6.14.0",
+                               "range-parser": "^1.2.1",
+                               "router": "^2.2.0",
+                               "send": "^1.1.0",
+                               "serve-static": "^2.2.0",
+                               "statuses": "^2.0.1",
+                               "type-is": "^2.0.1",
+                               "vary": "^1.1.2"
+                       },
+                       "engines": {
+                               "node": ">= 18"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
+                       }
                },
-               "node_modules/devlop": {
-                       "version": "1.1.0",
-                       "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
-                       "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+               "node_modules/express-rate-limit": {
+                       "version": "8.5.2",
+                       "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
+                       "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "dequal": "^2.0.0"
+                               "ip-address": "^10.2.0"
+                       },
+                       "engines": {
+                               "node": ">= 16"
                        },
                        "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                               "url": "https://github.com/sponsors/express-rate-limit"
+                       },
+                       "peerDependencies": {
+                               "express": ">= 4.11"
                        }
                },
-               "node_modules/dexie": {
-                       "version": "4.0.11",
-                       "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.11.tgz",
-                       "integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
+               "node_modules/extend": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+                       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
                        "dev": true,
-                       "license": "Apache-2.0"
+                       "license": "MIT"
                },
-               "node_modules/dom-accessibility-api": {
-                       "version": "0.5.16",
-                       "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
-                       "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+               "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==",
                        "dev": true,
-                       "license": "MIT",
-                       "peer": true
+                       "license": "MIT"
                },
-               "node_modules/dompurify": {
-                       "version": "3.4.8",
-                       "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.8.tgz",
-                       "integrity": "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==",
+               "node_modules/fast-json-stable-stringify": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+                       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
                        "dev": true,
-                       "license": "(MPL-2.0 OR Apache-2.0)",
-                       "optionalDependencies": {
-                               "@types/trusted-types": "^2.0.7"
+                       "license": "MIT"
+               },
+               "node_modules/fast-levenshtein": {
+                       "version": "2.0.6",
+                       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+                       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/fast-uri": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
+                       "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
+                       "dev": true,
+                       "funding": [
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/fastify"
+                               },
+                               {
+                                       "type": "opencollective",
+                                       "url": "https://opencollective.com/fastify"
+                               }
+                       ],
+                       "license": "BSD-3-Clause"
+               },
+               "node_modules/fdir": {
+                       "version": "6.5.0",
+                       "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+                       "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=12.0.0"
+                       },
+                       "peerDependencies": {
+                               "picomatch": "^3 || ^4"
+                       },
+                       "peerDependenciesMeta": {
+                               "picomatch": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/dunder-proto": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-                       "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+               "node_modules/file-entry-cache": {
+                       "version": "8.0.0",
+                       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+                       "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "call-bind-apply-helpers": "^1.0.1",
-                               "es-errors": "^1.3.0",
-                               "gopd": "^1.2.0"
+                               "flat-cache": "^4.0.0"
                        },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=16.0.0"
                        }
                },
-               "node_modules/ee-first": {
-                       "version": "1.1.1",
-                       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-                       "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+               "node_modules/filelist": {
+                       "version": "1.0.6",
+                       "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz",
+                       "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "minimatch": "^5.0.1"
+                       }
                },
-               "node_modules/encodeurl": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
-                       "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+               "node_modules/filelist/node_modules/brace-expansion": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
+                       "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">= 0.8"
+                       "dependencies": {
+                               "balanced-match": "^1.0.0"
                        }
                },
-               "node_modules/enhanced-resolve": {
-                       "version": "5.18.2",
-                       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
-                       "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
+               "node_modules/filelist/node_modules/minimatch": {
+                       "version": "5.1.9",
+                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
+                       "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "graceful-fs": "^4.2.4",
-                               "tapable": "^2.2.0"
+                               "brace-expansion": "^2.0.1"
                        },
                        "engines": {
-                               "node": ">=10.13.0"
+                               "node": ">=10"
                        }
                },
-               "node_modules/entities": {
-                       "version": "6.0.1",
-                       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
-                       "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+               "node_modules/filesize": {
+                       "version": "10.1.6",
+                       "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz",
+                       "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
+                       "license": "BSD-3-Clause",
                        "engines": {
-                               "node": ">=0.12"
-                       },
-                       "funding": {
-                               "url": "https://github.com/fb55/entities?sponsor=1"
+                               "node": ">= 10.4.0"
                        }
-               },
-               "node_modules/es-define-property": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-                       "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+               },
+               "node_modules/finalhandler": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
+                       "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "debug": "^4.4.0",
+                               "encodeurl": "^2.0.0",
+                               "escape-html": "^1.0.3",
+                               "on-finished": "^2.4.1",
+                               "parseurl": "^1.3.3",
+                               "statuses": "^2.0.1"
+                       },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">= 18.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/es-errors": {
-                       "version": "1.3.0",
-                       "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-                       "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+               "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==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "locate-path": "^6.0.0",
+                               "path-exists": "^4.0.0"
+                       },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/es-module-lexer": {
-                       "version": "2.1.0",
-                       "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
-                       "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/es-object-atoms": {
-                       "version": "1.1.1",
-                       "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-                       "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+               "node_modules/flat-cache": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+                       "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "es-errors": "^1.3.0"
+                               "flatted": "^3.2.9",
+                               "keyv": "^4.5.4"
                        },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=16"
                        }
                },
-               "node_modules/es-toolkit": {
-                       "version": "1.46.1",
-                       "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz",
-                       "integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==",
+               "node_modules/flatted": {
+                       "version": "3.4.2",
+                       "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+                       "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
                        "dev": true,
-                       "license": "MIT",
-                       "workspaces": [
-                               "docs",
-                               "benchmarks"
-                       ]
+                       "license": "ISC"
                },
-               "node_modules/esbuild": {
-                       "version": "0.27.7",
-                       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
-                       "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
+               "node_modules/follow-redirects": {
+                       "version": "1.16.0",
+                       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+                       "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
                        "dev": true,
-                       "hasInstallScript": true,
+                       "funding": [
+                               {
+                                       "type": "individual",
+                                       "url": "https://github.com/sponsors/RubenVerborgh"
+                               }
+                       ],
                        "license": "MIT",
-                       "bin": {
-                               "esbuild": "bin/esbuild"
-                       },
                        "engines": {
-                               "node": ">=18"
+                               "node": ">=4.0"
                        },
-                       "optionalDependencies": {
-                               "@esbuild/aix-ppc64": "0.27.7",
-                               "@esbuild/android-arm": "0.27.7",
-                               "@esbuild/android-arm64": "0.27.7",
-                               "@esbuild/android-x64": "0.27.7",
-                               "@esbuild/darwin-arm64": "0.27.7",
-                               "@esbuild/darwin-x64": "0.27.7",
-                               "@esbuild/freebsd-arm64": "0.27.7",
-                               "@esbuild/freebsd-x64": "0.27.7",
-                               "@esbuild/linux-arm": "0.27.7",
-                               "@esbuild/linux-arm64": "0.27.7",
-                               "@esbuild/linux-ia32": "0.27.7",
-                               "@esbuild/linux-loong64": "0.27.7",
-                               "@esbuild/linux-mips64el": "0.27.7",
-                               "@esbuild/linux-ppc64": "0.27.7",
-                               "@esbuild/linux-riscv64": "0.27.7",
-                               "@esbuild/linux-s390x": "0.27.7",
-                               "@esbuild/linux-x64": "0.27.7",
-                               "@esbuild/netbsd-arm64": "0.27.7",
-                               "@esbuild/netbsd-x64": "0.27.7",
-                               "@esbuild/openbsd-arm64": "0.27.7",
-                               "@esbuild/openbsd-x64": "0.27.7",
-                               "@esbuild/openharmony-arm64": "0.27.7",
-                               "@esbuild/sunos-x64": "0.27.7",
-                               "@esbuild/win32-arm64": "0.27.7",
-                               "@esbuild/win32-ia32": "0.27.7",
-                               "@esbuild/win32-x64": "0.27.7"
+                       "peerDependenciesMeta": {
+                               "debug": {
+                                       "optional": true
+                               }
                        }
                },
-               "node_modules/escape-html": {
-                       "version": "1.0.3",
-                       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-                       "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/escape-string-regexp": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-                       "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+               "node_modules/for-each": {
+                       "version": "0.3.5",
+                       "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+                       "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "is-callable": "^1.2.7"
+                       },
                        "engines": {
-                               "node": ">=10"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/eslint": {
-                       "version": "9.39.2",
-                       "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
-                       "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+               "node_modules/foreground-child": {
+                       "version": "3.3.1",
+                       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+                       "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "ISC",
                        "dependencies": {
-                               "@eslint-community/eslint-utils": "^4.8.0",
-                               "@eslint-community/regexpp": "^4.12.1",
-                               "@eslint/config-array": "^0.21.1",
-                               "@eslint/config-helpers": "^0.4.2",
-                               "@eslint/core": "^0.17.0",
-                               "@eslint/eslintrc": "^3.3.1",
-                               "@eslint/js": "9.39.2",
-                               "@eslint/plugin-kit": "^0.4.1",
-                               "@humanfs/node": "^0.16.6",
-                               "@humanwhocodes/module-importer": "^1.0.1",
-                               "@humanwhocodes/retry": "^0.4.2",
-                               "@types/estree": "^1.0.6",
-                               "ajv": "^6.12.4",
-                               "chalk": "^4.0.0",
                                "cross-spawn": "^7.0.6",
-                               "debug": "^4.3.2",
-                               "escape-string-regexp": "^4.0.0",
-                               "eslint-scope": "^8.4.0",
-                               "eslint-visitor-keys": "^4.2.1",
-                               "espree": "^10.4.0",
-                               "esquery": "^1.5.0",
-                               "esutils": "^2.0.2",
-                               "fast-deep-equal": "^3.1.3",
-                               "file-entry-cache": "^8.0.0",
-                               "find-up": "^5.0.0",
-                               "glob-parent": "^6.0.2",
-                               "ignore": "^5.2.0",
-                               "imurmurhash": "^0.1.4",
-                               "is-glob": "^4.0.0",
-                               "json-stable-stringify-without-jsonify": "^1.0.1",
-                               "lodash.merge": "^4.6.2",
-                               "minimatch": "^3.1.2",
-                               "natural-compare": "^1.4.0",
-                               "optionator": "^0.9.3"
-                       },
-                       "bin": {
-                               "eslint": "bin/eslint.js"
+                               "signal-exit": "^4.0.1"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">=14"
                        },
                        "funding": {
-                               "url": "https://eslint.org/donate"
-                       },
-                       "peerDependencies": {
-                               "jiti": "*"
-                       },
-                       "peerDependenciesMeta": {
-                               "jiti": {
-                                       "optional": true
-                               }
+                               "url": "https://github.com/sponsors/isaacs"
                        }
                },
-               "node_modules/eslint-config-prettier": {
-                       "version": "10.1.8",
-                       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
-                       "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
+               "node_modules/forwarded": {
+                       "version": "0.2.0",
+                       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+                       "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
                        "dev": true,
                        "license": "MIT",
-                       "bin": {
-                               "eslint-config-prettier": "bin/cli.js"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/eslint-config-prettier"
-                       },
-                       "peerDependencies": {
-                               "eslint": ">=7.0.0"
+                       "engines": {
+                               "node": ">= 0.6"
                        }
                },
-               "node_modules/eslint-plugin-storybook": {
-                       "version": "10.2.4",
-                       "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.2.4.tgz",
-                       "integrity": "sha512-D8a6Y+iun2MSOpgps0Vd/t8y9Y5ZZ7O2VeKqw2PCv2+b7yInqogOS2VBMSRZVfP8TTGQgDpbUK67k7KZEUC7Ng==",
+               "node_modules/fresh": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+                       "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@typescript-eslint/utils": "^8.48.0"
-                       },
-                       "peerDependencies": {
-                               "eslint": ">=8",
-                               "storybook": "^10.2.4"
+                       "engines": {
+                               "node": ">= 0.8"
                        }
                },
-               "node_modules/eslint-plugin-svelte": {
-                       "version": "3.15.0",
-                       "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.15.0.tgz",
-                       "integrity": "sha512-QKB7zqfuB8aChOfBTComgDptMf2yxiJx7FE04nneCmtQzgTHvY8UJkuh8J2Rz7KB9FFV9aTHX6r7rdYGvG8T9Q==",
+               "node_modules/fs-extra": {
+                       "version": "9.1.0",
+                       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+                       "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@eslint-community/eslint-utils": "^4.6.1",
-                               "@jridgewell/sourcemap-codec": "^1.5.0",
-                               "esutils": "^2.0.3",
-                               "globals": "^16.0.0",
-                               "known-css-properties": "^0.37.0",
-                               "postcss": "^8.4.49",
-                               "postcss-load-config": "^3.1.4",
-                               "postcss-safe-parser": "^7.0.0",
-                               "semver": "^7.6.3",
-                               "svelte-eslint-parser": "^1.4.0"
+                               "at-least-node": "^1.0.0",
+                               "graceful-fs": "^4.2.0",
+                               "jsonfile": "^6.0.1",
+                               "universalify": "^2.0.0"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/ota-meshi"
-                       },
-                       "peerDependencies": {
-                               "eslint": "^8.57.1 || ^9.0.0 || ^10.0.0",
-                               "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
-                       },
-                       "peerDependenciesMeta": {
-                               "svelte": {
-                                       "optional": true
-                               }
+                               "node": ">=10"
+                       }
+               },
+               "node_modules/fsevents": {
+                       "version": "2.3.2",
+                       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+                       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+                       "dev": true,
+                       "hasInstallScript": true,
+                       "license": "MIT",
+                       "optional": true,
+                       "os": [
+                               "darwin"
+                       ],
+                       "engines": {
+                               "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==",
+                       "dev": true,
+                       "license": "MIT",
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/eslint-scope": {
-                       "version": "8.4.0",
-                       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
-                       "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+               "node_modules/function.prototype.name": {
+                       "version": "1.1.8",
+                       "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+                       "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
+                       "license": "MIT",
                        "dependencies": {
-                               "esrecurse": "^4.3.0",
-                               "estraverse": "^5.2.0"
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.3",
+                               "define-properties": "^1.2.1",
+                               "functions-have-names": "^1.2.3",
+                               "hasown": "^2.0.2",
+                               "is-callable": "^1.2.7"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://opencollective.com/eslint"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/eslint-visitor-keys": {
-                       "version": "4.2.1",
-                       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
-                       "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+               "node_modules/functions-have-names": {
+                       "version": "1.2.3",
+                       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+                       "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
                        "dev": true,
-                       "license": "Apache-2.0",
-                       "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-                       },
+                       "license": "MIT",
                        "funding": {
-                               "url": "https://opencollective.com/eslint"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/esm-env": {
-                       "version": "1.2.2",
-                       "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
-                       "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
+               "node_modules/generator-function": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
+                       "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
                },
-               "node_modules/espree": {
-                       "version": "10.4.0",
-                       "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
-                       "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+               "node_modules/gensync": {
+                       "version": "1.0.0-beta.2",
+                       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+                       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=6.9.0"
+                       }
+               },
+               "node_modules/get-intrinsic": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+                       "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+                       "dev": true,
+                       "license": "MIT",
                        "dependencies": {
-                               "acorn": "^8.15.0",
-                               "acorn-jsx": "^5.3.2",
-                               "eslint-visitor-keys": "^4.2.1"
+                               "call-bind-apply-helpers": "^1.0.2",
+                               "es-define-property": "^1.0.1",
+                               "es-errors": "^1.3.0",
+                               "es-object-atoms": "^1.1.1",
+                               "function-bind": "^1.1.2",
+                               "get-proto": "^1.0.1",
+                               "gopd": "^1.2.0",
+                               "has-symbols": "^1.1.0",
+                               "hasown": "^2.0.2",
+                               "math-intrinsics": "^1.1.0"
                        },
                        "engines": {
-                               "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://opencollective.com/eslint"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/esprima": {
-                       "version": "4.0.1",
-                       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-                       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+               "node_modules/get-own-enumerable-property-symbols": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+                       "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
-                       "bin": {
-                               "esparse": "bin/esparse.js",
-                               "esvalidate": "bin/esvalidate.js"
-                       },
-                       "engines": {
-                               "node": ">=4"
-                       }
+                       "license": "ISC"
                },
-               "node_modules/esquery": {
-                       "version": "1.6.0",
-                       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
-                       "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+               "node_modules/get-proto": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+                       "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
+                       "license": "MIT",
                        "dependencies": {
-                               "estraverse": "^5.1.0"
+                               "dunder-proto": "^1.0.1",
+                               "es-object-atoms": "^1.0.0"
                        },
                        "engines": {
-                               "node": ">=0.10"
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/esrap": {
-                       "version": "1.4.9",
-                       "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.9.tgz",
-                       "integrity": "sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==",
+               "node_modules/get-symbol-description": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+                       "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@jridgewell/sourcemap-codec": "^1.4.15"
+                               "call-bound": "^1.0.3",
+                               "es-errors": "^1.3.0",
+                               "get-intrinsic": "^1.2.6"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/esrecurse": {
-                       "version": "4.3.0",
-                       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-                       "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+               "node_modules/glob-parent": {
+                       "version": "6.0.2",
+                       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+                       "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
+                       "license": "ISC",
                        "dependencies": {
-                               "estraverse": "^5.2.0"
+                               "is-glob": "^4.0.3"
                        },
                        "engines": {
-                               "node": ">=4.0"
+                               "node": ">=10.13.0"
                        }
                },
-               "node_modules/estraverse": {
-                       "version": "5.3.0",
-                       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-                       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+               "node_modules/globals": {
+                       "version": "16.5.0",
+                       "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
+                       "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
                        "dev": true,
-                       "license": "BSD-2-Clause",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=4.0"
+                               "node": ">=18"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/estree-walker": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
-                       "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+               "node_modules/globalthis": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+                       "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/estree": "^1.0.0"
-                       }
-               },
-               "node_modules/esutils": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-                       "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-                       "dev": true,
-                       "license": "BSD-2-Clause",
+                               "define-properties": "^1.2.1",
+                               "gopd": "^1.0.1"
+                       },
                        "engines": {
-                               "node": ">=0.10.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/etag": {
-                       "version": "1.8.1",
-                       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-                       "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+               "node_modules/gopd": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+                       "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">= 0.6"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/eventemitter3": {
-                       "version": "4.0.7",
-                       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-                       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+               "node_modules/graceful-fs": {
+                       "version": "4.2.11",
+                       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+                       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+                       "dev": true,
+                       "license": "ISC"
+               },
+               "node_modules/hachure-fill": {
+                       "version": "0.5.2",
+                       "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
+                       "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/eventsource": {
-                       "version": "3.0.7",
-                       "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
-                       "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
+               "node_modules/has-bigints": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+                       "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "eventsource-parser": "^3.0.1"
-                       },
                        "engines": {
-                               "node": ">=18.0.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/eventsource-parser": {
-                       "version": "3.0.6",
-                       "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
-                       "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
+               "node_modules/has-flag": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+                       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=18.0.0"
+                               "node": ">=8"
                        }
                },
-               "node_modules/expect-type": {
-                       "version": "1.3.0",
-                       "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
-                       "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
+               "node_modules/has-property-descriptors": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+                       "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
                        "dev": true,
-                       "license": "Apache-2.0",
-                       "engines": {
-                               "node": ">=12.0.0"
+                       "license": "MIT",
+                       "dependencies": {
+                               "es-define-property": "^1.0.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/express": {
-                       "version": "5.2.1",
-                       "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
-                       "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+               "node_modules/has-proto": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+                       "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "accepts": "^2.0.0",
-                               "body-parser": "^2.2.1",
-                               "content-disposition": "^1.0.0",
-                               "content-type": "^1.0.5",
-                               "cookie": "^0.7.1",
-                               "cookie-signature": "^1.2.1",
-                               "debug": "^4.4.0",
-                               "depd": "^2.0.0",
-                               "encodeurl": "^2.0.0",
-                               "escape-html": "^1.0.3",
-                               "etag": "^1.8.1",
-                               "finalhandler": "^2.1.0",
-                               "fresh": "^2.0.0",
-                               "http-errors": "^2.0.0",
-                               "merge-descriptors": "^2.0.0",
-                               "mime-types": "^3.0.0",
-                               "on-finished": "^2.4.1",
-                               "once": "^1.4.0",
-                               "parseurl": "^1.3.3",
-                               "proxy-addr": "^2.0.7",
-                               "qs": "^6.14.0",
-                               "range-parser": "^1.2.1",
-                               "router": "^2.2.0",
-                               "send": "^1.1.0",
-                               "serve-static": "^2.2.0",
-                               "statuses": "^2.0.1",
-                               "type-is": "^2.0.1",
-                               "vary": "^1.1.2"
+                               "dunder-proto": "^1.0.0"
                        },
                        "engines": {
-                               "node": ">= 18"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/express-rate-limit": {
-                       "version": "8.5.2",
-                       "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
-                       "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
+               "node_modules/has-symbols": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+                       "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/has-tostringtag": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+                       "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "ip-address": "^10.2.0"
+                               "has-symbols": "^1.0.3"
                        },
                        "engines": {
-                               "node": ">= 16"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/express-rate-limit"
-                       },
-                       "peerDependencies": {
-                               "express": ">= 4.11"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/extend": {
-                       "version": "3.0.2",
-                       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-                       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+               "node_modules/hasown": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+                       "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "function-bind": "^1.1.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
                },
-               "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==",
+               "node_modules/hast-util-from-dom": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz",
+                       "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "ISC",
+                       "dependencies": {
+                               "@types/hast": "^3.0.0",
+                               "hastscript": "^9.0.0",
+                               "web-namespaces": "^2.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
+                       }
                },
-               "node_modules/fast-json-stable-stringify": {
-                       "version": "2.1.0",
-                       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-                       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+               "node_modules/hast-util-from-html": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
+                       "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/hast": "^3.0.0",
+                               "devlop": "^1.1.0",
+                               "hast-util-from-parse5": "^8.0.0",
+                               "parse5": "^7.0.0",
+                               "vfile": "^6.0.0",
+                               "vfile-message": "^4.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
+                       }
                },
-               "node_modules/fast-levenshtein": {
-                       "version": "2.0.6",
-                       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-                       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+               "node_modules/hast-util-from-html-isomorphic": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz",
+                       "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/hast": "^3.0.0",
+                               "hast-util-from-dom": "^5.0.0",
+                               "hast-util-from-html": "^2.0.0",
+                               "unist-util-remove-position": "^5.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
+                       }
                },
-               "node_modules/fast-uri": {
-                       "version": "3.1.2",
-                       "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
-                       "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
+               "node_modules/hast-util-from-html/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
                        "dev": true,
-                       "funding": [
-                               {
-                                       "type": "github",
-                                       "url": "https://github.com/sponsors/fastify"
-                               },
-                               {
-                                       "type": "opencollective",
-                                       "url": "https://opencollective.com/fastify"
-                               }
-                       ],
-                       "license": "BSD-3-Clause"
+                       "license": "MIT"
                },
-               "node_modules/fdir": {
-                       "version": "6.5.0",
-                       "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
-                       "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+               "node_modules/hast-util-from-html/node_modules/vfile-message": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+                       "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">=12.0.0"
-                       },
-                       "peerDependencies": {
-                               "picomatch": "^3 || ^4"
+                       "dependencies": {
+                               "@types/unist": "^3.0.0",
+                               "unist-util-stringify-position": "^4.0.0"
                        },
-                       "peerDependenciesMeta": {
-                               "picomatch": {
-                                       "optional": true
-                               }
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/file-entry-cache": {
-                       "version": "8.0.0",
-                       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
-                       "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+               "node_modules/hast-util-from-parse5": {
+                       "version": "8.0.3",
+                       "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+                       "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "flat-cache": "^4.0.0"
+                               "@types/hast": "^3.0.0",
+                               "@types/unist": "^3.0.0",
+                               "devlop": "^1.0.0",
+                               "hastscript": "^9.0.0",
+                               "property-information": "^7.0.0",
+                               "vfile": "^6.0.0",
+                               "vfile-location": "^5.0.0",
+                               "web-namespaces": "^2.0.0"
                        },
-                       "engines": {
-                               "node": ">=16.0.0"
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/filesize": {
-                       "version": "10.1.6",
-                       "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz",
-                       "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==",
+               "node_modules/hast-util-from-parse5/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
-                       "engines": {
-                               "node": ">= 10.4.0"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/fill-range": {
-                       "version": "7.1.1",
-                       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-                       "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+               "node_modules/hast-util-is-element": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+                       "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
                        "dependencies": {
-                               "to-regex-range": "^5.0.1"
+                               "@types/hast": "^3.0.0"
                        },
-                       "engines": {
-                               "node": ">=8"
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/finalhandler": {
-                       "version": "2.1.1",
-                       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
-                       "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
+               "node_modules/hast-util-parse-selector": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+                       "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "debug": "^4.4.0",
-                               "encodeurl": "^2.0.0",
-                               "escape-html": "^1.0.3",
-                               "on-finished": "^2.4.1",
-                               "parseurl": "^1.3.3",
-                               "statuses": "^2.0.1"
-                       },
-                       "engines": {
-                               "node": ">= 18.0.0"
+                               "@types/hast": "^3.0.0"
                        },
                        "funding": {
                                "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "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==",
+               "node_modules/hast-util-sanitize": {
+                       "version": "5.0.2",
+                       "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz",
+                       "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "locate-path": "^6.0.0",
-                               "path-exists": "^4.0.0"
+                               "@types/hast": "^3.0.0",
+                               "@ungap/structured-clone": "^1.0.0",
+                               "unist-util-position": "^5.0.0"
                        },
-                       "engines": {
-                               "node": ">=10"
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
+                       }
+               },
+               "node_modules/hast-util-to-html": {
+                       "version": "9.0.5",
+                       "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+                       "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/hast": "^3.0.0",
+                               "@types/unist": "^3.0.0",
+                               "ccount": "^2.0.0",
+                               "comma-separated-tokens": "^2.0.0",
+                               "hast-util-whitespace": "^3.0.0",
+                               "html-void-elements": "^3.0.0",
+                               "mdast-util-to-hast": "^13.0.0",
+                               "property-information": "^7.0.0",
+                               "space-separated-tokens": "^2.0.0",
+                               "stringify-entities": "^4.0.0",
+                               "zwitch": "^2.0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/flat-cache": {
-                       "version": "4.0.1",
-                       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
-                       "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+               "node_modules/hast-util-to-html/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/hast-util-to-text": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+                       "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "flatted": "^3.2.9",
-                               "keyv": "^4.5.4"
+                               "@types/hast": "^3.0.0",
+                               "@types/unist": "^3.0.0",
+                               "hast-util-is-element": "^3.0.0",
+                               "unist-util-find-after": "^5.0.0"
                        },
-                       "engines": {
-                               "node": ">=16"
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/flatted": {
-                       "version": "3.4.2",
-                       "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
-                       "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
+               "node_modules/hast-util-to-text/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
                        "dev": true,
-                       "license": "ISC"
+                       "license": "MIT"
                },
-               "node_modules/follow-redirects": {
-                       "version": "1.16.0",
-                       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
-                       "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+               "node_modules/hast-util-whitespace": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+                       "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
                        "dev": true,
-                       "funding": [
-                               {
-                                       "type": "individual",
-                                       "url": "https://github.com/sponsors/RubenVerborgh"
-                               }
-                       ],
                        "license": "MIT",
-                       "engines": {
-                               "node": ">=4.0"
+                       "dependencies": {
+                               "@types/hast": "^3.0.0"
                        },
-                       "peerDependenciesMeta": {
-                               "debug": {
-                                       "optional": true
-                               }
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/forwarded": {
-                       "version": "0.2.0",
-                       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-                       "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+               "node_modules/hastscript": {
+                       "version": "9.0.1",
+                       "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+                       "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">= 0.6"
+                       "dependencies": {
+                               "@types/hast": "^3.0.0",
+                               "comma-separated-tokens": "^2.0.0",
+                               "hast-util-parse-selector": "^4.0.0",
+                               "property-information": "^7.0.0",
+                               "space-separated-tokens": "^2.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/fresh": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
-                       "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+               "node_modules/he": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+                       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">= 0.8"
+                       "bin": {
+                               "he": "bin/he"
                        }
                },
-               "node_modules/fsevents": {
-                       "version": "2.3.2",
-                       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-                       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+               "node_modules/highlight.js": {
+                       "version": "11.11.1",
+                       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
+                       "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
                        "dev": true,
-                       "hasInstallScript": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "os": [
-                               "darwin"
-                       ],
+                       "license": "BSD-3-Clause",
                        "engines": {
-                               "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==",
-                       "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "url": "https://github.com/sponsors/ljharb"
+                               "node": ">=12.0.0"
                        }
                },
-               "node_modules/get-intrinsic": {
-                       "version": "1.3.0",
-                       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-                       "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+               "node_modules/hono": {
+                       "version": "4.12.23",
+                       "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.23.tgz",
+                       "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "call-bind-apply-helpers": "^1.0.2",
-                               "es-define-property": "^1.0.1",
-                               "es-errors": "^1.3.0",
-                               "es-object-atoms": "^1.1.1",
-                               "function-bind": "^1.1.2",
-                               "get-proto": "^1.0.1",
-                               "gopd": "^1.2.0",
-                               "has-symbols": "^1.1.0",
-                               "hasown": "^2.0.2",
-                               "math-intrinsics": "^1.1.0"
-                       },
                        "engines": {
-                               "node": ">= 0.4"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/ljharb"
+                               "node": ">=16.9.0"
                        }
                },
-               "node_modules/get-proto": {
-                       "version": "1.0.1",
-                       "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-                       "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+               "node_modules/html-encoding-sniffer": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+                       "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "dunder-proto": "^1.0.1",
-                               "es-object-atoms": "^1.0.0"
+                               "whatwg-encoding": "^2.0.0"
                        },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=12"
                        }
                },
-               "node_modules/glob-parent": {
-                       "version": "6.0.2",
-                       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-                       "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+               "node_modules/html-escaper": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+                       "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "is-glob": "^4.0.3"
-                       },
-                       "engines": {
-                               "node": ">=10.13.0"
-                       }
+                       "license": "MIT"
                },
-               "node_modules/globals": {
-                       "version": "16.3.0",
-                       "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
-                       "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==",
+               "node_modules/html-void-elements": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+                       "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">=18"
-                       },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/gopd": {
-                       "version": "1.2.0",
-                       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-                       "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+               "node_modules/http-errors": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+                       "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "depd": "~2.0.0",
+                               "inherits": "~2.0.4",
+                               "setprototypeof": "~1.2.0",
+                               "statuses": "~2.0.2",
+                               "toidentifier": "~1.0.1"
+                       },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">= 0.8"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/ljharb"
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/graceful-fs": {
-                       "version": "4.2.11",
-                       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-                       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-                       "dev": true,
-                       "license": "ISC"
-               },
-               "node_modules/hachure-fill": {
-                       "version": "0.5.2",
-                       "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
-                       "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/has-flag": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-                       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+               "node_modules/http-proxy": {
+                       "version": "1.18.1",
+                       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+                       "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "eventemitter3": "^4.0.0",
+                               "follow-redirects": "^1.0.0",
+                               "requires-port": "^1.0.0"
+                       },
                        "engines": {
-                               "node": ">=8"
+                               "node": ">=8.0.0"
                        }
                },
-               "node_modules/has-symbols": {
-                       "version": "1.1.0",
-                       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-                       "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+               "node_modules/http-server": {
+                       "version": "14.1.1",
+                       "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
+                       "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
                        "dev": true,
                        "license": "MIT",
-                       "engines": {
-                               "node": ">= 0.4"
+                       "dependencies": {
+                               "basic-auth": "^2.0.1",
+                               "chalk": "^4.1.2",
+                               "corser": "^2.0.1",
+                               "he": "^1.2.0",
+                               "html-encoding-sniffer": "^3.0.0",
+                               "http-proxy": "^1.18.1",
+                               "mime": "^1.6.0",
+                               "minimist": "^1.2.6",
+                               "opener": "^1.5.1",
+                               "portfinder": "^1.0.28",
+                               "secure-compare": "3.0.1",
+                               "union": "~0.5.0",
+                               "url-join": "^4.0.1"
                        },
-                       "funding": {
-                               "url": "https://github.com/sponsors/ljharb"
-                       }
-               },
-               "node_modules/hasown": {
-                       "version": "2.0.2",
-                       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-                       "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "function-bind": "^1.1.2"
+                       "bin": {
+                               "http-server": "bin/http-server"
                        },
                        "engines": {
-                               "node": ">= 0.4"
+                               "node": ">=12"
                        }
                },
-               "node_modules/hast-util-from-dom": {
-                       "version": "5.0.1",
-                       "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz",
-                       "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==",
+               "node_modules/ico-endec": {
+                       "version": "0.1.6",
+                       "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz",
+                       "integrity": "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==",
                        "dev": true,
-                       "license": "ISC",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "hastscript": "^9.0.0",
-                               "web-namespaces": "^2.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
-                       }
+                       "license": "MPL-2.0"
                },
-               "node_modules/hast-util-from-html": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
-                       "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+               "node_modules/iconv-lite": {
+                       "version": "0.7.2",
+                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
+                       "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "devlop": "^1.1.0",
-                               "hast-util-from-parse5": "^8.0.0",
-                               "parse5": "^7.0.0",
-                               "vfile": "^6.0.0",
-                               "vfile-message": "^4.0.0"
+                               "safer-buffer": ">= 2.1.2 < 3.0.0"
+                       },
+                       "engines": {
+                               "node": ">=0.10.0"
                        },
                        "funding": {
                                "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                               "url": "https://opencollective.com/express"
                        }
                },
-               "node_modules/hast-util-from-html-isomorphic": {
-                       "version": "2.0.0",
-                       "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz",
-                       "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==",
+               "node_modules/idb": {
+                       "version": "7.1.1",
+                       "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",
+                       "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==",
+                       "dev": true,
+                       "license": "ISC"
+               },
+               "node_modules/ignore": {
+                       "version": "5.3.2",
+                       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+                       "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "hast-util-from-dom": "^5.0.0",
-                               "hast-util-from-html": "^2.0.0",
-                               "unist-util-remove-position": "^5.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">= 4"
                        }
                },
-               "node_modules/hast-util-from-html/node_modules/@types/unist": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
-                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+               "node_modules/immutable": {
+                       "version": "5.1.6",
+                       "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz",
+                       "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/hast-util-from-html/node_modules/unist-util-stringify-position": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-                       "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+               "node_modules/import-fresh": {
+                       "version": "3.3.1",
+                       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+                       "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/unist": "^3.0.0"
+                               "parent-module": "^1.0.0",
+                               "resolve-from": "^4.0.0"
+                       },
+                       "engines": {
+                               "node": ">=6"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/hast-util-from-html/node_modules/vfile-message": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
-                       "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+               "node_modules/import-meta-resolve": {
+                       "version": "4.2.0",
+                       "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+                       "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/unist": "^3.0.0",
-                               "unist-util-stringify-position": "^4.0.0"
-                       },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
                        }
                },
-               "node_modules/hast-util-from-parse5": {
-                       "version": "8.0.3",
-                       "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
-                       "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+               "node_modules/imurmurhash": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+                       "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "@types/unist": "^3.0.0",
-                               "devlop": "^1.0.0",
-                               "hastscript": "^9.0.0",
-                               "property-information": "^7.0.0",
-                               "vfile": "^6.0.0",
-                               "vfile-location": "^5.0.0",
-                               "web-namespaces": "^2.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">=0.8.19"
                        }
                },
-               "node_modules/hast-util-from-parse5/node_modules/@types/unist": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
-                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+               "node_modules/indent-string": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+                       "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
+               "node_modules/inherits": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+                       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+                       "dev": true,
+                       "license": "ISC"
+               },
+               "node_modules/inline-style-parser": {
+                       "version": "0.2.7",
+                       "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
+                       "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/hast-util-is-element": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
-                       "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+               "node_modules/internal-slot": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+                       "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/hast": "^3.0.0"
+                               "es-errors": "^1.3.0",
+                               "hasown": "^2.0.2",
+                               "side-channel": "^1.1.0"
                        },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/hast-util-parse-selector": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
-                       "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+               "node_modules/internmap": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+                       "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
                        "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=12"
                        }
                },
-               "node_modules/hast-util-sanitize": {
-                       "version": "5.0.2",
-                       "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz",
-                       "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==",
+               "node_modules/ip-address": {
+                       "version": "10.2.0",
+                       "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
+                       "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "@ungap/structured-clone": "^1.0.0",
-                               "unist-util-position": "^5.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">= 12"
                        }
                },
-               "node_modules/hast-util-to-html": {
-                       "version": "9.0.5",
-                       "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
-                       "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+               "node_modules/ipaddr.js": {
+                       "version": "1.9.1",
+                       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+                       "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
                        "dev": true,
                        "license": "MIT",
-                       "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "@types/unist": "^3.0.0",
-                               "ccount": "^2.0.0",
-                               "comma-separated-tokens": "^2.0.0",
-                               "hast-util-whitespace": "^3.0.0",
-                               "html-void-elements": "^3.0.0",
-                               "mdast-util-to-hast": "^13.0.0",
-                               "property-information": "^7.0.0",
-                               "space-separated-tokens": "^2.0.0",
-                               "stringify-entities": "^4.0.0",
-                               "zwitch": "^2.0.4"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                       "engines": {
+                               "node": ">= 0.10"
                        }
                },
-               "node_modules/hast-util-to-html/node_modules/@types/unist": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
-                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/hast-util-to-text": {
-                       "version": "4.0.2",
-                       "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
-                       "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+               "node_modules/is-array-buffer": {
+                       "version": "3.0.5",
+                       "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+                       "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "@types/unist": "^3.0.0",
-                               "hast-util-is-element": "^3.0.0",
-                               "unist-util-find-after": "^5.0.0"
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.3",
+                               "get-intrinsic": "^1.2.6"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
-                       }
-               },
-               "node_modules/hast-util-to-text/node_modules/@types/unist": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
-                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/is-arrayish": {
+                       "version": "0.3.4",
+                       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
+                       "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/hast-util-whitespace": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
-                       "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+               "node_modules/is-async-function": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+                       "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/hast": "^3.0.0"
+                               "async-function": "^1.0.0",
+                               "call-bound": "^1.0.3",
+                               "get-proto": "^1.0.1",
+                               "has-tostringtag": "^1.0.2",
+                               "safe-regex-test": "^1.1.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/hastscript": {
-                       "version": "9.0.1",
-                       "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
-                       "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+               "node_modules/is-bigint": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+                       "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/hast": "^3.0.0",
-                               "comma-separated-tokens": "^2.0.0",
-                               "hast-util-parse-selector": "^4.0.0",
-                               "property-information": "^7.0.0",
-                               "space-separated-tokens": "^2.0.0"
+                               "has-bigints": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/he": {
-                       "version": "1.2.0",
-                       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-                       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+               "node_modules/is-boolean-object": {
+                       "version": "1.2.2",
+                       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+                       "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
                        "dev": true,
                        "license": "MIT",
-                       "bin": {
-                               "he": "bin/he"
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "has-tostringtag": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/highlight.js": {
-                       "version": "11.11.1",
-                       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
-                       "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+               "node_modules/is-callable": {
+                       "version": "1.2.7",
+                       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+                       "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
                        "dev": true,
-                       "license": "BSD-3-Clause",
+                       "license": "MIT",
                        "engines": {
-                               "node": ">=12.0.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/hono": {
-                       "version": "4.12.19",
-                       "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.19.tgz",
-                       "integrity": "sha512-xa3eYXYXx68XTT4hZ7dRzsXBhaq85ToSrlUJNoR0gwz/1Ap/CNwX47wfvV7pc/xWhjKVVkLT7zBJy8chhNguqQ==",
+               "node_modules/is-core-module": {
+                       "version": "2.16.2",
+                       "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+                       "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "hasown": "^2.0.3"
+                       },
                        "engines": {
-                               "node": ">=16.9.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/html-encoding-sniffer": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
-                       "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+               "node_modules/is-data-view": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+                       "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "whatwg-encoding": "^2.0.0"
+                               "call-bound": "^1.0.2",
+                               "get-intrinsic": "^1.2.6",
+                               "is-typed-array": "^1.1.13"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/html-escaper": {
-                       "version": "2.0.2",
-                       "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-                       "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+               "node_modules/is-date-object": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+                       "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.2",
+                               "has-tostringtag": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
                },
-               "node_modules/html-void-elements": {
+               "node_modules/is-docker": {
                        "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
-                       "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+                       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+                       "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
                        "dev": true,
                        "license": "MIT",
+                       "bin": {
+                               "is-docker": "cli.js"
+                       },
+                       "engines": {
+                               "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+                       },
                        "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/http-errors": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
-                       "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+               "node_modules/is-extglob": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+                       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=0.10.0"
+                       }
+               },
+               "node_modules/is-finalizationregistry": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+                       "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "depd": "~2.0.0",
-                               "inherits": "~2.0.4",
-                               "setprototypeof": "~1.2.0",
-                               "statuses": "~2.0.2",
-                               "toidentifier": "~1.0.1"
+                               "call-bound": "^1.0.3"
                        },
                        "engines": {
-                               "node": ">= 0.8"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/http-proxy": {
-                       "version": "1.18.1",
-                       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-                       "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+               "node_modules/is-generator-function": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
+                       "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "eventemitter3": "^4.0.0",
-                               "follow-redirects": "^1.0.0",
-                               "requires-port": "^1.0.0"
+                               "call-bound": "^1.0.4",
+                               "generator-function": "^2.0.0",
+                               "get-proto": "^1.0.1",
+                               "has-tostringtag": "^1.0.2",
+                               "safe-regex-test": "^1.1.0"
                        },
                        "engines": {
-                               "node": ">=8.0.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/http-server": {
-                       "version": "14.1.1",
-                       "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
-                       "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
+               "node_modules/is-glob": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+                       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "basic-auth": "^2.0.1",
-                               "chalk": "^4.1.2",
-                               "corser": "^2.0.1",
-                               "he": "^1.2.0",
-                               "html-encoding-sniffer": "^3.0.0",
-                               "http-proxy": "^1.18.1",
-                               "mime": "^1.6.0",
-                               "minimist": "^1.2.6",
-                               "opener": "^1.5.1",
-                               "portfinder": "^1.0.28",
-                               "secure-compare": "3.0.1",
-                               "union": "~0.5.0",
-                               "url-join": "^4.0.1"
-                       },
-                       "bin": {
-                               "http-server": "bin/http-server"
+                               "is-extglob": "^2.1.1"
                        },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/iconv-lite": {
-                       "version": "0.6.3",
-                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-                       "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+               "node_modules/is-inside-container": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+                       "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "safer-buffer": ">= 2.1.2 < 3.0.0"
+                               "is-docker": "^3.0.0"
+                       },
+                       "bin": {
+                               "is-inside-container": "cli.js"
                        },
                        "engines": {
-                               "node": ">=0.10.0"
+                               "node": ">=14.16"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/ignore": {
-                       "version": "5.3.2",
-                       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-                       "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+               "node_modules/is-map": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+                       "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">= 4"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/immutable": {
-                       "version": "5.1.5",
-                       "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz",
-                       "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==",
+               "node_modules/is-module": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+                       "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
                        "dev": true,
                        "license": "MIT"
                },
-               "node_modules/import-fresh": {
-                       "version": "3.3.1",
-                       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
-                       "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+               "node_modules/is-negative-zero": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+                       "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/is-number-object": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+                       "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "parent-module": "^1.0.0",
-                               "resolve-from": "^4.0.0"
+                               "call-bound": "^1.0.3",
+                               "has-tostringtag": "^1.0.2"
                        },
                        "engines": {
-                               "node": ">=6"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/is-obj": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+                       "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=0.10.0"
+                       }
+               },
+               "node_modules/is-plain-obj": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+                       "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=12"
                        },
                        "funding": {
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/import-meta-resolve": {
-                       "version": "4.2.0",
-                       "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
-                       "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+               "node_modules/is-promise": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+                       "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/is-reference": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
+                       "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
                        "dev": true,
                        "license": "MIT",
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "dependencies": {
+                               "@types/estree": "^1.0.6"
                        }
                },
-               "node_modules/imurmurhash": {
-                       "version": "0.1.4",
-                       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-                       "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+               "node_modules/is-regex": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+                       "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.2",
+                               "gopd": "^1.2.0",
+                               "has-tostringtag": "^1.0.2",
+                               "hasown": "^2.0.2"
+                       },
                        "engines": {
-                               "node": ">=0.8.19"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/indent-string": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-                       "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+               "node_modules/is-regexp": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+                       "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=8"
+                               "node": ">=0.10.0"
                        }
                },
-               "node_modules/inherits": {
-                       "version": "2.0.4",
-                       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-                       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-                       "dev": true,
-                       "license": "ISC"
-               },
-               "node_modules/inline-style-parser": {
-                       "version": "0.2.4",
-                       "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
-                       "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/internmap": {
+               "node_modules/is-set": {
                        "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
-                       "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
-                       "dev": true,
-                       "license": "ISC",
-                       "engines": {
-                               "node": ">=12"
-                       }
-               },
-               "node_modules/ip-address": {
-                       "version": "10.2.0",
-                       "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
-                       "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
+                       "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+                       "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">= 12"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/ipaddr.js": {
-                       "version": "1.9.1",
-                       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-                       "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+               "node_modules/is-shared-array-buffer": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+                       "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3"
+                       },
                        "engines": {
-                               "node": ">= 0.10"
+                               "node": ">= 0.4"
+                       },
+                       "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",
-                       "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+               "node_modules/is-stream": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+                       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
                        "dev": true,
                        "license": "MIT",
-                       "bin": {
-                               "is-docker": "cli.js"
-                       },
                        "engines": {
-                               "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+                               "node": ">=8"
                        },
                        "funding": {
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
-               "node_modules/is-extglob": {
-                       "version": "2.1.1",
-                       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-                       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+               "node_modules/is-string": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+                       "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "has-tostringtag": "^1.0.2"
+                       },
                        "engines": {
-                               "node": ">=0.10.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/is-glob": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-                       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+               "node_modules/is-symbol": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+                       "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "is-extglob": "^2.1.1"
+                               "call-bound": "^1.0.2",
+                               "has-symbols": "^1.1.0",
+                               "safe-regex-test": "^1.1.0"
                        },
                        "engines": {
-                               "node": ">=0.10.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/is-inside-container": {
-                       "version": "1.0.0",
-                       "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
-                       "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+               "node_modules/is-typed-array": {
+                       "version": "1.1.15",
+                       "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+                       "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "is-docker": "^3.0.0"
-                       },
-                       "bin": {
-                               "is-inside-container": "cli.js"
+                               "which-typed-array": "^1.1.16"
                        },
                        "engines": {
-                               "node": ">=14.16"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/is-number": {
-                       "version": "7.0.0",
-                       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+               "node_modules/is-weakmap": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+                       "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
                        "dev": true,
                        "license": "MIT",
-                       "optional": true,
                        "engines": {
-                               "node": ">=0.12.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/is-plain-obj": {
-                       "version": "4.1.0",
-                       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
-                       "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+               "node_modules/is-weakref": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+                       "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
                        "dev": true,
                        "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3"
+                       },
                        "engines": {
-                               "node": ">=12"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/is-promise": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
-                       "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+               "node_modules/is-weakset": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+                       "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
                        "dev": true,
-                       "license": "MIT"
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "get-intrinsic": "^1.2.6"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
                },
                "node_modules/is-wsl": {
-                       "version": "3.1.0",
-                       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
-                       "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+                       "version": "3.1.1",
+                       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+                       "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
+               "node_modules/isarray": {
+                       "version": "2.0.5",
+                       "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+                       "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/isexe": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
                                "node": ">=8"
                        }
                },
+               "node_modules/jake": {
+                       "version": "10.9.4",
+                       "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+                       "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+                       "dev": true,
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "async": "^3.2.6",
+                               "filelist": "^1.0.4",
+                               "picocolors": "^1.1.1"
+                       },
+                       "bin": {
+                               "jake": "bin/cli.js"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       }
+               },
                "node_modules/jiti": {
-                       "version": "2.4.2",
-                       "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
-                       "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
+                       "version": "2.7.0",
+                       "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
+                       "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
                        "dev": true,
                        "license": "MIT",
                        "bin": {
                        }
                },
                "node_modules/jose": {
-                       "version": "6.1.3",
-                       "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz",
-                       "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==",
+                       "version": "6.2.3",
+                       "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz",
+                       "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==",
                        "dev": true,
                        "license": "MIT",
                        "funding": {
                        }
                },
                "node_modules/js-tokens": {
-                       "version": "10.0.0",
-                       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
-                       "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+                       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
                        "dev": true,
                        "license": "MIT"
                },
                "node_modules/js-yaml": {
-                       "version": "4.1.1",
-                       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
-                       "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+                       "version": "4.2.0",
+                       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
+                       "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
                        "dev": true,
+                       "funding": [
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/puzrin"
+                               },
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/nodeca"
+                               }
+                       ],
                        "license": "MIT",
                        "dependencies": {
                                "argparse": "^2.0.1"
                                "js-yaml": "bin/js-yaml.js"
                        }
                },
+               "node_modules/jsesc": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+                       "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "bin": {
+                               "jsesc": "bin/jsesc"
+                       },
+                       "engines": {
+                               "node": ">=6"
+                       }
+               },
                "node_modules/json-buffer": {
                        "version": "3.0.1",
                        "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
                        "license": "MIT"
                },
                "node_modules/json-schema-traverse": {
-                       "version": "0.4.1",
-                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-                       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+                       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
                        "dev": true,
                        "license": "MIT"
                },
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/json5": {
+                       "version": "2.2.3",
+                       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+                       "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "bin": {
+                               "json5": "lib/cli.js"
+                       },
+                       "engines": {
+                               "node": ">=6"
+                       }
+               },
                "node_modules/jsonfile": {
-                       "version": "6.1.0",
-                       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-                       "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+                       "version": "6.2.1",
+                       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
+                       "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "graceful-fs": "^4.1.6"
                        }
                },
+               "node_modules/jsonpointer": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+                       "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=0.10.0"
+                       }
+               },
                "node_modules/katex": {
                        "version": "0.16.47",
                        "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
                                "katex": "cli.js"
                        }
                },
+               "node_modules/katex/node_modules/commander": {
+                       "version": "8.3.0",
+                       "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+                       "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 12"
+                       }
+               },
                "node_modules/keyv": {
                        "version": "4.5.4",
                        "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/kolorist": {
+                       "version": "1.8.0",
+                       "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
+                       "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/layout-base": {
                        "version": "1.0.2",
                        "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/leven": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+                       "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=6"
+                       }
+               },
                "node_modules/levn": {
                        "version": "0.4.1",
                        "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/lodash.debounce": {
+                       "version": "4.0.8",
+                       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+                       "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/lodash.isplainobject": {
                        "version": "4.0.6",
                        "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/lodash.sortby": {
+                       "version": "4.7.0",
+                       "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+                       "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/longest-streak": {
                        "version": "3.1.0",
                        "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
                        }
                },
                "node_modules/loupe": {
-                       "version": "3.1.4",
-                       "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz",
-                       "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==",
+                       "version": "3.2.1",
+                       "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+                       "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
                        "dev": true,
                        "license": "MIT"
                },
                        "version": "3.0.0",
                        "resolved": "https://registry.npmjs.org/mdast/-/mdast-3.0.0.tgz",
                        "integrity": "sha512-xySmf8g4fPKMeC07jXGz971EkLbWAJ83s4US2Tj9lEdnZ142UP5grN73H1Xd3HzrdbU5o9GYYP/y8F9ZSwLE9g==",
+                       "deprecated": "`mdast` was renamed to `remark`",
                        "dev": true,
                        "license": "MIT"
                },
                        }
                },
                "node_modules/mdast-util-from-markdown": {
-                       "version": "2.0.2",
-                       "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
-                       "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+                       "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
                        "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
                        "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-                       "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@types/unist": "^3.0.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/unified"
-                       }
+                       "license": "MIT"
                },
                "node_modules/mdast-util-gfm": {
                        "version": "3.1.0",
                        }
                },
                "node_modules/mdsvex": {
-                       "version": "0.12.6",
-                       "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.12.6.tgz",
-                       "integrity": "sha512-pupx2gzWh3hDtm/iDW4WuCpljmyHbHi34r7ktOqpPGvyiM4MyfNgdJ3qMizXdgCErmvYC9Nn/qyjePy+4ss9Wg==",
+                       "version": "0.12.7",
+                       "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.12.7.tgz",
+                       "integrity": "sha512-gx4bReLCUvq+MPErHXYeyX+TEq1hsS2KfiZtEOMNTcbibSouFy8AHc5h04KbGCl+g5tLuo4/lbgRVYRnc7bJZw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        ],
                        "license": "MIT"
                },
-               "node_modules/micromatch": {
-                       "version": "4.0.8",
-                       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
-                       "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-                       "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "dependencies": {
-                               "braces": "^3.0.3",
-                               "picomatch": "^2.3.1"
-                       },
-                       "engines": {
-                               "node": ">=8.6"
-                       }
-               },
-               "node_modules/micromatch/node_modules/picomatch": {
-                       "version": "2.3.2",
-                       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
-                       "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
-                       "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "engines": {
-                               "node": ">=8.6"
-                       },
-                       "funding": {
-                               "url": "https://github.com/sponsors/jonschlinkert"
-                       }
-               },
                "node_modules/mime": {
                        "version": "1.6.0",
                        "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
                        }
                },
                "node_modules/minipass": {
-                       "version": "7.1.2",
-                       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
-                       "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+                       "version": "7.1.3",
+                       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+                       "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
                        "dev": true,
-                       "license": "ISC",
+                       "license": "BlueOak-1.0.0",
                        "engines": {
                                "node": ">=16 || 14 >=14.17"
                        }
                                "svelte": "^5.27.0"
                        }
                },
+               "node_modules/mode-watcher/node_modules/runed": {
+                       "version": "0.25.0",
+                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.25.0.tgz",
+                       "integrity": "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==",
+                       "dev": true,
+                       "funding": [
+                               "https://github.com/sponsors/huntabyte",
+                               "https://github.com/sponsors/tglide"
+                       ],
+                       "dependencies": {
+                               "esm-env": "^1.0.0"
+                       },
+                       "peerDependencies": {
+                               "svelte": "^5.7.0"
+                       }
+               },
+               "node_modules/mode-watcher/node_modules/svelte-toolbelt": {
+                       "version": "0.7.1",
+                       "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz",
+                       "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==",
+                       "dev": true,
+                       "funding": [
+                               "https://github.com/sponsors/huntabyte"
+                       ],
+                       "dependencies": {
+                               "clsx": "^2.1.1",
+                               "runed": "^0.23.2",
+                               "style-to-object": "^1.0.8"
+                       },
+                       "engines": {
+                               "node": ">=18",
+                               "pnpm": ">=8.7.0"
+                       },
+                       "peerDependencies": {
+                               "svelte": "^5.0.0"
+                       }
+               },
+               "node_modules/mode-watcher/node_modules/svelte-toolbelt/node_modules/runed": {
+                       "version": "0.23.4",
+                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz",
+                       "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==",
+                       "dev": true,
+                       "funding": [
+                               "https://github.com/sponsors/huntabyte",
+                               "https://github.com/sponsors/tglide"
+                       ],
+                       "dependencies": {
+                               "esm-env": "^1.0.0"
+                       },
+                       "peerDependencies": {
+                               "svelte": "^5.7.0"
+                       }
+               },
                "node_modules/mri": {
                        "version": "1.2.0",
                        "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
                        "license": "MIT"
                },
                "node_modules/nanoid": {
-                       "version": "3.3.11",
-                       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-                       "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+                       "version": "3.3.12",
+                       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
+                       "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
                        "dev": true,
                        "funding": [
                                {
                        "license": "MIT",
                        "optional": true
                },
+               "node_modules/node-releases": {
+                       "version": "2.0.47",
+                       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz",
+                       "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
                "node_modules/object-assign": {
                        "version": "4.1.1",
                        "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
                                "url": "https://github.com/sponsors/ljharb"
                        }
                },
+               "node_modules/object-keys": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+                       "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
+               "node_modules/object.assign": {
+                       "version": "4.1.7",
+                       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+                       "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.3",
+                               "define-properties": "^1.2.1",
+                               "es-object-atoms": "^1.0.0",
+                               "has-symbols": "^1.1.0",
+                               "object-keys": "^1.1.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/obug": {
                        "version": "2.1.2",
                        "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.2.tgz",
                                "node": ">= 0.8.0"
                        }
                },
+               "node_modules/own-keys": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+                       "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "get-intrinsic": "^1.2.6",
+                               "object-keys": "^1.1.1",
+                               "safe-push-apply": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/oxc-parser": {
+                       "version": "0.127.0",
+                       "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.127.0.tgz",
+                       "integrity": "sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@oxc-project/types": "^0.127.0"
+                       },
+                       "engines": {
+                               "node": "^20.19.0 || >=22.12.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/Boshen"
+                       },
+                       "optionalDependencies": {
+                               "@oxc-parser/binding-android-arm-eabi": "0.127.0",
+                               "@oxc-parser/binding-android-arm64": "0.127.0",
+                               "@oxc-parser/binding-darwin-arm64": "0.127.0",
+                               "@oxc-parser/binding-darwin-x64": "0.127.0",
+                               "@oxc-parser/binding-freebsd-x64": "0.127.0",
+                               "@oxc-parser/binding-linux-arm-gnueabihf": "0.127.0",
+                               "@oxc-parser/binding-linux-arm-musleabihf": "0.127.0",
+                               "@oxc-parser/binding-linux-arm64-gnu": "0.127.0",
+                               "@oxc-parser/binding-linux-arm64-musl": "0.127.0",
+                               "@oxc-parser/binding-linux-ppc64-gnu": "0.127.0",
+                               "@oxc-parser/binding-linux-riscv64-gnu": "0.127.0",
+                               "@oxc-parser/binding-linux-riscv64-musl": "0.127.0",
+                               "@oxc-parser/binding-linux-s390x-gnu": "0.127.0",
+                               "@oxc-parser/binding-linux-x64-gnu": "0.127.0",
+                               "@oxc-parser/binding-linux-x64-musl": "0.127.0",
+                               "@oxc-parser/binding-openharmony-arm64": "0.127.0",
+                               "@oxc-parser/binding-wasm32-wasi": "0.127.0",
+                               "@oxc-parser/binding-win32-arm64-msvc": "0.127.0",
+                               "@oxc-parser/binding-win32-ia32-msvc": "0.127.0",
+                               "@oxc-parser/binding-win32-x64-msvc": "0.127.0"
+                       }
+               },
+               "node_modules/oxc-resolver": {
+                       "version": "11.20.0",
+                       "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.20.0.tgz",
+                       "integrity": "sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==",
+                       "dev": true,
+                       "license": "MIT",
+                       "funding": {
+                               "url": "https://github.com/sponsors/Boshen"
+                       },
+                       "optionalDependencies": {
+                               "@oxc-resolver/binding-android-arm-eabi": "11.20.0",
+                               "@oxc-resolver/binding-android-arm64": "11.20.0",
+                               "@oxc-resolver/binding-darwin-arm64": "11.20.0",
+                               "@oxc-resolver/binding-darwin-x64": "11.20.0",
+                               "@oxc-resolver/binding-freebsd-x64": "11.20.0",
+                               "@oxc-resolver/binding-linux-arm-gnueabihf": "11.20.0",
+                               "@oxc-resolver/binding-linux-arm-musleabihf": "11.20.0",
+                               "@oxc-resolver/binding-linux-arm64-gnu": "11.20.0",
+                               "@oxc-resolver/binding-linux-arm64-musl": "11.20.0",
+                               "@oxc-resolver/binding-linux-ppc64-gnu": "11.20.0",
+                               "@oxc-resolver/binding-linux-riscv64-gnu": "11.20.0",
+                               "@oxc-resolver/binding-linux-riscv64-musl": "11.20.0",
+                               "@oxc-resolver/binding-linux-s390x-gnu": "11.20.0",
+                               "@oxc-resolver/binding-linux-x64-gnu": "11.20.0",
+                               "@oxc-resolver/binding-linux-x64-musl": "11.20.0",
+                               "@oxc-resolver/binding-openharmony-arm64": "11.20.0",
+                               "@oxc-resolver/binding-wasm32-wasi": "11.20.0",
+                               "@oxc-resolver/binding-win32-arm64-msvc": "11.20.0",
+                               "@oxc-resolver/binding-win32-x64-msvc": "11.20.0"
+                       }
+               },
                "node_modules/p-limit": {
                        "version": "3.1.0",
                        "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
+               "node_modules/package-json-from-dist": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+                       "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0"
+               },
                "node_modules/package-manager-detector": {
                        "version": "1.6.0",
                        "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
                                "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==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/path-to-regexp": {
                        "version": "8.4.2",
                        "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
                                "node": ">= 10.12"
                        }
                },
+               "node_modules/possible-typed-array-names": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+                       "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
                "node_modules/postcss": {
-                       "version": "8.5.14",
-                       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
-                       "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
+                       "version": "8.5.15",
+                       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
+                       "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
                        "dev": true,
                        "funding": [
                                {
                        ],
                        "license": "MIT",
                        "dependencies": {
-                               "nanoid": "^3.3.11",
+                               "nanoid": "^3.3.12",
                                "picocolors": "^1.1.1",
                                "source-map-js": "^1.2.1"
                        },
                        }
                },
                "node_modules/prettier": {
-                       "version": "3.6.2",
-                       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
-                       "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+                       "version": "3.8.3",
+                       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz",
+                       "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==",
                        "dev": true,
                        "license": "MIT",
                        "bin": {
                        }
                },
                "node_modules/prettier-plugin-svelte": {
-                       "version": "3.4.0",
-                       "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz",
-                       "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==",
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-4.1.0.tgz",
+                       "integrity": "sha512-YZkhA2Q9oOerFFG9tq+2f98WYT7Z2JgrybJrAyrB78jpsH9i/DdgplXemehuFPgsldetFNCcR/yCcYlDjPy94Q==",
                        "dev": true,
                        "license": "MIT",
+                       "engines": {
+                               "node": ">=20"
+                       },
                        "peerDependencies": {
                                "prettier": "^3.0.0",
-                               "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
+                               "svelte": "^5.0.0"
                        }
                },
                "node_modules/prettier-plugin-tailwindcss": {
-                       "version": "0.6.14",
-                       "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz",
-                       "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==",
+                       "version": "0.8.0",
+                       "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.8.0.tgz",
+                       "integrity": "sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">=14.21.3"
+                               "node": ">=20.19"
                        },
                        "peerDependencies": {
                                "@ianvs/prettier-plugin-sort-imports": "*",
                                "prettier": "^3.0",
                                "prettier-plugin-astro": "*",
                                "prettier-plugin-css-order": "*",
-                               "prettier-plugin-import-sort": "*",
                                "prettier-plugin-jsdoc": "*",
                                "prettier-plugin-marko": "*",
                                "prettier-plugin-multiline-arrays": "*",
                                "prettier-plugin-organize-attributes": "*",
                                "prettier-plugin-organize-imports": "*",
                                "prettier-plugin-sort-imports": "*",
-                               "prettier-plugin-style-order": "*",
                                "prettier-plugin-svelte": "*"
                        },
                        "peerDependenciesMeta": {
                                "prettier-plugin-css-order": {
                                        "optional": true
                                },
-                               "prettier-plugin-import-sort": {
-                                       "optional": true
-                               },
                                "prettier-plugin-jsdoc": {
                                        "optional": true
                                },
                                "prettier-plugin-sort-imports": {
                                        "optional": true
                                },
-                               "prettier-plugin-style-order": {
-                                       "optional": true
-                               },
                                "prettier-plugin-svelte": {
                                        "optional": true
                                }
                        }
                },
+               "node_modules/pretty-bytes": {
+                       "version": "6.1.1",
+                       "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz",
+                       "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": "^14.13.1 || >=16.0.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
+                       }
+               },
                "node_modules/pretty-format": {
                        "version": "27.5.1",
                        "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
                        }
                },
                "node_modules/property-information": {
-                       "version": "7.1.0",
-                       "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
-                       "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+                       "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
                        "dev": true,
                        "license": "MIT",
                        "funding": {
                                "url": "https://github.com/sponsors/ljharb"
                        }
                },
+               "node_modules/quansync": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz",
+                       "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==",
+                       "dev": true,
+                       "funding": [
+                               {
+                                       "type": "individual",
+                                       "url": "https://github.com/sponsors/antfu"
+                               },
+                               {
+                                       "type": "individual",
+                                       "url": "https://github.com/sponsors/sxzz"
+                               }
+                       ],
+                       "license": "MIT"
+               },
                "node_modules/range-parser": {
                        "version": "1.2.1",
                        "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
                                "node": ">= 0.10"
                        }
                },
-               "node_modules/raw-body/node_modules/iconv-lite": {
-                       "version": "0.7.2",
-                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
-                       "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "safer-buffer": ">= 2.1.2 < 3.0.0"
-                       },
-                       "engines": {
-                               "node": ">=0.10.0"
-                       },
-                       "funding": {
-                               "type": "opencollective",
-                               "url": "https://opencollective.com/express"
-                       }
-               },
                "node_modules/react": {
-                       "version": "19.1.0",
-                       "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
-                       "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
+                       "version": "19.2.7",
+                       "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz",
+                       "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                        }
                },
                "node_modules/react-dom": {
-                       "version": "19.1.0",
-                       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
-                       "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
+                       "version": "19.2.7",
+                       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz",
+                       "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "scheduler": "^0.26.0"
+                               "scheduler": "^0.27.0"
                        },
                        "peerDependencies": {
-                               "react": "^19.1.0"
+                               "react": "^19.2.7"
                        }
                },
                "node_modules/react-is": {
                        "peer": true
                },
                "node_modules/readdirp": {
-                       "version": "4.1.2",
-                       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
-                       "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
+                       "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
-                               "node": ">= 14.18.0"
+                               "node": ">= 20.19.0"
                        },
                        "funding": {
                                "type": "individual",
                                "node": ">= 4"
                        }
                },
-               "node_modules/redent": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
-                       "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+               "node_modules/redent": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+                       "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "indent-string": "^4.0.0",
+                               "strip-indent": "^3.0.0"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
+               "node_modules/reflect.getprototypeof": {
+                       "version": "1.0.10",
+                       "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+                       "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "define-properties": "^1.2.1",
+                               "es-abstract": "^1.23.9",
+                               "es-errors": "^1.3.0",
+                               "es-object-atoms": "^1.0.0",
+                               "get-intrinsic": "^1.2.7",
+                               "get-proto": "^1.0.1",
+                               "which-builtin-type": "^1.2.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/regenerate": {
+                       "version": "1.4.2",
+                       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+                       "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/regenerate-unicode-properties": {
+                       "version": "10.2.2",
+                       "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+                       "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "regenerate": "^1.4.2"
+                       },
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
+               "node_modules/regexp.prototype.flags": {
+                       "version": "1.5.4",
+                       "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+                       "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "define-properties": "^1.2.1",
+                               "es-errors": "^1.3.0",
+                               "get-proto": "^1.0.1",
+                               "gopd": "^1.2.0",
+                               "set-function-name": "^2.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/regexpu-core": {
+                       "version": "6.4.0",
+                       "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
+                       "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "regenerate": "^1.4.2",
+                               "regenerate-unicode-properties": "^10.2.2",
+                               "regjsgen": "^0.8.0",
+                               "regjsparser": "^0.13.0",
+                               "unicode-match-property-ecmascript": "^2.0.0",
+                               "unicode-match-property-value-ecmascript": "^2.2.1"
+                       },
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
+               "node_modules/regjsgen": {
+                       "version": "0.8.0",
+                       "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+                       "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/regjsparser": {
+                       "version": "0.13.1",
+                       "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz",
+                       "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==",
                        "dev": true,
-                       "license": "MIT",
+                       "license": "BSD-2-Clause",
                        "dependencies": {
-                               "indent-string": "^4.0.0",
-                               "strip-indent": "^3.0.0"
+                               "jsesc": "~3.1.0"
                        },
-                       "engines": {
-                               "node": ">=8"
+                       "bin": {
+                               "regjsparser": "bin/parser"
                        }
                },
                "node_modules/rehype-highlight": {
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/resolve": {
+                       "version": "1.22.12",
+                       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+                       "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "es-errors": "^1.3.0",
+                               "is-core-module": "^2.16.1",
+                               "path-parse": "^1.0.7",
+                               "supports-preserve-symlinks-flag": "^1.0.0"
+                       },
+                       "bin": {
+                               "resolve": "bin/resolve"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/resolve-from": {
                        "version": "4.0.0",
                        "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
                        "license": "Unlicense"
                },
                "node_modules/rollup": {
-                       "version": "4.60.1",
-                       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz",
-                       "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==",
+                       "version": "4.61.1",
+                       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz",
+                       "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/estree": "1.0.8"
+                               "@types/estree": "1.0.9"
                        },
                        "bin": {
                                "rollup": "dist/bin/rollup"
                                "npm": ">=8.0.0"
                        },
                        "optionalDependencies": {
-                               "@rollup/rollup-android-arm-eabi": "4.60.1",
-                               "@rollup/rollup-android-arm64": "4.60.1",
-                               "@rollup/rollup-darwin-arm64": "4.60.1",
-                               "@rollup/rollup-darwin-x64": "4.60.1",
-                               "@rollup/rollup-freebsd-arm64": "4.60.1",
-                               "@rollup/rollup-freebsd-x64": "4.60.1",
-                               "@rollup/rollup-linux-arm-gnueabihf": "4.60.1",
-                               "@rollup/rollup-linux-arm-musleabihf": "4.60.1",
-                               "@rollup/rollup-linux-arm64-gnu": "4.60.1",
-                               "@rollup/rollup-linux-arm64-musl": "4.60.1",
-                               "@rollup/rollup-linux-loong64-gnu": "4.60.1",
-                               "@rollup/rollup-linux-loong64-musl": "4.60.1",
-                               "@rollup/rollup-linux-ppc64-gnu": "4.60.1",
-                               "@rollup/rollup-linux-ppc64-musl": "4.60.1",
-                               "@rollup/rollup-linux-riscv64-gnu": "4.60.1",
-                               "@rollup/rollup-linux-riscv64-musl": "4.60.1",
-                               "@rollup/rollup-linux-s390x-gnu": "4.60.1",
-                               "@rollup/rollup-linux-x64-gnu": "4.60.1",
-                               "@rollup/rollup-linux-x64-musl": "4.60.1",
-                               "@rollup/rollup-openbsd-x64": "4.60.1",
-                               "@rollup/rollup-openharmony-arm64": "4.60.1",
-                               "@rollup/rollup-win32-arm64-msvc": "4.60.1",
-                               "@rollup/rollup-win32-ia32-msvc": "4.60.1",
-                               "@rollup/rollup-win32-x64-gnu": "4.60.1",
-                               "@rollup/rollup-win32-x64-msvc": "4.60.1",
+                               "@rollup/rollup-android-arm-eabi": "4.61.1",
+                               "@rollup/rollup-android-arm64": "4.61.1",
+                               "@rollup/rollup-darwin-arm64": "4.61.1",
+                               "@rollup/rollup-darwin-x64": "4.61.1",
+                               "@rollup/rollup-freebsd-arm64": "4.61.1",
+                               "@rollup/rollup-freebsd-x64": "4.61.1",
+                               "@rollup/rollup-linux-arm-gnueabihf": "4.61.1",
+                               "@rollup/rollup-linux-arm-musleabihf": "4.61.1",
+                               "@rollup/rollup-linux-arm64-gnu": "4.61.1",
+                               "@rollup/rollup-linux-arm64-musl": "4.61.1",
+                               "@rollup/rollup-linux-loong64-gnu": "4.61.1",
+                               "@rollup/rollup-linux-loong64-musl": "4.61.1",
+                               "@rollup/rollup-linux-ppc64-gnu": "4.61.1",
+                               "@rollup/rollup-linux-ppc64-musl": "4.61.1",
+                               "@rollup/rollup-linux-riscv64-gnu": "4.61.1",
+                               "@rollup/rollup-linux-riscv64-musl": "4.61.1",
+                               "@rollup/rollup-linux-s390x-gnu": "4.61.1",
+                               "@rollup/rollup-linux-x64-gnu": "4.61.1",
+                               "@rollup/rollup-linux-x64-musl": "4.61.1",
+                               "@rollup/rollup-openbsd-x64": "4.61.1",
+                               "@rollup/rollup-openharmony-arm64": "4.61.1",
+                               "@rollup/rollup-win32-arm64-msvc": "4.61.1",
+                               "@rollup/rollup-win32-ia32-msvc": "4.61.1",
+                               "@rollup/rollup-win32-x64-gnu": "4.61.1",
+                               "@rollup/rollup-win32-x64-msvc": "4.61.1",
                                "fsevents": "~2.3.2"
                        }
                },
                        }
                },
                "node_modules/runed": {
-                       "version": "0.25.0",
-                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.25.0.tgz",
-                       "integrity": "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==",
+                       "version": "0.35.1",
+                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.35.1.tgz",
+                       "integrity": "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==",
                        "dev": true,
                        "funding": [
                                "https://github.com/sponsors/huntabyte",
                                "https://github.com/sponsors/tglide"
                        ],
+                       "license": "MIT",
                        "dependencies": {
-                               "esm-env": "^1.0.0"
+                               "dequal": "^2.0.3",
+                               "esm-env": "^1.0.0",
+                               "lz-string": "^1.5.0"
                        },
                        "peerDependencies": {
+                               "@sveltejs/kit": "^2.21.0",
                                "svelte": "^5.7.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@sveltejs/kit": {
+                                       "optional": true
+                               }
                        }
                },
                "node_modules/rw": {
                                "node": ">=6"
                        }
                },
+               "node_modules/safe-array-concat": {
+                       "version": "1.1.4",
+                       "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz",
+                       "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.9",
+                               "call-bound": "^1.0.4",
+                               "get-intrinsic": "^1.3.0",
+                               "has-symbols": "^1.1.0",
+                               "isarray": "^2.0.5"
+                       },
+                       "engines": {
+                               "node": ">=0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/safe-buffer": {
                        "version": "5.1.2",
                        "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/safe-push-apply": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+                       "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "es-errors": "^1.3.0",
+                               "isarray": "^2.0.5"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/safe-regex-test": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+                       "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.2",
+                               "es-errors": "^1.3.0",
+                               "is-regex": "^1.2.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/safer-buffer": {
                        "version": "2.1.2",
                        "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
                        "license": "MIT"
                },
                "node_modules/sass": {
-                       "version": "1.93.3",
-                       "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz",
-                       "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==",
+                       "version": "1.100.0",
+                       "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz",
+                       "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "chokidar": "^4.0.0",
-                               "immutable": "^5.0.2",
+                               "chokidar": "^5.0.0",
+                               "immutable": "^5.1.5",
                                "source-map-js": ">=0.6.2 <2.0.0"
                        },
                        "bin": {
                                "sass": "sass.js"
                        },
                        "engines": {
-                               "node": ">=14.0.0"
+                               "node": ">=20.19.0"
                        },
                        "optionalDependencies": {
                                "@parcel/watcher": "^2.4.1"
                        }
                },
                "node_modules/scheduler": {
-                       "version": "0.26.0",
-                       "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
-                       "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+                       "version": "0.27.0",
+                       "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+                       "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
                        "dev": true,
                        "license": "MIT"
                },
                        "license": "MIT"
                },
                "node_modules/semver": {
-                       "version": "7.7.3",
-                       "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
-                       "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+                       "version": "7.8.1",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
+                       "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
                        "dev": true,
                        "license": "ISC",
                        "bin": {
                                "url": "https://opencollective.com/express"
                        }
                },
+               "node_modules/serialize-javascript": {
+                       "version": "7.0.5",
+                       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz",
+                       "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==",
+                       "dev": true,
+                       "license": "BSD-3-Clause",
+                       "engines": {
+                               "node": ">=20.0.0"
+                       }
+               },
                "node_modules/serve-static": {
                        "version": "2.2.1",
                        "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
                        }
                },
                "node_modules/set-cookie-parser": {
-                       "version": "3.0.1",
-                       "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz",
-                       "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==",
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz",
+                       "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/set-function-length": {
+                       "version": "1.2.2",
+                       "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+                       "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "define-data-property": "^1.1.4",
+                               "es-errors": "^1.3.0",
+                               "function-bind": "^1.1.2",
+                               "get-intrinsic": "^1.2.4",
+                               "gopd": "^1.0.1",
+                               "has-property-descriptors": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
+               "node_modules/set-function-name": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+                       "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "define-data-property": "^1.1.4",
+                               "es-errors": "^1.3.0",
+                               "functions-have-names": "^1.2.3",
+                               "has-property-descriptors": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
+               "node_modules/set-proto": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+                       "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "dunder-proto": "^1.0.1",
+                               "es-errors": "^1.3.0",
+                               "es-object-atoms": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
                "node_modules/setprototypeof": {
                        "version": "1.2.0",
                        "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
                        "dev": true,
                        "license": "ISC"
                },
+               "node_modules/sharp": {
+                       "version": "0.33.5",
+                       "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+                       "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+                       "dev": true,
+                       "hasInstallScript": true,
+                       "license": "Apache-2.0",
+                       "dependencies": {
+                               "color": "^4.2.3",
+                               "detect-libc": "^2.0.3",
+                               "semver": "^7.6.3"
+                       },
+                       "engines": {
+                               "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/libvips"
+                       },
+                       "optionalDependencies": {
+                               "@img/sharp-darwin-arm64": "0.33.5",
+                               "@img/sharp-darwin-x64": "0.33.5",
+                               "@img/sharp-libvips-darwin-arm64": "1.0.4",
+                               "@img/sharp-libvips-darwin-x64": "1.0.4",
+                               "@img/sharp-libvips-linux-arm": "1.0.5",
+                               "@img/sharp-libvips-linux-arm64": "1.0.4",
+                               "@img/sharp-libvips-linux-s390x": "1.0.4",
+                               "@img/sharp-libvips-linux-x64": "1.0.4",
+                               "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+                               "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+                               "@img/sharp-linux-arm": "0.33.5",
+                               "@img/sharp-linux-arm64": "0.33.5",
+                               "@img/sharp-linux-s390x": "0.33.5",
+                               "@img/sharp-linux-x64": "0.33.5",
+                               "@img/sharp-linuxmusl-arm64": "0.33.5",
+                               "@img/sharp-linuxmusl-x64": "0.33.5",
+                               "@img/sharp-wasm32": "0.33.5",
+                               "@img/sharp-win32-ia32": "0.33.5",
+                               "@img/sharp-win32-x64": "0.33.5"
+                       }
+               },
+               "node_modules/sharp-ico": {
+                       "version": "0.1.5",
+                       "resolved": "https://registry.npmjs.org/sharp-ico/-/sharp-ico-0.1.5.tgz",
+                       "integrity": "sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "decode-ico": "*",
+                               "ico-endec": "*",
+                               "sharp": "*"
+                       }
+               },
                "node_modules/shebang-command": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
                        }
                },
                "node_modules/side-channel-list": {
-                       "version": "1.0.0",
-                       "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
-                       "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+                       "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "es-errors": "^1.3.0",
-                               "object-inspect": "^1.13.3"
+                               "object-inspect": "^1.13.4"
                        },
                        "engines": {
                                "node": ">= 0.4"
                        "dev": true,
                        "license": "ISC"
                },
+               "node_modules/signal-exit": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+                       "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+                       "dev": true,
+                       "license": "ISC",
+                       "engines": {
+                               "node": ">=14"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/simple-swizzle": {
+                       "version": "0.2.4",
+                       "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+                       "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "is-arrayish": "^0.3.1"
+                       }
+               },
                "node_modules/sirv": {
                        "version": "3.0.2",
                        "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
                                "node": ">=18"
                        }
                },
+               "node_modules/smob": {
+                       "version": "1.6.2",
+                       "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz",
+                       "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=20.0.0"
+                       }
+               },
                "node_modules/source-map": {
                        "version": "0.6.1",
                        "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
                                "node": ">=0.10.0"
                        }
                },
+               "node_modules/source-map-support": {
+                       "version": "0.5.21",
+                       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+                       "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "buffer-from": "^1.0.0",
+                               "source-map": "^0.6.0"
+                       }
+               },
                "node_modules/space-separated-tokens": {
                        "version": "2.0.2",
                        "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/stop-iteration-iterator": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+                       "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "es-errors": "^1.3.0",
+                               "internal-slot": "^1.1.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       }
+               },
                "node_modules/storybook": {
-                       "version": "10.3.3",
-                       "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.3.3.tgz",
-                       "integrity": "sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ==",
+                       "version": "10.4.2",
+                       "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.4.2.tgz",
+                       "integrity": "sha512-5Ax5vbHxFgMBGGhQDm75Rrumm/HZC4ICFhMcJaM0UlqnC/4FKj/IaZtImZFupknyiiyUEcWHPQFA2kX3/VSv1A==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "@storybook/global": "^5.0.0",
-                               "@storybook/icons": "^2.0.1",
+                               "@storybook/icons": "^2.0.2",
                                "@testing-library/jest-dom": "^6.9.1",
                                "@testing-library/user-event": "^14.6.1",
                                "@vitest/expect": "3.2.4",
                                "@vitest/spy": "3.2.4",
+                               "@webcontainer/env": "^1.1.1",
                                "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0",
                                "open": "^10.2.0",
+                               "oxc-parser": "^0.127.0",
+                               "oxc-resolver": "^11.19.1",
                                "recast": "^0.23.5",
                                "semver": "^7.7.3",
                                "use-sync-external-store": "^1.5.0",
                                "url": "https://opencollective.com/storybook"
                        },
                        "peerDependencies": {
-                               "prettier": "^2 || ^3"
+                               "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                               "prettier": "^2 || ^3",
+                               "vite-plus": "^0.1.15"
                        },
                        "peerDependenciesMeta": {
+                               "@types/react": {
+                                       "optional": true
+                               },
                                "prettier": {
                                        "optional": true
+                               },
+                               "vite-plus": {
+                                       "optional": true
                                }
                        }
                },
+               "node_modules/storybook/node_modules/@vitest/spy": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+                       "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "tinyspy": "^4.0.3"
+                       },
+                       "funding": {
+                               "url": "https://opencollective.com/vitest"
+                       }
+               },
+               "node_modules/string.prototype.matchall": {
+                       "version": "4.0.12",
+                       "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+                       "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.3",
+                               "define-properties": "^1.2.1",
+                               "es-abstract": "^1.23.6",
+                               "es-errors": "^1.3.0",
+                               "es-object-atoms": "^1.0.0",
+                               "get-intrinsic": "^1.2.6",
+                               "gopd": "^1.2.0",
+                               "has-symbols": "^1.1.0",
+                               "internal-slot": "^1.1.0",
+                               "regexp.prototype.flags": "^1.5.3",
+                               "set-function-name": "^2.0.2",
+                               "side-channel": "^1.1.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/string.prototype.trim": {
+                       "version": "1.2.10",
+                       "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+                       "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.2",
+                               "define-data-property": "^1.1.4",
+                               "define-properties": "^1.2.1",
+                               "es-abstract": "^1.23.5",
+                               "es-object-atoms": "^1.0.0",
+                               "has-property-descriptors": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/string.prototype.trimend": {
+                       "version": "1.0.9",
+                       "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+                       "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.8",
+                               "call-bound": "^1.0.2",
+                               "define-properties": "^1.2.1",
+                               "es-object-atoms": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/string.prototype.trimstart": {
+                       "version": "1.0.8",
+                       "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+                       "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bind": "^1.0.7",
+                               "define-properties": "^1.2.1",
+                               "es-object-atoms": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/stringify-entities": {
                        "version": "4.0.4",
                        "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
                                "character-entities-html4": "^2.0.0",
                                "character-entities-legacy": "^3.0.0"
                        },
-                       "funding": {
-                               "type": "github",
-                               "url": "https://github.com/sponsors/wooorm"
+                       "funding": {
+                               "type": "github",
+                               "url": "https://github.com/sponsors/wooorm"
+                       }
+               },
+               "node_modules/stringify-object": {
+                       "version": "3.3.0",
+                       "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+                       "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+                       "dev": true,
+                       "license": "BSD-2-Clause",
+                       "dependencies": {
+                               "get-own-enumerable-property-symbols": "^3.0.0",
+                               "is-obj": "^1.0.1",
+                               "is-regexp": "^1.0.0"
+                       },
+                       "engines": {
+                               "node": ">=4"
                        }
                },
                "node_modules/strip-ansi": {
-                       "version": "7.1.0",
-                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-                       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+                       "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "ansi-regex": "^6.0.1"
+                               "ansi-regex": "^6.2.2"
                        },
                        "engines": {
                                "node": ">=12"
                        }
                },
                "node_modules/strip-ansi/node_modules/ansi-regex": {
-                       "version": "6.1.0",
-                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-                       "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+                       "version": "6.2.2",
+                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+                       "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
                        }
                },
+               "node_modules/strip-comments": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz",
+                       "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=10"
+                       }
+               },
                "node_modules/strip-indent": {
                        "version": "3.0.0",
                        "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
                        }
                },
                "node_modules/style-to-object": {
-                       "version": "1.0.9",
-                       "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz",
-                       "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==",
+                       "version": "1.0.14",
+                       "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
+                       "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "inline-style-parser": "0.2.4"
+                               "inline-style-parser": "0.2.7"
                        }
                },
                "node_modules/stylis": {
                                "node": ">=8"
                        }
                },
+               "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==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/svelte": {
-                       "version": "5.55.7",
-                       "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.7.tgz",
-                       "integrity": "sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==",
+                       "version": "5.56.1",
+                       "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.56.1.tgz",
+                       "integrity": "sha512-eArsJmvl3xZVuTYD852PzIEdg2wgDdIZ1NEsIPbzAukHwi284B18No4nK2rCO9AwsWUDza4Cjvmoa4HaojTl5g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "@jridgewell/remapping": "^2.3.4",
                                "@jridgewell/sourcemap-codec": "^1.5.0",
-                               "@sveltejs/acorn-typescript": "^1.0.5",
+                               "@sveltejs/acorn-typescript": "^1.0.10",
                                "@types/estree": "^1.0.5",
                                "@types/trusted-types": "^2.0.7",
                                "acorn": "^8.12.1",
                                "clsx": "^2.1.1",
                                "devalue": "^5.8.1",
                                "esm-env": "^1.2.1",
-                               "esrap": "^2.2.4",
+                               "esrap": "^2.2.9",
                                "is-reference": "^3.0.3",
                                "locate-character": "^3.0.0",
                                "magic-string": "^0.30.11",
                                "@types/estree": "^1.0.1"
                        }
                },
+               "node_modules/svelte-ast-print/node_modules/zimmerframe": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
+                       "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/svelte-check": {
-                       "version": "4.3.0",
-                       "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.0.tgz",
-                       "integrity": "sha512-Iz8dFXzBNAM7XlEIsUjUGQhbEE+Pvv9odb9+0+ITTgFWZBGeJRRYqHUUglwe2EkLD5LIsQaAc4IUJyvtKuOO5w==",
+                       "version": "4.6.0",
+                       "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.6.0.tgz",
+                       "integrity": "sha512-KhVnDFDSid57mmZtHz8gfW8AAGylOZ0vPnOIzVmAL+urzwK8sBYXRss953gD8T0OdgAQ11mdWhE6uadmtOz8TQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "@jridgewell/trace-mapping": "^0.3.25",
+                               "@sveltejs/load-config": "0.1.1",
                                "chokidar": "^4.0.1",
                                "fdir": "^6.2.0",
                                "picocolors": "^1.0.0",
                                "typescript": ">=5.0.0"
                        }
                },
+               "node_modules/svelte-check/node_modules/chokidar": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+                       "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "readdirp": "^4.0.1"
+                       },
+                       "engines": {
+                               "node": ">= 14.16.0"
+                       },
+                       "funding": {
+                               "url": "https://paulmillr.com/funding/"
+                       }
+               },
+               "node_modules/svelte-check/node_modules/readdirp": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+                       "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">= 14.18.0"
+                       },
+                       "funding": {
+                               "type": "individual",
+                               "url": "https://paulmillr.com/funding/"
+                       }
+               },
                "node_modules/svelte-eslint-parser": {
-                       "version": "1.4.1",
-                       "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.1.tgz",
-                       "integrity": "sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==",
+                       "version": "1.8.0",
+                       "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.8.0.tgz",
+                       "integrity": "sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "espree": "^10.0.0",
                                "postcss": "^8.4.49",
                                "postcss-scss": "^4.0.9",
-                               "postcss-selector-parser": "^7.0.0"
+                               "postcss-selector-parser": "^7.0.0",
+                               "semver": "^7.7.2"
                        },
                        "engines": {
                                "node": "^18.18.0 || ^20.9.0 || >=21.1.0",
-                               "pnpm": "10.24.0"
+                               "pnpm": "10.34.1"
                        },
                        "funding": {
                                "url": "https://github.com/sponsors/ota-meshi"
                        }
                },
                "node_modules/svelte-sonner": {
-                       "version": "1.0.5",
-                       "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.0.5.tgz",
-                       "integrity": "sha512-9dpGPFqKb/QWudYqGnEz93vuY+NgCEvyNvxoCLMVGw6sDN/3oVeKV1xiEirW2E1N3vJEyj5imSBNOGltQHA7mg==",
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.1.1.tgz",
+                       "integrity": "sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        }
                },
                "node_modules/svelte-toolbelt": {
-                       "version": "0.7.1",
-                       "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz",
-                       "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==",
+                       "version": "0.10.6",
+                       "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz",
+                       "integrity": "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==",
                        "dev": true,
                        "funding": [
                                "https://github.com/sponsors/huntabyte"
                        ],
                        "dependencies": {
                                "clsx": "^2.1.1",
-                               "runed": "^0.23.2",
+                               "runed": "^0.35.1",
                                "style-to-object": "^1.0.8"
                        },
                        "engines": {
                                "pnpm": ">=8.7.0"
                        },
                        "peerDependencies": {
-                               "svelte": "^5.0.0"
-                       }
-               },
-               "node_modules/svelte-toolbelt/node_modules/runed": {
-                       "version": "0.23.4",
-                       "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz",
-                       "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==",
-                       "dev": true,
-                       "funding": [
-                               "https://github.com/sponsors/huntabyte",
-                               "https://github.com/sponsors/tglide"
-                       ],
-                       "dependencies": {
-                               "esm-env": "^1.0.0"
-                       },
-                       "peerDependencies": {
-                               "svelte": "^5.7.0"
+                               "svelte": "^5.30.2"
                        }
                },
                "node_modules/svelte/node_modules/aria-query": {
                        }
                },
                "node_modules/svelte/node_modules/esrap": {
-                       "version": "2.2.4",
-                       "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz",
-                       "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==",
+                       "version": "2.2.11",
+                       "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.11.tgz",
+                       "integrity": "sha512-gPdx+I+BjYEinNMQaBXFjbaJVyoPMU4ZODg5mE+M4DqVG9VusAVHHjcBX+zqyITlI0DIARwDMMzZwAWj36dRoQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@jridgewell/sourcemap-codec": "^1.4.15",
+                               "@jridgewell/sourcemap-codec": "^1.4.15"
+                       },
+                       "peerDependencies": {
                                "@typescript-eslint/types": "^8.2.0"
-                       }
-               },
-               "node_modules/svelte/node_modules/is-reference": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
-                       "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@types/estree": "^1.0.6"
+                       },
+                       "peerDependenciesMeta": {
+                               "@typescript-eslint/types": {
+                                       "optional": true
+                               }
                        }
                },
                "node_modules/svelte2tsx": {
-                       "version": "0.7.47",
-                       "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.47.tgz",
-                       "integrity": "sha512-1aw/MFKVPM96OBevJdC12do2an9t5Zwr3Va9amLgTLpJje36ibD1iIHpuqCYWUrdR9vw6g6btKGQPmsqE8ZYCw==",
+                       "version": "0.7.56",
+                       "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.56.tgz",
+                       "integrity": "sha512-NTvqqL+goYlW8gWNajk81L07+uu7jw5V2m1Az5MZbYm3GEydcHXh+uTrLHM9SuGuaqCtF90vlMXkOVBotfH94g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        },
                        "peerDependencies": {
                                "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0",
-                               "typescript": "^4.9.4 || ^5.0.0"
+                               "typescript": "^4.9.4 || ^5.0.0 || ^6.0.0"
                        }
                },
                "node_modules/tabbable": {
-                       "version": "6.2.0",
-                       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
-                       "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+                       "version": "6.4.0",
+                       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz",
+                       "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==",
                        "dev": true,
                        "license": "MIT"
                },
                "node_modules/tailwind-merge": {
-                       "version": "3.3.1",
-                       "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz",
-                       "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==",
+                       "version": "3.6.0",
+                       "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz",
+                       "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==",
                        "dev": true,
                        "license": "MIT",
                        "funding": {
                        }
                },
                "node_modules/tailwindcss": {
-                       "version": "4.1.11",
-                       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
-                       "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
+                       "version": "4.3.0",
+                       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz",
+                       "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==",
                        "dev": true,
                        "license": "MIT"
                },
                "node_modules/tapable": {
-                       "version": "2.2.2",
-                       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
-                       "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+                       "version": "2.3.3",
+                       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+                       "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                                "node": ">=6"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/webpack"
                        }
                },
                "node_modules/tar": {
-                       "version": "7.5.13",
-                       "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz",
-                       "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==",
+                       "version": "7.5.16",
+                       "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz",
+                       "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==",
                        "dev": true,
                        "license": "BlueOak-1.0.0",
                        "dependencies": {
                                "node": ">=18"
                        }
                },
+               "node_modules/tar/node_modules/yallist": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+                       "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
+               "node_modules/temp-dir": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+                       "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
+               "node_modules/tempy": {
+                       "version": "0.6.0",
+                       "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz",
+                       "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "is-stream": "^2.0.0",
+                               "temp-dir": "^2.0.0",
+                               "type-fest": "^0.16.0",
+                               "unique-string": "^2.0.0"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
+                       }
+               },
+               "node_modules/tempy/node_modules/type-fest": {
+                       "version": "0.16.0",
+                       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
+                       "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
+                       "dev": true,
+                       "license": "(MIT OR CC0-1.0)",
+                       "engines": {
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
+                       }
+               },
+               "node_modules/terser": {
+                       "version": "5.48.0",
+                       "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz",
+                       "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==",
+                       "dev": true,
+                       "license": "BSD-2-Clause",
+                       "dependencies": {
+                               "@jridgewell/source-map": "^0.3.3",
+                               "acorn": "^8.15.0",
+                               "commander": "^2.20.0",
+                               "source-map-support": "~0.5.20"
+                       },
+                       "bin": {
+                               "terser": "bin/terser"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       }
+               },
+               "node_modules/terser/node_modules/commander": {
+                       "version": "2.20.3",
+                       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+                       "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/tiny-invariant": {
                        "version": "1.3.3",
                        "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
                        }
                },
                "node_modules/tinyglobby": {
-                       "version": "0.2.15",
-                       "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
-                       "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+                       "version": "0.2.17",
+                       "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+                       "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "fdir": "^6.5.0",
-                               "picomatch": "^4.0.3"
+                               "picomatch": "^4.0.4"
                        },
                        "engines": {
                                "node": ">=12.0.0"
                        }
                },
                "node_modules/tinyspy": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz",
-                       "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==",
+                       "version": "4.0.4",
+                       "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
+                       "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                                "node": ">=14.0.0"
                        }
                },
-               "node_modules/to-regex-range": {
-                       "version": "5.0.1",
-                       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+               "node_modules/to-data-view": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-1.1.0.tgz",
+                       "integrity": "sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==",
                        "dev": true,
-                       "license": "MIT",
-                       "optional": true,
-                       "dependencies": {
-                               "is-number": "^7.0.0"
-                       },
-                       "engines": {
-                               "node": ">=8.0"
-                       }
+                       "license": "MIT"
                },
                "node_modules/toidentifier": {
                        "version": "1.0.1",
                                "node": ">=6"
                        }
                },
+               "node_modules/tr46": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+                       "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "punycode": "^2.1.0"
+                       }
+               },
                "node_modules/trim-lines": {
                        "version": "3.0.1",
                        "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
                        }
                },
                "node_modules/ts-api-utils": {
-                       "version": "2.4.0",
-                       "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
-                       "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
+                       "version": "2.5.0",
+                       "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+                       "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                                "node": ">=6.10"
                        }
                },
-               "node_modules/tslib": {
-                       "version": "2.8.1",
-                       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-                       "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-                       "dev": true,
-                       "license": "0BSD"
-               },
-               "node_modules/tw-animate-css": {
-                       "version": "1.3.5",
-                       "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.5.tgz",
-                       "integrity": "sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==",
+               "node_modules/tslib": {
+                       "version": "2.8.1",
+                       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+                       "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+                       "dev": true,
+                       "license": "0BSD"
+               },
+               "node_modules/tw-animate-css": {
+                       "version": "1.4.0",
+                       "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz",
+                       "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "funding": {
+                               "url": "https://github.com/sponsors/Wombosvideo"
+                       }
+               },
+               "node_modules/type-check": {
+                       "version": "0.4.0",
+                       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+                       "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "prelude-ls": "^1.2.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.8.0"
+                       }
+               },
+               "node_modules/type-fest": {
+                       "version": "2.19.0",
+                       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+                       "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+                       "dev": true,
+                       "license": "(MIT OR CC0-1.0)",
+                       "engines": {
+                               "node": ">=12.20"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
+                       }
+               },
+               "node_modules/type-is": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
+                       "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "content-type": "^2.0.0",
+                               "media-typer": "^1.1.0",
+                               "mime-types": "^3.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 18"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
+                       }
+               },
+               "node_modules/type-is/node_modules/content-type": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+                       "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=18"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/express"
+                       }
+               },
+               "node_modules/typed-array-buffer": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+                       "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
                        "dev": true,
                        "license": "MIT",
-                       "funding": {
-                               "url": "https://github.com/sponsors/Wombosvideo"
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "es-errors": "^1.3.0",
+                               "is-typed-array": "^1.1.14"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
                        }
                },
-               "node_modules/type-check": {
-                       "version": "0.4.0",
-                       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-                       "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+               "node_modules/typed-array-byte-length": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+                       "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "prelude-ls": "^1.2.1"
+                               "call-bind": "^1.0.8",
+                               "for-each": "^0.3.3",
+                               "gopd": "^1.2.0",
+                               "has-proto": "^1.2.0",
+                               "is-typed-array": "^1.1.14"
                        },
                        "engines": {
-                               "node": ">= 0.8.0"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/type-fest": {
-                       "version": "2.19.0",
-                       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
-                       "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+               "node_modules/typed-array-byte-offset": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+                       "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
                        "dev": true,
-                       "license": "(MIT OR CC0-1.0)",
+                       "license": "MIT",
+                       "dependencies": {
+                               "available-typed-arrays": "^1.0.7",
+                               "call-bind": "^1.0.8",
+                               "for-each": "^0.3.3",
+                               "gopd": "^1.2.0",
+                               "has-proto": "^1.2.0",
+                               "is-typed-array": "^1.1.15",
+                               "reflect.getprototypeof": "^1.0.9"
+                       },
                        "engines": {
-                               "node": ">=12.20"
+                               "node": ">= 0.4"
                        },
                        "funding": {
-                               "url": "https://github.com/sponsors/sindresorhus"
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
-               "node_modules/type-is": {
-                       "version": "2.0.1",
-                       "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
-                       "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+               "node_modules/typed-array-length": {
+                       "version": "1.0.8",
+                       "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz",
+                       "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "content-type": "^1.0.5",
-                               "media-typer": "^1.1.0",
-                               "mime-types": "^3.0.0"
+                               "call-bind": "^1.0.9",
+                               "for-each": "^0.3.5",
+                               "gopd": "^1.2.0",
+                               "is-typed-array": "^1.1.15",
+                               "possible-typed-array-names": "^1.1.0",
+                               "reflect.getprototypeof": "^1.0.10"
                        },
                        "engines": {
-                               "node": ">= 0.6"
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
                        }
                },
                "node_modules/typescript": {
-                       "version": "5.8.3",
-                       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
-                       "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+                       "version": "5.9.3",
+                       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+                       "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
                        "dev": true,
                        "license": "Apache-2.0",
                        "bin": {
                        }
                },
                "node_modules/typescript-eslint": {
-                       "version": "8.56.0",
-                       "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz",
-                       "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==",
+                       "version": "8.60.1",
+                       "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.1.tgz",
+                       "integrity": "sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@typescript-eslint/eslint-plugin": "8.56.0",
-                               "@typescript-eslint/parser": "8.56.0",
-                               "@typescript-eslint/typescript-estree": "8.56.0",
-                               "@typescript-eslint/utils": "8.56.0"
+                               "@typescript-eslint/eslint-plugin": "8.60.1",
+                               "@typescript-eslint/parser": "8.60.1",
+                               "@typescript-eslint/typescript-estree": "8.60.1",
+                               "@typescript-eslint/utils": "8.60.1"
                        },
                        "engines": {
                                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
                        },
                        "peerDependencies": {
                                "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
-                               "typescript": ">=4.8.4 <6.0.0"
+                               "typescript": ">=4.8.4 <6.1.0"
+                       }
+               },
+               "node_modules/unbox-primitive": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+                       "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.3",
+                               "has-bigints": "^1.0.2",
+                               "has-symbols": "^1.1.0",
+                               "which-boxed-primitive": "^1.1.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/unconfig": {
+                       "version": "7.5.0",
+                       "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-7.5.0.tgz",
+                       "integrity": "sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@quansync/fs": "^1.0.0",
+                               "defu": "^6.1.4",
+                               "jiti": "^2.6.1",
+                               "quansync": "^1.0.0",
+                               "unconfig-core": "7.5.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/antfu"
+                       }
+               },
+               "node_modules/unconfig-core": {
+                       "version": "7.5.0",
+                       "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz",
+                       "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@quansync/fs": "^1.0.0",
+                               "quansync": "^1.0.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/antfu"
                        }
                },
                "node_modules/undici-types": {
-                       "version": "7.16.0",
-                       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
-                       "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+                       "version": "7.18.2",
+                       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
+                       "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
                        "dev": true,
                        "license": "MIT"
                },
+               "node_modules/unicode-canonical-property-names-ecmascript": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+                       "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
+               "node_modules/unicode-match-property-ecmascript": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+                       "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "unicode-canonical-property-names-ecmascript": "^2.0.0",
+                               "unicode-property-aliases-ecmascript": "^2.0.0"
+                       },
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
+               "node_modules/unicode-match-property-value-ecmascript": {
+                       "version": "2.2.1",
+                       "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+                       "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
+               "node_modules/unicode-property-aliases-ecmascript": {
+                       "version": "2.2.0",
+                       "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+                       "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=4"
+                       }
+               },
                "node_modules/unified": {
                        "version": "11.0.5",
                        "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
                                "node": ">= 0.8.0"
                        }
                },
+               "node_modules/unique-string": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+                       "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "crypto-random-string": "^2.0.0"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
                "node_modules/unist-util-find-after": {
                        "version": "5.0.0",
                        "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
                        "license": "MIT"
                },
                "node_modules/unist-util-is": {
-                       "version": "6.0.0",
-                       "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
-                       "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+                       "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        "license": "MIT"
                },
                "node_modules/unist-util-stringify-position": {
-                       "version": "2.0.3",
-                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
-                       "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+                       "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/unist": "^2.0.2"
+                               "@types/unist": "^3.0.0"
                        },
                        "funding": {
                                "type": "opencollective",
                                "url": "https://opencollective.com/unified"
                        }
                },
+               "node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/unist-util-visit": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
-                       "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+                       "version": "5.1.0",
+                       "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+                       "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        }
                },
                "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",
-                       "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+                       "version": "6.0.2",
+                       "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+                       "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "node": ">=18.12.0"
                        }
                },
+               "node_modules/upath": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+                       "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=4",
+                               "yarn": "*"
+                       }
+               },
+               "node_modules/update-browserslist-db": {
+                       "version": "1.2.3",
+                       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+                       "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+                       "dev": true,
+                       "funding": [
+                               {
+                                       "type": "opencollective",
+                                       "url": "https://opencollective.com/browserslist"
+                               },
+                               {
+                                       "type": "tidelift",
+                                       "url": "https://tidelift.com/funding/github/npm/browserslist"
+                               },
+                               {
+                                       "type": "github",
+                                       "url": "https://github.com/sponsors/ai"
+                               }
+                       ],
+                       "license": "MIT",
+                       "dependencies": {
+                               "escalade": "^3.2.0",
+                               "picocolors": "^1.1.1"
+                       },
+                       "bin": {
+                               "update-browserslist-db": "cli.js"
+                       },
+                       "peerDependencies": {
+                               "browserslist": ">= 4.21.0"
+                       }
+               },
                "node_modules/uri-js": {
                        "version": "4.4.1",
                        "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
                                "url": "https://opencollective.com/unified"
                        }
                },
-               "node_modules/vfile/node_modules/@types/unist": {
-                       "version": "3.0.3",
-                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
-                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
-                       "dev": true,
-                       "license": "MIT"
-               },
-               "node_modules/vfile/node_modules/unist-util-stringify-position": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-                       "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+               "node_modules/vfile-message/node_modules/unist-util-stringify-position": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
+                       "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@types/unist": "^3.0.0"
+                               "@types/unist": "^2.0.2"
                        },
                        "funding": {
                                "type": "opencollective",
                                "url": "https://opencollective.com/unified"
                        }
                },
+               "node_modules/vfile/node_modules/@types/unist": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+                       "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+                       "dev": true,
+                       "license": "MIT"
+               },
                "node_modules/vfile/node_modules/vfile-message": {
-                       "version": "4.0.2",
-                       "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
-                       "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+                       "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                        }
                },
                "node_modules/vite": {
-                       "version": "7.3.2",
-                       "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz",
-                       "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
+                       "version": "7.3.5",
+                       "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz",
+                       "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "uuid": "dist/esm/bin/uuid"
                        }
                },
+               "node_modules/vite-plugin-pwa": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.3.0.tgz",
+                       "integrity": "sha512-c5kMgN+ITrOtHXp8PAtk2uOIEea6XjP/unCGxOWWBzQ6qa65qj/awHg0wf+QF9E/2u9vh86LqxPwzEPNbM2r5A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "debug": "^4.3.6",
+                               "pretty-bytes": "^6.1.1",
+                               "tinyglobby": "^0.2.10",
+                               "workbox-build": "^7.4.1",
+                               "workbox-window": "^7.4.1"
+                       },
+                       "engines": {
+                               "node": ">=16.0.0"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/antfu"
+                       },
+                       "peerDependencies": {
+                               "@vite-pwa/assets-generator": "^1.0.0",
+                               "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+                               "workbox-build": "^7.4.1",
+                               "workbox-window": "^7.4.1"
+                       },
+                       "peerDependenciesMeta": {
+                               "@vite-pwa/assets-generator": {
+                                       "optional": true
+                               }
+                       }
+               },
                "node_modules/vite/node_modules/fsevents": {
                        "version": "2.3.3",
                        "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
                        }
                },
                "node_modules/vitefu": {
-                       "version": "1.1.1",
-                       "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz",
-                       "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
+                       "version": "1.1.3",
+                       "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
+                       "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
                        "dev": true,
                        "license": "MIT",
                        "workspaces": [
                                "tests/projects/workspace/packages/*"
                        ],
                        "peerDependencies": {
-                               "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
+                               "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
                        },
                        "peerDependenciesMeta": {
                                "vite": {
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
-                               "@standard-schema/spec": "^1.1.0",
-                               "@types/chai": "^5.2.2",
-                               "@vitest/spy": "4.1.8",
-                               "@vitest/utils": "4.1.8",
-                               "chai": "^6.2.2",
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
-                       }
-               },
-               "node_modules/vitest/node_modules/@vitest/pretty-format": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
-                       "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "tinyrainbow": "^3.1.0"
-                       },
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
-                       }
-               },
-               "node_modules/vitest/node_modules/@vitest/spy": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz",
-                       "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==",
-                       "dev": true,
-                       "license": "MIT",
-                       "funding": {
-                               "url": "https://opencollective.com/vitest"
-                       }
-               },
-               "node_modules/vitest/node_modules/@vitest/utils": {
-                       "version": "4.1.8",
-                       "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
-                       "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
-                       "dev": true,
-                       "license": "MIT",
-                       "dependencies": {
-                               "@vitest/pretty-format": "4.1.8",
-                               "convert-source-map": "^2.0.0",
+                               "@standard-schema/spec": "^1.1.0",
+                               "@types/chai": "^5.2.2",
+                               "@vitest/spy": "4.1.8",
+                               "@vitest/utils": "4.1.8",
+                               "chai": "^6.2.2",
                                "tinyrainbow": "^3.1.0"
                        },
                        "funding": {
                                "url": "https://github.com/sponsors/wooorm"
                        }
                },
+               "node_modules/webidl-conversions": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+                       "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+                       "dev": true,
+                       "license": "BSD-2-Clause"
+               },
                "node_modules/webpack-virtual-modules": {
                        "version": "0.6.2",
                        "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
                        "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+                       "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
                        "dev": true,
                        "license": "MIT",
                        "dependencies": {
                                "node": ">=12"
                        }
                },
+               "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+                       "version": "0.6.3",
+                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+                       "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "safer-buffer": ">= 2.1.2 < 3.0.0"
+                       },
+                       "engines": {
+                               "node": ">=0.10.0"
+                       }
+               },
+               "node_modules/whatwg-url": {
+                       "version": "7.1.0",
+                       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+                       "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "lodash.sortby": "^4.7.0",
+                               "tr46": "^1.0.1",
+                               "webidl-conversions": "^4.0.2"
+                       }
+               },
                "node_modules/which": {
                        "version": "2.0.2",
                        "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
                                "node": ">= 8"
                        }
                },
+               "node_modules/which-boxed-primitive": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+                       "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "is-bigint": "^1.1.0",
+                               "is-boolean-object": "^1.2.1",
+                               "is-number-object": "^1.1.1",
+                               "is-string": "^1.1.1",
+                               "is-symbol": "^1.1.1"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/which-builtin-type": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+                       "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "call-bound": "^1.0.2",
+                               "function.prototype.name": "^1.1.6",
+                               "has-tostringtag": "^1.0.2",
+                               "is-async-function": "^2.0.0",
+                               "is-date-object": "^1.1.0",
+                               "is-finalizationregistry": "^1.1.0",
+                               "is-generator-function": "^1.0.10",
+                               "is-regex": "^1.2.1",
+                               "is-weakref": "^1.0.2",
+                               "isarray": "^2.0.5",
+                               "which-boxed-primitive": "^1.1.0",
+                               "which-collection": "^1.0.2",
+                               "which-typed-array": "^1.1.16"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/which-collection": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+                       "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "is-map": "^2.0.3",
+                               "is-set": "^2.0.3",
+                               "is-weakmap": "^2.0.2",
+                               "is-weakset": "^2.0.3"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
+               "node_modules/which-typed-array": {
+                       "version": "1.1.21",
+                       "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz",
+                       "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "available-typed-arrays": "^1.0.7",
+                               "call-bind": "^1.0.9",
+                               "call-bound": "^1.0.4",
+                               "for-each": "^0.3.5",
+                               "get-proto": "^1.0.1",
+                               "gopd": "^1.2.0",
+                               "has-tostringtag": "^1.0.2"
+                       },
+                       "engines": {
+                               "node": ">= 0.4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/ljharb"
+                       }
+               },
                "node_modules/why-is-node-running": {
                        "version": "2.3.0",
                        "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
                                "node": ">=0.10.0"
                        }
                },
+               "node_modules/workbox-background-sync": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.1.tgz",
+                       "integrity": "sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "idb": "^7.0.1",
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-broadcast-update": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.1.tgz",
+                       "integrity": "sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-build": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.1.tgz",
+                       "integrity": "sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@apideck/better-ajv-errors": "^0.3.1",
+                               "@babel/core": "^7.24.4",
+                               "@babel/preset-env": "^7.11.0",
+                               "@babel/runtime": "^7.11.2",
+                               "@rollup/plugin-babel": "^6.1.0",
+                               "@rollup/plugin-node-resolve": "^16.0.3",
+                               "@rollup/plugin-replace": "^6.0.3",
+                               "@rollup/plugin-terser": "^1.0.0",
+                               "@trickfilm400/rollup-plugin-off-main-thread": "^3.0.0-pre1",
+                               "ajv": "^8.6.0",
+                               "common-tags": "^1.8.0",
+                               "eta": "^4.5.1",
+                               "fast-json-stable-stringify": "^2.1.0",
+                               "fs-extra": "^9.0.1",
+                               "glob": "^11.0.1",
+                               "pretty-bytes": "^5.3.0",
+                               "rollup": "^4.53.3",
+                               "source-map": "^0.8.0-beta.0",
+                               "stringify-object": "^3.3.0",
+                               "strip-comments": "^2.0.1",
+                               "tempy": "^0.6.0",
+                               "upath": "^1.2.0",
+                               "workbox-background-sync": "7.4.1",
+                               "workbox-broadcast-update": "7.4.1",
+                               "workbox-cacheable-response": "7.4.1",
+                               "workbox-core": "7.4.1",
+                               "workbox-expiration": "7.4.1",
+                               "workbox-google-analytics": "7.4.1",
+                               "workbox-navigation-preload": "7.4.1",
+                               "workbox-precaching": "7.4.1",
+                               "workbox-range-requests": "7.4.1",
+                               "workbox-recipes": "7.4.1",
+                               "workbox-routing": "7.4.1",
+                               "workbox-strategies": "7.4.1",
+                               "workbox-streams": "7.4.1",
+                               "workbox-sw": "7.4.1",
+                               "workbox-window": "7.4.1"
+                       },
+                       "engines": {
+                               "node": ">=20.0.0"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/@isaacs/cliui": {
+                       "version": "9.0.0",
+                       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz",
+                       "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "engines": {
+                               "node": ">=18"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/balanced-match": {
+                       "version": "4.0.4",
+                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+                       "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/brace-expansion": {
+                       "version": "5.0.6",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
+                       "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "balanced-match": "^4.0.2"
+                       },
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/glob": {
+                       "version": "11.1.0",
+                       "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
+                       "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
+                       "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "dependencies": {
+                               "foreground-child": "^3.3.1",
+                               "jackspeak": "^4.1.1",
+                               "minimatch": "^10.1.1",
+                               "minipass": "^7.1.2",
+                               "package-json-from-dist": "^1.0.0",
+                               "path-scurry": "^2.0.0"
+                       },
+                       "bin": {
+                               "glob": "dist/esm/bin.mjs"
+                       },
+                       "engines": {
+                               "node": "20 || >=22"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/jackspeak": {
+                       "version": "4.2.3",
+                       "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
+                       "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "dependencies": {
+                               "@isaacs/cliui": "^9.0.0"
+                       },
+                       "engines": {
+                               "node": "20 || >=22"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/lru-cache": {
+                       "version": "11.5.1",
+                       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz",
+                       "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "engines": {
+                               "node": "20 || >=22"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/minimatch": {
+                       "version": "10.2.5",
+                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+                       "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "dependencies": {
+                               "brace-expansion": "^5.0.5"
+                       },
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/path-scurry": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+                       "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+                       "dev": true,
+                       "license": "BlueOak-1.0.0",
+                       "dependencies": {
+                               "lru-cache": "^11.0.0",
+                               "minipass": "^7.1.2"
+                       },
+                       "engines": {
+                               "node": "18 || 20 || >=22"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/isaacs"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/pretty-bytes": {
+                       "version": "5.6.0",
+                       "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+                       "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "engines": {
+                               "node": ">=6"
+                       },
+                       "funding": {
+                               "url": "https://github.com/sponsors/sindresorhus"
+                       }
+               },
+               "node_modules/workbox-build/node_modules/source-map": {
+                       "version": "0.8.0-beta.0",
+                       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
+                       "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+                       "deprecated": "The work that was done in this beta branch won't be included in future versions",
+                       "dev": true,
+                       "license": "BSD-3-Clause",
+                       "dependencies": {
+                               "whatwg-url": "^7.0.0"
+                       },
+                       "engines": {
+                               "node": ">= 8"
+                       }
+               },
+               "node_modules/workbox-cacheable-response": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.1.tgz",
+                       "integrity": "sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-core": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.1.tgz",
+                       "integrity": "sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/workbox-expiration": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.1.tgz",
+                       "integrity": "sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "idb": "^7.0.1",
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-google-analytics": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.1.tgz",
+                       "integrity": "sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-background-sync": "7.4.1",
+                               "workbox-core": "7.4.1",
+                               "workbox-routing": "7.4.1",
+                               "workbox-strategies": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-navigation-preload": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.1.tgz",
+                       "integrity": "sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-precaching": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.1.tgz",
+                       "integrity": "sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1",
+                               "workbox-routing": "7.4.1",
+                               "workbox-strategies": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-range-requests": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.1.tgz",
+                       "integrity": "sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-recipes": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.1.tgz",
+                       "integrity": "sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-cacheable-response": "7.4.1",
+                               "workbox-core": "7.4.1",
+                               "workbox-expiration": "7.4.1",
+                               "workbox-precaching": "7.4.1",
+                               "workbox-routing": "7.4.1",
+                               "workbox-strategies": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-routing": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.1.tgz",
+                       "integrity": "sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-strategies": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.1.tgz",
+                       "integrity": "sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-streams": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.1.tgz",
+                       "integrity": "sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "workbox-core": "7.4.1",
+                               "workbox-routing": "7.4.1"
+                       }
+               },
+               "node_modules/workbox-sw": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.1.tgz",
+                       "integrity": "sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==",
+                       "dev": true,
+                       "license": "MIT"
+               },
+               "node_modules/workbox-window": {
+                       "version": "7.4.1",
+                       "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.1.tgz",
+                       "integrity": "sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==",
+                       "dev": true,
+                       "license": "MIT",
+                       "dependencies": {
+                               "@types/trusted-types": "^2.0.2",
+                               "workbox-core": "7.4.1"
+                       }
+               },
                "node_modules/wrappy": {
                        "version": "1.0.2",
                        "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
                        "license": "ISC"
                },
                "node_modules/ws": {
-                       "version": "8.20.1",
-                       "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
-                       "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
+                       "version": "8.21.0",
+                       "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+                       "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
                        "dev": true,
                        "license": "MIT",
                        "engines": {
                        }
                },
                "node_modules/yallist": {
-                       "version": "5.0.0",
-                       "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
-                       "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+                       "version": "3.1.1",
+                       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+                       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
                        "dev": true,
-                       "license": "BlueOak-1.0.0",
-                       "engines": {
-                               "node": ">=18"
-                       }
+                       "license": "ISC"
                },
                "node_modules/yocto-queue": {
                        "version": "0.1.0",
                        }
                },
                "node_modules/zimmerframe": {
-                       "version": "1.1.2",
-                       "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
-                       "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
+                       "version": "1.1.4",
+                       "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz",
+                       "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==",
                        "dev": true,
                        "license": "MIT"
                },
                "node_modules/zod": {
-                       "version": "4.2.1",
-                       "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
-                       "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==",
+                       "version": "4.4.3",
+                       "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
+                       "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
                        "dev": true,
                        "license": "MIT",
                        "funding": {
                        }
                },
                "node_modules/zod-to-json-schema": {
-                       "version": "3.25.1",
-                       "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz",
-                       "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==",
+                       "version": "3.25.2",
+                       "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
+                       "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
                        "dev": true,
                        "license": "ISC",
                        "peerDependencies": {
-                               "zod": "^3.25 || ^4"
+                               "zod": "^3.25.28 || ^4"
                        }
                },
                "node_modules/zwitch": {
index 4f5ef4d64fa03e598d17011dba97dcae8bdf4078..6c750431fe6c8965250b3f9ccc8951384bbbe598 100644 (file)
@@ -4,8 +4,9 @@
        "version": "1.0.0",
        "type": "module",
        "scripts": {
+               "build": "npm run build-pwa-assets && vite build",
+               "build-pwa-assets": "npx @vite-pwa/assets-generator --root . --config pwa-assets.config.ts && npx @vite-pwa/assets-generator --root . --config pwa-assets-dark.config.ts && node scripts/make-icons-circular.js",
                "dev": "bash scripts/dev.sh",
-               "build": "vite build",
                "preview": "vite preview",
                "prepare": "svelte-kit sync || echo ''",
                "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
                "lint": "prettier --check . && eslint .",
                "test": "npm run test:ui -- --run && npm run test:client -- --run && npm run test:unit -- --run && npm run test:e2e",
                "test:e2e": "playwright test",
+               "test:e2e:pwa": "playwright test tests/e2e/pwa.e2e.ts",
                "test:client": "vitest --project=client",
                "test:unit": "vitest --project=unit",
+               "test:unit:pwa": "vitest --project=unit --run tests/unit/pwa.spec.ts",
+               "test:pwa": "npm run test:unit:pwa && npm run test:e2e:pwa",
                "test:ui": "vitest --project=ui",
                "storybook": "storybook dev -p 6006",
                "build-storybook": "storybook build",
-               "cleanup": "rm -rf .svelte-kit build node_modules test-results"
+               "cleanup": "rm -rf .svelte-kit build node_modules test-results dist dev-dist debug-storybook.log static/pwa-*.png static/maskable-icon-*.png static/apple-touch-icon-*.png static/apple-splash-*.png static/favicon*.ico"
        },
        "devDependencies": {
                "@chromatic-com/storybook": "5.0.0",
                "@tailwindcss/forms": "0.5.10",
                "@tailwindcss/typography": "0.5.16",
                "@tailwindcss/vite": "4.1.11",
-               "@types/node": "^24",
+               "@types/node": "24.13.0",
+               "@vite-pwa/assets-generator": "1.0.2",
+               "@vite-pwa/sveltekit": "1.1.0",
                "@vitest/browser": "4.1.8",
                "@vitest/browser-playwright": "4.1.8",
                "@vitest/coverage-v8": "4.1.8",
                "bits-ui": "2.18.1",
                "clsx": "2.1.1",
-               "dexie": "4.0.11",
-               "eslint": "9.39.2",
+               "dexie": "4.4.3",
+               "eslint": "9.39.4",
                "eslint-config-prettier": "10.1.8",
-               "eslint-plugin-storybook": "10.2.4",
-               "eslint-plugin-svelte": "3.15.0",
-               "globals": "16.3.0",
+               "eslint-plugin-storybook": "10.4.2",
+               "eslint-plugin-svelte": "3.19.0",
+               "globals": "16.5.0",
                "highlight.js": "11.11.1",
                "http-server": "14.1.1",
                "mdast": "3.0.0",
-               "mdsvex": "0.12.6",
+               "mdsvex": "0.12.7",
                "mermaid": "11.15.0",
                "mode-watcher": "1.1.0",
                "pdfjs-dist": "5.4.54",
                "playwright": "1.56.1",
-               "prettier": "3.6.2",
-               "prettier-plugin-svelte": "3.4.0",
-               "prettier-plugin-tailwindcss": "0.6.14",
+               "prettier": "3.8.3",
+               "prettier-plugin-svelte": "4.1.0",
+               "prettier-plugin-tailwindcss": "0.8.0",
                "rehype-highlight": "7.0.2",
                "rehype-katex": "7.0.1",
                "rehype-stringify": "10.0.1",
                "remark-html": "16.0.1",
                "remark-math": "6.0.0",
                "remark-rehype": "11.1.2",
-               "sass": "1.93.3",
-               "storybook": "10.3.3",
-               "svelte": "5.55.7",
-               "svelte-check": "4.3.0",
-               "svelte-sonner": "1.0.5",
-               "tailwind-merge": "3.3.1",
+               "sass": "1.100.0",
+               "storybook": "10.4.2",
+               "svelte": "5.56.1",
+               "svelte-check": "4.6.0",
+               "svelte-sonner": "1.1.1",
+               "tailwind-merge": "3.6.0",
                "tailwind-variants": "3.2.2",
-               "tailwindcss": "4.1.11",
-               "tw-animate-css": "1.3.5",
-               "typescript": "5.8.3",
-               "typescript-eslint": "8.56.0",
+               "tailwindcss": "4.3.0",
+               "tw-animate-css": "1.4.0",
+               "typescript": "5.9.3",
+               "typescript-eslint": "8.60.1",
                "unified": "11.0.5",
-               "unist-util-visit": "5.0.0",
+               "unist-util-visit": "5.1.0",
                "uuid": "13.0.2",
-               "vite": "7.3.2",
+               "vite": "7.3.5",
                "vite-plugin-devtools-json": "0.2.1",
                "vitest": "4.1.8",
                "vitest-browser-svelte": "2.1.1",
-               "zod": "4.2.1"
+               "workbox-window": "7.4.1"
        },
        "overrides": {
                "cookie": "1.1.1"
index 4603792385914bb0a4815c83961c88991968867a..55bf3851404725cf694eb4076d6426f978e79cdf 100644 (file)
@@ -1,11 +1,31 @@
-import { defineConfig } from '@playwright/test';
+import { defineConfig, devices } from '@playwright/test';
 
 export default defineConfig({
+       testDir: 'tests/e2e',
+       testMatch: ['**/*.e2e.ts'],
+       timeout: 30000,
+       expect: {
+               timeout: 5000
+       },
+       fullyParallel: true,
+       forbidOnly: !!process.env.CI,
+       retries: process.env.CI ? 2 : 0,
+       workers: process.env.CI ? 1 : undefined,
+       reporter: 'line',
+       use: {
+               baseURL: 'http://localhost:8181',
+               trace: 'on-first-retry'
+       },
+       projects: [
+               {
+                       name: 'chromium',
+                       use: { ...devices['Desktop Chrome'] }
+               }
+       ],
        webServer: {
                command: 'npm run build && npx http-server ./dist -p 8181',
                port: 8181,
                timeout: 120000,
-               reuseExistingServer: false
-       },
-       testDir: 'tests/e2e'
+               reuseExistingServer: !process.env.CI
+       }
 });
diff --git a/tools/ui/pwa-assets-dark.config.ts b/tools/ui/pwa-assets-dark.config.ts
new file mode 100644 (file)
index 0000000..e9793bc
--- /dev/null
@@ -0,0 +1,20 @@
+import { defineConfig } from '@vite-pwa/assets-generator/config';
+
+export default defineConfig({
+       headLinkOptions: {
+               preset: '2023'
+       },
+       preset: {
+               transparent: {
+                       sizes: [],
+                       favicons: [[48, 'favicon-dark.ico']]
+               },
+               maskable: {
+                       sizes: []
+               },
+               apple: {
+                       sizes: []
+               }
+       },
+       images: ['static/favicon-dark.svg']
+});
diff --git a/tools/ui/pwa-assets.config.ts b/tools/ui/pwa-assets.config.ts
new file mode 100644 (file)
index 0000000..54928ee
--- /dev/null
@@ -0,0 +1,51 @@
+import {
+       combinePresetAndAppleSplashScreens,
+       defineConfig,
+       minimal2023Preset
+} from '@vite-pwa/assets-generator/config';
+import { readFileSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { THEME_COLORS, PWA_GENERATOR_DEVICES, PWA_ASSET_GENERATOR } from './src/lib/constants/pwa';
+import { SplashOrientation } from './src/lib/enums/splash.enums';
+
+export default defineConfig({
+       headLinkOptions: {
+               preset: PWA_ASSET_GENERATOR.LINK_PRESET
+       },
+       preset: combinePresetAndAppleSplashScreens(
+               minimal2023Preset,
+               {
+                       padding: PWA_ASSET_GENERATOR.SPLASH_PADDING,
+                       resizeOptions: {
+                               background: THEME_COLORS.BACKGROUND_LIGHT,
+                               fit: PWA_ASSET_GENERATOR.FIT_MODE
+                       },
+                       darkResizeOptions: {
+                               background: THEME_COLORS.BACKGROUND_DARK,
+                               fit: PWA_ASSET_GENERATOR.FIT_MODE
+                       },
+                       darkImageResolver: async (imageName: string) => {
+                               if (imageName.endsWith('favicon.svg')) {
+                                       return readFileSync(resolve('static/favicon-dark.svg'));
+                               }
+                       },
+                       linkMediaOptions: {
+                               log: true,
+                               addMediaScreen: PWA_ASSET_GENERATOR.ADD_MEDIA_SCREEN,
+                               basePath: PWA_ASSET_GENERATOR.BASE_PATH,
+                               xhtml: PWA_ASSET_GENERATOR.XHTML
+                       },
+                       png: {
+                               compressionLevel: PWA_ASSET_GENERATOR.PNG_COMPRESSION_LEVEL,
+                               quality: PWA_ASSET_GENERATOR.PNG_QUALITY
+                       },
+                       name: (landscape, size, dark) => {
+                               const orientation = landscape ? SplashOrientation.LANDSCAPE : SplashOrientation.PORTRAIT;
+                               const darkPrefix = dark ? PWA_ASSET_GENERATOR.DARK_PREFIX : '';
+                               return `apple-splash-${orientation}-${darkPrefix}${size.width}x${size.height}.png`;
+                       }
+               },
+               PWA_GENERATOR_DEVICES
+       ),
+       images: ['static/favicon.svg']
+});
diff --git a/tools/ui/scripts/make-icons-circular.js b/tools/ui/scripts/make-icons-circular.js
new file mode 100644 (file)
index 0000000..7dfd652
--- /dev/null
@@ -0,0 +1,137 @@
+#!/usr/bin/env node
+
+/**
+ * Apply circular mask to pwa-*.png icons.
+ * Uses the maskable icon as source (white bg, full logo) to avoid
+ * the small-colormap pwa icons looking bad when cropped to a circle.
+ *
+ * Usage: node scripts/make-icons-circular.js [--padding-pct <0-50>] [--scale-pct <50-100>]
+ *
+ * - padding-pct: percentage of icon size kept as padding around the circle (default: 25)
+ * - scale-pct: scale down the source image before cropping (default: 85)
+ *
+ * maskable-icon and apple-touch-icon are left untouched.
+ */
+
+import sharp from 'sharp';
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+const STATIC_DIR = path.resolve(__dirname, '..', 'static');
+
+const paddingPct = process.argv.reduce((acc, arg, i, args) => {
+       if (arg === '--padding-pct' && args[i + 1]) return parseFloat(args[i + 1]);
+       return acc;
+}, 0);
+
+// Scale down the source image before cropping to circle
+const scalePct = process.argv.reduce((acc, arg, i, args) => {
+       if (arg === '--scale-pct' && args[i + 1]) return parseFloat(args[i + 1]);
+       return acc;
+}, 85); // default 85% - icon fills 85% of the circular area
+
+// Source for circular icons: the maskable icon (white bg, full logo)
+const sourceIcon = 'maskable-icon-512x512.png';
+const targetIcons = ['pwa-64x64.png', 'pwa-192x192.png', 'pwa-512x512.png'];
+
+// maskable-icon and apple-touch-icon stay square
+const untouchedIcons = ['maskable-icon-512x512.png', 'apple-touch-icon-180x180.png'];
+
+async function makeCircle(targetFilename) {
+       const targetPath = path.join(STATIC_DIR, targetFilename);
+       const sourcePath = path.join(STATIC_DIR, sourceIcon);
+
+       if (!fs.existsSync(sourcePath)) {
+               console.log(`⏭️  ${sourceIcon} not found, skipping`);
+               return;
+       }
+       if (!fs.existsSync(targetPath)) {
+               console.log(`⏭️  ${targetFilename} not found, skipping`);
+               return;
+       }
+
+       const metadata = await sharp(targetPath).metadata();
+       const size = Math.max(metadata.width, metadata.height);
+       const radius = Math.floor((size * (1 - paddingPct / 100)) / 2);
+       const center = Math.floor(size / 2);
+
+       // Build circular mask as RGBA buffer: white opaque circle on transparent bg
+       const maskBuf = Buffer.alloc(size * size * 4, 0);
+       for (let y = 0; y < size; y++) {
+               for (let x = 0; x < size; x++) {
+                       const dx = x - center;
+                       const dy = y - center;
+                       const dist = Math.sqrt(dx * dx + dy * dy);
+                       if (dist < radius) {
+                               const i = (y * size + x) * 4;
+                               maskBuf[i] = 255;
+                               maskBuf[i + 1] = 255;
+                               maskBuf[i + 2] = 255;
+                               maskBuf[i + 3] = 255;
+                       }
+               }
+       }
+
+       const tmpMask = path.join(STATIC_DIR, '.mask-tmp.png');
+       await sharp(maskBuf, {
+               raw: { width: size, height: size, channels: 4 }
+       })
+               .png()
+               .toFile(tmpMask);
+
+       // Step 1: Scale source relative to circle diameter (not full icon), composite centered onto white canvas of full size
+       const circleDiameter = Math.floor(size * (1 - paddingPct / 100));
+       const scaledSize = Math.floor((circleDiameter * scalePct) / 100);
+       const offset = Math.floor((size - scaledSize) / 2);
+
+       const scaledBuf = await sharp(sourcePath)
+               .resize(scaledSize, scaledSize, {
+                       fit: 'cover',
+                       background: { r: 255, g: 255, b: 255, alpha: 1 }
+               })
+               .ensureAlpha()
+               .png()
+               .toBuffer();
+
+       // Step 2: Composite scaled image onto white background, then apply circular mask
+       const output = await sharp({
+               create: {
+                       width: size,
+                       height: size,
+                       channels: 4,
+                       background: { r: 255, g: 255, b: 255, alpha: 1 }
+               }
+       })
+               .composite([
+                       { input: scaledBuf, top: offset, left: offset },
+                       { input: tmpMask, top: 0, left: 0, blend: 'dest-in' }
+               ])
+               .png()
+               .toBuffer();
+
+       fs.writeFileSync(targetPath, output);
+       fs.unlinkSync(tmpMask);
+
+       console.log(
+               `✓ ${targetFilename} → circle from ${sourceIcon}, ${paddingPct}% padding (size=${size}, r=${radius}, scale=${scalePct}%, circleDiameter=${circleDiameter})`
+       );
+}
+
+async function main() {
+       console.log(`Circular mask: ${paddingPct}% padding, ${scalePct}% scale, source=${sourceIcon}\n`);
+       for (const icon of targetIcons) {
+               await makeCircle(icon);
+       }
+
+       console.log('\nUnchanged:');
+       for (const icon of untouchedIcons) {
+               const fp = path.join(STATIC_DIR, icon);
+               console.log(`  ${icon} (${fs.existsSync(fp) ? fs.statSync(fp).size + ' bytes' : 'missing'})`);
+       }
+}
+
+main();
diff --git a/tools/ui/scripts/vite-plugin-build-info.ts b/tools/ui/scripts/vite-plugin-build-info.ts
new file mode 100644 (file)
index 0000000..a2dc4ac
--- /dev/null
@@ -0,0 +1,42 @@
+import { writeFileSync, existsSync } from 'node:fs';
+import { resolve } from 'path';
+import type { Plugin } from 'vite';
+import { BUILD_CONFIG } from '../src/lib/constants/pwa';
+
+let processed = false;
+
+const OUTPUT_DIR = process.env.LLAMA_UI_OUT_DIR ?? BUILD_CONFIG.OUTPUT_DIR;
+
+/**
+ * Write build.json with the llama.cpp release build number.
+ *
+ * LLAMA_BUILD_NUMBER is passed from CMake -> npm -> vite via env var.
+ * Used for display of the current llama-server release (e.g. "b1234").
+ */
+export function buildInfoPlugin(): Plugin {
+       return {
+               name: 'llamacpp:build-info',
+               apply: 'build',
+               closeBundle() {
+                       setTimeout(() => {
+                               try {
+                                       if (processed) return;
+                                       processed = true;
+
+                                       const buildNumber = process.env.LLAMA_BUILD_NUMBER;
+                                       if (!buildNumber) return;
+
+                                       const outDir = resolve(OUTPUT_DIR);
+                                       const indexPath = resolve(outDir, 'index.html');
+                                       if (!existsSync(indexPath)) return;
+
+                                       const buildJsonPath = resolve(outDir, 'build.json');
+                                       writeFileSync(buildJsonPath, JSON.stringify({ version: buildNumber }), 'utf-8');
+                                       console.log(`Created build.json (version: ${buildNumber})`);
+                               } catch (error) {
+                                       console.error('Failed to write build.json:', error);
+                               }
+                       }, 100);
+               }
+       };
+}
diff --git a/tools/ui/scripts/vite-plugin-llama-cpp-build.ts b/tools/ui/scripts/vite-plugin-llama-cpp-build.ts
deleted file mode 100644 (file)
index 74e3de9..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-import {
-       readFileSync,
-       writeFileSync,
-       existsSync,
-       readdirSync,
-       copyFileSync,
-       rmSync,
-       unlinkSync
-} from 'fs';
-import { resolve } from 'path';
-import type { Plugin } from 'vite';
-
-const GUIDE_FOR_FRONTEND = `
-<!--
-  This is a static build of the frontend.
-  It is automatically generated by the build process.
-  Do not edit this file directly.
-  To make changes, refer to the "Web UI" section in the README.
--->
-`.trim();
-
-const OUTPUT_DIR = process.env.LLAMA_UI_OUT_DIR ?? './dist';
-
-export function llamaCppBuildPlugin(): Plugin {
-       return {
-               name: 'llamacpp:build',
-               apply: 'build',
-               closeBundle() {
-                       setTimeout(() => {
-                               try {
-                                       const outDir = resolve(OUTPUT_DIR);
-                                       const indexPath = resolve(outDir, 'index.html');
-                                       if (!existsSync(indexPath)) return;
-
-                                       let content = readFileSync(indexPath, 'utf-8');
-
-                                       // Inline favicon as base64 data URL
-                                       const faviconPath = resolve('static/favicon.svg');
-                                       if (existsSync(faviconPath)) {
-                                               const faviconContent = readFileSync(faviconPath, 'utf-8');
-                                               const faviconBase64 = Buffer.from(faviconContent).toString('base64');
-                                               const faviconDataUrl = `data:image/svg+xml;base64,${faviconBase64}`;
-                                               content = content.replace(/href="[^"]*favicon\.svg"/g, `href="${faviconDataUrl}"`);
-                                               console.log('✓ Inlined favicon.svg as base64 data URL');
-                                       }
-
-                                       content = content.replace(/\r/g, '');
-                                       content = GUIDE_FOR_FRONTEND + '\n' + content;
-
-                                       // Keep the Vite hash as a query string so each build busts the browser cache
-                                       content = content.replace(/\/_app\/immutable\/bundle\.([^".]+)\.js/g, './bundle.js?$1');
-                                       content = content.replace(
-                                               /\/_app\/immutable\/assets\/bundle\.([^".]+)\.css/g,
-                                               './bundle.css?$1'
-                                       );
-                                       content = content.replace(/__sveltekit_[a-z0-9]+/g, '__sveltekit__');
-
-                                       writeFileSync(indexPath, content, 'utf-8');
-                                       console.log('✓ Updated index.html');
-
-                                       // Copy bundle.*.js -> bundle.js at output root
-                                       const immutableDir = resolve(outDir, '_app/immutable');
-                                       const bundleDir = resolve(outDir, '_app/immutable/assets');
-
-                                       if (existsSync(immutableDir)) {
-                                               const jsFiles = readdirSync(immutableDir).filter((f) => f.match(/^bundle\..+\.js$/));
-                                               if (jsFiles.length > 0) {
-                                                       copyFileSync(resolve(immutableDir, jsFiles[0]), resolve(outDir, 'bundle.js'));
-                                                       // Normalize __sveltekit_<hash> to __sveltekit__ in bundle.js
-                                                       const bundleJsPath = resolve(outDir, 'bundle.js');
-                                                       let bundleJs = readFileSync(bundleJsPath, 'utf-8');
-                                                       bundleJs = bundleJs.replace(/__sveltekit_[a-z0-9]+/g, '__sveltekit__');
-                                                       writeFileSync(bundleJsPath, bundleJs, 'utf-8');
-                                                       console.log(`✓ Copied ${jsFiles[0]} -> bundle.js`);
-                                               }
-                                       }
-
-                                       // Copy bundle.*.css -> bundle.css at output root
-                                       if (existsSync(bundleDir)) {
-                                               const cssFiles = readdirSync(bundleDir).filter((f) => f.match(/^bundle\..+\.css$/));
-                                               if (cssFiles.length > 0) {
-                                                       copyFileSync(resolve(bundleDir, cssFiles[0]), resolve(outDir, 'bundle.css'));
-                                                       console.log(`✓ Copied ${cssFiles[0]} -> bundle.css`);
-                                               }
-                                       }
-
-                                       // Cleanup: remove _app directory, favicon.svg, and legacy index.html.gz
-                                       const appDir = resolve(outDir, '_app');
-                                       if (existsSync(appDir)) {
-                                               rmSync(appDir, { recursive: true, force: true });
-                                               console.log('✓ Removed _app directory');
-                                       }
-
-                                       const faviconOut = resolve(outDir, 'favicon.svg');
-                                       if (existsSync(faviconOut)) {
-                                               unlinkSync(faviconOut);
-                                               console.log('✓ Removed favicon.svg');
-                                       }
-                               } catch (error) {
-                                       console.error('Failed to process build output:', error);
-                               }
-                       }, 100);
-               }
-       };
-}
diff --git a/tools/ui/scripts/vite-plugin-relativize-base.ts b/tools/ui/scripts/vite-plugin-relativize-base.ts
new file mode 100644 (file)
index 0000000..ce2f1b6
--- /dev/null
@@ -0,0 +1,61 @@
+import { readFileSync, writeFileSync, existsSync } from 'node:fs';
+import { resolve } from 'path';
+import type { Plugin } from 'vite';
+import { BUILD_CONFIG } from '../src/lib/constants/pwa';
+
+let processed = false;
+
+const OUTPUT_DIR = process.env.LLAMA_UI_OUT_DIR ?? BUILD_CONFIG.OUTPUT_DIR;
+
+function rewrite(path: string, pairs: [string, string][]): void {
+       if (!existsSync(path)) {
+               return;
+       }
+       const text = readFileSync(path, 'utf-8');
+       let out = text;
+       for (const [from, to] of pairs) {
+               out = out.split(from).join(to);
+       }
+       if (out !== text) {
+               writeFileSync(path, out, 'utf-8');
+       }
+}
+
+/**
+ * Relativize SvelteKit absolute base refs so the build is relocatable under any subpath.
+ *
+ * SvelteKit bakes root absolute /_app/ paths into the SPA fallback because paths.relative
+ * does not apply to a depth agnostic fallback page. Rewriting to ./_app/ lets a plain
+ * recursive copy of the output into /any/subdir/ resolve assets against the document URL.
+ * Runs after adapter-static writes index.html and the PWA plugin writes sw.js, deferred the
+ * same way as buildInfoPlugin so the emitted files exist.
+ */
+export function relativizeBasePlugin(): Plugin {
+       return {
+               name: 'llamacpp:relativize-base',
+               apply: 'build',
+               closeBundle() {
+                       setTimeout(() => {
+                               try {
+                                       if (processed) return;
+                                       processed = true;
+
+                                       const outDir = resolve(OUTPUT_DIR);
+
+                                       // index.html: modulepreload, stylesheet and bootstrap import reference "/_app/
+                                       rewrite(resolve(outDir, 'index.html'), [['"/_app/', '"./_app/']]);
+
+                                       // sw.js: the only absolute entries are the navigate fallback precache key and handler
+                                       rewrite(resolve(outDir, 'sw.js'), [
+                                               ['{url:"/"', '{url:"./"'],
+                                               ['createHandlerBoundToURL("/"', 'createHandlerBoundToURL("./"']
+                                       ]);
+
+                                       console.log('Relativized base refs in index.html and sw.js');
+                               } catch (error) {
+                                       console.error('Failed to relativize base refs:', error);
+                               }
+                       }, 100);
+               }
+       };
+}
diff --git a/tools/ui/scripts/vite-plugin-splash-screen.ts b/tools/ui/scripts/vite-plugin-splash-screen.ts
new file mode 100644 (file)
index 0000000..059ce49
--- /dev/null
@@ -0,0 +1,115 @@
+import { readdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs';
+import { resolve } from 'path';
+import type { Plugin } from 'vite';
+import { TAB, NEWLINE } from '../src/lib/constants/code';
+import { APPLE_DEVICES, BUILD_CONFIG, REGEX_PATTERNS, SPLASH_LINK } from '../src/lib/constants/pwa';
+import type { SplashDimensions } from '../src/lib/types';
+import { SplashOrientation } from '../src/lib/enums/splash.enums';
+
+let processed = false;
+
+const OUTPUT_DIR = process.env.LLAMA_UI_OUT_DIR ?? BUILD_CONFIG.OUTPUT_DIR;
+
+/**
+ * Generate iOS splash screen <link> tags from generated apple-splash-*.png files.
+ * Returns an array of HTML link strings to be injected into the page head.
+ */
+export function generateSplashScreenLinks(outDir: string): string[] {
+       const files = readdirSync(outDir).filter((f) => f.match(REGEX_PATTERNS.SPLASH_FILE));
+       if (files.length === 0) return [];
+
+       const dimMap = new Map<string, SplashDimensions>();
+       for (const [dims, spec] of Object.entries(APPLE_DEVICES)) {
+               const [w, h] = dims.split('x').map(Number);
+               // logical-point dimensions
+               dimMap.set(`${w}x${h}`, { deviceW: spec.width, deviceH: spec.height, dpr: spec.dpr });
+               dimMap.set(`${h}x${w}`, { deviceW: spec.width, deviceH: spec.height, dpr: spec.dpr });
+               // pixel dimensions (used by actual generated splash files)
+               dimMap.set(`${w * spec.dpr}x${h * spec.dpr}`, {
+                       deviceW: spec.width,
+                       deviceH: spec.height,
+                       dpr: spec.dpr
+               });
+               dimMap.set(`${h * spec.dpr}x${w * spec.dpr}`, {
+                       deviceW: spec.width,
+                       deviceH: spec.height,
+                       dpr: spec.dpr
+               });
+       }
+
+       const lightLinks: string[] = [];
+       const darkLinks: string[] = [];
+
+       for (const file of files) {
+               const match = file.match(REGEX_PATTERNS.SPLASH_FILE);
+               if (!match) continue;
+               const orientation = match[1] as SplashOrientation;
+               const isDark = !!match[2];
+               const pixelW = parseInt(match[3]);
+               const pixelH = parseInt(match[4]);
+
+               const key = `${pixelW}x${pixelH}`;
+               const spec = dimMap.get(key);
+               if (!spec) {
+                       console.warn(`Unknown splash screen dimensions: ${key} (${file})`);
+                       continue;
+               }
+
+               const { deviceW, deviceH, dpr } = spec;
+               const media = `screen and (device-width: ${deviceW}px) and (device-height: ${deviceH}px) and (-webkit-device-pixel-ratio: ${dpr}) and (orientation: ${orientation})`;
+               const href = `./${file}`;
+
+               if (isDark) {
+                       darkLinks.push(
+                               `${SPLASH_LINK.HTML} media="${media}${SPLASH_LINK.DARK_MEDIA_SUFFIX}" href="${href}">`
+                       );
+               } else {
+                       lightLinks.push(`${SPLASH_LINK.HTML} media="${media}" href="${href}">`);
+               }
+       }
+
+       return [...lightLinks, ...darkLinks];
+}
+
+export function splashScreenPlugin(): Plugin {
+       return {
+               name: 'llamacpp:splash-screen',
+               apply: 'build',
+               closeBundle() {
+                       setTimeout(() => {
+                               try {
+                                       if (processed) return;
+                                       processed = true;
+
+                                       const outDir = resolve(OUTPUT_DIR);
+                                       const indexPath = resolve(outDir, 'index.html');
+                                       if (!existsSync(indexPath)) return;
+
+                                       let content = readFileSync(indexPath, 'utf-8');
+
+                                       // Inject iOS splash screen <link> tags into <head>.
+                                       // The @vite-pwa/assets-generator generates apple-splash-*.png files;
+                                       // this scans them and creates the <link> tags SvelteKit needs.
+                                       const splashLinks = generateSplashScreenLinks(outDir);
+                                       if (splashLinks.length > 0) {
+                                               console.log(`Generated ${splashLinks.length} apple-splash link tags`);
+                                               const splashHtml = splashLinks.map((l) => TAB + TAB + l).join(NEWLINE);
+                                               content = content.replace(
+                                                       REGEX_PATTERNS.HEAD_CLOSE,
+                                                       splashHtml + NEWLINE + TAB + TAB + '</head>'
+                                               );
+                                       }
+
+                                       // Remove trailing \r from Windows line endings
+                                       content = content.replace(/\r/g, '');
+                                       content = BUILD_CONFIG.GUIDE_COMMENT + NEWLINE + content;
+
+                                       writeFileSync(indexPath, content, 'utf-8');
+                                       console.log('Updated index.html');
+                               } catch (error) {
+                                       console.error('Failed to process build output:', error);
+                               }
+                       }, 100);
+               }
+       };
+}
index ec65952e9a7d3985b44d560f15e3f6014f6da897..a7583eec59ae4d14b9e215c45f567265a8756055 100644 (file)
@@ -1,6 +1,9 @@
 // See https://svelte.dev/docs/kit/types#app.d.ts
 // for information about these interfaces
 
+import 'vite-plugin-pwa/pwa-assets';
+import 'vite-plugin-pwa/svelte';
+
 // Import chat types from dedicated module
 
 import type {
index 1391f884880d6f26b9914504d3dcfaf72bf21de7..db3e9edf5e1ed18dca9cd40e82f3bf92de490440 100644 (file)
@@ -2,10 +2,17 @@
 <html lang="en">
        <head>
                <meta charset="utf-8" />
-               <link rel="icon" href="%sveltekit.assets%/favicon.svg" />
+               <link rel="icon" href="favicon.ico" sizes="48x48" />
+               <link rel="icon" href="favicon.svg" sizes="any" type="image/svg+xml" />
+
+               <link rel="apple-touch-icon" href="apple-touch-icon-180x180.png" />
+
+               <link rel="manifest" href="./manifest.webmanifest" />
+
                <meta name="viewport" content="width=device-width, initial-scale=1" />
                %sveltekit.head%
        </head>
+
        <body data-sveltekit-preload-data="hover">
                <div style="display: contents">%sveltekit.body%</div>
        </body>
index 69a120b7cb680b14445fbe6e48dac2171675da26..62e73d8579ac24173ec45cfcbdd71f6c58538f93 100644 (file)
@@ -20,6 +20,8 @@
        import { ColorMode } from '$lib/enums/ui.enums';
        import { fade } from 'svelte/transition';
        import { goto } from '$app/navigation';
+       import { Button } from '$lib/components/ui/button';
+       import { RefreshCw } from '@lucide/svelte';
        import { page } from '$app/state';
        import { setChatSettingsConfigContext } from '$lib/contexts';
        import { settingsReferrer } from '$lib/stores/settings-referrer.svelte';
                                                                onConfigChange={handleConfigChange}
                                                                onThemeChange={handleThemeChange}
                                                        />
+
+                                                       {#if currentSection.title === SETTINGS_SECTION_TITLES.GENERAL}
+                                                               <div class="flex justify-end">
+                                                                       <Button variant="outline" onclick={() => window.location.reload()}>
+                                                                               <RefreshCw class="h-3 w-3" />
+                                                                               Reload app
+                                                                       </Button>
+                                                               </div>
+                                                       {/if}
                                                </div>
                                        {/if}
                                </div>
diff --git a/tools/ui/src/lib/components/pwa/PwaMetaTags.svelte b/tools/ui/src/lib/components/pwa/PwaMetaTags.svelte
new file mode 100644 (file)
index 0000000..a3a406f
--- /dev/null
@@ -0,0 +1,23 @@
+<script lang="ts">
+       import { APPLE_META_TAGS, MEDIA_QUERIES, THEME_COLORS } from '$lib/constants/pwa';
+       import { APP_NAME } from '$lib/constants';
+
+       let { appName = APP_NAME } = $props();
+</script>
+
+<svelte:head>
+       <!-- Theme color for light/dark modes -->
+       <meta name="theme-color" content={THEME_COLORS.LIGHT} media={MEDIA_QUERIES.PREFERS_LIGHT} />
+       <meta name="theme-color" content={THEME_COLORS.DARK} media={MEDIA_QUERIES.PREFERS_DARK} />
+
+       <!-- Apple mobile web app meta tags -->
+       <meta
+               name={APPLE_META_TAGS.MOBILE_WEB_APP_CAPABLE.name}
+               content={APPLE_META_TAGS.MOBILE_WEB_APP_CAPABLE.content}
+       />
+       <meta
+               name={APPLE_META_TAGS.STATUS_BAR_STYLE.name}
+               content={APPLE_META_TAGS.STATUS_BAR_STYLE.content}
+       />
+       <meta name={APPLE_META_TAGS.MOBILE_WEB_APP_TITLE.name} content={appName} />
+</svelte:head>
diff --git a/tools/ui/src/lib/components/pwa/PwaRefreshAlert.svelte b/tools/ui/src/lib/components/pwa/PwaRefreshAlert.svelte
new file mode 100644 (file)
index 0000000..500abdc
--- /dev/null
@@ -0,0 +1,35 @@
+<script lang="ts">
+       import * as Card from '$lib/components/ui/card';
+       import { Button } from '$lib/components/ui/button';
+
+       let { needRefresh: needRefreshProp, updateServiceWorker, forceReload } = $props();
+       let needRefresh = $derived(needRefreshProp ?? false);
+</script>
+
+{#if needRefresh}
+       <Card.Root class="overflow-hidden gap-1 py-5">
+               <Card.Header class="px-5">
+                       <Card.Title class="text-sm font-medium">Update available</Card.Title>
+               </Card.Header>
+
+               <Card.Content class="gap-6 grid px-5">
+                       <p class="text-xs text-muted-foreground">A new version is available. Reload to update.</p>
+
+                       <Button
+                               class="justify-self-end-safe"
+                               size="sm"
+                               onclick={() => {
+                                       updateServiceWorker();
+
+                                       if (forceReload) {
+                                               window.location.reload();
+                                       }
+
+                                       needRefresh = false;
+                               }}
+                       >
+                               Reload
+                       </Button>
+               </Card.Content>
+       </Card.Root>
+{/if}
diff --git a/tools/ui/src/lib/components/pwa/index.ts b/tools/ui/src/lib/components/pwa/index.ts
new file mode 100644 (file)
index 0000000..fbaaae2
--- /dev/null
@@ -0,0 +1,2 @@
+export { default as PwaMetaTags } from './PwaMetaTags.svelte';
+export { default as PwaRefreshAlert } from './PwaRefreshAlert.svelte';
diff --git a/tools/ui/src/lib/constants/app.ts b/tools/ui/src/lib/constants/app.ts
new file mode 100644 (file)
index 0000000..c598f48
--- /dev/null
@@ -0,0 +1 @@
+export const APP_NAME = import.meta.env?.VITE_PUBLIC_APP_NAME || 'llama-ui';
index 12bcd0db779d3cb8c09d303e3a25b62275961edc..b55513d7420d1fc756268a2ac6a3f80c59f6f1d8 100644 (file)
@@ -1,4 +1,5 @@
 export const NEWLINE = '\n';
+export const TAB = '\t';
 export const DEFAULT_LANGUAGE = 'text';
 export const LANG_PATTERN = /^(\w*)\n?/;
 export const AMPERSAND_REGEX = /&/g;
index 9ab864cd0e4ed64697245b85906a646c9ee6ac79..a81f734d6843cf973e35f8f19d1336391a409065 100644 (file)
@@ -3,6 +3,7 @@
 
 export * from './agentic';
 export * from './api-endpoints';
+export * from './app';
 export * from './attachment-labels';
 export * from './database';
 export * from './reasoning-effort';
@@ -36,6 +37,7 @@ export * from './message-export';
 export * from './model-id';
 export * from './precision';
 export * from './processing-info';
+export * from './pwa';
 export * from './routes';
 export * from './sandbox';
 export * from './settings-keys';
diff --git a/tools/ui/src/lib/constants/pwa.ts b/tools/ui/src/lib/constants/pwa.ts
new file mode 100644 (file)
index 0000000..49036a6
--- /dev/null
@@ -0,0 +1,352 @@
+/**
+ * Centralized PWA constants to avoid magic strings, regexes, and duplicated
+ * definitions across the codebase.
+ */
+
+import { APP_NAME } from './app';
+
+export const MEDIA_QUERIES = {
+       PREFERS_DARK: '(prefers-color-scheme: dark)',
+       PREFERS_LIGHT: '(prefers-color-scheme: light)'
+} as const;
+
+export const THEME_COLORS = {
+       LIGHT: '#ffffff',
+       DARK: '#0d0d0d',
+       ACCENT_BLUE: '#2563eb',
+       ACCENT_BLUE_HOVER: '#1d4ed8',
+       BACKGROUND_LIGHT: 'white',
+       BACKGROUND_DARK: '#111111',
+       TITLE_UPDATE_ALERT: {
+               BORDER_LIGHT: 'zinc-200',
+               BORDER_DARK: 'zinc-700',
+               BG_LIGHT: 'white',
+               BG_DARK: 'zinc-800',
+               TEXT_LIGHT: 'zinc-500',
+               TEXT_DARK: 'zinc-400'
+       }
+} as const;
+
+export const FAVICON_PATHS = {
+       ICO_LIGHT: 'favicon.ico',
+       ICO_DARK: 'favicon-dark.ico',
+       SVG_LIGHT: 'favicon.svg',
+       SVG_DARK: 'favicon-dark.svg'
+} as const;
+
+export const FAVICON_SELECTORS = {
+       ICO_48X48: 'link[rel="icon"][sizes="48x48"]',
+       SVG_ANY: 'link[rel="icon"][type="image/svg+xml"]'
+} as const;
+
+export const APPLE_ASSETS = {
+       TOUCH_ICON: 'apple-touch-icon-180x180.png'
+} as const;
+
+export const PWA_MANIFEST = {
+       name: APP_NAME,
+       short_name: APP_NAME,
+       description: 'Local AI chat interface powered by llama.cpp',
+       start_url: './',
+       display: 'standalone' as const,
+       background_color: THEME_COLORS.BACKGROUND_LIGHT,
+       theme_color: THEME_COLORS.BACKGROUND_LIGHT,
+       icons: [
+               { src: 'pwa-64x64.png', sizes: '64x64', type: 'image/png' },
+               { src: 'pwa-192x192.png', sizes: '192x192', type: 'image/png' },
+               { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'any' as const },
+               {
+                       src: 'maskable-icon-512x512.png',
+                       sizes: '512x512',
+                       type: 'image/png',
+                       purpose: 'maskable' as const
+               }
+       ]
+};
+
+export const PWA_ICON_PATHS = {
+       PWA_64: '/pwa-64x64.png',
+       PWA_192: '/pwa-192x192.png',
+       PWA_512: '/pwa-512x512.png',
+       MASKABLE_512: '/maskable-icon-512x512.png'
+} as const;
+
+/** Apple device dimensions (logical points) and DPR, from Apple HIG. */
+export const APPLE_DEVICES = {
+       // iPhones (DPR 3)
+       '1170x2532': { width: 390, height: 844, dpr: 3 }, // iPhone 13, 15
+       '1179x2556': { width: 393, height: 852, dpr: 3 }, // iPhone 14, 15 Pro, 16
+       '1206x2622': { width: 402, height: 874, dpr: 3 }, // iPhone 16 Plus, 16e
+       '1284x2778': { width: 428, height: 926, dpr: 3 }, // iPhone 15 Plus
+       '1290x2796': { width: 430, height: 932, dpr: 3 }, // iPhone 15 Pro Max, 16 Pro
+       '1320x2868': { width: 440, height: 956, dpr: 3 }, // iPhone 16 Pro Max
+       '750x1334': { width: 375, height: 667, dpr: 2 }, // iPhone 6/7/8, 14
+       '640x1136': { width: 320, height: 568, dpr: 2 }, // iPhone 6/7/8 Plus
+       // iPads (DPR 2)
+       '1668x2388': { width: 834, height: 1194, dpr: 2 }, // iPad Air 11", iPad 11"
+       '2048x2732': { width: 1024, height: 1366, dpr: 2 }, // iPad Pro 12.9"
+       '1640x2360': { width: 820, height: 1180, dpr: 2 }, // iPad Air 10.9"
+       '1032x1376': { width: 1032, height: 1376, dpr: 2 }, // iPad Air 13"
+       '744x1133': { width: 376, height: 573, dpr: 2 } // iPad mini 8.3"
+} as const;
+
+export type AppleDeviceKey = keyof typeof APPLE_DEVICES;
+
+export const PWA_FILE_PATHS = {
+       MANIFEST: '/manifest.webmanifest',
+       SERVICE_WORKER: '/sw.js',
+       VERSION: '/version.json',
+       WORKBOX: '/workbox-<hash>.js'
+} as const;
+
+// Used by the server middleware to skip API key validation.
+// Keep in sync with tools/server/server-http.cpp public_endpoints list.
+
+export const PUBLIC_ENDPOINTS = [
+       '/health',
+       '/v1/health',
+       '/models',
+       '/v1/models',
+       '/props',
+       '/metrics',
+       '/',
+       '/index.html',
+
+       '/favicon.ico',
+       '/favicon-dark.ico',
+       '/favicon.svg',
+       '/favicon-dark.svg',
+       '/pwa-64x64.png',
+       '/pwa-192x192.png',
+       '/pwa-512x512.png',
+       '/maskable-icon-512x512.png',
+       '/apple-touch-icon-180x180.png',
+       '/apple-splash-portrait-640x1136.png',
+       '/apple-splash-landscape-640x1136.png',
+       '/apple-splash-portrait-750x1334.png',
+       '/apple-splash-landscape-750x1334.png',
+       '/apple-splash-portrait-1170x2532.png',
+       '/apple-splash-landscape-1170x2532.png',
+       '/apple-splash-portrait-1179x2556.png',
+       '/apple-splash-landscape-1179x2556.png',
+       '/apple-splash-portrait-1206x2622.png',
+       '/apple-splash-landscape-1206x2622.png',
+       '/apple-splash-portrait-1284x2778.png',
+       '/apple-splash-landscape-1284x2778.png',
+       '/apple-splash-portrait-1290x2796.png',
+       '/apple-splash-landscape-1290x2796.png',
+       '/apple-splash-portrait-1320x2868.png',
+       '/apple-splash-landscape-1320x2868.png',
+       '/apple-splash-portrait-1488x2266.png',
+       '/apple-splash-landscape-1488x2266.png',
+       '/apple-splash-portrait-1640x2360.png',
+       '/apple-splash-landscape-1640x2360.png',
+       '/apple-splash-portrait-1668x2388.png',
+       '/apple-splash-landscape-1668x2388.png',
+       '/apple-splash-portrait-2048x2732.png',
+       '/apple-splash-landscape-2048x2732.png',
+       '/apple-splash-portrait-dark-640x1136.png',
+       '/apple-splash-landscape-dark-640x1136.png',
+       '/apple-splash-portrait-dark-750x1334.png',
+       '/apple-splash-landscape-dark-750x1334.png',
+       '/apple-splash-portrait-dark-1170x2532.png',
+       '/apple-splash-landscape-dark-1170x2532.png',
+       '/apple-splash-portrait-dark-1179x2556.png',
+       '/apple-splash-landscape-dark-1179x2556.png',
+       '/apple-splash-portrait-dark-1206x2622.png',
+       '/apple-splash-landscape-dark-1206x2622.png',
+       '/apple-splash-portrait-dark-1284x2778.png',
+       '/apple-splash-landscape-dark-1284x2778.png',
+       '/apple-splash-portrait-dark-1290x2796.png',
+       '/apple-splash-landscape-dark-1290x2796.png',
+       '/apple-splash-portrait-dark-1320x2868.png',
+       '/apple-splash-landscape-dark-1320x2868.png',
+       '/apple-splash-portrait-dark-1488x2266.png',
+       '/apple-splash-landscape-dark-1488x2266.png',
+       '/apple-splash-portrait-dark-1640x2360.png',
+       '/apple-splash-landscape-dark-1640x2360.png',
+       '/apple-splash-portrait-dark-1668x2388.png',
+       '/apple-splash-landscape-dark-1668x2388.png',
+       '/apple-splash-portrait-dark-2048x2732.png',
+       '/apple-splash-landscape-dark-2048x2732.png',
+       '/manifest.webmanifest',
+       '/sw.js',
+       '/version.json',
+       '/workbox-<hash>.js'
+] as const;
+export const BUILD_CONFIG = {
+       OUTPUT_DIR: './dist',
+       GUIDE_COMMENT: `
+<!--
+  This is a static build of the frontend.
+  It is automatically generated by the build process.
+  Do not edit this file directly.
+  To make changes, refer to the "Web UI" section in the README.
+-->
+`.trim()
+} as const;
+
+export const REGEX_PATTERNS = {
+       SPLASH_FILE: /^apple-splash-(portrait|landscape)-(dark-)?(\d+)x(\d+)\.png$/,
+       HEAD_CLOSE: /\t*<\/head>/
+} as const;
+
+// Device names used by @vite-pwa/assets-generator for splash screen generation.
+// Keep in sync with pwa-assets.config.ts.
+export const PWA_GENERATOR_DEVICES = [
+       'iPhone 13',
+       'iPhone 13 Pro',
+       'iPhone 13 Pro Max',
+       'iPhone 14',
+       'iPhone 14 Plus',
+       'iPhone 14 Pro',
+       'iPhone 14 Pro Max',
+       'iPhone 15',
+       'iPhone 15 Plus',
+       'iPhone 15 Pro',
+       'iPhone 15 Pro Max',
+       'iPhone 16',
+       'iPhone 16 Plus',
+       'iPhone 16 Pro',
+       'iPhone 16 Pro Max',
+       'iPhone 16e',
+       'iPhone SE 4"',
+       'iPhone SE 4.7"',
+       'iPad 11"',
+       'iPad Air 10.9"',
+       'iPad Air 11"',
+       'iPad Air 13"',
+       'iPad Pro 11"',
+       'iPad Pro 12.9"',
+       'iPad mini 8.3"'
+] as const;
+
+// PWA assets generator configuration — used by pwa-assets.config.ts
+export const PWA_ASSET_GENERATOR = {
+       LINK_PRESET: '2023',
+       SPLASH_PADDING: 0.75,
+       FIT_MODE: 'contain',
+       ADD_MEDIA_SCREEN: true,
+       BASE_PATH: './',
+       XHTML: false,
+       PNG_COMPRESSION_LEVEL: 9,
+       PNG_QUALITY: 60,
+       DARK_PREFIX: 'dark-'
+} as const;
+
+export const CACHE_SETTINGS = {
+       IMMUTABLE_MAX_AGE_SECONDS: 31536000,
+       API_CACHE_MAX_AGE_SECONDS: 60 * 60 * 24,
+       API_CACHE_MAX_ENTRIES: 50,
+       MAX_FILE_SIZE_BYTES: 10 * 1024 * 1024
+} as const;
+
+export const GLOB_PATTERNS: string[] = [
+       '**/*.{js,css,html,ico,svg,png,webp,woff,woff2,json,webmanifest}'
+];
+
+// loading.html is the model loading page served by llama-server itself.
+// The SvelteKit PWA manifest transform strips the html extension from every
+// precache entry to match clean URLs, but loading.html is a plain static asset
+// with no clean URL, so static servers answer 404 and the SW install fails.
+export const GLOB_IGNORES: string[] = ['**/loading.html'];
+
+export const SW_CONFIG = {
+       CHECK_INTERVAL_MS: 60000,
+       UPDATE_FETCH_OPTIONS: {
+               CACHE: 'no-store',
+               HEADERS: {
+                       CACHE: 'no-store',
+                       CACHE_CONTROL: 'no-cache'
+               }
+       }
+} as const;
+
+// Runtime caching configuration for Workbox
+export const RUNTIME_CACHING = {
+       HANDLER: 'NetworkFirst',
+       CACHE_NAME: 'api-cache'
+} as const;
+
+// Workbox runtime caching patterns
+export const API_CACHING_PATTERNS = {
+       V1_API: /^\/v1\/.*/,
+       STATIC_API: /^\/(health|props|models|tools|slots|cors-proxy).*/
+} as const;
+
+// SvelteKit PWA plugin options
+export const PWA_KIT_OPTIONS = {
+       NAVIGATE_FALLBACK: './'
+} as const;
+
+export const APPLE_META_TAGS = {
+       MOBILE_WEB_APP_CAPABLE: { name: 'apple-mobile-web-app-capable', content: 'yes' },
+       STATUS_BAR_STYLE: { name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
+       MOBILE_WEB_APP_TITLE: { name: 'apple-mobile-web-app-title' }
+} as const;
+
+// Splash screen HTML link tag prefix used by generateSplashScreenLinks
+export const SPLASH_LINK = {
+       HTML: '<link rel="apple-touch-startup-image"',
+       DARK_MEDIA_SUFFIX: ' and (prefers-color-scheme: dark)'
+} as const;
+
+// SvelteKit PWA plugin configuration — used by @vite.config.ts
+import type { SvelteKitPWAOptions } from '@vite-pwa/sveltekit';
+
+export const SVELTEKIT_PWA_OPTIONS: SvelteKitPWAOptions = {
+       // Strategy: generateSW - the plugin generates a service worker automatically
+       // using Workbox. For a custom SW, use 'injectManifest' instead.
+       // Manifest configuration
+       manifest: PWA_MANIFEST,
+
+       // Workbox configuration for generateSW strategy
+       workbox: {
+               // Match all static assets in the build output.
+               // Uses '**/' because SvelteKit outputs files under _app/immutable/
+               // subdirectories.
+               globPatterns: GLOB_PATTERNS,
+               globIgnores: GLOB_IGNORES,
+               maximumFileSizeToCacheInBytes: CACHE_SETTINGS.MAX_FILE_SIZE_BYTES,
+
+               // Runtime caching for API calls - use NetworkFirst so APIs are always fresh
+               runtimeCaching: [
+                       {
+                               urlPattern: API_CACHING_PATTERNS.V1_API,
+                               handler: RUNTIME_CACHING.HANDLER,
+                               options: {
+                                       cacheName: RUNTIME_CACHING.CACHE_NAME,
+                                       expiration: {
+                                               maxEntries: CACHE_SETTINGS.API_CACHE_MAX_ENTRIES,
+                                               maxAgeSeconds: CACHE_SETTINGS.API_CACHE_MAX_AGE_SECONDS
+                                       }
+                               }
+                       },
+                       {
+                               urlPattern: API_CACHING_PATTERNS.STATIC_API,
+                               handler: RUNTIME_CACHING.HANDLER,
+                               options: {
+                                       cacheName: RUNTIME_CACHING.CACHE_NAME,
+                                       expiration: {
+                                               maxEntries: CACHE_SETTINGS.API_CACHE_MAX_ENTRIES,
+                                               maxAgeSeconds: CACHE_SETTINGS.API_CACHE_MAX_AGE_SECONDS
+                                       }
+                               }
+                       }
+               ]
+       },
+
+       devOptions: {
+               enabled: true,
+               suppressWarnings: true,
+               // Use PWA_KIT_OPTIONS.NAVIGATE_FALLBACK to match production SW behaviour
+               // (navigateFallback defaults to the configured base path, which is '/' for this SPA).
+               navigateFallback: PWA_KIT_OPTIONS.NAVIGATE_FALLBACK
+       },
+
+       // SvelteKit-specific options
+       kit: {
+               // Include version file for proper cache invalidation
+               includeVersionFile: true
+       }
+};
index 3e19166dfdd6e34958830c884a9ecfb6e57d22af..eea28b3409971a0dd24db8cc5fb0a610af8037bc 100644 (file)
@@ -31,6 +31,7 @@ export const SETTINGS_KEYS = {
        SHOW_RAW_MODEL_NAMES: 'showRawModelNames',
        SHOW_MODEL_QUANTIZATION: 'showModelQuantization',
        SHOW_MODEL_TAGS: 'showModelTags',
+       SHOW_BUILD_VERSION: 'showBuildVersion',
        SHOW_SYSTEM_MESSAGE: 'showSystemMessage',
        // Sampling
        TEMPERATURE: 'temperature',
index 910e5c2df046883bdc9e96ce0d4c1d21c2fb087c..f3f1829753225f5f0964232df1e2ba81c019c570 100644 (file)
@@ -365,6 +365,14 @@ const SETTINGS_REGISTRY: Record<string, SettingsSectionEntry> = {
                                        serverKey: SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS,
                                        paramType: SyncableParameterType.BOOLEAN
                                }
+                       },
+                       {
+                               key: SETTINGS_KEYS.SHOW_BUILD_VERSION,
+                               label: 'Show build version information',
+                               help: 'Display the current build version in the bottom-right corner of the interface.',
+                               defaultValue: false,
+                               type: SettingsFieldType.CHECKBOX,
+                               section: SETTINGS_SECTION_SLUGS.DISPLAY
                        }
                ]
        },
index 1bfe1b5f4a8b474c34d7af3bd5153365ae019612..8d425b96b7624591a4b34c7765dbba665d886428 100644 (file)
@@ -40,6 +40,9 @@ export const DEPRECATED_MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY = `${STORAGE_APP_NA
 /** @deprecated Use {@link USER_OVERRIDES_LOCALSTORAGE_KEY} instead */
 export const DEPRECATED_USER_OVERRIDES_LOCALSTORAGE_KEY = `${STORAGE_APP_NAME_DEPRECATED}.userOverrides`;
 
+/** Build version stored in localStorage for non-PWA update detection */
+export const BUILD_VERSION_LOCALSTORAGE_KEY = `${STORAGE_APP_NAME}.buildVersion`;
+
 /** Maps new keys to their deprecated fallback keys */
 export const NEW_TO_DEPRECATED_MAP: Record<string, string> = {
        [ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY]: DEPRECATED_ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY,
index f6e7f7d8a9b36f7c1ccba68c4626c97dc9a3f60c..6f344029f3cda9decb2d0afb285cd24b73550e75 100644 (file)
@@ -5,7 +5,6 @@ import { ROUTES } from './routes';
 
 export const FORK_TREE_DEPTH_PADDING = 8;
 export const SYSTEM_MESSAGE_PLACEHOLDER = 'System message';
-export const APP_NAME = import.meta.env.VITE_PUBLIC_APP_NAME || 'llama-ui';
 
 export const ICON_STRIP_TRANSITION_DURATION = 150;
 export const ICON_STRIP_TRANSITION_DELAY_MULTIPLIER = 50;
index 7438a76429f2b359702263abcc190c805adb68ea..449e4f90a9981307274ded5727dcbd709f66d13e 100644 (file)
@@ -63,3 +63,5 @@ export { ColorMode, HtmlInputType, McpPromptVariant, TooltipSide, UrlProtocol }
 export { KeyboardKey } from './keyboard.enums';
 
 export { ToolSource, ToolPermissionDecision, ToolResponseField } from './tools.enums';
+
+export { SplashOrientation } from './splash.enums';
diff --git a/tools/ui/src/lib/enums/splash.enums.ts b/tools/ui/src/lib/enums/splash.enums.ts
new file mode 100644 (file)
index 0000000..7efa892
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Splash screen orientation for iOS apple-touch-startup-image
+ */
+export enum SplashOrientation {
+       PORTRAIT = 'portrait',
+       LANDSCAPE = 'landscape'
+}
diff --git a/tools/ui/src/lib/hooks/use-pwa.svelte.ts b/tools/ui/src/lib/hooks/use-pwa.svelte.ts
new file mode 100644 (file)
index 0000000..e720253
--- /dev/null
@@ -0,0 +1,80 @@
+import { browser } from '$app/environment';
+import { useRegisterSW } from 'virtual:pwa-register/svelte';
+import { versionStore } from '$lib/stores/version.svelte';
+import { BUILD_VERSION_LOCALSTORAGE_KEY } from '$lib/constants/storage';
+import { SW_CONFIG } from '$lib/constants/pwa';
+
+/**
+ * Hook for PWA service worker registration, update polling, and build version mismatch detection.
+ *
+ * Combines two concerns that always belong together:
+ * 1. SW registration with periodic polling for updates
+ * 2. localStorage-based version tracking for non-PWA users
+ */
+export function usePwa() {
+       let swCheckInterval: ReturnType<typeof setInterval> | null = null;
+       let needRefreshByStorage = $state(false);
+
+       const {
+               // offlineReady, // to do - add installation banners for iOS
+               needRefresh: pwaNeedRefresh,
+               updateServiceWorker
+       } = useRegisterSW({
+               onRegisteredSW(swUrl: string, r: ServiceWorkerRegistration | undefined) {
+                       if (swCheckInterval) {
+                               clearInterval(swCheckInterval);
+                       }
+                       swCheckInterval = setInterval(async () => {
+                               if (!r || r.installing || !navigator?.onLine) return;
+
+                               try {
+                                       const resp = await fetch(swUrl, {
+                                               cache: SW_CONFIG.UPDATE_FETCH_OPTIONS.CACHE,
+                                               headers: {
+                                                       cache: SW_CONFIG.UPDATE_FETCH_OPTIONS.HEADERS.CACHE,
+                                                       'cache-control': SW_CONFIG.UPDATE_FETCH_OPTIONS.HEADERS.CACHE_CONTROL
+                                               }
+                                       });
+                                       if (resp?.status === 200) {
+                                               await r.update();
+                                       }
+                               } catch (e) {
+                                       console.error(e);
+                               }
+                       }, SW_CONFIG.CHECK_INTERVAL_MS);
+               },
+               onRegisterError(error: unknown) {
+                       console.error('[PWA] SW registration error:', error);
+               }
+       });
+
+       // Detect version mismatch via localStorage.
+       // _app/version.json is SvelteKit's native version file for PWA cache invalidation.
+       // This comparison detects server upgrades for non-PWA users.
+       $effect(() => {
+               if (!browser) return;
+
+               const currentVersion = versionStore.value;
+               if (!currentVersion) return;
+
+               try {
+                       const storedVersion = localStorage.getItem(BUILD_VERSION_LOCALSTORAGE_KEY);
+                       needRefreshByStorage = !!storedVersion && storedVersion !== currentVersion;
+                       localStorage.setItem(BUILD_VERSION_LOCALSTORAGE_KEY, currentVersion);
+               } catch {
+                       needRefreshByStorage = false;
+               }
+       });
+
+       return {
+               /** Writable that is true when a PWA service worker update is available */
+               get needRefresh() {
+                       return pwaNeedRefresh;
+               },
+               updateServiceWorker,
+               /** Version mismatch detected via localStorage (non-PWA users) */
+               get needRefreshByStorage() {
+                       return needRefreshByStorage;
+               }
+       };
+}
diff --git a/tools/ui/src/lib/stores/build-info.svelte.ts b/tools/ui/src/lib/stores/build-info.svelte.ts
new file mode 100644 (file)
index 0000000..a137be2
--- /dev/null
@@ -0,0 +1,42 @@
+/**
+ * buildInfoStore - llama.cpp build information
+ *
+ * Reads the build version from `build.json` — embedded at llama.cpp build time
+ * with the llama.cpp build number (LLAMA_BUILD_NUMBER). Shown in the UI when
+ * `showBuildVersion` is enabled.
+ *
+ * In dev mode (via `npm run dev`), falls back to `import.meta.env.DEV`'s truthy
+ * value since the artifact is not produced.
+ */
+
+import { browser } from '$app/environment';
+import { base } from '$app/paths';
+
+let build = $state<string>('');
+
+async function loadBuild() {
+       if (!browser) return;
+
+       if (import.meta.env.DEV) {
+               build = 'dev';
+               return;
+       }
+
+       try {
+               const res = await fetch(`${base}/build.json`, { cache: 'no-store' });
+               if (res.ok) {
+                       const data = await res.json();
+                       build = data.version ?? '';
+               }
+       } catch {
+               // build.json missing or unreachable - leave as empty string
+       }
+}
+
+loadBuild();
+
+export const buildInfoStore = {
+       get value(): string {
+               return build;
+       }
+};
index effb78e339b07304e5e1758b59167525f33d6304..671ecf287ad6586516d6f2b20e355118088a02b5 100644 (file)
@@ -489,7 +489,7 @@ class MCPStore {
                        if (!rootDomain) return null;
 
                        const origin = `${url.protocol}//${rootDomain}`;
-                       const candidates = ['favicon.ico', 'favicon.svg', 'favicon.png'];
+                       const candidates = ['favicon.ico', 'favicon.png'];
 
                        for (const path of candidates) {
                                const faviconUrl = `${origin}/${path}`;
diff --git a/tools/ui/src/lib/stores/theme.svelte.ts b/tools/ui/src/lib/stores/theme.svelte.ts
new file mode 100644 (file)
index 0000000..999e376
--- /dev/null
@@ -0,0 +1,14 @@
+import { browser } from '$app/environment';
+import { MEDIA_QUERIES } from '$lib/constants';
+
+export const theme = $state({
+       isSystemDark: browser && window.matchMedia(MEDIA_QUERIES.PREFERS_DARK).matches
+});
+
+if (browser) {
+       const mql = window.matchMedia(MEDIA_QUERIES.PREFERS_DARK);
+
+       mql.addEventListener('change', (e) => {
+               theme.isSystemDark = e.matches;
+       });
+}
diff --git a/tools/ui/src/lib/stores/version.svelte.ts b/tools/ui/src/lib/stores/version.svelte.ts
new file mode 100644 (file)
index 0000000..d8248a6
--- /dev/null
@@ -0,0 +1,41 @@
+/**
+ * versionStore - Frontend build version
+ *
+ * Reads from SvelteKit's `_app/version.json` — generated by the @vite-pwa/sveltekit
+ * plugin. The version string changes on every build, so comparing it against
+ * localStorage reliably detects server upgrades.
+ *
+ * In dev mode, falls back to `'dev'`.
+ */
+
+import { browser } from '$app/environment';
+import { base } from '$app/paths';
+
+let version = $state<string>('');
+
+async function loadVersion() {
+       if (!browser) return;
+
+       if (import.meta.env.DEV) {
+               version = 'dev';
+               return;
+       }
+
+       try {
+               const res = await fetch(`${base}/_app/version.json`, { cache: 'no-store' });
+               if (res.ok) {
+                       const data = await res.json();
+                       version = data.version ?? '';
+               }
+       } catch {
+               // _app/version.json missing or unreachable - leave as empty string
+       }
+}
+
+loadVersion();
+
+export const versionStore = {
+       get value(): string {
+               return version;
+       }
+};
index b88de5d66d96a7677faf344971a7482a79cc0123..c5f948898165e6670fcea0348af73b0691230024 100644 (file)
@@ -165,3 +165,6 @@ export type { ToolEntry, ToolGroup } from './tools';
 
 // Reasoning
 export type { ReasoningEffortLevel } from './reasoning';
+
+// Splash
+export type { SplashDimensions } from './splash';
diff --git a/tools/ui/src/lib/types/splash.ts b/tools/ui/src/lib/types/splash.ts
new file mode 100644 (file)
index 0000000..8c5c5ff
--- /dev/null
@@ -0,0 +1 @@
+export type SplashDimensions = { deviceW: number; deviceH: number; dpr: number };
index 84c456d109da4eec1bbe4b86dab559ff52f66e24..8cf99207cf3b4437da75435780b35ac69fe87fd9 100644 (file)
@@ -57,7 +57,7 @@ export async function convertPDFToText(file: File): Promise<string> {
 
        try {
                const buffer = await getFileAsBuffer(file);
-               const pdf = await pdfjs.getDocument(buffer).promise;
+               const pdf = await pdfjs.getDocument({ data: buffer }).promise;
                const numPages = pdf.numPages;
 
                const textContentPromises: Promise<TextContent>[] = [];
@@ -94,7 +94,7 @@ export async function convertPDFToImage(file: File, scale: number = 1.5): Promis
 
        try {
                const buffer = await getFileAsBuffer(file);
-               const doc = await pdfjs.getDocument(buffer).promise;
+               const doc = await pdfjs.getDocument({ data: buffer }).promise;
                const pages: Promise<string>[] = [];
 
                for (let i = 1; i <= doc.numPages; i++) {
index aa023840bdebe639ed5f14fd5a27f7b99d346839..63334c7adae19a2d2915154c3790f8a46b8f65c2 100644 (file)
@@ -13,6 +13,8 @@
                DialogConversationTitleUpdate,
                SidebarNavigation
        } from '$lib/components/app';
+       import { PwaMetaTags, PwaRefreshAlert } from '$lib/components/pwa';
+       import { pwaAssetsHead } from 'virtual:pwa-assets/head';
 
        import { conversationsStore } from '$lib/stores/conversations.svelte';
        import * as Sidebar from '$lib/components/ui/sidebar/index.js';
        import { modelsStore } from '$lib/stores/models.svelte';
        import { mcpStore } from '$lib/stores/mcp.svelte';
        import { TOOLTIP_DELAY_DURATION } from '$lib/constants';
+       import { FAVICON_PATHS, FAVICON_SELECTORS } from '$lib/constants/pwa';
        import { useKeyboardShortcuts } from '$lib/hooks/use-keyboard-shortcuts.svelte';
+       import { usePwa } from '$lib/hooks/use-pwa.svelte';
        import { useSettingsNavigation } from '$lib/hooks/use-settings-navigation.svelte';
        import { conversations } from '$lib/stores/conversations.svelte';
        import { isMobile } from '$lib/stores/viewport.svelte';
+       import { theme } from '$lib/stores/theme.svelte';
+       import { buildInfoStore } from '$lib/stores/build-info.svelte';
+
+       import { SETTINGS_KEYS } from '$lib/constants';
 
        let { children } = $props();
        let alwaysShowSidebarOnDesktop = $derived(config().alwaysShowSidebarOnDesktop);
                  }
                | undefined = $state();
 
+       let showBuildVersion = $derived(config()[SETTINGS_KEYS.SHOW_BUILD_VERSION] as boolean);
+
        let titleUpdateDialogOpen = $state(false);
        let titleUpdateCurrentTitle = $state('');
        let titleUpdateNewTitle = $state('');
        let titleUpdateResolve: ((value: boolean) => void) | null = null;
+
        const panelNav = useSettingsNavigation();
+       // Keep the hook object intact: destructuring needRefreshByStorage reads the getter once and freezes it
+       const pwa = usePwa();
+       const { needRefresh, updateServiceWorker } = pwa;
+
+       function updateFavicon() {
+               const dark = theme.isSystemDark;
+
+               let icoLink = document.querySelector(FAVICON_SELECTORS.ICO_48X48) as HTMLLinkElement | null;
+               if (icoLink) {
+                       icoLink.href = dark ? FAVICON_PATHS.ICO_DARK : FAVICON_PATHS.ICO_LIGHT;
+               }
+
+               let svgLink = document.querySelector(FAVICON_SELECTORS.SVG_ANY) as HTMLLinkElement | null;
+               if (svgLink) {
+                       svgLink.href = dark ? FAVICON_PATHS.SVG_DARK : FAVICON_PATHS.SVG_LIGHT;
+               }
+       }
 
        function navigateToConversation(direction: -1 | 1) {
                const allConvs = conversations();
        }
 
        onMount(() => {
+               updateFavicon();
                mounted = true;
        });
 
+       $effect(() => {
+               void theme.isSystemDark;
+
+               updateFavicon();
+       });
+
        $effect(() => {
                if (alwaysShowSidebarOnDesktop && isDesktop) {
                        sidebarOpen = true;
 </script>
 
 <svelte:head>
+       {#if pwaAssetsHead.themeColor}
+               <meta name="theme-color" content={pwaAssetsHead.themeColor.content} />
+       {/if}
+
        {#if config().customCss}
                <style use:customCss></style>
        {/if}
+
+       {#each pwaAssetsHead.links as link (link.href)}
+               <link {...link} />
+       {/each}
+
+       <PwaMetaTags />
 </svelte:head>
 
+<!-- PWA update prompt + version -->
+<div class="fixed right-4 bottom-4 z-[9999] flex flex-col items-end gap-1">
+       {#if showBuildVersion && buildInfoStore.value}
+               <span class="text-[10px] tabular-nums text-muted-foreground">{buildInfoStore.value}</span>
+       {/if}
+       <PwaRefreshAlert
+               needRefresh={$needRefresh || pwa.needRefreshByStorage}
+               forceReload={pwa.needRefreshByStorage}
+               {updateServiceWorker}
+       />
+</div>
+
 <Tooltip.Provider delayDuration={TOOLTIP_DELAY_DURATION}>
        <ModeWatcher />
+
        <Toaster richColors />
 
        <DialogConversationTitleUpdate
        />
 
        <Sidebar.Provider bind:open={sidebarOpen}>
-               <div class="flex h-dvh w-full">
+               <div class="flex h-screen w-full">
                        <Sidebar.Root variant="floating" class="h-full"
                                ><SidebarNavigation bind:this={chatSidebar} /></Sidebar.Root
                        >
                                />
                        {/if}
 
-                       <Sidebar.Inset class="flex flex-1 flex-col overflow-hidden"
-                               >{@render children?.()}</Sidebar.Inset
-                       >
+                       <Sidebar.Inset class="flex flex-1 flex-col overflow-hidden">
+                               {@render children?.()}
+                       </Sidebar.Inset>
                </div>
        </Sidebar.Provider>
 </Tooltip.Provider>
diff --git a/tools/ui/static/favicon-dark.svg b/tools/ui/static/favicon-dark.svg
new file mode 100644 (file)
index 0000000..22cab8d
--- /dev/null
@@ -0,0 +1,14 @@
+<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_29_291)">
+<path d="M244.95 8C215.233 8 187.774 23.8591 172.923 49.5999L95.6009 183.625C60.2162 244.959 104.481 321.6 175.29 321.6H208L316.977 132.708C348.959 77.2719 308.95 8 244.95 8ZM208 321.6H351.947C415.982 321.6 456.013 390.91 424.013 446.377C409.155 472.132 381.681 488 351.947 488H271.29C200.481 488 156.216 411.359 191.601 350.026L208 321.6Z" fill="#FAFAFA"/>
+<path d="M208 321.6H16L106.462 164.8L208 321.6Z" fill="#FAFAFA"/>
+<path d="M388.923 8L208 321.6L253.6 8H388.923Z" fill="#FAFAFA"/>
+<path d="M304 488H112L202.462 331.2L304 488Z" fill="#FAFAFA"/>
+<path d="M496 321.6H208L419.399 454.4L496 321.6Z" fill="#FAFAFA"/>
+</g>
+<defs>
+<clipPath id="clip0_29_291">
+<rect width="512" height="512" fill="white"/>
+</clipPath>
+</defs>
+</svg>
index a7ae13691c132eb80539e8bb842bdf1599971e65..52664fc8b404de0c7b12e2b9ab207af3f426e013 100644 (file)
@@ -1 +1,14 @@
-<svg width="256" xmlns="http://www.w3.org/2000/svg" height="256" id="screenshot-ef94fbb0-dbab-80ed-8006-89429900edbf" viewBox="0 0 256 256" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1"><g id="shape-ef94fbb0-dbab-80ed-8006-89429900edbf" rx="0" ry="0"><g id="shape-ef94fbb0-dbab-80ed-8006-894215755c3a"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-894215755c3a"><rect rx="0" ry="0" x="0" y="0" transform="matrix(1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000)" width="256" height="256" style="fill: rgb(27, 31, 32); fill-opacity: 1;"/></g></g><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef3f" rx="0" ry="0"><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef40"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-89422363ef40"><path d="M171.66500854492188,99.5302505493164L159.79953002929688,120.62468719482422C144.15451049804688,108.58329010009766,120.9504165649414,106.8254165649414,105.3053970336914,119.7457504272461C80.0798110961914,140.57652282714844,81.8376235961914,188.7422637939453,121.1261978149414,189.00587463378906C132.11300659179688,189.00587463378906,141.42965698242188,183.8201141357422,151.44967651367188,180.39234924316406L156.72335815429688,201.3988494873047C147.84591674804688,205.52989196777344,138.79293823242188,209.7487335205078,129.03683471679688,211.06712341308594C40.08835220336914,223.1964569091797,45.18600845336914,94.78400421142578,125.6088638305664,88.10407257080078C142.48434448242188,86.69782257080078,157.33834838867188,91.09247589111328,171.75314331054688,99.5302505493164Z" class="st0" style="fill: rgb(255, 130, 54); fill-opacity: 1;"/></g></g><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef41"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-89422363ef41"><path d="M110.2272720336914,79.31470489501953C96.6918716430664,83.35785675048828,84.1232681274414,90.8288345336914,74.6305923461914,101.28812408447266C72.8727798461914,80.01782989501953,77.6188735961914,37.03793716430664,101.2621841430664,28.6001033782959C104.7780532836914,27.36964988708496,116.8195571899414,24.293371200561523,116.4679946899414,30.533788681030273C116.1161880493164,36.77426528930664,107.7663345336914,47.49722671508789,105.7450942993164,53.29823684692383C102.2292251586914,63.49386978149414,105.4811782836914,70.52535247802734,110.3154067993164,79.40265655517578Z" class="st0" style="fill: rgb(255, 130, 54); fill-opacity: 1;"/></g></g><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef42"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-89422363ef42"><path d="M143.62692260742188,127.65621185302734L143.62692260742188,143.47706604003906L157.68991088867188,143.47706604003906L157.68991088867188,155.7821807861328L143.62692260742188,155.7821807861328L143.62692260742188,170.7240753173828L130.44284057617188,170.7240753173828L130.44284057617188,155.7821807861328L115.5009536743164,155.7821807861328L115.5009536743164,143.47706604003906L129.12448120117188,143.47706604003906L130.44284057617188,142.15867614746094L130.44284057617188,127.65621185302734L143.62692260742188,127.65621185302734Z" class="st0" style="fill: rgb(255, 130, 54); fill-opacity: 1;"/></g></g><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef43"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-89422363ef43"><path d="M191.96823120117188,127.65621185302734L191.96823120117188,142.15867614746094L193.28683471679688,143.47706604003906L206.91036987304688,143.47706604003906L206.91036987304688,155.7821807861328L191.96823120117188,155.7821807861328L191.96823120117188,170.7240753173828L178.78439331054688,170.7240753173828L178.78439331054688,155.7821807861328L164.72140502929688,155.7821807861328L164.72140502929688,143.47706604003906L178.78439331054688,143.47706604003906L178.78439331054688,127.65621185302734L191.96823120117188,127.65621185302734Z" class="st0" style="fill: rgb(255, 130, 54); fill-opacity: 1;"/></g></g><g id="shape-ef94fbb0-dbab-80ed-8006-89422363ef44"><g class="fills" id="fills-ef94fbb0-dbab-80ed-8006-89422363ef44"><path d="M153.20748901367188,38.092655181884766C154.96554565429688,40.72946548461914,145.03341674804688,52.06770706176758,143.45114135742188,54.96817398071289C138.88082885742188,63.581790924072266,141.95700073242188,68.50382232666016,145.38473510742188,76.67792510986328C135.45285034179688,75.18372344970703,126.2240982055664,76.41425323486328,116.3798599243164,77.55683135986328C118.5773696899414,58.659732818603516,129.21261596679688,31.1490535736084,153.20748901367188,38.092655181884766Z" class="st0" style="fill: rgb(255, 130, 54); fill-opacity: 1;"/></g></g></g></g></svg>
\ No newline at end of file
+<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_29_291)">
+<path d="M244.95 8C215.233 8 187.774 23.8591 172.923 49.5999L95.6009 183.625C60.2162 244.959 104.481 321.6 175.29 321.6H208L316.977 132.708C348.959 77.2719 308.95 8 244.95 8ZM208 321.6H351.947C415.982 321.6 456.013 390.91 424.013 446.377C409.155 472.132 381.681 488 351.947 488H271.29C200.481 488 156.216 411.359 191.601 350.026L208 321.6Z" fill="#111111"/>
+<path d="M208 321.6H16L106.462 164.8L208 321.6Z" fill="#111111"/>
+<path d="M388.923 8L208 321.6L253.6 8H388.923Z" fill="#111111"/>
+<path d="M304 488H112L202.462 331.2L304 488Z" fill="#111111"/>
+<path d="M496 321.6H208L419.399 454.4L496 321.6Z" fill="#111111"/>
+</g>
+<defs>
+<clipPath id="clip0_29_291">
+<rect width="512" height="512" fill="white"/>
+</clipPath>
+</defs>
+</svg>
index 1a7355b2d55c5b46bf44a9070ad33bb5d941ba19..897c7267f9cf049545e444d9b0892d600b837e51 100644 (file)
@@ -29,9 +29,6 @@ const config = {
                },
                alias: {
                        $styles: 'src/styles'
-               },
-               version: {
-                       name: 'llama-ui'
                }
        },
 
diff --git a/tools/ui/tests/e2e/demo.test.ts b/tools/ui/tests/e2e/demo.test.ts
deleted file mode 100644 (file)
index 99a3e86..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-import { expect, test } from '@playwright/test';
-
-test('home page loads correctly', async ({ page }) => {
-       await page.goto('/');
-       // Wait for the greeting to become visible (stores need time to initialize)
-       await expect(page.locator('h1', { hasText: /Hello there/ })).toBeVisible();
-});
diff --git a/tools/ui/tests/e2e/pwa.e2e.ts b/tools/ui/tests/e2e/pwa.e2e.ts
new file mode 100644 (file)
index 0000000..be7642b
--- /dev/null
@@ -0,0 +1,106 @@
+import { expect, test } from '@playwright/test';
+
+test.describe('PWA Service Worker', () => {
+       test('service worker is registered', async ({ page }) => {
+               await page.goto('/');
+
+               const swURL = await page.evaluate(async () => {
+                       const registration = await Promise.race([
+                               // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+                               // @ts-ignore - type inference differs from browser runtime
+                               navigator.serviceWorker.ready,
+                               new Promise((_, reject) =>
+                                       setTimeout(() => reject(new Error('Service worker registration failed: timeout')), 15000)
+                               )
+                       ]);
+                       // @ts-expect-error registration is of type unknown
+                       return registration.active?.scriptURL;
+               });
+
+               expect(swURL).toBeTruthy();
+               expect(swURL).toContain('/sw.js');
+       });
+
+       test('service worker has precache configured', async ({ page }) => {
+               await page.goto('/');
+
+               await page.evaluate(async () => {
+                       await navigator.serviceWorker.ready;
+               });
+
+               const swActive = await page.evaluate(async () => {
+                       const reg = await navigator.serviceWorker.ready;
+                       return reg.active?.scriptURL ?? null;
+               });
+
+               expect(swActive).toBeTruthy();
+
+               const swResponse = await page.request.get(swActive!);
+               const swContent = await swResponse.text();
+
+               // Precache contains SvelteKit content-hashed bundle paths
+               expect(swContent).toMatch(/"_app\/immutable\/bundle\.[a-zA-Z0-9-]+\.js"/);
+               expect(swContent).toMatch(/"_app\/immutable\/assets\/bundle\.[a-zA-Z0-9-]+\.css"/);
+               expect(swContent).toMatch(/"manifest\.webmanifest"/);
+               expect(swContent).toMatch(/"_app\/version\.json"/);
+               expect(swContent).toMatch(/NavigationRoute/);
+               expect(swContent).toMatch(/api-cache/);
+       });
+
+       test('offline mode - page loads when offline after caching', async ({ browser }) => {
+               const context = await browser.newContext();
+               const offlinePage = await context.newPage();
+
+               await offlinePage.goto('/');
+               await offlinePage.waitForLoadState('networkidle');
+
+               await offlinePage.evaluate(async () => {
+                       await navigator.serviceWorker.ready;
+               });
+
+               await offlinePage.waitForTimeout(2000);
+
+               await context.setOffline(true);
+               await offlinePage.goto('/');
+
+               const bodyText = await offlinePage.locator('body').textContent();
+               expect(bodyText).toBeTruthy();
+
+               await context.close();
+       });
+
+       test('version.json is accessible and contains version', async ({ page }) => {
+               const versionResponse = await page.request.get('/_app/version.json');
+               expect(versionResponse.ok()).toBeTruthy();
+
+               const versionData = await versionResponse.json();
+               expect(versionData).toHaveProperty('version');
+               expect(typeof versionData.version).toBe('string');
+               expect(versionData.version.length).toBeGreaterThan(0);
+       });
+
+       test('manifest.webmanifest is accessible and valid', async ({ page }) => {
+               const response = await page.request.get('/manifest.webmanifest');
+               expect(response.ok()).toBeTruthy();
+
+               const manifest = await response.json();
+               expect(manifest).toHaveProperty('name', 'llama-ui');
+               expect(manifest).toHaveProperty('short_name', 'llama-ui');
+               expect(manifest).toHaveProperty('start_url', './');
+               expect(manifest).toHaveProperty('display', 'standalone');
+               expect(manifest.icons).toBeTruthy();
+               expect(manifest.icons.length).toBeGreaterThan(0);
+       });
+
+       test('index.html contains content-hashed bundle references', async ({ page }) => {
+               const response = await page.request.get('/');
+               expect(response.ok()).toBeTruthy();
+
+               const html = await response.text();
+
+               // SvelteKit outputs content-hashed bundle names in _app/immutable/
+               expect(html).toMatch(/href="(\.\/|\/)_app\/immutable\/bundle\.[a-zA-Z0-9-]+\.js"/);
+               expect(html).toMatch(/href="(\.\/|\/)_app\/immutable\/assets\/bundle\.[a-zA-Z0-9-]+\.css"/);
+               expect(html).toMatch(/import\("(\.\/|\/)_app\/immutable\/bundle\.[a-zA-Z0-9-]+\.js"\)/);
+       });
+});
diff --git a/tools/ui/tests/stories/PwaRefreshAlert.stories.svelte b/tools/ui/tests/stories/PwaRefreshAlert.stories.svelte
new file mode 100644 (file)
index 0000000..26aa573
--- /dev/null
@@ -0,0 +1,57 @@
+<script module lang="ts">
+       import { defineMeta } from '@storybook/addon-svelte-csf';
+       import PwaRefreshAlert from '$lib/components/pwa/PwaRefreshAlert.svelte';
+       import { expect } from 'storybook/test';
+
+       const { Story } = defineMeta({
+               title: 'Components/PwaRefreshAlert',
+               component: PwaRefreshAlert,
+               parameters: {
+                       layout: 'centered'
+               }
+       });
+</script>
+
+<Story
+       name="Default"
+       args={{ needRefresh: true, updateServiceWorker: () => console.log('reload') }}
+       play={async ({ canvas }) => {
+               const title = canvas.getByText('Update available');
+               await expect(title).toBeInTheDocument();
+
+               const description = canvas.getByText(/A new version is available/);
+               await expect(description).toBeInTheDocument();
+
+               const button = canvas.getByRole('button', { name: 'Reload' });
+               await expect(button).toBeInTheDocument();
+       }}
+/>
+
+<Story
+       name="Hidden"
+       args={{ needRefresh: false, updateServiceWorker: () => console.log('reload') }}
+       play={async ({ canvas }) => {
+               const title = canvas.queryByText('Update available');
+               await expect(title).not.toBeInTheDocument();
+       }}
+/>
+
+<Story
+       name="ClickReload"
+       args={{
+               needRefresh: true,
+               updateServiceWorker: () => console.log('reload')
+       }}
+       play={async ({ canvas, userEvent }) => {
+               const button = canvas.getByRole('button', { name: 'Reload' });
+               await expect(button).toBeInTheDocument();
+
+               await userEvent.click(button);
+
+               const title = canvas.queryByText('Update available');
+               await expect(title).not.toBeInTheDocument();
+
+               const reloadBtn = canvas.queryByRole('button', { name: 'Reload' });
+               await expect(reloadBtn).not.toBeInTheDocument();
+       }}
+/>
diff --git a/tools/ui/tests/unit/pwa.spec.ts b/tools/ui/tests/unit/pwa.spec.ts
new file mode 100644 (file)
index 0000000..0059e24
--- /dev/null
@@ -0,0 +1,195 @@
+import { existsSync, readFileSync, readdirSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { describe, expect, it } from 'vitest';
+
+const DIST_DIR = resolve(__dirname, '../../dist');
+const distExists = existsSync(DIST_DIR);
+
+// PWA Build Output tests are integration tests that require a built dist/.
+// CI builds first then runs these tests; local devs should run `npm run build` or use `npm run test:pwa`.
+describe('PWA Build Output', () => {
+       if (!distExists) {
+               console.warn(`⚠ Skipping PWA Build Output tests - dist/ not found (run 'npm run build' first)`);
+               it('skipped - dist/ not found', () => {});
+               return;
+       }
+
+       const swContent = readFileSync(resolve(DIST_DIR, 'sw.js'), 'utf-8');
+       const indexContent = readFileSync(resolve(DIST_DIR, 'index.html'), 'utf-8');
+
+       describe('Core files exist', () => {
+               it('service worker (sw.js) exists', () => {
+                       expect(existsSync(resolve(DIST_DIR, 'sw.js')), 'sw.js not found').toBeTruthy();
+               });
+
+               it('workbox library exists (hashed filename)', () => {
+                       // SvelteKit generates workbox-{hash}.js files
+                       const files = readdirSync(DIST_DIR).filter((f) => f.match(/^workbox-[^.]+\.js$/));
+                       expect(files.length).toBeGreaterThan(0);
+               });
+
+               it('manifest.webmanifest exists', () => {
+                       expect(
+                               existsSync(resolve(DIST_DIR, 'manifest.webmanifest')),
+                               'manifest.webmanifest not found'
+                       ).toBeTruthy();
+               });
+
+               it('SvelteKit bundle.js exists in _app/immutable/', () => {
+                       // SvelteKit generates hashed bundle names in _app/immutable/
+                       const appDir = resolve(DIST_DIR, '_app', 'immutable');
+                       expect(existsSync(appDir), '_app/immutable/ not found').toBeTruthy();
+                       const files = readdirSync(appDir).filter((f) => f.startsWith('bundle.') && f.endsWith('.js'));
+                       expect(files.length).toBeGreaterThan(0);
+               });
+
+               it('SvelteKit bundle.css exists in _app/immutable/assets/', () => {
+                       // SvelteKit generates hashed CSS bundles in _app/immutable/assets/
+                       const cssDir = resolve(DIST_DIR, '_app', 'immutable', 'assets');
+                       expect(existsSync(cssDir), '_app/immutable/assets/ not found').toBeTruthy();
+                       const files = readdirSync(cssDir).filter(
+                               (f) => f.startsWith('bundle.') && f.endsWith('.css')
+                       );
+                       expect(files.length).toBeGreaterThan(0);
+               });
+
+               it('version.json exists in _app/', () => {
+                       // SvelteKit stores version.json in _app directory
+                       expect(
+                               existsSync(resolve(DIST_DIR, '_app', 'version.json')),
+                               '_app/version.json not found'
+                       ).toBeTruthy();
+               });
+       });
+
+       describe('version.json content', () => {
+               it('has valid JSON with version field', () => {
+                       const content = readFileSync(resolve(DIST_DIR, '_app', 'version.json'), 'utf-8');
+                       const parsed = JSON.parse(content);
+                       expect(parsed).toHaveProperty('version');
+                       expect(typeof parsed.version).toBe('string');
+                       expect(parsed.version.length).toBeGreaterThan(0);
+               });
+       });
+
+       describe('Service worker content', () => {
+               it('service worker has minified self.define format', () => {
+                       expect(swContent).toBeTruthy();
+                       // SvelteKit's workbox-plugin-sveltekit produces a minified SW with self.define
+                       expect(swContent).toMatch(/if\(!self.define\)/);
+               });
+
+               it('references hashed workbox file (SvelteKit build output)', () => {
+                       expect(swContent).toBeTruthy();
+                       // SvelteKit's workbox-plugin-sveltekit references hashed workbox files
+                       expect(swContent).toMatch(/define\(\["\.\/workbox-[a-zA-Z0-9]+"\]/);
+               });
+
+               it('precache contains SvelteKit bundle.js with content hash', () => {
+                       expect(swContent).toBeTruthy();
+                       // SvelteKit uses content-hashed bundle names in _app/immutable/
+                       expect(swContent).toMatch(/"_app\/immutable\/bundle\.[a-zA-Z0-9_-]+\.js"/);
+               });
+
+               it('precache contains SvelteKit bundle.css with content hash', () => {
+                       expect(swContent).toBeTruthy();
+                       // SvelteKit uses content-hashed CSS bundle names in _app/immutable/assets/
+                       expect(swContent).toMatch(/"_app\/immutable\/assets\/bundle\.[a-zA-Z0-9_-]+\.css"/);
+               });
+
+               it('precache contains _app/version.json', () => {
+                       expect(swContent).toBeTruthy();
+                       // SvelteKit stores version.json in _app directory
+                       expect(swContent).toMatch(/"_app\/version\.json"/);
+               });
+
+               it('precache contains manifest.webmanifest', () => {
+                       expect(swContent).toBeTruthy();
+                       expect(swContent).toMatch(/"manifest\.webmanifest"/);
+               });
+
+               it('has navigation route registered', () => {
+                       expect(swContent).toBeTruthy();
+                       expect(swContent).toMatch(/NavigationRoute/);
+               });
+
+               it('has runtime caching for API routes', () => {
+                       expect(swContent).toBeTruthy();
+                       expect(swContent).toMatch(/api-cache/);
+                       expect(swContent).toMatch(/NetworkFirst/);
+               });
+       });
+
+       describe('index.html content', () => {
+               it('has modulepreload link for SvelteKit bundle with content hash', () => {
+                       expect(indexContent).toBeTruthy();
+                       // SvelteKit generates hashed bundle names in _app/immutable/
+                       expect(indexContent).toMatch(/href="(\.\/|\/)_app\/immutable\/bundle\.[a-zA-Z0-9_-]+\.js"/);
+               });
+
+               it('has stylesheet link for SvelteKit bundle.css with content hash', () => {
+                       expect(indexContent).toBeTruthy();
+                       expect(indexContent).toMatch(
+                               /href="(\.\/|\/)_app\/immutable\/assets\/bundle\.[a-zA-Z0-9_-]+\.css"/
+                       );
+               });
+
+               it('has dynamic import for SvelteKit bundle with content hash', () => {
+                       expect(indexContent).toBeTruthy();
+                       expect(indexContent).toMatch(
+                               /import\("(\.\/|\/)_app\/immutable\/bundle\.[a-zA-Z0-9_-]+\.js"\)/
+                       );
+               });
+
+               it('has __sveltekit__ variable (SvelteKit adds hash suffix)', () => {
+                       expect(indexContent).toBeTruthy();
+                       // SvelteKit 2.x uses __sveltekit__ as base with random suffix
+                       expect(indexContent).toMatch(/__sveltekit_[a-zA-Z0-9-]+/);
+               });
+
+               it('has PWA manifest link', () => {
+                       expect(indexContent).toBeTruthy();
+                       expect(indexContent).toMatch(/rel="manifest" href="(\.?\/)?manifest\.webmanifest"/);
+               });
+
+               it('has apple-touch-icon link', () => {
+                       expect(indexContent).toBeTruthy();
+                       expect(indexContent).toMatch(/rel="apple-touch-icon"/);
+               });
+
+               it('has _app paths for SvelteKit bundles', () => {
+                       expect(indexContent).toBeTruthy();
+                       // SvelteKit uses _app paths for hashed assets
+                       expect(indexContent).toMatch(/_app\//);
+               });
+       });
+
+       describe('SvelteKit _app directory', () => {
+               it('_app directory exists (SvelteKit uses it for hashed assets)', () => {
+                       expect(existsSync(resolve(DIST_DIR, '_app'))).toBeTruthy();
+               });
+       });
+
+       describe('Hashed workbox files', () => {
+               it('workbox-*.js files exist in dist root (SvelteKit build output)', () => {
+                       const files = readdirSync(DIST_DIR).filter((f) => f.match(/^workbox-[^.]+\.js$/));
+                       expect(files.length).toBeGreaterThan(0);
+               });
+       });
+
+       describe('Static assets', () => {
+               it('has favicon.ico', () => {
+                       expect(existsSync(resolve(DIST_DIR, 'favicon.ico'))).toBeTruthy();
+               });
+
+               it('has PWA icons', () => {
+                       expect(existsSync(resolve(DIST_DIR, 'pwa-64x64.png'))).toBeTruthy();
+                       expect(existsSync(resolve(DIST_DIR, 'pwa-192x192.png'))).toBeTruthy();
+                       expect(existsSync(resolve(DIST_DIR, 'pwa-512x512.png'))).toBeTruthy();
+               });
+
+               it('has loading.html fallback page', () => {
+                       expect(existsSync(resolve(DIST_DIR, 'loading.html'))).toBeTruthy();
+               });
+       });
+});
index 13e889dbc1012995f619f2fb69da92ef53214860..fbb7dc4c3a92f4e6523d1a8450eec7aa770e9e90 100644 (file)
@@ -1,13 +1,16 @@
 import tailwindcss from '@tailwindcss/vite';
 import { sveltekit } from '@sveltejs/kit/vite';
+import { SvelteKitPWA } from '@vite-pwa/sveltekit';
 import { dirname, resolve } from 'path';
 import { fileURLToPath } from 'url';
 
 import { defineConfig, searchForWorkspaceRoot } from 'vite';
-import devtoolsJson from 'vite-plugin-devtools-json';
 import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
-import { llamaCppBuildPlugin } from './scripts/vite-plugin-llama-cpp-build';
+import { splashScreenPlugin } from './scripts/vite-plugin-splash-screen';
+import { buildInfoPlugin } from './scripts/vite-plugin-build-info';
+import { relativizeBasePlugin } from './scripts/vite-plugin-relativize-base';
 import { playwright } from '@vitest/browser-playwright';
+import { SVELTEKIT_PWA_OPTIONS } from './src/lib/constants/pwa';
 
 const __dirname = dirname(fileURLToPath(import.meta.url));
 
@@ -37,7 +40,14 @@ export default defineConfig({
                minify: true
        },
 
-       plugins: [tailwindcss(), sveltekit(), devtoolsJson(), llamaCppBuildPlugin()],
+       plugins: [
+               tailwindcss(),
+               sveltekit(),
+               SvelteKitPWA(SVELTEKIT_PWA_OPTIONS),
+               splashScreenPlugin(),
+               buildInfoPlugin(),
+               relativizeBasePlugin()
+       ],
 
        test: {
                projects: [