From f89db4ee8fc7e96aee8efc537b0d810e3590a006 Mon Sep 17 00:00:00 2001 From: "Till (Cowork)" Date: Sat, 27 Jun 2026 12:06:13 +0000 Subject: [PATCH] =?UTF-8?q?K=C3=BChlfinder=20MVP:=20Finder,=20Ger=C3=A4te,?= =?UTF-8?q?=20Karte=20(MapLibre),=20Preis-Intelligenz=20+=20Wucher-Warnung?= =?UTF-8?q?,=20PortaSplit-Hub,=20llms.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 4 + .gitignore | 5 + Dockerfile | 13 + README.md | 11 + astro.config.mjs | 6 + nginx.conf | 12 + package-lock.json | 5864 ++++++++++++++++++++++++++++++ package.json | 17 + public/data/offers.json | 1687 +++++++++ src/components/ProductCard.astro | 46 + src/data/offers.json | 1687 +++++++++ src/data/onlineSources.json | 5 + src/data/products.json | 110 + src/data/stores.json | 20 + src/layouts/Base.astro | 36 + src/lib/pricing.ts | 65 + src/pages/alarm.astro | 28 + src/pages/datenschutz.astro | 10 + src/pages/finder.astro | 78 + src/pages/geraete/[slug].astro | 98 + src/pages/geraete/index.astro | 49 + src/pages/hitzeschutz.astro | 21 + src/pages/impressum.astro | 11 + src/pages/index.astro | 88 + src/pages/karte.astro | 134 + src/pages/llms.txt.ts | 21 + src/pages/portasplit.astro | 42 + src/pages/robots.txt.ts | 4 + src/pages/transparenz.astro | 17 + src/styles/global.css | 60 + tsconfig.json | 1 + 31 files changed, 10250 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 astro.config.mjs create mode 100644 nginx.conf create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/data/offers.json create mode 100644 src/components/ProductCard.astro create mode 100644 src/data/offers.json create mode 100644 src/data/onlineSources.json create mode 100644 src/data/products.json create mode 100644 src/data/stores.json create mode 100644 src/layouts/Base.astro create mode 100644 src/lib/pricing.ts create mode 100644 src/pages/alarm.astro create mode 100644 src/pages/datenschutz.astro create mode 100644 src/pages/finder.astro create mode 100644 src/pages/geraete/[slug].astro create mode 100644 src/pages/geraete/index.astro create mode 100644 src/pages/hitzeschutz.astro create mode 100644 src/pages/impressum.astro create mode 100644 src/pages/index.astro create mode 100644 src/pages/karte.astro create mode 100644 src/pages/llms.txt.ts create mode 100644 src/pages/portasplit.astro create mode 100644 src/pages/robots.txt.ts create mode 100644 src/pages/transparenz.astro create mode 100644 src/styles/global.css create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..2262b76 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +dist +.git +.astro diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0355336 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +.astro +.DS_Store +npm-debug.log* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0d939a2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +# --- Build stage --- +FROM node:22-alpine AS build +WORKDIR /app +COPY package.json ./ +RUN npm install +COPY . . +RUN npm run build + +# --- Serve stage --- +FROM nginx:1.27-alpine +COPY --from=build /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 diff --git a/README.md b/README.md new file mode 100644 index 0000000..24f4a0e --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Kühlfinder + +Portable Klimageräte finden + Live-Verfügbarkeit (Deutschlandkarte), Preis-Check mit Wucher-Warnung, Verfügbarkeits-Alarm. Astro 5, statisch, Docker/nginx. + +## Dev +``` +npm install +npm run dev +``` + +Daten: src/data/*.json (Build-Zeit) + public/data/offers.json (Client/Karte). Preislogik: src/lib/pricing.ts (Wucher = Preis > UVP*1.3). diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..184eddd --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,6 @@ +import { defineConfig } from 'astro/config'; +export default defineConfig({ + site: 'https://kuehlfinder.de', + output: 'static', + build: { inlineStylesheets: 'auto' } +}); diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..22efb5b --- /dev/null +++ b/nginx.conf @@ -0,0 +1,12 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + location / { try_files $uri $uri/ $uri.html /404.html; } + location = /llms.txt { default_type text/plain; } + location = /robots.txt { default_type text/plain; } + add_header X-Content-Type-Options nosniff; + add_header Referrer-Policy strict-origin-when-cross-origin; + add_header X-Frame-Options SAMEORIGIN; +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7b6281a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5864 @@ +{ + "name": "kuehlfinder", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kuehlfinder", + "version": "0.1.0", + "dependencies": { + "@fontsource/fraunces": "^5.0.0", + "@fontsource/public-sans": "^5.0.0", + "astro": "^5.7.0", + "maplibre-gl": "^4.7.1" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz", + "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz", + "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.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" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "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": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "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": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fontsource/fraunces": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/@fontsource/fraunces/-/fraunces-5.2.9.tgz", + "integrity": "sha512-XDzuddBtoC7BZgZdBn6b7hsFZY2+V1hgN7yca5fBTKuHjb/lOd45a0Ji8dTUgFhPoL7RdGupo+bC2BFSt6UH8Q==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/public-sans": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/public-sans/-/public-sans-5.2.7.tgz", + "integrity": "sha512-pVttDr3HvhVIt2x6sZJfZKksNEpq23C1JCHTQwT9KWJdmFRdNeRM8gQftq8uP72sPW+p3Ku9x8HPk2E392DFvg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "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.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "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.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.3.tgz", + "integrity": "sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==", + "license": "MIT", + "engines": { + "node": ">= 22" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.2.0.tgz", + "integrity": "sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "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==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "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==", + "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==", + "license": "MIT" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT" + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/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==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astro": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.2.tgz", + "integrity": "sha512-TnFwLnAXty5MXKPDGuKXqK4AMBXG+FH6RUdK7Oyc3gyfNoFIthT+4eRbzOK43bdRlLaZuxgciDSjgtggZ3OtGQ==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/markdown-remark": "6.3.11", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.27.3", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "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==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "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==", + "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==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "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/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/geojson-vt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.3.tgz", + "integrity": "sha512-jR1MwkLaZGa8Zftct9ZFruyWFrdl9ZyD2OliXNy9Qq5bBPeg5wHVpBQF9p5GjnicSDQqvBVpysxTPKmWdsfWMA==", + "license": "ISC" + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT" + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "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==", + "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/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==", + "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" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "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" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "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==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, + "node_modules/kdbush": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.1.0.tgz", + "integrity": "sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==", + "license": "ISC" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "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==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/potpack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC" + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz", + "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", + "license": "MIT" + }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.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", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "deprecated": "unmaintained", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "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", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "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==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "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==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "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==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba20d25 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "kuehlfinder", + "type": "module", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview" + }, + "dependencies": { + "astro": "^5.7.0", + "@fontsource/fraunces": "^5.0.0", + "@fontsource/public-sans": "^5.0.0", + "maplibre-gl": "^4.7.1" + } +} \ No newline at end of file diff --git a/public/data/offers.json b/public/data/offers.json new file mode 100644 index 0000000..0222fe8 --- /dev/null +++ b/public/data/offers.json @@ -0,0 +1,1687 @@ +{ + "generatedAt": "2026-06-27T11:56:47.119Z", + "offers": [ + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 899, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 899, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 899, + "availability": "out_of_stock", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 929, + "availability": "preorder", + "availabilityNote": "Lieferung ab 01.07.", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "marketplace", + "chain": "Marktplatz-Drittanbieter", + "price": 1530, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 749, + "availability": "out_of_stock", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 779, + "availability": "preorder", + "availabilityNote": "Lieferung ab 01.07.", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "marketplace", + "chain": "Marktplatz-Drittanbieter", + "price": 1270, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 739, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 719, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 729, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 689, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 749, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 819, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 829, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 839, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 849, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 819, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 829, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 781, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 849, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 699, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 699, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 699, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 669, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 643, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 699, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 469, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 469, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 439, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 439, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 459, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 439, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 449, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 449, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 431, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "dreo-318s", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 469, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 539, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 529, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 519, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 519, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 505, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 549, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 409, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 419, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 399, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 429, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 409, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 395, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 429, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 1679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 1669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 1669, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 1563, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 1699, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.119Z" + } + ] +} \ No newline at end of file diff --git a/src/components/ProductCard.astro b/src/components/ProductCard.astro new file mode 100644 index 0000000..81fe9e4 --- /dev/null +++ b/src/components/ProductCard.astro @@ -0,0 +1,46 @@ +--- +import { priceIntel, euro, type Product } from '../lib/pricing'; +const { product, compact } = Astro.props as { product: Product; compact?: boolean }; +const pi = priceIntel(product); +const typeLabel = product.type === 'mobile_split' ? 'Mobile Split' : 'Monoblock'; +--- +
+
+ {product.badge} + {product.apartmentSuitable + ? wohnungstauglich + : Spezialfall} +
+

{product.name}

+

{typeLabel} · {product.btuh.toLocaleString('de-DE')} BTU · {product.roomSizeM2[0]}–{product.roomSizeM2[1]} m²

+ {!compact &&

{product.shortVerdict}

} +
+
Üblicher Preis
{euro(pi.fairPrice)}
+
Aktuell ab
{euro(pi.lowestLegit)}
+
+
+ {pi.storesAvailable > 0 + ? In {pi.storesAvailable} Märkten verfügbar + : (pi.onlineAvailable + ? Aktuell nur online + : (pi.preorder + ? Vorbestellbar + : Aktuell vergriffen))} + {pi.wucher && ⚠ Wucher: bis {euro(pi.wucher.price)}} +
+ +
+ diff --git a/src/data/offers.json b/src/data/offers.json new file mode 100644 index 0000000..cd780b9 --- /dev/null +++ b/src/data/offers.json @@ -0,0 +1,1687 @@ +{ + "generatedAt": "2026-06-27T11:56:47.090Z", + "offers": [ + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 899, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 899, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 899, + "availability": "out_of_stock", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 929, + "availability": "preorder", + "availabilityNote": "Lieferung ab 01.07.", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-12000", + "sourceType": "online", + "sourceId": "marketplace", + "chain": "Marktplatz-Drittanbieter", + "price": 1530, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 749, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 749, + "availability": "out_of_stock", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 779, + "availability": "preorder", + "availabilityNote": "Lieferung ab 01.07.", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-portasplit-cool-8000", + "sourceType": "online", + "sourceId": "marketplace", + "chain": "Marktplatz-Drittanbieter", + "price": 1270, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 739, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 719, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 749, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 719, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 729, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 729, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 689, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "delonghi-pac-ex105", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 749, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 819, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 829, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 849, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 839, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 849, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 819, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 819, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 829, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 829, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 781, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "bosch-cool-5000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 849, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 699, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 699, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 699, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 669, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 643, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "aeg-comfort-6000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 699, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 469, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 469, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": 439, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 439, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 459, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 439, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 449, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 449, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 469, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 459, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 431, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "dreo-318s", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 469, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 539, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 529, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 519, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 519, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 529, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 539, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": 549, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 505, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "midea-silent-cool-26-pro-wf", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 549, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-hamburg", + "chain": "Hornbach", + "price": 409, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-berlin", + "chain": "Bauhaus", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-berlin", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-koeln", + "chain": "toom", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 419, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-muenchen", + "chain": "Bauhaus", + "price": 399, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-muenchen", + "chain": "OBI", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-frankfurt", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-stuttgart", + "chain": "toom", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-hannover", + "chain": "OBI", + "price": 429, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-dresden", + "chain": "Hornbach", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-leipzig", + "chain": "Bauhaus", + "price": 429, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "obi-dortmund", + "chain": "OBI", + "price": 409, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 409, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "bauhaus-karlsruhe", + "chain": "Bauhaus", + "price": 399, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "store", + "sourceId": "hornbach-bremen", + "chain": "Hornbach", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 395, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "comfee-mobile-12000", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 429, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "obi-hamburg", + "chain": "OBI", + "price": null, + "availability": "out_of_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "hornbach-koeln", + "chain": "Hornbach", + "price": 1679, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "bauhaus-stuttgart", + "chain": "Bauhaus", + "price": 1669, + "availability": "in_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "store", + "sourceId": "toom-nuernberg", + "chain": "toom", + "price": 1669, + "availability": "low_stock", + "url": "#", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "online", + "sourceId": "idealo", + "chain": "idealo", + "price": 1563, + "availability": "online_available", + "url": "https://www.idealo.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + }, + { + "productId": "remko-rkl-495-dc", + "sourceType": "online", + "sourceId": "amazon", + "chain": "Amazon", + "price": 1699, + "availability": "online_available", + "url": "https://www.amazon.de", + "checkedAt": "2026-06-27T11:56:47.090Z" + } + ] +} \ No newline at end of file diff --git a/src/data/onlineSources.json b/src/data/onlineSources.json new file mode 100644 index 0000000..192f3fc --- /dev/null +++ b/src/data/onlineSources.json @@ -0,0 +1,5 @@ +[ + {"id":"idealo","name":"idealo","kind":"preisvergleich"}, + {"id":"amazon","name":"Amazon","kind":"online"}, + {"id":"mediamarkt","name":"MediaMarkt","kind":"online"} +] diff --git a/src/data/products.json b/src/data/products.json new file mode 100644 index 0000000..4f0337f --- /dev/null +++ b/src/data/products.json @@ -0,0 +1,110 @@ +[ + { + "id":"midea-portasplit-12000","slug":"midea-portasplit-12000","name":"Midea PortaSplit 12.000 BTU","brand":"Midea", + "type":"mobile_split","tier":"A","badge":"Beste mobile Split-Wahl","hero":true,"apartmentSuitable":true, + "shortVerdict":"Die beliebteste mobile Splitanlage – effizient und leise, wenn du das Außengerät sicher platzieren kannst.", + "coolingKw":3.5,"btuh":12000,"efficiencyCooling":"A++","noiseNote":"Silent-Modus ca. 39 dB(A) laut Händler", + "roomSizeM2":[18,42],"uvp":899,"fairPriceMax":899, + "bestFor":["Schlafzimmer","Homeoffice","Mietwohnung mit Balkon/Fensterbank","Räume bis 42 m²"], + "notFor":["Keine sichere Stellfläche fürs Außengerät","sehr kleines Budget"], + "pros":["Mobile Split-Bauweise ohne feste Installation","Sehr gute Kühlleistung","Effizienter als Monoblocks","Heizfunktion"], + "cons":["Teuer und oft knapp","Groß und schwer","Außengerät muss sicher stehen"], + "score":94,"sources":[{"label":"Midea Produktseite","url":"https://www.midea.com/de/klimatisieren-heizen/portasplit"}] + }, + { + "id":"midea-portasplit-cool-8000","slug":"midea-portasplit-cool-8000","name":"Midea PortaSplit Cool 8.000 BTU","brand":"Midea", + "type":"mobile_split","tier":"A","badge":"Beste Wahl für kleine Schlafräume","apartmentSuitable":true, + "shortVerdict":"Die kleinere, günstigere PortaSplit – ideal für kleine bis mittlere Schlafzimmer.", + "coolingKw":2.3,"btuh":8000,"efficiencyCooling":"A++","noiseNote":"Silent-Modus ca. 38 dB(A) laut Händler", + "roomSizeM2":[12,28],"uvp":749,"fairPriceMax":749, + "bestFor":["Kleine Schlafzimmer","Räume bis 28 m²","Mietwohnung mit Balkon/Fensterbank"], + "notFor":["Große oder stark aufgeheizte Räume","keine Stellfläche fürs Außengerät"], + "pros":["Mobile Split-Bauweise","Leichter und günstiger als die große PortaSplit","Leise im Silent-Modus"], + "cons":["Weniger Leistung","ebenfalls oft knapp","Außengerät nötig"], + "score":90,"sources":[{"label":"Midea PortaSplit Cool","url":"https://www.midea.com/de/klimatisieren-heizen/portasplit-cool.portasplit"}] + }, + { + "id":"delonghi-pac-ex105","slug":"delonghi-pac-ex105","name":"De'Longhi Pinguino PAC EX105","brand":"De'Longhi", + "type":"monoblock","tier":"A","badge":"Beste PortaSplit-Alternative ohne Außengerät","apartmentSuitable":true, + "shortVerdict":"Testsieger-Monoblock: starke Kühlung bei niedrigem Verbrauch – die beste Wahl, wenn kein Außengerät möglich ist.", + "coolingKw":2.5,"btuh":10000,"efficiencyCooling":"A+++","noiseNote":"ca. 63 dB(A) Schallleistung (klimaaktiv)", + "roomSizeM2":[20,40],"uvp":699,"fairPriceMax":749, + "bestFor":["Mietwohnung ohne Stellplatz fürs Außengerät","Schlafzimmer/Homeoffice mit Abdichtung","Vielnutzer"], + "notFor":["Wer maximale Leise-Werte braucht"], + "pros":["F.A.Z.-Testsieger Monoblock","Sehr effizient (EER 4.1, R290)","Gute Verarbeitung"], + "cons":["Teuer","Groß und schwer","Fensterabdichtung meist separat nötig"], + "score":89,"sources":[{"label":"klimaaktiv Topprodukte","url":"https://www.klimaaktiv.at/private/topprodukte/detail/delonghi-pac-ex105-477"}] + }, + { + "id":"bosch-cool-5000","slug":"bosch-cool-5000","name":"Bosch Cool 5000","brand":"Bosch", + "type":"monoblock","tier":"A","badge":"Premium-Komfort mit Inverter","apartmentSuitable":true, + "shortVerdict":"Modernes Monoblock-Gerät mit seltener Inverter-Technik – stark für größere Räume.", + "coolingKw":3.4,"btuh":11600,"efficiencyCooling":"A+","noiseNote":"ca. 64 dB(A) Schallleistung – für Schlafräume kritisch prüfen", + "roomSizeM2":[25,46],"uvp":799,"fairPriceMax":849, + "bestFor":["Homeoffice","Wohnzimmer","größere Räume","Komfort/Energieeffizienz"], + "notFor":["Sehr leise Schlafräume"], + "pros":["Inverter-Technik (bei Monoblocks selten)","Hohe Kühlleistung","Markengerät"], + "cons":["Monoblock mit Nachström-Problem","relativ laut","teuer"], + "score":85,"sources":[{"label":"Bosch Home Comfort","url":"https://www.bosch-homecomfort.com/de/de/wohngebaeude/unternehmen/presse/neuheit-cool-5000/"}] + }, + { + "id":"aeg-comfort-6000","slug":"aeg-comfort-6000","name":"AEG Comfort 6000","brand":"AEG", + "type":"monoblock","tier":"B","badge":"Smart & App","apartmentSuitable":true, + "shortVerdict":"Gute App-Steuerung und Verarbeitung – die Smart-Wahl, aber nicht die effizienteste.", + "coolingKw":2.6,"btuh":9000,"efficiencyCooling":"A","noiseNote":"mittel", + "roomSizeM2":[18,34],"uvp":649,"fairPriceMax":699, + "bestFor":["App-Steuerung","Design/Komfort","Homeoffice"], + "notFor":["Wer auf niedrigen Stromverbrauch achtet"], + "pros":["Sehr gute App","Gute Verarbeitung","Gute Kühlleistung"], + "cons":["Hoher Stromverbrauch (F.A.Z.)","kein Fenster-Kit im Lieferumfang","teuer"], + "score":80,"sources":[{"label":"F.A.Z. Kaufkompass","url":"https://www.faz.net/kaufkompass/test/die-beste-mobile-klimaanlage/"}] + }, + { + "id":"dreo-318s","slug":"dreo-318s","name":"Dreo 318S","brand":"Dreo", + "type":"monoblock","tier":"B","badge":"Kompakt für kleine Räume","apartmentSuitable":true, + "shortVerdict":"Kompakte Kühlung mit guter App – sinnvoll für kleinere Räume.", + "coolingKw":2.1,"btuh":8000,"efficiencyCooling":"A","noiseNote":"mittel", + "roomSizeM2":[10,22],"uvp":429,"fairPriceMax":469, + "bestFor":["Kleine Räume","wenig Stellplatz"], + "notFor":["Große, stark aufgeheizte Räume"], + "pros":["Klein und leicht","Gute App-Anbindung","Günstiger als Premium-Monoblocks"], + "cons":["Begrenzte Leistung","Verfügbarkeit prüfen"], + "score":76,"sources":[{"label":"F.A.Z. Kaufkompass","url":"https://www.faz.net/kaufkompass/test/die-beste-mobile-klimaanlage/"}] + }, + { + "id":"midea-silent-cool-26-pro-wf","slug":"midea-silent-cool-26-pro-wf","name":"Midea Silent Cool 26 Pro WF","brand":"Midea", + "type":"monoblock","tier":"B","badge":"Preis-Leistung","apartmentSuitable":true, + "shortVerdict":"Günstigere Midea-Alternative mit App – solide Zwischenlösung, wenn die PortaSplit weg ist.", + "coolingKw":2.6,"btuh":9000,"efficiencyCooling":"A","noiseNote":"im Schlafzimmer kritisch prüfen", + "roomSizeM2":[16,30],"uvp":499,"fairPriceMax":549, + "bestFor":["Budget unter 600 €","Markengerät","PortaSplit-Ausfall-Alternative"], + "notFor":["Höchste Leise-Ansprüche"], + "pros":["Günstigere Midea-Option","App/WiFi","Gute Zwischenlösung"], + "cons":["Kein Split-Niveau","Fensterabdichtung Pflicht"], + "score":78,"sources":[{"label":"F.A.Z. Kaufkompass","url":"https://www.faz.net/kaufkompass/test/die-beste-mobile-klimaanlage/"}] + }, + { + "id":"comfee-mobile-12000","slug":"comfee-mobile-12000","name":"Comfee Mobile 12000","brand":"Comfee", + "type":"monoblock","tier":"C","badge":"Budget-Notfalloption","apartmentSuitable":true, + "shortVerdict":"Brauchbare Budget-Option, wenn Premiumgeräte weg sind – aber kein Premium.", + "coolingKw":3.5,"btuh":12000,"efficiencyCooling":"A","noiseNote":"eher laut", + "roomSizeM2":[20,35],"uvp":379,"fairPriceMax":429, + "bestFor":["Akutkauf mit kleinem Budget","schnelle Notlösung"], + "notFor":["Schlafräume mit Leise-Anspruch","Premium-Erwartung"], + "pros":["Günstig","12.000-BTU-Klasse","oft verfügbar"], + "cons":["Lauter, weniger effizient","Monoblock"], + "score":68,"sources":[{"label":"F.A.Z. Kaufkompass","url":"https://www.faz.net/kaufkompass/test/die-beste-mobile-klimaanlage/"}] + }, + { + "id":"remko-rkl-495-dc","slug":"remko-rkl-495-dc","name":"Remko RKL 495 DC","brand":"Remko", + "type":"mobile_split","tier":"B","badge":"Premium-Spezialfall","apartmentSuitable":false, + "shortVerdict":"Sehr leistungsstarke mobile Split – Premium-Nische für große Räume und hohes Budget.", + "coolingKw":4.4,"btuh":15000,"efficiencyCooling":"A+","noiseNote":"mittel", + "roomSizeM2":[35,60],"uvp":1599,"fairPriceMax":1699, + "bestFor":["Große Räume","hohes Budget","mobile Split-Bauweise"], + "notFor":["Schnellkauf","kleines Budget","kleine Räume"], + "pros":["Mobile Split","sehr leistungsstark"], + "cons":["Sehr teuer","groß/schwer"], + "score":79,"sources":[{"label":"F.A.Z. Kaufkompass","url":"https://www.faz.net/kaufkompass/test/die-beste-mobile-klimaanlage/"}] + } +] diff --git a/src/data/stores.json b/src/data/stores.json new file mode 100644 index 0000000..c6073bd --- /dev/null +++ b/src/data/stores.json @@ -0,0 +1,20 @@ +[ + {"id":"obi-hamburg","chain":"OBI","name":"OBI Hamburg-Wandsbek","plz":"22041","city":"Hamburg","lat":53.573,"lng":10.085}, + {"id":"hornbach-hamburg","chain":"Hornbach","name":"Hornbach Hamburg-Wandsbek","plz":"22047","city":"Hamburg","lat":53.585,"lng":10.103}, + {"id":"bauhaus-berlin","chain":"Bauhaus","name":"Bauhaus Berlin-Halensee","plz":"10711","city":"Berlin","lat":52.497,"lng":13.290}, + {"id":"obi-berlin","chain":"OBI","name":"OBI Berlin-Lichtenberg","plz":"10365","city":"Berlin","lat":52.512,"lng":13.500}, + {"id":"toom-koeln","chain":"toom","name":"toom Köln-Ehrenfeld","plz":"50825","city":"Köln","lat":50.952,"lng":6.917}, + {"id":"hornbach-koeln","chain":"Hornbach","name":"Hornbach Köln-Godorf","plz":"50997","city":"Köln","lat":50.864,"lng":6.987}, + {"id":"bauhaus-muenchen","chain":"Bauhaus","name":"Bauhaus München-Laim","plz":"80687","city":"München","lat":48.140,"lng":11.500}, + {"id":"obi-muenchen","chain":"OBI","name":"OBI München-Pasing","plz":"81241","city":"München","lat":48.146,"lng":11.460}, + {"id":"hornbach-frankfurt","chain":"Hornbach","name":"Hornbach Frankfurt-Bornheim","plz":"60385","city":"Frankfurt","lat":50.131,"lng":8.713}, + {"id":"toom-stuttgart","chain":"toom","name":"toom Stuttgart-Vaihingen","plz":"70563","city":"Stuttgart","lat":48.728,"lng":9.110}, + {"id":"bauhaus-stuttgart","chain":"Bauhaus","name":"Bauhaus Stuttgart-Feuerbach","plz":"70469","city":"Stuttgart","lat":48.808,"lng":9.157}, + {"id":"obi-hannover","chain":"OBI","name":"OBI Hannover-Vahrenheide","plz":"30179","city":"Hannover","lat":52.420,"lng":9.760}, + {"id":"hornbach-dresden","chain":"Hornbach","name":"Hornbach Dresden-Kaditz","plz":"01139","city":"Dresden","lat":51.082,"lng":13.690}, + {"id":"bauhaus-leipzig","chain":"Bauhaus","name":"Bauhaus Leipzig-Paunsdorf","plz":"04329","city":"Leipzig","lat":51.350,"lng":12.470}, + {"id":"obi-dortmund","chain":"OBI","name":"OBI Dortmund-Aplerbeck","plz":"44287","city":"Dortmund","lat":51.490,"lng":7.560}, + {"id":"toom-nuernberg","chain":"toom","name":"toom Nürnberg-Langwasser","plz":"90471","city":"Nürnberg","lat":49.400,"lng":11.130}, + {"id":"bauhaus-karlsruhe","chain":"Bauhaus","name":"Bauhaus Karlsruhe-Durlach","plz":"76227","city":"Karlsruhe","lat":48.998,"lng":8.470}, + {"id":"hornbach-bremen","chain":"Hornbach","name":"Hornbach Bremen-Habenhausen","plz":"28279","city":"Bremen","lat":53.040,"lng":8.840} +] diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro new file mode 100644 index 0000000..2a7bdae --- /dev/null +++ b/src/layouts/Base.astro @@ -0,0 +1,36 @@ +--- +const { title, description, jsonld } = Astro.props; +const desc = description ?? 'Kühlfinder – das richtige portable Klimagerät finden und sehen, wo es heute verfügbar ist.'; +import '../styles/global.css'; +--- + + + + + + {title} + + + + + + {jsonld && diff --git a/src/pages/datenschutz.astro b/src/pages/datenschutz.astro new file mode 100644 index 0000000..c894b00 --- /dev/null +++ b/src/pages/datenschutz.astro @@ -0,0 +1,10 @@ +--- +import Base from '../layouts/Base.astro'; +--- + +
+

Datenschutz

+

Platzhalter, vor Go-Live finalisieren.

+

Diese Seite wird statisch ausgeliefert. Kartenkacheln werden von OpenFreeMap geladen; dabei wird deine IP an den Tile-Server übertragen (vor Go-Live ggf. self-hosten). Standortabfrage erfolgt nur nach deiner ausdrücklichen Zustimmung im Browser. Der Verfügbarkeits-Alarm speichert E-Mail und PLZ ausschließlich zur Benachrichtigung (Backend folgt, EU-Hosting).

+
+ diff --git a/src/pages/finder.astro b/src/pages/finder.astro new file mode 100644 index 0000000..d731a0e --- /dev/null +++ b/src/pages/finder.astro @@ -0,0 +1,78 @@ +--- +import Base from '../layouts/Base.astro'; +import { allProducts } from '../lib/pricing'; +const products = allProducts.map(p=>({slug:p.slug,name:p.name,type:p.type,badge:p.badge,uvp:p.uvp,apartment:p.apartmentSuitable})); +--- + +
+

60-Sekunden-Finder

+

Welches portable Klimagerät passt zu dir?

+
+
+ + + diff --git a/src/pages/geraete/[slug].astro b/src/pages/geraete/[slug].astro new file mode 100644 index 0000000..da5f70c --- /dev/null +++ b/src/pages/geraete/[slug].astro @@ -0,0 +1,98 @@ +--- +import Base from '../../layouts/Base.astro'; +import { allProducts, getProduct, priceIntel, offersFor, storeById, euro } from '../../lib/pricing'; +export function getStaticPaths(){ return allProducts.map(p => ({ params: { slug: p.slug } })); } +const { slug } = Astro.params; +const product = getProduct(slug!)!; +const pi = priceIntel(product); +const typeLabel = product.type === 'mobile_split' ? 'Mobile Split-Klimaanlage' : 'Monoblock mit Abluftschlauch'; +const availStores = offersFor(product.id) + .filter(o => o.sourceType==='store' && ['in_stock','low_stock'].includes(o.availability)) + .map(o => ({...o, store: storeById(o.sourceId)})); +const alternatives = allProducts.filter(p => p.id!==product.id && p.type===product.type).slice(0,3); +const jsonld = { + '@context':'https://schema.org','@type':'Product',name:product.name,brand:product.brand, + category:'Mobile Klimaanlage', + offers:{'@type':'AggregateOffer',priceCurrency:'EUR',lowPrice:pi.lowestLegit ?? product.uvp,highPrice:product.uvp,offerCount:offersFor(product.id).length} +}; +--- + +
+

← Alle Geräte

+ {product.badge} + {product.apartmentSuitable && wohnungstauglich} +

{product.name}

+

{typeLabel} · {product.btuh.toLocaleString('de-DE')} BTU · {product.coolingKw} kW · {product.roomSizeM2[0]}–{product.roomSizeM2[1]} m² · EEK {product.efficiencyCooling}

+

{product.shortVerdict}

+ +
+
+
Üblicher Preis
{euro(pi.fairPrice)}
+
Seriös aktuell ab
{euro(pi.lowestLegit)}
+
Ø seriös
{euro(pi.avgLegit)}
+
Märkte mit Bestand
{pi.storesAvailable}
+
+ {pi.wucher &&

Wucher-Warnung: bis {euro(pi.wucher.price)} bei Drittanbietern – über {Math.round((pi.wucher.price/pi.fairPrice-1)*100)} % über üblich. Nicht überteuert kaufen.

} + +
+ + {product.type==='monoblock' &&

Wichtig: Monoblock-Geräte brauchen eine gute Fensterabdichtung. Ohne Abdichtung wird ständig warme Luft nachgezogen – das kostet Leistung und Strom.

} + {product.type==='mobile_split' &&

Wichtig: Das Außengerät muss sicher und rücksichtsvoll platziert werden. Prüfe Fensterbank/Balkon, Nachbarn und Mietvertrag.

} + +
+
+

Geeignet für

+
    {product.bestFor.map(x =>
  • {x}
  • )}
+
+
+

Nicht geeignet, wenn

+
    {product.notFor.map(x =>
  • {x}
  • )}
+
+
+
+

Stärken

    {product.pros.map(x =>
  • {x}
  • )}
+

Schwächen

    {product.cons.map(x =>
  • {x}
  • )}
+
+ + {availStores.length>0 && ( +
+

Aktuell verfügbar in

+
+ {availStores.map(o => ( +
+
{o.chain} {o.store?.city}
{o.store?.name}
+
{euro(o.price)}
{o.availability==='low_stock'?'wenig Bestand':'verfügbar'}
+
+ ))} +
+
+ )} + +

Alternativen

+
+ {alternatives.map(a => {a.name}
{a.badge}
)} +
+ +

Quellen

+ +
+ + diff --git a/src/pages/geraete/index.astro b/src/pages/geraete/index.astro new file mode 100644 index 0000000..4921b80 --- /dev/null +++ b/src/pages/geraete/index.astro @@ -0,0 +1,49 @@ +--- +import Base from '../../layouts/Base.astro'; +import ProductCard from '../../components/ProductCard.astro'; +import { allProducts } from '../../lib/pricing'; +const sorted = [...allProducts].sort((a,b)=>b.score-a.score); +--- + +
+

Kuratierter Vergleich

+

Alle Geräte

+

Nur echte Kompressorgeräte – mobile Split ohne feste Installation und Monoblock mit Abluftschlauch. Keine Verdunstungs- oder USB-Kühler.

+
+ + + + +
+
+ {sorted.map(p => ( +
+ +
+ ))} +
+
+ + + diff --git a/src/pages/hitzeschutz.astro b/src/pages/hitzeschutz.astro new file mode 100644 index 0000000..54ef657 --- /dev/null +++ b/src/pages/hitzeschutz.astro @@ -0,0 +1,21 @@ +--- +import Base from '../layouts/Base.astro'; +--- + +
+

Kontext mit Quellen

+

Hitzeschutz ist kein Luxus mehr

+

Wenn Wohnungen über Tage aufheizen und nachts nicht abkühlen, belastet das Schlaf, Konzentration und Gesundheit – besonders Kinder, ältere und vorerkrankte Menschen.

+

Was der Klimawandel damit zu tun hat

+

Das Umweltbundesamt betont, dass hohe sommerliche Temperaturen ein hohes gesundheitliches Schädigungspotenzial haben und mehrtägige Hitzephasen besonders relevant sind. Laut DWD ist Deutschland bereits rund 1,8 K wärmer als 1961–1990. Aktuelle Attributionsstudien zeigen: Hitzewellen wie aktuell wären ohne menschengemachten Klimawandel praktisch unmöglich.

+

Effizient kühlen heißt nicht sinnlos frieren

+ +

Quellen: Umweltbundesamt (Gesundheitsrisiken durch Hitze), DWD Klimastatusbericht 2025, Copernicus, World Weather Attribution.

+
+ diff --git a/src/pages/impressum.astro b/src/pages/impressum.astro new file mode 100644 index 0000000..8365821 --- /dev/null +++ b/src/pages/impressum.astro @@ -0,0 +1,11 @@ +--- +import Base from '../layouts/Base.astro'; +--- + +
+

Impressum

+

Angaben gemäß § 5 TMG / § 18 MStV — Platzhalter, vor Go-Live ausfüllen.

+

Heidrich Digital
[Straße]
[PLZ Ort]
E-Mail: mail@tillheidrich.de

+

Verantwortlich i. S. d. § 18 Abs. 2 MStV: Till Heidrich

+
+ diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..d6ab56f --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,88 @@ +--- +import Base from '../layouts/Base.astro'; +import ProductCard from '../components/ProductCard.astro'; +import { allProducts, priceIntel, euro, getProduct, dataUpdatedAt } from '../lib/pricing'; +const top = allProducts.filter(p => p.tier === 'A'); +const ps = getProduct('midea-portasplit-12000')!; +const psi = priceIntel(ps); +const updated = new Date(dataUpdatedAt).toLocaleString('de-DE',{day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}); +const jsonld = { + '@context':'https://schema.org','@type':'WebSite',name:'Kühlfinder',url:'https://kuehlfinder.de', + description:'Portable Klimageräte finden und Live-Verfügbarkeit in Baumärkten sehen.' +}; +--- + +
+

Ehrlicher Klima-Finder für Mietwohnungen

+

Finde ein gutes portables Klimagerät – und sieh, wo es heute verfügbar ist.

+

Nur echte Kompressorgeräte, keine Fake-Kühler. Mit Live-Verfügbarkeit in Baumärkten, Preis-Check gegen Wucher und Alarm, sobald dein Gerät wieder da ist.

+ +
+ +
+
+

Midea PortaSplit – aktueller Status

+ Stand: {updated} +
+
+
Üblicher Preis (UVP)
{euro(psi.fairPrice)}
+
Seriös aktuell ab
{euro(psi.lowestLegit)}
+
Märkte mit Bestand
{psi.storesAvailable}
+
+ {psi.wucher && ( +

Wucher-Warnung: Einzelne Drittanbieter verlangen aktuell bis {euro(psi.wucher.price)} – das ist deutlich über dem üblichen Preis von {euro(psi.fairPrice)}. Nicht in Panik überteuert kaufen. Besser: Alarm setzen oder eine gute Alternative wählen.

+ )} + +
+ +
+

Top-Empfehlungen

+

Kuratiert nach Bauart, Kühlleistung, Effizienz, Nutzungsfall und glaubwürdigen Quellen.

+
+ {top.map(p => )} +
+

Alle Geräte & Vergleich

+
+ +
+
+

PortaSplit ausverkauft?

+

Die Midea PortaSplit ist bei Hitze regelmäßig vergriffen. Wir zeigen dir wohnungstaugliche Alternativen, die wirklich kühlen – statt dich teuer hängen zu lassen.

+ Sinnvolle Alternativen +
+
+

Warum Kühlung wichtiger wird

+

Hitzewellen treten in Deutschland früher und intensiver auf. Gute, effiziente Kühlung kann Hitzeschutz sein – mit Quellen statt Panik.

+ Hitzeschutz & Klima +
+
+ + diff --git a/src/pages/karte.astro b/src/pages/karte.astro new file mode 100644 index 0000000..e9d961e --- /dev/null +++ b/src/pages/karte.astro @@ -0,0 +1,134 @@ +--- +import Base from '../layouts/Base.astro'; +import { allProducts } from '../lib/pricing'; +const products = allProducts.map(p => ({ slug:p.slug, name:p.name })); +--- + +
+

Deutschlandkarte

+

Wo gibt es heute ein Klimagerät?

+

Märkte mit aktuellem Bestand. Wähle ein Gerät, nutze deinen Standort und stell den Umkreis ein.

+
+
+ +
+
+ + + + diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts new file mode 100644 index 0000000..eab1d19 --- /dev/null +++ b/src/pages/llms.txt.ts @@ -0,0 +1,21 @@ +import { allProducts, priceIntel, euro } from '../lib/pricing'; +export const GET = () => { + const lines = [ + '# Kühlfinder', + '> Kuratierter Finder für portable Klimageräte in Deutschland mit Live-Verfügbarkeit in Baumärkten, Preis-Check (Wucher-Warnung) und Verfügbarkeits-Alarm.', + '', + '## Was Kühlfinder besser macht', + '- Nur echte Kompressorgeräte (mobile Split, Monoblock) – keine Verdunstungs-/USB-Kühler.', + '- Live-Verfügbarkeit pro Baumarkt-Filiale auf einer Deutschlandkarte (idealo zeigt keinen Filialbestand).', + '- Warnung vor Wucherpreisen bei Knappheit (z. B. Midea PortaSplit).', + '- Fokus auf wohnungstaugliche Geräte und PortaSplit-Alternativen.', + '', + '## Geräte', + ]; + for (const p of allProducts) { + const pi = priceIntel(p); + lines.push(`- ${p.name} (${p.type==='mobile_split'?'mobile Split':'Monoblock'}, ${p.btuh} BTU): ${p.shortVerdict} Üblicher Preis ${euro(pi.fairPrice)}. /geraete/${p.slug}`); + } + lines.push('', '## Seiten', '- /finder – 60-Sekunden-Empfehlung', '- /karte – Verfügbarkeits-Karte', '- /portasplit – PortaSplit-Status & Alternativen', '- /alarm – Verfügbarkeits-Alarm', '- /hitzeschutz – Klimawandel-Kontext', '- /transparenz – Methodik & Affiliate'); + return new Response(lines.join('\n'), { headers: { 'Content-Type': 'text/plain; charset=utf-8' } }); +}; diff --git a/src/pages/portasplit.astro b/src/pages/portasplit.astro new file mode 100644 index 0000000..800c328 --- /dev/null +++ b/src/pages/portasplit.astro @@ -0,0 +1,42 @@ +--- +import Base from '../layouts/Base.astro'; +import ProductCard from '../components/ProductCard.astro'; +import { allProducts, getProduct, priceIntel, euro } from '../lib/pricing'; +const ps = getProduct('midea-portasplit-12000')!; +const psi = priceIntel(ps); +const alts = allProducts.filter(p=>['delonghi-pac-ex105','midea-portasplit-cool-8000','bosch-cool-5000','midea-silent-cool-26-pro-wf'].includes(p.id)); +const jsonld={'@context':'https://schema.org','@type':'FAQPage',mainEntity:[ + {'@type':'Question',name:'Was tun, wenn die Midea PortaSplit ausverkauft ist?',acceptedAnswer:{'@type':'Answer',text:'Sinnvolle Alternativen sind die kleinere PortaSplit Cool, der Monoblock De\'Longhi PAC EX105 oder die Bosch Cool 5000. Wer auf die PortaSplit warten will, nutzt den Verfügbarkeits-Alarm statt überteuert bei Drittanbietern zu kaufen.'}}, + {'@type':'Question',name:'Wie viel kostet die Midea PortaSplit normal?',acceptedAnswer:{'@type':'Answer',text:'Der übliche Preis liegt bei rund 899 € (UVP), im Angebot teils um 699 €. Preise deutlich darüber bei Drittanbietern sind Wucher.'}} +]}; +--- + +
+

PortaSplit-Hub

+

Midea PortaSplit: Status, Preis & sinnvolle Alternativen

+
+
+
Üblicher Preis
{euro(psi.fairPrice)}
+
Seriös ab
{euro(psi.lowestLegit)}
+
Märkte mit Bestand
{psi.storesAvailable}
+
+ {psi.wucher &&

Wucher-Warnung: Drittanbieter verlangen bis {euro(psi.wucher.price)} – rund {Math.round((psi.wucher.price/psi.fairPrice-1)*100)} % über üblich. Lieber Alarm setzen oder Alternative wählen.

} + +
+

Wohnungstaugliche Alternativen

+

Geräte, die in normalen Wohnungen wirklich kühlen – nicht nur „auch verfügbar“.

+
+ {alts.map(p=> )} +
+
+ + diff --git a/src/pages/robots.txt.ts b/src/pages/robots.txt.ts new file mode 100644 index 0000000..bf0ce8a --- /dev/null +++ b/src/pages/robots.txt.ts @@ -0,0 +1,4 @@ +export const GET = () => new Response( + ['User-agent: *','Allow: /','','User-agent: GPTBot','Allow: /','','User-agent: PerplexityBot','Allow: /','','Sitemap: https://kuehlfinder.de/sitemap-index.xml',''].join('\n'), + { headers: { 'Content-Type': 'text/plain; charset=utf-8' } } +); diff --git a/src/pages/transparenz.astro b/src/pages/transparenz.astro new file mode 100644 index 0000000..0dac835 --- /dev/null +++ b/src/pages/transparenz.astro @@ -0,0 +1,17 @@ +--- +import Base from '../layouts/Base.astro'; +import { WUCHER_FACTOR } from '../lib/pricing'; +--- + +
+

Transparenz & Methodik

+

Wie wir bewerten

+

Wir nehmen nur echte Kompressorgeräte auf (mobile Split, Monoblock). Die redaktionelle Einschätzung beruht auf Bauart, Kühlleistung, Effizienz, Lautstärke, Nutzungsfall, Verfügbarkeit und glaubwürdigen Testquellen (z. B. F.A.Z. Kaufkompass, Herstellerdaten, klimaaktiv). Das ist kein eigener Labortest.

+

Preise & Wucher-Warnung

+

Als „üblicher Preis“ dient die UVP bzw. der normale Marktpreis. Liegt ein verfügbares Angebot mehr als {Math.round((WUCHER_FACTOR-1)*100)} % darüber, markieren wir es als Wucher. Diese Angebote zählen nicht in den Durchschnitt.

+

Verfügbarkeit

+

Wir zeigen Verfügbarkeit pro Markt so aktuell wie möglich. Wenn Daten nicht automatisch geprüft sind, behaupten wir nie „verfügbar“, sondern nur „prüfen“. Preise und Bestände ändern sich während Hitzewellen sehr schnell.

+

Affiliate

+

Einige Links sind Affiliate-Links. Kaufst du darüber, erhalten wir ggf. eine Provision – für dich ändert sich der Preis nicht. Empfehlungen hängen nicht von der Provision ab.

+
+ diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..bd7fce7 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,60 @@ +@import '@fontsource/fraunces/400.css'; +@import '@fontsource/fraunces/600.css'; +@import '@fontsource/public-sans/400.css'; +@import '@fontsource/public-sans/500.css'; +@import '@fontsource/public-sans/600.css'; + +:root{ + --petrol: oklch(0.46 0.066 207); + --petrol-deep: oklch(0.36 0.06 210); + --petrol-soft: oklch(0.95 0.018 200); + --ink: oklch(0.24 0.02 250); + --slate: oklch(0.52 0.02 250); + --light: oklch(0.985 0.006 230); + --card: oklch(1 0 0); + --line: oklch(0.9 0.01 240); + --warm: oklch(0.68 0.15 47); + --warm-bg: oklch(0.96 0.035 60); + --danger: oklch(0.55 0.18 25); + --danger-bg: oklch(0.95 0.04 30); + --ok: oklch(0.55 0.11 155); + --ok-bg: oklch(0.95 0.04 160); + --radius: 12px; + --maxw: 1100px; + --font-head: 'Fraunces', Georgia, serif; + --font-body: 'Public Sans', system-ui, sans-serif; +} +*{box-sizing:border-box} +html{scroll-behavior:smooth} +body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--light);line-height:1.6;-webkit-font-smoothing:antialiased} +h1,h2,h3{font-family:var(--font-head);font-weight:600;line-height:1.15;margin:0 0 .5em} +h1{font-size:clamp(2rem,5vw,3.1rem);letter-spacing:-.01em} +h2{font-size:clamp(1.5rem,3vw,2.1rem)} +h3{font-size:1.2rem} +p{margin:0 0 1rem} +a{color:var(--petrol);text-underline-offset:3px} +.wrap{max-width:var(--maxw);margin:0 auto;padding:0 1.2rem} +.u{display:inline-block;height:.18em;width:2.2rem;background:var(--warm);vertical-align:middle;margin-right:.5rem;border-radius:2px} +.btn{display:inline-flex;align-items:center;gap:.5rem;font-weight:600;font-family:var(--font-body);padding:.8rem 1.3rem;border-radius:999px;border:1.5px solid var(--petrol);background:var(--petrol);color:#fff;text-decoration:none;cursor:pointer;transition:transform .08s ease,background .2s} +.btn:hover{background:var(--petrol-deep);border-color:var(--petrol-deep)} +.btn:active{transform:scale(.98)} +.btn.ghost{background:transparent;color:var(--petrol)} +.btn.ghost:hover{background:var(--petrol-soft)} +.btn.sm{padding:.5rem .9rem;font-size:.9rem} +.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem} +.badge{display:inline-block;font-size:.78rem;font-weight:600;padding:.2rem .6rem;border-radius:999px;background:var(--petrol-soft);color:var(--petrol-deep)} +.tag-ok{background:var(--ok-bg);color:var(--ok)} +.tag-warn{background:var(--warm-bg);color:oklch(0.45 0.12 47)} +.tag-danger{background:var(--danger-bg);color:var(--danger)} +.muted{color:var(--slate)} +.grid{display:grid;gap:1rem} +.note{font-size:.85rem;color:var(--slate)} +header.site{position:sticky;top:0;z-index:50;background:oklch(0.985 0.006 230 / .92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)} +header.site .bar{display:flex;align-items:center;justify-content:space-between;height:62px} +header.site nav a{margin-left:1.2rem;text-decoration:none;color:var(--ink);font-weight:500;font-size:.95rem} +header.site nav a:hover{color:var(--petrol)} +.brand{font-family:var(--font-head);font-weight:600;font-size:1.25rem;color:var(--ink);text-decoration:none} +.brand b{color:var(--petrol)} +footer.site{margin-top:4rem;border-top:1px solid var(--line);background:var(--petrol-soft)} +footer.site .wrap{padding-top:2rem;padding-bottom:2rem} +@media(max-width:720px){header.site nav a{margin-left:.8rem;font-size:.85rem}} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c196500 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1 @@ +{ "extends": "astro/tsconfigs/strict" }