diff --git a/.env b/.env
new file mode 100644
index 0000000..fa58f24
--- /dev/null
+++ b/.env
@@ -0,0 +1,3 @@
+VITE_SUPABASE_PROJECT_ID="pwltkduuvidvnoiyijpo"
+VITE_SUPABASE_PUBLISHABLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InB3bHRrZHV1dmlkdm5vaXlpanBvIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjU5ODE3NzksImV4cCI6MjA4MTU1Nzc3OX0.OQGDu1ATF6zAjBanKyMJ5PthEFURxamVgUXFvuYg3lE"
+VITE_SUPABASE_URL="https://pwltkduuvidvnoiyijpo.supabase.co"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.windsurf/workflows/links.md b/.windsurf/workflows/links.md
new file mode 100644
index 0000000..e69de29
diff --git a/bun.lockb b/bun.lockb
new file mode 100644
index 0000000..4952705
Binary files /dev/null and b/bun.lockb differ
diff --git a/components.json b/components.json
new file mode 100644
index 0000000..62e1011
--- /dev/null
+++ b/components.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "rsc": false,
+ "tsx": true,
+ "tailwind": {
+ "config": "tailwind.config.ts",
+ "css": "src/index.css",
+ "baseColor": "slate",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils",
+ "ui": "@/components/ui",
+ "lib": "@/lib",
+ "hooks": "@/hooks"
+ }
+}
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..40f72cc
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,26 @@
+import js from "@eslint/js";
+import globals from "globals";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
+import tseslint from "typescript-eslint";
+
+export default tseslint.config(
+ { ignores: ["dist"] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ["**/*.{ts,tsx}"],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ "react-hooks": reactHooks,
+ "react-refresh": reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ "react-refresh/only-export-components": ["warn", { allowConstantExport: true }],
+ "@typescript-eslint/no-unused-vars": "off",
+ },
+ },
+);
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f0c6179
--- /dev/null
+++ b/index.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+ Lovable App
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..cada313
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,7588 @@
+{
+ "name": "vite_react_shadcn_ts",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "vite_react_shadcn_ts",
+ "version": "0.0.0",
+ "dependencies": {
+ "@hookform/resolvers": "^3.10.0",
+ "@radix-ui/react-accordion": "^1.2.11",
+ "@radix-ui/react-alert-dialog": "^1.1.14",
+ "@radix-ui/react-aspect-ratio": "^1.1.7",
+ "@radix-ui/react-avatar": "^1.1.10",
+ "@radix-ui/react-checkbox": "^1.3.2",
+ "@radix-ui/react-collapsible": "^1.1.11",
+ "@radix-ui/react-context-menu": "^2.2.15",
+ "@radix-ui/react-dialog": "^1.1.14",
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
+ "@radix-ui/react-hover-card": "^1.1.14",
+ "@radix-ui/react-label": "^2.1.7",
+ "@radix-ui/react-menubar": "^1.1.15",
+ "@radix-ui/react-navigation-menu": "^1.2.13",
+ "@radix-ui/react-popover": "^1.1.14",
+ "@radix-ui/react-progress": "^1.1.7",
+ "@radix-ui/react-radio-group": "^1.3.7",
+ "@radix-ui/react-scroll-area": "^1.2.9",
+ "@radix-ui/react-select": "^2.2.5",
+ "@radix-ui/react-separator": "^1.1.7",
+ "@radix-ui/react-slider": "^1.3.5",
+ "@radix-ui/react-slot": "^1.2.3",
+ "@radix-ui/react-switch": "^1.2.5",
+ "@radix-ui/react-tabs": "^1.1.12",
+ "@radix-ui/react-toast": "^1.2.14",
+ "@radix-ui/react-toggle": "^1.1.9",
+ "@radix-ui/react-toggle-group": "^1.1.10",
+ "@radix-ui/react-tooltip": "^1.2.7",
+ "@supabase/supabase-js": "^2.88.0",
+ "@tanstack/react-query": "^5.83.0",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.1.1",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.6.0",
+ "framer-motion": "^12.23.26",
+ "i18next": "^25.7.3",
+ "i18next-browser-languagedetector": "^8.2.0",
+ "i18next-http-backend": "^3.0.2",
+ "input-otp": "^1.4.2",
+ "lucide-react": "^0.462.0",
+ "next-themes": "^0.3.0",
+ "react": "^18.3.1",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.61.1",
+ "react-i18next": "^16.5.0",
+ "react-resizable-panels": "^2.1.9",
+ "react-router-dom": "^6.30.1",
+ "recharts": "^2.15.4",
+ "sonner": "^1.7.4",
+ "tailwind-merge": "^2.6.0",
+ "tailwindcss-animate": "^1.0.7",
+ "vaul": "^0.9.9",
+ "zod": "^3.25.76"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.32.0",
+ "@tailwindcss/typography": "^0.5.16",
+ "@types/node": "^22.16.5",
+ "@types/react": "^18.3.23",
+ "@types/react-dom": "^18.3.7",
+ "@vitejs/plugin-react-swc": "^3.11.0",
+ "autoprefixer": "^10.4.21",
+ "eslint": "^9.32.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.20",
+ "globals": "^15.15.0",
+ "lovable-tagger": "^1.1.13",
+ "pdf-parse": "^2.4.5",
+ "pdfjs-dist": "^5.4.530",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^3.4.17",
+ "typescript": "^5.8.3",
+ "typescript-eslint": "^8.38.0",
+ "vite": "^5.4.19"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
+ "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.1",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
+ "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
+ "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
+ "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.7.3",
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz",
+ "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.7.4"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+ "license": "MIT"
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz",
+ "integrity": "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/canvas": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz",
+ "integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "e2e/*"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@napi-rs/canvas-android-arm64": "0.1.80",
+ "@napi-rs/canvas-darwin-arm64": "0.1.80",
+ "@napi-rs/canvas-darwin-x64": "0.1.80",
+ "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80",
+ "@napi-rs/canvas-linux-arm64-gnu": "0.1.80",
+ "@napi-rs/canvas-linux-arm64-musl": "0.1.80",
+ "@napi-rs/canvas-linux-riscv64-gnu": "0.1.80",
+ "@napi-rs/canvas-linux-x64-gnu": "0.1.80",
+ "@napi-rs/canvas-linux-x64-musl": "0.1.80",
+ "@napi-rs/canvas-win32-x64-msvc": "0.1.80"
+ }
+ },
+ "node_modules/@napi-rs/canvas-android-arm64": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz",
+ "integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-darwin-arm64": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz",
+ "integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-darwin-x64": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz",
+ "integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz",
+ "integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz",
+ "integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm64-musl": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz",
+ "integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz",
+ "integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-x64-gnu": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz",
+ "integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-x64-musl": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz",
+ "integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-win32-arm64-msvc": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.88.tgz",
+ "integrity": "sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/@napi-rs/canvas-win32-x64-msvc": {
+ "version": "0.1.80",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz",
+ "integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz",
+ "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz",
+ "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/react-accordion": {
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz",
+ "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collapsible": "1.1.12",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-alert-dialog": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz",
+ "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dialog": "1.1.15",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz",
+ "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-aspect-ratio": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.8.tgz",
+ "integrity": "sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz",
+ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-avatar": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz",
+ "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-context": "1.1.3",
+ "@radix-ui/react-primitive": "2.1.4",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-is-hydrated": "0.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz",
+ "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz",
+ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-checkbox": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz",
+ "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collapsible": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz",
+ "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
+ "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
+ "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
+ "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context-menu": {
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz",
+ "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-menu": "2.1.16",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz",
+ "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
+ "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz",
+ "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-escape-keydown": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dropdown-menu": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz",
+ "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-menu": "2.1.16",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz",
+ "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
+ "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-hover-card": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz",
+ "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
+ "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz",
+ "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz",
+ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menu": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz",
+ "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menubar": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz",
+ "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-menu": "2.1.16",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-navigation-menu": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz",
+ "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-visually-hidden": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popover": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz",
+ "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz",
+ "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-rect": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1",
+ "@radix-ui/rect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
+ "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
+ "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
+ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz",
+ "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-context": "1.1.3",
+ "@radix-ui/react-primitive": "2.1.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz",
+ "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz",
+ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-radio-group": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz",
+ "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz",
+ "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-scroll-area": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz",
+ "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.1",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz",
+ "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.1",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-visually-hidden": "1.2.3",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-separator": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz",
+ "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz",
+ "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.4"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slider": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",
+ "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.1",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz",
+ "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz",
+ "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tabs": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz",
+ "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast": {
+ "version": "1.2.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz",
+ "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-visually-hidden": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toggle": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz",
+ "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toggle-group": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz",
+ "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-toggle": "1.1.10",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tooltip": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz",
+ "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-visually-hidden": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
+ "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
+ "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-effect-event": "0.0.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-effect-event": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
+ "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
+ "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-is-hydrated": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
+ "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
+ "license": "MIT",
+ "dependencies": {
+ "use-sync-external-store": "^1.5.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
+ "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
+ "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz",
+ "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/rect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
+ "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz",
+ "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/rect": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
+ "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==",
+ "license": "MIT"
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.23.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.1.tgz",
+ "integrity": "sha512-vDbaOzF7yT2Qs4vO6XV1MHcJv+3dgR1sT+l3B8xxOVhUC336prMvqrvsLL/9Dnw2xr6Qhz4J0dmS0llNAbnUmQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz",
+ "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz",
+ "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz",
+ "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz",
+ "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz",
+ "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz",
+ "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz",
+ "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz",
+ "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz",
+ "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz",
+ "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz",
+ "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz",
+ "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz",
+ "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz",
+ "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz",
+ "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz",
+ "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz",
+ "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz",
+ "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz",
+ "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz",
+ "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz",
+ "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz",
+ "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@supabase/auth-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.88.0.tgz",
+ "integrity": "sha512-r/tlKD1Sv5w5AGmxVdBK17KwVkGOHMjihqw+HeW7Qsyes5ajLeyjL0M7jXZom1+NW4yINacKqOR9gqGmWzW9eA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "2.8.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@supabase/functions-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.88.0.tgz",
+ "integrity": "sha512-p934lg2x9m0bVBXKl2EAwbyIVif21FD1VGtLNGU4iuPOyB6b0bzyRAFnK95pLj48CMJk0DU+q35TDOGcFAyxwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "2.8.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@supabase/postgrest-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.88.0.tgz",
+ "integrity": "sha512-8DMGXWQUGM/4e8vtW95dLlNtETTVAyCAr7NyLFACDgVaaPUsDqZvS45LjBNd18fu3n6q/zZwCk4XL2yYWBHTVA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "2.8.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@supabase/realtime-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.88.0.tgz",
+ "integrity": "sha512-4yMVLLq6I2KSzINlBK22vGJJYzJo9FAbfKZl7ZuarvzAClq48skgLWF7dlBCC3B/9wQckKhCfPfvyT0JVz3SXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/phoenix": "^1.6.6",
+ "@types/ws": "^8.18.1",
+ "tslib": "2.8.1",
+ "ws": "^8.18.2"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@supabase/storage-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.88.0.tgz",
+ "integrity": "sha512-iM1CFKzTX0XIesHA/szcCqZG54BkXoSzqlVRB/O8s2u2GsXi0oUTko0ruOgDheNcWwOABKt88b0Fs4IVfDq7tg==",
+ "license": "MIT",
+ "dependencies": {
+ "iceberg-js": "^0.8.1",
+ "tslib": "2.8.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@supabase/supabase-js": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.88.0.tgz",
+ "integrity": "sha512-XcvV+0x3ybSG1WBoRH0U0cizT1pyzkXD4lLiPaMLpj+A0jahvcrcrijBT+IQpLXOa2hbNLuHkS7yqJW67r4+nQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@supabase/auth-js": "2.88.0",
+ "@supabase/functions-js": "2.88.0",
+ "@supabase/postgrest-js": "2.88.0",
+ "@supabase/realtime-js": "2.88.0",
+ "@supabase/storage-js": "2.88.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@swc/core": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.5.tgz",
+ "integrity": "sha512-VRy+AEO0zqUkwV9uOgqXtdI5tNj3y3BZI+9u28fHNjNVTtWYVNIq3uYhoGgdBOv7gdzXlqfHKuxH5a9IFAvopQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.25"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.15.5",
+ "@swc/core-darwin-x64": "1.15.5",
+ "@swc/core-linux-arm-gnueabihf": "1.15.5",
+ "@swc/core-linux-arm64-gnu": "1.15.5",
+ "@swc/core-linux-arm64-musl": "1.15.5",
+ "@swc/core-linux-x64-gnu": "1.15.5",
+ "@swc/core-linux-x64-musl": "1.15.5",
+ "@swc/core-win32-arm64-msvc": "1.15.5",
+ "@swc/core-win32-ia32-msvc": "1.15.5",
+ "@swc/core-win32-x64-msvc": "1.15.5"
+ },
+ "peerDependencies": {
+ "@swc/helpers": ">=0.5.17"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.5.tgz",
+ "integrity": "sha512-RvdpUcXrIz12yONzOdQrJbEnq23cOc2IHOU1eB8kPxPNNInlm4YTzZEA3zf3PusNpZZLxwArPVLCg0QsFQoTYw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.5.tgz",
+ "integrity": "sha512-ufJnz3UAff/8G5OfqZZc5cTQfGtXyXVLTB8TGT0xjkvEbfFg8jZUMDBnZT/Cn0k214JhMjiLCNl0A8aY/OKsYQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.5.tgz",
+ "integrity": "sha512-Yqu92wIT0FZKLDWes+69kBykX97hc8KmnyFwNZGXJlbKUGIE0hAIhbuBbcY64FGSwey4aDWsZ7Ojk89KUu9Kzw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.5.tgz",
+ "integrity": "sha512-3gR3b5V1abe/K1GpD0vVyZgqgV+ykuB5QNecDYzVroX4QuN+amCzQaNSsVM8Aj6DbShQCBTh3hGHd2f3vZ8gCw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.5.tgz",
+ "integrity": "sha512-Of+wmVh5h47tTpN9ghHVjfL0CJrgn99XmaJjmzWFW7agPdVY6gTDgkk6zQ6q4hcDQ7hXb0BGw6YFpuanBzNPow==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.5.tgz",
+ "integrity": "sha512-98kuPS0lZVgjmc/2uTm39r1/OfwKM0PM13ZllOAWi5avJVjRd/j1xA9rKeUzHDWt+ocH9mTCQsAT1jjKSq45bg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.5.tgz",
+ "integrity": "sha512-Rk+OtNQP3W/dZExL74LlaakXAQn6/vbrgatmjFqJPO4RZkq+nLo5g7eDUVjyojuERh7R2yhqNvZ/ZZQe8JQqqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.5.tgz",
+ "integrity": "sha512-e3RTdJ769+PrN25iCAlxmsljEVu6iIWS7sE21zmlSiipftBQvSAOWuCDv2A8cH9lm5pSbZtwk8AUpIYCNsj2oQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.5.tgz",
+ "integrity": "sha512-NmOdl6kyAw6zMz36zCdopTgaK2tcLA53NhUsTRopBc/796Fp87XdsslRHglybQ1HyXIGOQOKv2Y14IUbeci4BA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.5.tgz",
+ "integrity": "sha512-EPXJRf0A8eOi8woXf/qgVIWRl9yeSl0oN1ykGZNCGI7oElsfxUobJFmpJFJoVqKFfd1l0c+GPmWsN2xavTFkNw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.25",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
+ "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz",
+ "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tanstack/query-core": {
+ "version": "5.90.12",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.12.tgz",
+ "integrity": "sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.90.12",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.12.tgz",
+ "integrity": "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/query-core": "5.90.12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+ "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+ "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.19.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz",
+ "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/phoenix": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.7.tgz",
+ "integrity": "sha512-oN9ive//QSBkf19rfDv45M7eZPi0eEXylht2OLEXicu5b4KoQ1OzXIw+xDSGWxSxe1JmepRR/ZH283vsu518/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.27",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
+ "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
+ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "@types/react": "^18.0.0"
+ }
+ },
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz",
+ "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/type-utils": "8.50.0",
+ "@typescript-eslint/utils": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.50.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz",
+ "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz",
+ "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.50.0",
+ "@typescript-eslint/types": "^8.50.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz",
+ "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz",
+ "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz",
+ "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0",
+ "@typescript-eslint/utils": "8.50.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz",
+ "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz",
+ "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.50.0",
+ "@typescript-eslint/tsconfig-utils": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "debug": "^4.3.4",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz",
+ "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz",
+ "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz",
+ "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rolldown/pluginutils": "1.0.0-beta.27",
+ "@swc/core": "^1.12.11"
+ },
+ "peerDependencies": {
+ "vite": "^4 || ^5 || ^6 || ^7"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "license": "MIT"
+ },
+ "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/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
+ "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.23",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz",
+ "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.1",
+ "caniuse-lite": "^1.0.30001760",
+ "fraction.js": "^5.3.4",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.9.9",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.9.tgz",
+ "integrity": "sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001760",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
+ "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "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/cmdk": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz",
+ "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "^1.1.1",
+ "@radix-ui/react-dialog": "^1.1.6",
+ "@radix-ui/react-id": "^1.1.0",
+ "@radix-ui/react-primitive": "^2.0.2"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^18 || ^19 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-fetch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+ "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+ "license": "MIT",
+ "dependencies": {
+ "node-fetch": "^2.6.12"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "license": "MIT"
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "license": "Apache-2.0"
+ },
+ "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-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.267",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
+ "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/embla-carousel": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
+ "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/embla-carousel-react": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz",
+ "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==",
+ "license": "MIT",
+ "dependencies": {
+ "embla-carousel": "8.6.0",
+ "embla-carousel-reactive-utils": "8.6.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/embla-carousel-reactive-utils": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz",
+ "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "embla-carousel": "8.6.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "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/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
+ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.1",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.39.2",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.26",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz",
+ "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=8.40"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-equals": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz",
+ "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fraction.js": {
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
+ "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "12.23.26",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.26.tgz",
+ "integrity": "sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.23.23",
+ "motion-utils": "^12.23.6",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "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/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "license": "MIT",
+ "dependencies": {
+ "void-elements": "3.1.0"
+ }
+ },
+ "node_modules/i18next": {
+ "version": "25.7.3",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.7.3.tgz",
+ "integrity": "sha512-2XaT+HpYGuc2uTExq9TVRhLsso+Dxym6PWaKpn36wfBmTI779OQ7iP/XaZHzrnGyzU4SHpFrTYLKfVyBfAhVNA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.28.4"
+ },
+ "peerDependencies": {
+ "typescript": "^5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/i18next-browser-languagedetector": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.0.tgz",
+ "integrity": "sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.2"
+ }
+ },
+ "node_modules/i18next-http-backend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-3.0.2.tgz",
+ "integrity": "sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-fetch": "4.0.0"
+ }
+ },
+ "node_modules/iceberg-js": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz",
+ "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/input-otp": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz",
+ "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lovable-tagger": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.1.13.tgz",
+ "integrity": "sha512-RBEYDxao7Xf8ya29L0cd+ocE7Gs80xPOIOwwck65Hoie8YDKViuXi3UYV14DoNWIvaJ7WVPf7SG3cc844nFqGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "tailwindcss": "^3.4.17"
+ },
+ "peerDependencies": {
+ "vite": ">=5.0.0 <8.0.0"
+ }
+ },
+ "node_modules/lucide-react": {
+ "version": "0.462.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz",
+ "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "12.23.23",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz",
+ "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.23.6"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.23.6",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz",
+ "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==",
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "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/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/next-themes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "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/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/pdf-parse": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz",
+ "integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@napi-rs/canvas": "0.1.80",
+ "pdfjs-dist": "5.4.296"
+ },
+ "bin": {
+ "pdf-parse": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": ">=20.16.0 <21 || >=22.3.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/mehmet-kozan"
+ }
+ },
+ "node_modules/pdf-parse/node_modules/pdfjs-dist": {
+ "version": "5.4.296",
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz",
+ "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=20.16.0 || >=22.3.0"
+ },
+ "optionalDependencies": {
+ "@napi-rs/canvas": "^0.1.80"
+ }
+ },
+ "node_modules/pdfjs-dist": {
+ "version": "5.4.530",
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.530.tgz",
+ "integrity": "sha512-r1hWsSIGGmyYUAHR26zSXkxYWLXLMd6AwqcaFYG9YUZ0GBf5GvcjJSeo512tabM4GYFhxhl5pMCmPr7Q72Rq2Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=20.16.0 || >=22.3.0"
+ },
+ "optionalDependencies": {
+ "@napi-rs/canvas": "^0.1.84"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.88.tgz",
+ "integrity": "sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "workspaces": [
+ "e2e/*"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "optionalDependencies": {
+ "@napi-rs/canvas-android-arm64": "0.1.88",
+ "@napi-rs/canvas-darwin-arm64": "0.1.88",
+ "@napi-rs/canvas-darwin-x64": "0.1.88",
+ "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.88",
+ "@napi-rs/canvas-linux-arm64-gnu": "0.1.88",
+ "@napi-rs/canvas-linux-arm64-musl": "0.1.88",
+ "@napi-rs/canvas-linux-riscv64-gnu": "0.1.88",
+ "@napi-rs/canvas-linux-x64-gnu": "0.1.88",
+ "@napi-rs/canvas-linux-x64-musl": "0.1.88",
+ "@napi-rs/canvas-win32-arm64-msvc": "0.1.88",
+ "@napi-rs/canvas-win32-x64-msvc": "0.1.88"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-android-arm64": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.88.tgz",
+ "integrity": "sha512-KEaClPnZuVxJ8smUWjV1wWFkByBO/D+vy4lN+Dm5DFH514oqwukxKGeck9xcKJhaWJGjfruGmYGiwRe//+/zQQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-darwin-arm64": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.88.tgz",
+ "integrity": "sha512-Xgywz0dDxOKSgx3eZnK85WgGMmGrQEW7ZLA/E7raZdlEE+xXCozobgqz2ZvYigpB6DJFYkqnwHjqCOTSDGlFdg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-darwin-x64": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.88.tgz",
+ "integrity": "sha512-Yz4wSCIQOUgNucgk+8NFtQxQxZV5NO8VKRl9ePKE6XoNyNVC8JDqtvhh3b3TPqKK8W5p2EQpAr1rjjm0mfBxdg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.88.tgz",
+ "integrity": "sha512-9gQM2SlTo76hYhxHi2XxWTAqpTOb+JtxMPEIr+H5nAhHhyEtNmTSDRtz93SP7mGd2G3Ojf2oF5tP9OdgtgXyKg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm64-gnu": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.88.tgz",
+ "integrity": "sha512-7qgaOBMXuVRk9Fzztzr3BchQKXDxGbY+nwsovD3I/Sx81e+sX0ReEDYHTItNb0Je4NHbAl7D0MKyd4SvUc04sg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm64-musl": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.88.tgz",
+ "integrity": "sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.88.tgz",
+ "integrity": "sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-x64-gnu": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.88.tgz",
+ "integrity": "sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-x64-musl": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.88.tgz",
+ "integrity": "sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-win32-x64-msvc": {
+ "version": "0.1.88",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.88.tgz",
+ "integrity": "sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ }
+ },
+ "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": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "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",
+ "peer": true,
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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": "MIT"
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-day-picker": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
+ "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
+ "license": "MIT",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/sponsors/gpbl"
+ },
+ "peerDependencies": {
+ "date-fns": "^2.28.0 || ^3.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.68.0",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz",
+ "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/react-i18next": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.0.tgz",
+ "integrity": "sha512-IMpPTyCTKxEj8klCrLKUTIUa8uYTd851+jcu2fJuUB9Agkk9Qq8asw4omyeHVnOXHrLgQJGTm5zTvn8HpaPiqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.27.6",
+ "html-parse-stringify": "^3.0.1",
+ "use-sync-external-store": "^1.6.0"
+ },
+ "peerDependencies": {
+ "i18next": ">= 25.6.2",
+ "react": ">= 16.8.0",
+ "typescript": "^5"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz",
+ "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.7",
+ "react-style-singleton": "^2.2.3",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.3",
+ "use-sidecar": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+ "license": "MIT",
+ "dependencies": {
+ "react-style-singleton": "^2.2.2",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-resizable-panels": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz",
+ "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.30.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.2.tgz",
+ "integrity": "sha512-H2Bm38Zu1bm8KUE5NVWRMzuIyAV8p/JrOaBJAwVmp37AXG72+CZJlEBw6pdn9i5TBgLMhNDgijS4ZlblpHyWTA==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.23.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.30.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.2.tgz",
+ "integrity": "sha512-l2OwHn3UUnEVUqc6/1VMmR1cvZryZ3j3NzapC2eUXO1dB0sYp5mvwdjiXhpUbRb21eFow3qSxpP8Yv6oAU824Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.23.1",
+ "react-router": "6.30.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz",
+ "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/recharts": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz",
+ "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.4",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "license": "MIT",
+ "dependencies": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.53.5",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz",
+ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.53.5",
+ "@rollup/rollup-android-arm64": "4.53.5",
+ "@rollup/rollup-darwin-arm64": "4.53.5",
+ "@rollup/rollup-darwin-x64": "4.53.5",
+ "@rollup/rollup-freebsd-arm64": "4.53.5",
+ "@rollup/rollup-freebsd-x64": "4.53.5",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.5",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.5",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.5",
+ "@rollup/rollup-linux-arm64-musl": "4.53.5",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.5",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.5",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.5",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.5",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.5",
+ "@rollup/rollup-linux-x64-gnu": "4.53.5",
+ "@rollup/rollup-linux-x64-musl": "4.53.5",
+ "@rollup/rollup-openharmony-arm64": "4.53.5",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.5",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.5",
+ "@rollup/rollup-win32-x64-gnu": "4.53.5",
+ "@rollup/rollup-win32-x64-msvc": "4.53.5",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "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": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sonner": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz",
+ "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "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/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
+ "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.19",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
+ "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.7",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/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/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "license": "MIT"
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "license": "Apache-2.0"
+ },
+ "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"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.0.tgz",
+ "integrity": "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.50.0",
+ "@typescript-eslint/parser": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0",
+ "@typescript-eslint/utils": "8.50.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+ "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/vaul": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz",
+ "integrity": "sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.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",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "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"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..07f5242
--- /dev/null
+++ b/package.json
@@ -0,0 +1,91 @@
+{
+ "name": "vite_react_shadcn_ts",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "build:dev": "vite build --mode development",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@hookform/resolvers": "^3.10.0",
+ "@radix-ui/react-accordion": "^1.2.11",
+ "@radix-ui/react-alert-dialog": "^1.1.14",
+ "@radix-ui/react-aspect-ratio": "^1.1.7",
+ "@radix-ui/react-avatar": "^1.1.10",
+ "@radix-ui/react-checkbox": "^1.3.2",
+ "@radix-ui/react-collapsible": "^1.1.11",
+ "@radix-ui/react-context-menu": "^2.2.15",
+ "@radix-ui/react-dialog": "^1.1.14",
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
+ "@radix-ui/react-hover-card": "^1.1.14",
+ "@radix-ui/react-label": "^2.1.7",
+ "@radix-ui/react-menubar": "^1.1.15",
+ "@radix-ui/react-navigation-menu": "^1.2.13",
+ "@radix-ui/react-popover": "^1.1.14",
+ "@radix-ui/react-progress": "^1.1.7",
+ "@radix-ui/react-radio-group": "^1.3.7",
+ "@radix-ui/react-scroll-area": "^1.2.9",
+ "@radix-ui/react-select": "^2.2.5",
+ "@radix-ui/react-separator": "^1.1.7",
+ "@radix-ui/react-slider": "^1.3.5",
+ "@radix-ui/react-slot": "^1.2.3",
+ "@radix-ui/react-switch": "^1.2.5",
+ "@radix-ui/react-tabs": "^1.1.12",
+ "@radix-ui/react-toast": "^1.2.14",
+ "@radix-ui/react-toggle": "^1.1.9",
+ "@radix-ui/react-toggle-group": "^1.1.10",
+ "@radix-ui/react-tooltip": "^1.2.7",
+ "@supabase/supabase-js": "^2.88.0",
+ "@tanstack/react-query": "^5.83.0",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.1.1",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.6.0",
+ "framer-motion": "^12.23.26",
+ "i18next": "^25.7.3",
+ "i18next-browser-languagedetector": "^8.2.0",
+ "i18next-http-backend": "^3.0.2",
+ "input-otp": "^1.4.2",
+ "lucide-react": "^0.462.0",
+ "next-themes": "^0.3.0",
+ "react": "^18.3.1",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.61.1",
+ "react-i18next": "^16.5.0",
+ "react-resizable-panels": "^2.1.9",
+ "react-router-dom": "^6.30.1",
+ "recharts": "^2.15.4",
+ "sonner": "^1.7.4",
+ "tailwind-merge": "^2.6.0",
+ "tailwindcss-animate": "^1.0.7",
+ "vaul": "^0.9.9",
+ "zod": "^3.25.76"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.32.0",
+ "@tailwindcss/typography": "^0.5.16",
+ "@types/node": "^22.16.5",
+ "@types/react": "^18.3.23",
+ "@types/react-dom": "^18.3.7",
+ "@vitejs/plugin-react-swc": "^3.11.0",
+ "autoprefixer": "^10.4.21",
+ "eslint": "^9.32.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.20",
+ "globals": "^15.15.0",
+ "lovable-tagger": "^1.1.13",
+ "pdf-parse": "^2.4.5",
+ "pdfjs-dist": "^5.4.530",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^3.4.17",
+ "typescript": "^5.8.3",
+ "typescript-eslint": "^8.38.0",
+ "vite": "^5.4.19"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..2aa7205
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/public/335961_DL_ZahnPRIVAT_VKB_05_2024.txt b/public/335961_DL_ZahnPRIVAT_VKB_05_2024.txt
new file mode 100644
index 0000000..f3659bd
--- /dev/null
+++ b/public/335961_DL_ZahnPRIVAT_VKB_05_2024.txt
@@ -0,0 +1,24 @@
+
+
+--- Page 1 ---
+Erste Zahnspange oder neues Smartphone? Wir sagen: beides. Dank ZahnPRIVAT müssen Sie sich nicht entscheiden. Kiefer- orthopädie inklusive
+
+
+--- Page 2 ---
+Unbegrenzte Zahnprophylaxe inkl. professioneller Zahnreinigung und 200 Euro für Bleaching innerhalb von zwei Kalender- jahren für gepflegte Zähne Zahnbehandlungen wie hochwertige Füllungen, Parodontose- und Wurzelbe- handlungen Hochwertiger Zahnersatz beispielsweise Implantate, Kronen und Brücken Bis 5.000 Euro für Kieferorthopädie für Kinder, Jugendliche und Erwachsene Ohne Wartezeit Diese starken Leistungen sind in unserem Tarif ZahnPRIVAT 100 enthalten. Î î í O Ì Mit ZahnPRIVAT schenken Sie Ihrem Lächeln die beste Vorsorge. Verlassen Sie sich auf starke Leistungen. Weil Ihre Zähne das Beste verdienen. Schöne und gesunde Zähnen sollten kein Luxusgut sein, sondern eine Selbstverständlichkeit, die sich jeder leisten kann. Unser Expertentipp „Zahnersatz kann schnell mehrere tausend Euro kosten. Gut, wenn Sie privat vorsorgen, zum Beispiel mit dem Tarif ZahnPRIVAT 100. So erhalten Sie eine umfassende Zahnersatz- versorgung für ein entspanntes Lachen.“ Alexander Heise, Zahnarzt in Münster
+
+
+--- Page 3 ---
+Basisschutz für Preis- bewusste Spitzen- leistungen zum Bestpreis Der 100- Prozent- Sorglos-Tarif 75 % 90 % 100 % 75 % 75 % 75 % — — 90 % 90 % 90 % 100 % 100 % 100 % Zahnbehandlung inkl. Parodontose- Wurzelbehandlung Hochwertiger Zahnersatz Angst- und Schmerzausschaltung Zahnprophylaxe inkl. professioneller Zahnreinigung Zahnaufhellung (Bleaching) Kieferorthopädie für Erwachsene wenn die GKV leistet oder aufgrund eines Unfalls Kieferorthopädie für Kinder und Jugendliche Gesunde Zähne Strahlendes Lächeln Perfekter Biss 75 % bis zu 100 € pro Jahr 90 % bis zu 180 € in zwei Jahren 100 % bis zu 200 € in zwei Jahren 100 % bis zu 5.000 € 100 % bis zu 5.000 € 90 % bis zu 5.000 € 90 % bis zu 5.000 € ZahnPRIVAT 75 ZahnPRIVAT 90 ZahnPRIVAT 100 bis zu 5.000 € Für jeden Bedarf den passenden Tarif. Bester Schutz vor hohen Zuzahlungen dank unserer drei attraktiven Tarifoptionen.
+
+
+--- Page 4 ---
+∑ 100-Prozent-Sorglos-Schutz für Ihre Zähne mit unserem Tarif ZahnPRIVAT 100. Wir beraten Sie gerne schnell und unkompliziert – egal ob persönlich oder digital. Über 160.000 Kinder lächeln mit den von uns bezahlten Zahnspangen. Bringen wir auch Ihr Kind zum Strahlen. Geben Sie Ihrem unbeschwerten Lächeln einen verlässlichen Schutz. Bereit, sich abzusichern? Entscheiden Sie sich für Ihre beste Zahngesundheit und für unsere ZahnPRIVAT-Tarife. Sie haben die Wahl. Worauf warten Sie?
+
+
+--- Page 5 ---
+Kieferorthopädie bei schwerer Fehlstellung: Wir übernehmen die Behandlungskosten Ihres Kindes. Erstattung ZahnPRIVAT 100 4.500 Euro Ihr Eigenanteil 0 Euro Leistung der gesetzlichen Krankenkasse 3.500 Euro Rechnungs- betrag 8.000 Euro Wir haben für Sie durchgerechnet. Unsere beiden Beispiele zeigen, dass ZahnPRIVAT 100 sämtliche erstattungsfähigen Kosten übernimmt, ab- züglich der Leistungen, die bereits von der gesetzlichen Krankenversicherung (GKV) übernommen werden. Zahnimplantat: Wir unterstützen Sie bei einem strahlenden Lächeln. Unser Topseller ZahnPRIVAT 100 sichert Sie rundum ab. Rechnungsbetrag: 3.700 Euro Leistung der gesetzlichen Krankenkasse: 500 Euro Eigenanteil ohne Zusatzversicherung 3.200 Euro Eigenanteil mit ZahnPRIVAT 100: 0 Euro
+
+
+--- Page 6 ---
+Schutz unter dem blauen Schirm. Einfach immer erreichbar: p Wir sind nah, verlässlich, regional und Marktführer in Bayern und der Pfalz sowie eine der führenden Versicherungen in ganz Deutschland. p Wir stehen für Sicherheit unter dem blauen Schirm und sind mit unseren über 4.000 Beratungsstellen mehr als ein Stück Heimat. p Wir sind der verlässliche Partner für die Menschen in der Region – und das schon seit 1811. p Wir schützen erstklassig. Für unsere Produkte, Services und unsere Kundenorientierung erhalten wir Bestnoten. Mehr unter: www.vkb.de/ratings Schadenhotline vkb.de service@vkb.de +49 800 6236-6236 Versicherungskammer Bayern Maximilianstraße 53 · 80530 München Tarifauszüge; Grundlage für den Versicherungsschutz sind die Allgemeinen Versicherungsbedingungen und die Tarife. 335961; 05/2 4
diff --git a/public/Agentur Mizera & Partner Krankenkasse 4.jpg b/public/Agentur Mizera & Partner Krankenkasse 4.jpg
new file mode 100644
index 0000000..aa1bd27
Binary files /dev/null and b/public/Agentur Mizera & Partner Krankenkasse 4.jpg differ
diff --git a/public/Agentur Mizera & Partner logo.gif b/public/Agentur Mizera & Partner logo.gif
new file mode 100644
index 0000000..186c96c
Binary files /dev/null and b/public/Agentur Mizera & Partner logo.gif differ
diff --git a/public/Agentur Mizera & Partner logo_2016.png b/public/Agentur Mizera & Partner logo_2016.png
new file mode 100644
index 0000000..f59e5dd
Binary files /dev/null and b/public/Agentur Mizera & Partner logo_2016.png differ
diff --git a/public/Finanzen/Fotolia_2994515_XS.jpg b/public/Finanzen/Fotolia_2994515_XS.jpg
new file mode 100644
index 0000000..113eaa4
Binary files /dev/null and b/public/Finanzen/Fotolia_2994515_XS.jpg differ
diff --git a/public/Finanzen/Fotolia_3486018_XS.jpg b/public/Finanzen/Fotolia_3486018_XS.jpg
new file mode 100644
index 0000000..b2a0d29
Binary files /dev/null and b/public/Finanzen/Fotolia_3486018_XS.jpg differ
diff --git a/public/Finanzen/Fotolia_4089169_XS.jpg b/public/Finanzen/Fotolia_4089169_XS.jpg
new file mode 100644
index 0000000..2d1f937
Binary files /dev/null and b/public/Finanzen/Fotolia_4089169_XS.jpg differ
diff --git a/public/Finanzen/Fotolia_53885695_XS.jpg b/public/Finanzen/Fotolia_53885695_XS.jpg
new file mode 100644
index 0000000..268cc06
Binary files /dev/null and b/public/Finanzen/Fotolia_53885695_XS.jpg differ
diff --git a/public/Finanzen/Fotolia_60240828_S.jpg b/public/Finanzen/Fotolia_60240828_S.jpg
new file mode 100644
index 0000000..d6eb6fd
Binary files /dev/null and b/public/Finanzen/Fotolia_60240828_S.jpg differ
diff --git a/public/Finanzen/iStock-611185590.jpg b/public/Finanzen/iStock-611185590.jpg
new file mode 100644
index 0000000..d211de4
Binary files /dev/null and b/public/Finanzen/iStock-611185590.jpg differ
diff --git a/public/Finanzen/iStock-899471458.jpg b/public/Finanzen/iStock-899471458.jpg
new file mode 100644
index 0000000..cd5cb9d
Binary files /dev/null and b/public/Finanzen/iStock-899471458.jpg differ
diff --git a/public/Finanzen/iStock-917884956.jpg b/public/Finanzen/iStock-917884956.jpg
new file mode 100644
index 0000000..83dc164
Binary files /dev/null and b/public/Finanzen/iStock-917884956.jpg differ
diff --git a/public/Finanzen/iStock-975006448.jpg b/public/Finanzen/iStock-975006448.jpg
new file mode 100644
index 0000000..c0d29f1
Binary files /dev/null and b/public/Finanzen/iStock-975006448.jpg differ
diff --git a/public/Fotolia_11700075_XS.jpg b/public/Fotolia_11700075_XS.jpg
new file mode 100644
index 0000000..fbdc366
Binary files /dev/null and b/public/Fotolia_11700075_XS.jpg differ
diff --git a/public/Fotolia_1171371_XS.jpg b/public/Fotolia_1171371_XS.jpg
new file mode 100644
index 0000000..55ad0ae
Binary files /dev/null and b/public/Fotolia_1171371_XS.jpg differ
diff --git a/public/Fotolia_2046814_XS.jpg b/public/Fotolia_2046814_XS.jpg
new file mode 100644
index 0000000..fe10389
Binary files /dev/null and b/public/Fotolia_2046814_XS.jpg differ
diff --git a/public/Fotolia_2466577_XS.jpg b/public/Fotolia_2466577_XS.jpg
new file mode 100644
index 0000000..6732834
Binary files /dev/null and b/public/Fotolia_2466577_XS.jpg differ
diff --git a/public/Fotolia_2994515_XS.jpg b/public/Fotolia_2994515_XS.jpg
new file mode 100644
index 0000000..113eaa4
Binary files /dev/null and b/public/Fotolia_2994515_XS.jpg differ
diff --git a/public/Fotolia_3157943_XS.jpg b/public/Fotolia_3157943_XS.jpg
new file mode 100644
index 0000000..99fe61c
Binary files /dev/null and b/public/Fotolia_3157943_XS.jpg differ
diff --git a/public/Fotolia_3984526_XS.jpg b/public/Fotolia_3984526_XS.jpg
new file mode 100644
index 0000000..97a6527
Binary files /dev/null and b/public/Fotolia_3984526_XS.jpg differ
diff --git a/public/Fotolia_53885695_XS.jpg b/public/Fotolia_53885695_XS.jpg
new file mode 100644
index 0000000..268cc06
Binary files /dev/null and b/public/Fotolia_53885695_XS.jpg differ
diff --git a/public/Fotolia_59162559_S.jpg b/public/Fotolia_59162559_S.jpg
new file mode 100644
index 0000000..6bec7f6
Binary files /dev/null and b/public/Fotolia_59162559_S.jpg differ
diff --git a/public/Fotolia_67327775_XS.jpg b/public/Fotolia_67327775_XS.jpg
new file mode 100644
index 0000000..551d730
Binary files /dev/null and b/public/Fotolia_67327775_XS.jpg differ
diff --git a/public/Fotolia_7809059_XS.jpg b/public/Fotolia_7809059_XS.jpg
new file mode 100644
index 0000000..0ddbbde
Binary files /dev/null and b/public/Fotolia_7809059_XS.jpg differ
diff --git a/public/Fotolia_8206293_XS.jpg b/public/Fotolia_8206293_XS.jpg
new file mode 100644
index 0000000..fa83ee3
Binary files /dev/null and b/public/Fotolia_8206293_XS.jpg differ
diff --git a/public/Fotolia_8218560_XS.jpg b/public/Fotolia_8218560_XS.jpg
new file mode 100644
index 0000000..7b6c62e
Binary files /dev/null and b/public/Fotolia_8218560_XS.jpg differ
diff --git a/public/Fotolia_8654128_XS.jpg b/public/Fotolia_8654128_XS.jpg
new file mode 100644
index 0000000..ac505f4
Binary files /dev/null and b/public/Fotolia_8654128_XS.jpg differ
diff --git a/public/Kunden Fotos/Buczynska_ Kinga__Gapcio.jpeg b/public/Kunden Fotos/Buczynska_ Kinga__Gapcio.jpeg
new file mode 100644
index 0000000..5886137
Binary files /dev/null and b/public/Kunden Fotos/Buczynska_ Kinga__Gapcio.jpeg differ
diff --git a/public/Logos/Berufsbildungswerk der Deutschen V.png b/public/Logos/Berufsbildungswerk der Deutschen V.png
new file mode 100644
index 0000000..e8945cc
Binary files /dev/null and b/public/Logos/Berufsbildungswerk der Deutschen V.png differ
diff --git a/public/Logos/DVA Deutsche Versicherungsakademie.png b/public/Logos/DVA Deutsche Versicherungsakademie.png
new file mode 100644
index 0000000..a2949b3
Binary files /dev/null and b/public/Logos/DVA Deutsche Versicherungsakademie.png differ
diff --git a/public/Logos/gut beraten.jpg b/public/Logos/gut beraten.jpg
new file mode 100644
index 0000000..c5c8788
Binary files /dev/null and b/public/Logos/gut beraten.jpg differ
diff --git a/public/PDF/335961_DL_ZahnPRIVAT_VKB_05_2024.pdf b/public/PDF/335961_DL_ZahnPRIVAT_VKB_05_2024.pdf
new file mode 100644
index 0000000..81c3d71
Binary files /dev/null and b/public/PDF/335961_DL_ZahnPRIVAT_VKB_05_2024.pdf differ
diff --git a/public/Tiere/DSC_2047.JPG b/public/Tiere/DSC_2047.JPG
new file mode 100644
index 0000000..8cf205f
Binary files /dev/null and b/public/Tiere/DSC_2047.JPG differ
diff --git a/public/Tiere/DSC_4029.JPG b/public/Tiere/DSC_4029.JPG
new file mode 100644
index 0000000..6eb7ccc
Binary files /dev/null and b/public/Tiere/DSC_4029.JPG differ
diff --git a/public/Tiere/misiek.jpeg b/public/Tiere/misiek.jpeg
new file mode 100644
index 0000000..384ba90
Binary files /dev/null and b/public/Tiere/misiek.jpeg differ
diff --git a/public/Visitenkarte Agentur Mizera _h.jpg b/public/Visitenkarte Agentur Mizera _h.jpg
new file mode 100644
index 0000000..ce42632
Binary files /dev/null and b/public/Visitenkarte Agentur Mizera _h.jpg differ
diff --git a/public/Visitenkarte Agentur Mizera _v.jpg b/public/Visitenkarte Agentur Mizera _v.jpg
new file mode 100644
index 0000000..7ec9e68
Binary files /dev/null and b/public/Visitenkarte Agentur Mizera _v.jpg differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..3c01d69
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/head_brennen.jpg b/public/head_brennen.jpg
new file mode 100644
index 0000000..e29782e
Binary files /dev/null and b/public/head_brennen.jpg differ
diff --git a/public/head_kfz_gewerblich.jpg b/public/head_kfz_gewerblich.jpg
new file mode 100644
index 0000000..402a879
Binary files /dev/null and b/public/head_kfz_gewerblich.jpg differ
diff --git a/public/head_kontakt_agentur_mizera.jpg b/public/head_kontakt_agentur_mizera.jpg
new file mode 100644
index 0000000..1aca4e7
Binary files /dev/null and b/public/head_kontakt_agentur_mizera.jpg differ
diff --git a/public/head_motorradversicherung.jpg b/public/head_motorradversicherung.jpg
new file mode 100644
index 0000000..86abcab
Binary files /dev/null and b/public/head_motorradversicherung.jpg differ
diff --git a/public/head_quadversicherung.jpg b/public/head_quadversicherung.jpg
new file mode 100644
index 0000000..673d63a
Binary files /dev/null and b/public/head_quadversicherung.jpg differ
diff --git a/public/iStock-1067720324.jpg b/public/iStock-1067720324.jpg
new file mode 100644
index 0000000..c06258d
Binary files /dev/null and b/public/iStock-1067720324.jpg differ
diff --git a/public/iStock-1094816100.jpg b/public/iStock-1094816100.jpg
new file mode 100644
index 0000000..59ead03
Binary files /dev/null and b/public/iStock-1094816100.jpg differ
diff --git a/public/iStock-115948634.jpg b/public/iStock-115948634.jpg
new file mode 100644
index 0000000..914c5b4
Binary files /dev/null and b/public/iStock-115948634.jpg differ
diff --git a/public/iStock-482694353.jpg b/public/iStock-482694353.jpg
new file mode 100644
index 0000000..63d10c2
Binary files /dev/null and b/public/iStock-482694353.jpg differ
diff --git a/public/iStock-495809266.jpg b/public/iStock-495809266.jpg
new file mode 100644
index 0000000..eb3d746
Binary files /dev/null and b/public/iStock-495809266.jpg differ
diff --git a/public/iStock-523830845.jpg b/public/iStock-523830845.jpg
new file mode 100644
index 0000000..ebb2928
Binary files /dev/null and b/public/iStock-523830845.jpg differ
diff --git a/public/iStock-637230106.jpg b/public/iStock-637230106.jpg
new file mode 100644
index 0000000..4b84b23
Binary files /dev/null and b/public/iStock-637230106.jpg differ
diff --git a/public/iStock-638637534.jpg b/public/iStock-638637534.jpg
new file mode 100644
index 0000000..70840be
Binary files /dev/null and b/public/iStock-638637534.jpg differ
diff --git a/public/iStock-819100588.jpg b/public/iStock-819100588.jpg
new file mode 100644
index 0000000..be1af01
Binary files /dev/null and b/public/iStock-819100588.jpg differ
diff --git a/public/iStock-829786854.jpg b/public/iStock-829786854.jpg
new file mode 100644
index 0000000..a209d78
Binary files /dev/null and b/public/iStock-829786854.jpg differ
diff --git a/public/iStock-928087944.jpg b/public/iStock-928087944.jpg
new file mode 100644
index 0000000..829afbc
Binary files /dev/null and b/public/iStock-928087944.jpg differ
diff --git a/public/iStock-939772870.jpg b/public/iStock-939772870.jpg
new file mode 100644
index 0000000..68bf1dd
Binary files /dev/null and b/public/iStock-939772870.jpg differ
diff --git a/public/iStock-943842590.jpg b/public/iStock-943842590.jpg
new file mode 100644
index 0000000..773b3d8
Binary files /dev/null and b/public/iStock-943842590.jpg differ
diff --git a/public/iStock-948602744.jpg b/public/iStock-948602744.jpg
new file mode 100644
index 0000000..45e8914
Binary files /dev/null and b/public/iStock-948602744.jpg differ
diff --git a/public/iStock-954356678.jpg b/public/iStock-954356678.jpg
new file mode 100644
index 0000000..9b8d2e3
Binary files /dev/null and b/public/iStock-954356678.jpg differ
diff --git a/public/iStock-956005062.jpg b/public/iStock-956005062.jpg
new file mode 100644
index 0000000..32c6f20
Binary files /dev/null and b/public/iStock-956005062.jpg differ
diff --git a/public/iStock-957363908.jpg b/public/iStock-957363908.jpg
new file mode 100644
index 0000000..fe38009
Binary files /dev/null and b/public/iStock-957363908.jpg differ
diff --git a/public/iStock-970876204.jpg b/public/iStock-970876204.jpg
new file mode 100644
index 0000000..66a1634
Binary files /dev/null and b/public/iStock-970876204.jpg differ
diff --git a/public/ladymobil.jpg b/public/ladymobil.jpg
new file mode 100644
index 0000000..a9e653f
Binary files /dev/null and b/public/ladymobil.jpg differ
diff --git a/public/locales/de/agentur.json b/public/locales/de/agentur.json
new file mode 100644
index 0000000..bd79a5c
--- /dev/null
+++ b/public/locales/de/agentur.json
@@ -0,0 +1,70 @@
+{
+ "hero": {
+ "kicker": "Über unsere Agentur",
+ "title": "Agentur Mizera & Partner.",
+ "subtitle": "Unabhängig, transparent und persönlich – seit 1994 an Ihrer Seite.",
+ "primaryCta": "Jetzt beraten lassen",
+ "secondaryCta": "Jetzt berechnen"
+ },
+ "intro": {
+ "title": "Über unsere Agentur",
+ "subtitle": "Unabhängig, transparent und persönlich – seit 1994"
+ },
+ "sections": [
+ {
+ "title": "Unsere Philosophie",
+ "description": "Unabhängig, transparent und persönlich – seit 1994 an Ihrer Seite",
+ "features": [
+ "Unabhängigkeit von Versicherungsunternehmen",
+ "Transparente und verständliche Beratung",
+ "Maßgeschneiderte Lösungen für Privat- und Geschäftskunden",
+ "Langfristige Kundenbeziehungen"
+ ]
+ },
+ {
+ "title": "Unsere Werte",
+ "description": "Was uns in der Beratung wichtig ist",
+ "features": [
+ "Persönliche Betreuung vor Ort",
+ "Regelmäßige Weiterbildung",
+ "Fairer Preis-Leistungsanspruch",
+ "Qualität und Verlässlichkeit"
+ ]
+ },
+ {
+ "title": "Unser Team",
+ "description": "Erfahrung und Fachwissen – direkt für Sie erreichbar",
+ "features": [
+ "Marian Adam – Geschäftsführer",
+ "Versicherungsfachmann (BWV)",
+ "Seit 1994 im Versicherungswesen",
+ "Spezialisierung: Betriebliche Altersversorgung (DVA)"
+ ]
+ },
+ {
+ "title": "Unsere Arbeitsweise",
+ "description": "Strukturiert, unabhängig und mit Blick auf das Wesentliche",
+ "features": [
+ "Vergleich von über 50 Versicherungsgesellschaften",
+ "Individuelle Risikoanalyse",
+ "Regelmäßige Vertragsüberprüfung",
+ "Unterstützung im Schadensfall"
+ ]
+ }
+ ],
+ "achievementsTitle": "Unsere Erfolge in Zahlen",
+ "achievements": [
+ "Über 25 Jahre Erfahrung",
+ "Mehr als 1.000 zufriedene Kunden",
+ "50+ Versicherungspartner",
+ "Zertifizierte Fachexperten",
+ "Unabhängige Beratung",
+ "Persönliche Betreuung"
+ ],
+ "contact": {
+ "title": "Lernen Sie uns kennen",
+ "subtitle": "Wir freuen uns darauf, Sie persönlich kennenzulernen und Ihnen unsere Agentur vorzustellen.",
+ "primaryCta": "Beratung vereinbaren",
+ "secondaryCta": "Kontakt aufnehmen"
+ }
+}
diff --git a/public/locales/de/autoversicherung.json b/public/locales/de/autoversicherung.json
new file mode 100644
index 0000000..e2a7872
--- /dev/null
+++ b/public/locales/de/autoversicherung.json
@@ -0,0 +1,75 @@
+{
+ "page": {
+ "title": "Kfz-Haftpflichtversicherung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Unfallstatistik",
+ "calculator": "KFZ-Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Bußgeldkatalog"
+ },
+ "hero": {
+ "badge": "Sicher unterwegs – rechtlich abgesichert",
+ "title": "Kfz-Haftpflichtversicherung",
+ "subtitle": "gesetzlicher Basisschutz für alle Fahrzeuge",
+ "description": "Die Kfz-Haftpflicht ist Pflicht. Sie schützt dich vor hohen Kosten, wenn du Dritten einen Schaden zufügst.",
+ "ctaOffer": "Angebot anfordern",
+ "ctaConsulting": "Beratung",
+ "features": {
+ "f1": { "title": "Pflichtversicherung", "desc": "ohne geht es nicht" },
+ "f2": { "title": "Schutz für Dritte", "desc": "Personen & Sachen" }
+ },
+ "imageHint": "Auto, SUV, Transporter",
+ "imageText": "Tarifcheck – schnell, fair und passend zu deinem Bedarf."
+ },
+ "overview": {
+ "quick": {
+ "title": "Kurz & klar",
+ "c1": { "title": "Gesetzlich Pflicht", "desc": "Ohne Haftpflicht keine Zulassung." },
+ "c2": { "title": "Vergleich lohnt sich", "desc": "Beiträge & Leistungen variieren stark." },
+ "c3": { "title": "Hilfe im Schadenfall", "desc": "Klare Schritte & Kontaktmöglichkeiten." }
+ },
+ "costs": {
+ "title": "Was beeinflusst die Kosten der Kfz-Haftpflichtversicherung?",
+ "c1": { "title": "Fahrzeugtyp", "desc": "Sportwagen und teure Modelle bedeuten höhere Prämien." },
+ "c2": { "title": "Fahrerprofil", "desc": "Alter, Erfahrung und Schadenfreiheitsklasse beeinflussen den Beitrag stark." },
+ "c3": { "title": "Region", "desc": "In Großstädten sind die Prämien oft höher als auf dem Land." },
+ "c4": { "title": "Fahrleistung", "desc": "Jährliche Kilometer und Zusatzleistungen beeinflussen die Kosten." },
+ "example": "Beispiel: Beiträge liegen in Deutschland meist zwischen 300 € und über 1.000 € jährlich."
+ }
+ },
+ "details": {
+ "title": "Details & Vorteile",
+ "description": "Neben der gesetzlich vorgeschriebenen Haftpflicht können zusätzliche Bausteine (z. B. Teil-/Vollkasko, Schutzbrief, Fahrerschutz) sinnvoll sein – je nach Fahrzeug und Nutzung.",
+ "benefits": {
+ "b1": {
+ "title": "Gesetzlich vorgeschrieben",
+ "desc": "Ohne Haftpflichtversicherung darf kein Fahrzeug am Straßenverkehr teilnehmen"
+ },
+ "b2": {
+ "title": "Schutz für Dritte",
+ "desc": "Deckt Personenschäden, Sachschäden und Vermögensschäden von Unfallopfern"
+ },
+ "b3": {
+ "title": "Unbegrenzte Deckung",
+ "desc": "Millionen-Höchstsummen für Personenschäden und Sachschäden"
+ },
+ "b4": {
+ "title": "Günstiger Basisschutz",
+ "desc": "Wettbewerbsfähige Beiträge für den gesetzlich vorgeschriebenen Schutz"
+ }
+ },
+ "servicesTitle": "Leistungen (Auszug)",
+ "services": {
+ "s1": "Autoversicherung Vollkasko",
+ "s2": "Autoversicherung Teilkasko",
+ "s3": "Kfz-Haftpflichtversicherung",
+ "s4": "Insassenunfallversicherung",
+ "s5": "Schutzbrief und Pannenhilfe",
+ "s6": "Autoversicherung für junge Fahrer"
+ }
+ }
+}
diff --git a/public/locales/de/car.json b/public/locales/de/car.json
new file mode 100644
index 0000000..13de31b
--- /dev/null
+++ b/public/locales/de/car.json
@@ -0,0 +1,121 @@
+{
+ "title": "KFZ-Versicherung",
+ "subtitle": "Individueller Versicherungsschutz für Ihr Fahrzeug – günstige Tarife von über 150 Versicherern im Vergleich",
+
+ "benefits": {
+ "title": "Ihre Vorteile auf einen Blick",
+ "benefit1": "Bis zu 50% sparen im Vergleich zu Ihrer aktuellen Versicherung",
+ "benefit2": "Persönliche Beratung durch erfahrene Versicherungsexperten",
+ "benefit3": "Umfassender Vergleich von mehr als 150 Versicherern",
+ "benefit4": "Schnelle und unkomplizierte Vertragsabwicklung",
+ "benefit5": "Kostenlose Beratung ohne versteckte Gebühren",
+ "benefit6": "Individuelle Anpassung an Ihre Bedürfnisse"
+ },
+
+ "quote": {
+ "title": "Kostenloses & unverbindliches Angebot anfordern",
+ "subtitle": "Füllen Sie das Formular aus und wir erstellen Ihnen ein maßgeschneidertes Angebot."
+ },
+
+ "form": {
+ "required": "Pflichtfelder",
+ "name": "Vor- und Nachname",
+ "email": "E-Mail-Adresse",
+ "phone": "Telefonnummer",
+ "brand": "Fahrzeugmarke",
+ "model": "Fahrzeugmodell",
+ "year": "Erstzulassung (TT.MM.JJJJ)",
+ "license": "Kennzeichen",
+ "coverage": "Gewünschter Versicherungsschutz",
+ "selectCoverage": "Bitte auswählen",
+ "additionalInfo": "Zusätzliche Informationen (optional)",
+ "privacy": {
+ "text": "Ich stimme der Verarbeitung meiner Daten gemäß der ",
+ "link": "Datenschutzerklärung",
+ "suffix": " zu."
+ },
+ "submit": "Jetzt unverbindliches Angebot anfordern",
+ "successMessage": "Vielen Dank für Ihre Anfrage! Wir haben Ihre Daten erhalten und werden uns innerhalb von 24 Stunden mit einem individuellen Angebot bei Ihnen melden.",
+ "errorMessage": "Leider ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal oder kontaktieren Sie uns direkt."
+ },
+
+ "coverageOptions": {
+ "liability": "Kfz-Haftpflicht",
+ "partial": "Teilkasko",
+ "full": "Vollkasko",
+ "description": {
+ "liability": "Gesetzlich vorgeschriebener Basisschutz für Schäden an Dritten",
+ "partial": "Zusätzlicher Schutz für Schäden durch Diebstahl, Feuer und Naturgewalten",
+ "full": "Umfassender Rundumschutz inkl. selbstverschuldeter Schäden"
+ }
+ },
+
+ "faqTitle": "Häufig gestellte Fragen",
+ "faq": [
+ {
+ "q": "Welche Unterlagen benötige ich für ein Angebot?",
+ "a": "Für ein unverbindliches Angebot benötigen wir lediglich einige grundlegende Angaben zu Ihrem Fahrzeug und Ihrer bisherigen Versicherung. Gerne können Sie uns auch Ihren aktuellen Versicherungsschein zusenden."
+ },
+ {
+ "q": "Kann ich meine aktuelle Versicherung wechseln?",
+ "a": "Ja, wir übernehmen gerne die Kündigung Ihrer aktuellen Versicherung zum nächstmöglichen Termin. Dabei achten wir auf etwaige Kündigungsfristen, damit Sie keine doppelten Beiträge zahlen müssen."
+ },
+ {
+ "q": "Wie schnell erhalte ich mein Angebot?",
+ "a": "In der Regel erhalten Sie innerhalb von 24 Stunden ein unverbindliches Angebot von uns. In dringenden Fällen können Sie uns auch gerne telefonisch kontaktieren."
+ },
+ {
+ "q": "Bieten Sie auch Schutzbriefe an?",
+ "a": "Ja, wir bieten verschiedene Schutzbriefe mit umfassendem Leistungsumfang an, inkl. Pannenhilfe, Mietwagen und Abschleppdienst. Gerne beraten wir Sie individuell zu den verschiedenen Optionen."
+ },
+ {
+ "q": "Kann ich meine Versicherung während der Laufzeit anpassen?",
+ "a": "Ja, eine nachträgliche Anpassung Ihres Versicherungsschutzes ist jederzeit möglich. Wir beraten Sie gerne zu den verschiedenen Möglichkeiten und den daraus resultierenden Beitragsänderungen."
+ },
+ {
+ "q": "Was passiert im Schadensfall?",
+ "a": "Im Schadensfall sind wir rund um die Uhr für Sie erreichbar. Unser Schadenservice unterstützt Sie bei der Schadensmeldung und begleitet Sie durch den gesamten Prozess bis zur Regulierung."
+ }
+ ],
+
+ "testimonials": {
+ "title": "Das sagen unsere Kunden",
+ "items": [
+ {
+ "text": "Schnelle und kompetente Beratung. Habe über 300€ im Jahr gespart!",
+ "author": "Thomas M., Düsseldorf"
+ },
+ {
+ "text": "Endlich ein Versicherungsmakler, der sich Zeit nimmt und alles verständlich erklärt.",
+ "author": "Sabine K., Mettmann"
+ },
+ {
+ "text": "Super Service! Bei Problemen wird sich sofort gekümmert. Absolute Empfehlung!",
+ "author": "Michael B., Ratingen"
+ }
+ ]
+ },
+
+ "cta": {
+ "title": "Jetzt kostenlos beraten lassen",
+ "subtitle": "Vereinbaren Sie noch heute einen unverbindlichen Beratungstermin",
+ "button": "Termin vereinbaren"
+ },
+
+ "contact": {
+ "title": "Sie haben Fragen?",
+ "subtitle": "Unser Team steht Ihnen gerne zur Verfügung",
+ "phone": "0211 / 97629355",
+ "email": "info@finanzen-mizera.de",
+ "hours": "Mo-Fr: 9:00 - 18:00 Uhr\nSa: 10:00 - 14:00 Uhr"
+ },
+
+ "experience": {
+ "title": "Über 30 Jahre Erfahrung",
+ "description": "Seit 1994 bin ich im Versicherungsbereich tätig und biete Ihnen meine langjährige Expertise für Ihre individuelle Beratung."
+ },
+
+ "legal": {
+ "notice": "Die dargestellten Leistungen sind beispielhaft und können je nach Anbieter variieren. Maßgeblich sind die jeweiligen Versicherungsbedingungen. Eine individuelle Beratung erfolgt auf Wunsch."
+ }
+}
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
new file mode 100644
index 0000000..33d19a8
--- /dev/null
+++ b/public/locales/de/common.json
@@ -0,0 +1,40 @@
+{
+ "language": "Sprache",
+ "home": "Startseite",
+ "contact": "Kontakt",
+ "privacy": "Datenschutz",
+ "links": "Links",
+ "loading": "Wird geladen...",
+ "submit": "Absenden",
+ "back": "Zurück",
+ "next": "Weiter",
+ "required": "Erforderlich",
+ "emailInvalid": "Ungültige E-Mail-Adresse",
+ "phoneInvalid": "Ungültige Telefonnummer",
+ "successMessage": "Ihre Nachricht wurde erfolgreich gesendet!",
+ "errorMessage": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.",
+ "generalNotice": {
+ "text": "Hinweis:\nDie auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens."
+ },
+ "nav": {
+ "home": "Startseite",
+ "car": "KFZ-Versicherung",
+ "privacy": "Datenschutz",
+ "links": "Links",
+ "contact": "Kontakt"
+ },
+ "buttons": {
+ "submit": "Absenden",
+ "cancel": "Abbrechen",
+ "back": "Zurück",
+ "next": "Weiter",
+ "readMore": "Mehr lesen",
+ "contactUs": "Kontaktieren Sie uns"
+ },
+ "footer": {
+ "copyright": "© {year} Alle Rechte vorbehalten",
+ "imprint": "Impressum",
+ "terms": "AGB",
+ "privacyPolicy": "Datenschutzerklärung"
+ }
+}
diff --git a/public/locales/de/contact.json b/public/locales/de/contact.json
new file mode 100644
index 0000000..8795960
--- /dev/null
+++ b/public/locales/de/contact.json
@@ -0,0 +1,221 @@
+{
+ "common": {
+ "language": "Sprache",
+ "home": "Startseite",
+ "contact": "Kontakt",
+ "privacy": "Datenschutz",
+ "links": "Links",
+ "loading": "Wird geladen...",
+ "submit": "Absenden",
+ "back": "Zurück",
+ "next": "Weiter"
+ },
+ "nav": {
+ "home": "Startseite",
+ "car": "KFZ-Versicherung",
+ "privacy": "Datenschutz",
+ "links": "Links",
+ "contact": "Kontakt"
+ },
+ "hero": {
+ "title": "Ihr vertrauenswürdiger Versicherungsmakler",
+ "subtitle": "Professionelle Beratung für alle Ihre Versicherungsbedürfnisse",
+ "cta": "Kostenlose Beratung"
+ },
+ "services": {
+ "title": "Unsere Dienstleistungen",
+ "car": {
+ "title": "KFZ-Versicherung",
+ "desc": "Umfassender Schutz für Ihr Fahrzeug zu günstigen Konditionen"
+ },
+ "life": {
+ "title": "Lebensversicherung",
+ "desc": "Absicherung für Sie und Ihre Familie"
+ },
+ "home": {
+ "title": "Hausratversicherung",
+ "desc": "Schutz für Ihr Zuhause und Eigentum"
+ },
+ "health": {
+ "title": "Krankenversicherung",
+ "desc": "Optimale Gesundheitsversorgung für Sie"
+ }
+ },
+ "trust": {
+ "title": "Warum uns vertrauen?",
+ "experience": "Jahre Erfahrung",
+ "clients": "Zufriedene Kunden",
+ "partners": "Versicherungspartner",
+ "support": "24/7 Support"
+ },
+ "pageTitle": "Eine Idee? Lass uns darüber sprechen.",
+ "tabs": {
+ "contact": "Kontakt und Adressen",
+ "card": "Visitenkarte",
+ "reasons": "10 gute Gründe",
+ "service": "Service",
+ "impressum": "Impressum",
+ "leistungen": "Leistungen",
+ "datenschutz": "Datenschutz",
+ "links": "Links",
+ "news": "Aktuelles/News",
+ "dailyInfo": "Tägliche Info",
+ "faq": "FAQ"
+ },
+ "news": {
+ "title": "Aktuelles/News",
+ "subtitle": "Klicken Sie auf einen Eintrag, um Details einzublenden.",
+ "items": [
+ {
+ "key": "news-1",
+ "title": "Hartz IV – So bleibt Ihr Vermögen geschützt!",
+ "content": "Kurzer Überblick zu Freibeträgen, Schonvermögen und typischen Stolperfallen. Für eine individuelle Einschätzung Ihrer Situation beraten wir Sie gern."
+ },
+ {
+ "key": "news-2",
+ "title": "Das Elterngeld",
+ "content": "Wichtige Grundlagen zu Anspruch, Antragstellung und Fristen. Wir helfen Ihnen, den passenden Versicherungsschutz und die finanzielle Planung rund um Familie und Beruf abzustimmen."
+ },
+ {
+ "key": "news-3",
+ "title": "Kindergeld",
+ "content": "Überblick zu Anspruch, Nachweisen und wichtigen Fristen. Bei Fragen zu Absicherung und Vorsorge für Kinder unterstützen wir Sie gern."
+ },
+ {
+ "key": "news-4",
+ "title": "Kinderzuschlag",
+ "content": "Kurz erklärt: Voraussetzungen, Antragsweg und häufige Fragen. Wir geben Orientierung, welche Unterlagen typischerweise benötigt werden."
+ },
+ {
+ "key": "news-5",
+ "title": "Gesundheitsreform – Versicherungspflicht seit 16. Juni 2008",
+ "content": "Was bedeutet die Versicherungspflicht – und welche Optionen gibt es in GKV/PKV? Wir prüfen mit Ihnen, welche Lösung zur Lebenssituation passt."
+ },
+ {
+ "key": "news-6",
+ "title": "Die Abgeltungsteuer ist da",
+ "content": "Ein kompakter Überblick zur Besteuerung von Kapitalerträgen und möglichen Auswirkungen auf Anlage- und Vorsorgestrategien. Für Details ist eine individuelle Beratung sinnvoll."
+ }
+ ]
+ },
+ "faq": {
+ "title": "FAQ",
+ "subtitle": "Klicken Sie auf ein Thema, um Details einzublenden."
+ },
+ "profile": {
+ "role": "Selbstständiger, unabhängiger Finanz- und Versicherungsmakler",
+ "qual1": "Geprüfter Versicherungsfachmann (BWV)",
+ "qual2": "Experte Betriebliche Altersversorgung (DVA)",
+ "qual2Note": "(*Deutsche Versicherungsakademie, München*)",
+ "licenseTitle": "Versicherungsmakler",
+ "licenseSuffix": "mit Erlaubnis",
+ "licenseLaw": "nach § 34d Abs. 1 GewO",
+ "since": "Versicherungen seit 1994"
+ },
+ "office": {
+ "title": "HomeOffice:",
+ "note": "(Bürotermine - nach vorheriger telefonischer Vereinbarung)"
+ },
+ "labels": {
+ "phone": "Telefon",
+ "mobile": "Mobil"
+ },
+ "appointmentNote": "Termine nach vorheriger telefonischer Vereinbarung.",
+ "qr": {
+ "title": "QR-Code"
+ },
+ "images": {
+ "profileAlt": "Marian-Adam Mizera",
+ "qrAlt": "Agentur Mizera QR-Code",
+ "businessCardFrontAlt": "Visitenkarte Vorderseite",
+ "businessCardBackAlt": "Visitenkarte Rückseite"
+ },
+ "iframes": {
+ "service": "Service",
+ "impressum": "Impressum",
+ "leistungen": "Leistungen",
+ "datenschutz": "Datenschutz",
+ "links": "Links"
+ },
+ "businessCard": {
+ "front": "Vorderseite",
+ "back": "Rückseite",
+ "subtitle": "Zum Speichern oder Drucken (beidseitig)"
+ },
+ "contact": {
+ "title": "Kontaktieren Sie uns",
+ "name": "Name",
+ "email": "E-Mail",
+ "phone": "Telefon",
+ "message": "Nachricht",
+ "send": "Nachricht senden",
+ "success": "Nachricht erfolgreich gesendet!"
+ },
+ "about": {
+ "title": "Über mich",
+ "description": "Selbstständiger, unabhängiger Finanz- und Versicherungsmakler mit über 26 Jahren Erfahrung im Versicherungswesen.",
+ "office": "Büro Düsseldorf",
+ "appointment": "(Termine nach telefonischer Vereinbarung)",
+ "address": "Rosmarinstraße 30 d, 40235 Düsseldorf"
+ },
+ "submenu": {
+ "title": "Untermenü",
+ "profile": "Profil",
+ "reasons": "10 Gründe",
+ "form": "Formular",
+ "info": "Infos",
+ "businessCard": "Visitenkarte"
+ },
+ "reasons": {
+ "title": "10 gute Gründe",
+ "items": [
+ {
+ "title": "Erfahrung",
+ "description": "Ich bin seit mehr als {{years}} Jahren auf dem Versicherungsmarkt erfolgreich - und Sie profitieren davon: mit einer umfassenden Bedarfsanalyse und optimalen persönlichen Angeboten."
+ },
+ {
+ "title": "Unabhängigkeit",
+ "description": "Ich handle ausnahmslos in Ihrem Interesse - frei von jeglichen Belangen einer bestimmten Versicherungsgesellschaft."
+ },
+ {
+ "title": "Transparenz",
+ "description": "Ich finde maßgeschneiderte Lösungen, die perfekt zu Ihren Ansprüchen passen."
+ },
+ {
+ "title": "Qualität",
+ "description": "Ich achte auf einen zeitgemäßen Deckungsumfang und ein bestmögliches Preis-Leistungs-Verhältnis."
+ },
+ {
+ "title": "Vertrauen",
+ "description": "Ich bin Ihr Partner - ein Leben lang! Gemeinsam entwickeln wir Ziele und motivieren uns, diese zu erreichen."
+ },
+ {
+ "title": "Individualität",
+ "description": "Ich analysiere Ihre Situation und erarbeite anhand Ihrer Wünsche und Erfordernisse ein Individualkonzept: transparent, unabhängig und nicht bindend!"
+ },
+ {
+ "title": "Exklusivität",
+ "description": "Ich vergleiche für Sie! Profitieren Sie bei den Sachversicherungen für Privat und Gewerbe von den Sonderdeckungskonzepten meiner Partner."
+ },
+ {
+ "title": "Vielseitigkeit",
+ "description": "Ich spreche Ihre Sprache und helfe Ihnen bei allen Fragen auch auf Polnisch weiter!"
+ },
+ {
+ "title": "Diskretion",
+ "description": "Ich arbeite schnell, unbürokratisch und absolut diskret - erst recht im Leistungsfall!"
+ },
+ {
+ "title": "Alles aus einer Hand",
+ "description": "Ich gewährleiste eine laufende Betreuung und Beratung: So kann ich unverzüglich reagieren, wenn neue Produkte auf den Markt kommen, sich Gesetze ändern oder Ihre persönliche Situation angepasst werden muss."
+ }
+ ]
+ },
+ "experience": {
+ "title": "Über {{years}} Jahre Erfahrung",
+ "description": "Ich bin seit mehr als {{years}} Jahren auf dem Versicherungsmarkt erfolgreich - und Sie profitieren davon: mit einer umfassenden Bedarfsanalyse und optimalen persönlichen Angeboten."
+ },
+ "legalNotice": {
+ "text": "Hinweis: Bei den Tipps und Informationen auf diesen Seiten handelt es sich um allgemeine, unverbindliche Hinweise zu Versicherungen. Trotz meiner beruflichen Erfahrung handelt es sich hierbei um eine private Meinungsäußerung, ohne Anspruch auf Richtigkeit, ohne Haftung und ohne Ersatz für eine Beratung. Die rechtsverbindlichen Bestimmungen entnehmen Sie bitte den Versicherungsbedingungen des jeweiligen Versicherungsunternehmens."
+ }
+}
diff --git a/public/locales/de/drittfahrerSchutz.json b/public/locales/de/drittfahrerSchutz.json
new file mode 100644
index 0000000..d5b9ed6
--- /dev/null
+++ b/public/locales/de/drittfahrerSchutz.json
@@ -0,0 +1,23 @@
+{
+ "title": "Drittfahrer-Schutz",
+ "hero": {
+ "badge": "Wenn andere dein Auto fahren",
+ "title": "Drittfahrer-Schutz",
+ "subtitle": "für Familie, Freunde & gelegentliche Fahrer",
+ "description": "Mehr Fahrer bedeuten mehr Risiko – und oft auch Einschränkungen im Vertrag. Mit dem passenden Drittfahrer-Schutz sicherst du dich fair ab.",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Unfallstatistik",
+ "calculator": "Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Bußgeldkatalog"
+ },
+ "form": {
+ "description": "Kurze Angaben reichen – wir klären die Details im Gespräch."
+ }
+}
diff --git a/public/locales/de/fairmobil.json b/public/locales/de/fairmobil.json
new file mode 100644
index 0000000..08d3965
--- /dev/null
+++ b/public/locales/de/fairmobil.json
@@ -0,0 +1,43 @@
+{
+ "hero": {
+ "kicker": "FairMobil",
+ "title": "Faire und nachhaltige Mobilität",
+ "subtitle": "Unabhängige Beratung für nachhaltige Fahrzeugversicherungen – fair für Sie und die Umwelt.",
+ "primaryCta": "Jetzt berechnen",
+ "secondaryCta": "Jetzt informieren"
+ },
+ "benefitsTitle": "Ihre Vorteile bei FairMobil",
+ "benefits": [
+ {
+ "title": "Fairer Tarif",
+ "description": "Transparente Bedingungen und faire Prämien"
+ },
+ {
+ "title": "Nachhaltig",
+ "description": "Umweltfreundliche Mobilität fördern"
+ },
+ {
+ "title": "Flexibel",
+ "description": "Anpassbare Verträge für Ihre Bedürfnisse"
+ },
+ {
+ "title": "Günstig",
+ "description": "Wettbewerbsfähige Beiträge für nachhaltige Mobilität"
+ }
+ ],
+ "servicesTitle": "Unsere FairMobil-Versicherungsleistungen",
+ "services": [
+ "E-Mobilität Versicherung",
+ "Hybrid-Fahrzeug Versicherung",
+ "Ökostrom-Tarif für E-Autos",
+ "Ladekabel-Versicherung",
+ "Batterie-Versicherung",
+ "Grüne Versicherungslösungen"
+ ],
+ "contact": {
+ "title": "FairMobil beraten lassen",
+ "subtitle": "Lassen Sie sich unverbindlich zur besten nachhaltigen Fahrzeugversicherung beraten.",
+ "phoneButton": "Jetzt anrufen",
+ "emailButton": "Angebot anfordern"
+ }
+}
diff --git a/public/locales/de/familien-kinder.json b/public/locales/de/familien-kinder.json
new file mode 100644
index 0000000..a1c0ffa
--- /dev/null
+++ b/public/locales/de/familien-kinder.json
@@ -0,0 +1,19 @@
+{
+ "title": "Familien & Kinder",
+ "hero": {
+ "kicker": "Familien & Kinder",
+ "title": "Schutz für das Wichtigste",
+ "subtitle": "Versicherungen für Familien und Kinder – verständlich, passend und fair.",
+ "primaryCta": "Jetzt berechnen",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "packages": "Pakete",
+ "health": "Gesundheit",
+ "accident": "Unfall",
+ "liability": "Haftpflicht",
+ "travel": "Reise",
+ "retirement": "Vorsorge"
+ }
+}
diff --git a/public/locales/de/finanzen.json b/public/locales/de/finanzen.json
new file mode 100644
index 0000000..fd2e21c
--- /dev/null
+++ b/public/locales/de/finanzen.json
@@ -0,0 +1,42 @@
+{
+ "hero": {
+ "kicker": "Finanzen",
+ "title": "Finanzielle Sicherheit mit Plan",
+ "subtitle": "Unabhängige Beratung zu Vermögensaufbau, Altersvorsorge und Finanzierung – verständlich und transparent.",
+ "primaryCta": "Jetzt beraten lassen",
+ "secondaryCta": "Alle Leistungen"
+ },
+ "intro": {
+ "title": "Finanzen & Vorsorge",
+ "subtitle": "Vermögensaufbau, Vorsorge und Finanzierung – klar strukturiert und verständlich."
+ },
+ "services": {
+ "title": "Unsere Leistungen im Überblick"
+ },
+ "tabs": {
+ "finanzberatung": "Finanzberatung",
+ "vorsorge": "Vorsorgelösungen",
+ "vermoegen": "Vermögensmanagement",
+ "kredit": "Kreditberatung"
+ },
+ "badge": {
+ "since1994": "Seit 1994 an Ihrer Seite"
+ },
+ "finanzberatung": {
+ "headline": "Finanzberatung",
+ "subheadline": "Vermögen, Vorsorge, Planung",
+ "welcome": "Herzlich willkommen",
+ "lead": "Umfassende Beratung für Ihre finanzielle Zukunft",
+ "featuresTitle": "Schwerpunkte",
+ "primaryCta": "Beratung vereinbaren",
+ "secondaryCta": "Leistungen ansehen",
+ "imageCaption": "Finanzplanung – klar, transparent und auf Ihre Ziele ausgerichtet."
+ },
+ "highlightsTitle": "Was Sie bei uns erwarten dürfen",
+ "contact": {
+ "title": "Persönliche Finanzberatung",
+ "subtitle": "Lassen Sie uns gemeinsam eine Strategie entwickeln, die zu Ihrer Situation und Ihren Zielen passt.",
+ "primaryCta": "Beratung vereinbaren",
+ "secondaryCta": "Kontakt aufnehmen"
+ }
+}
diff --git a/public/locales/de/flottenversicherung.json b/public/locales/de/flottenversicherung.json
new file mode 100644
index 0000000..de1a5b6
--- /dev/null
+++ b/public/locales/de/flottenversicherung.json
@@ -0,0 +1,25 @@
+{
+ "title": "Flottenversicherung",
+ "hero": {
+ "badge": "Für Unternehmen & Fuhrparks",
+ "title": "Flottenversicherung",
+ "subtitle": "optimale Flottenlösungen für dein Unternehmen",
+ "description": "Zentrale Policierung, flexible Deckungen und attraktive Konditionen – wir finden die passende Lösung für deine Fahrzeugflotte.",
+ "imageHint": "Haftpflicht + Kasko für Flotten",
+ "imageText": "Individuell kalkuliert – passend zu Einsatz & Risiko.",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Unfallstatistik",
+ "calculator": "Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Bußgeldkatalog"
+ },
+ "form": {
+ "description": "Sende uns ein paar Angaben – wir erstellen dir ein passendes Flottenangebot."
+ }
+}
diff --git a/public/locales/de/footer.json b/public/locales/de/footer.json
new file mode 100644
index 0000000..41563e5
--- /dev/null
+++ b/public/locales/de/footer.json
@@ -0,0 +1,23 @@
+{
+ "about": {
+ "description": "Ihr zuverlässiger Partner für Versicherungen in Düsseldorf"
+ },
+ "sections": {
+ "contact": "Kontakt",
+ "social": "Social",
+ "links": "Links"
+ },
+ "contact": {
+ "mobile": "Mobil",
+ "office": "Büro Düsseldorf",
+ "fax": "Fax Büro Düsseldorf",
+ "email": "E-Mail",
+ "website": "Webseite",
+ "whatsapp": "WhatsApp",
+ "externalLink": "Externer Link"
+ },
+ "bottom": {
+ "externalNotice": "Links zu externen Diensten öffnen Seiten Dritter.",
+ "copyright": "© {{year}} Agentur Mizera & Partner. Alle Rechte vorbehalten."
+ }
+}
diff --git a/public/locales/de/geschaeftskunden.json b/public/locales/de/geschaeftskunden.json
new file mode 100644
index 0000000..3e5a454
--- /dev/null
+++ b/public/locales/de/geschaeftskunden.json
@@ -0,0 +1,88 @@
+{
+ "cta": {
+ "title": "Bereit für die optimale Absicherung?",
+ "contact": "Kontakt aufnehmen",
+ "service": "Unsere Services",
+ "subtitle": "Kontaktieren Sie uns für ein unverbindliches Beratungsgespräch"
+ },
+ "hero": {
+ "kicker": "Versicherungen für Geschäftskunden",
+ "title": "Sicherheit für Ihr Unternehmen.",
+ "secondaryCta": "Alle Leistungen",
+ "primaryCta": "Jetzt beraten lassen",
+ "subtitle": "Professionelle Versicherungsberatung für Unternehmen und Selbstständige – individuell, transparent und zuverlässig."
+ },
+ "benefits": {
+ "items": [
+ {
+ "description": "Günstige Konditionen durch exzellente Verbindungen zu führenden Versicherern",
+ "title": "Wettbewerbsvorteile"
+ },
+ {
+ "description": "Alles aus einer Hand - von der Beratung bis zur Schadensabwicklung",
+ "title": "Zeitersparnis"
+ },
+ {
+ "description": "Individuelle Risikobetrachtung für beste Preis-Leistungs-Verhältnis",
+ "title": "Kostenoptimierung"
+ },
+ {
+ "description": "Dedizierter Ansprechpartner für alle Ihre Versicherungsangelegenheiten",
+ "title": "Persönliche Betreuung"
+ }
+ ],
+ "title": "Ihre Vorteile als Geschäftskunde"
+ },
+ "services": {
+ "items": [
+ {
+ "title": "Betriebsversicherung",
+ "description": "Umfassender Schutz für Ihr Unternehmen",
+ "features": [
+ "Betriebshaftpflicht",
+ "Betriebsinhaltversicherung",
+ "Betriebsunterbrechungsversicherung"
+ ]
+ },
+ {
+ "title": "Fuhrparkversicherung",
+ "description": "Optimale Lösungen für Ihre Fahrzeugflotte",
+ "features": [
+ "Flottenversicherung",
+ "Transportversicherung",
+ "Fahrerunfallversicherung"
+ ]
+ },
+ {
+ "title": "Mitarbeiterschutz",
+ "description": "Sicherheit für Ihre wertvollsten Mitarbeiter",
+ "features": [
+ "Betriebsunfallversicherung",
+ "Krankentagegeldversicherung",
+ "Altersvorsorge"
+ ]
+ },
+ {
+ "title": "Vermögensmanagement",
+ "description": "Strategische Sicherung Ihres Unternehmensvermögens",
+ "features": [
+ "Vermögensschadenhaftpflicht",
+ "D\u0026O-Versicherung",
+ "Rechtsschutzversicherung"
+ ]
+ }
+ ],
+ "title": "Unsere Geschäftskunden-Lösungen"
+ },
+ "focus": {
+ "title": "Unsere Schwerpunkte",
+ "items": {
+ "risk": "Risikoschutz",
+ "property": "Sachversicherung",
+ "fleet": "Flottenversicherung",
+ "assets": "Vermögenssicherung",
+ "liability": "Betriebshaftpflicht"
+ },
+ "learnMore": "Mehr erfahren"
+ }
+}
diff --git a/public/locales/de/haftpflicht.json b/public/locales/de/haftpflicht.json
new file mode 100644
index 0000000..fb55433
--- /dev/null
+++ b/public/locales/de/haftpflicht.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Haftpflichtversicherung",
+ "hero": {
+ "kicker": "Essentieller Schutz für jeden",
+ "title": "Haftpflichtversicherung",
+ "subtitle": "Sicherheit vor Schadenersatzforderungen – Schutz vor finanziellen Folgen bei Personen-, Sach- und Vermögensschäden",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Schadensstatistik",
+ "calculator": "Haftpflicht-Rechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Infothek"
+ }
+}
diff --git a/public/locales/de/hausrat.json b/public/locales/de/hausrat.json
new file mode 100644
index 0000000..e4f3194
--- /dev/null
+++ b/public/locales/de/hausrat.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Hausratversicherung",
+ "hero": {
+ "kicker": "Ihr Zuhause bestens geschützt",
+ "title": "Hausratversicherung",
+ "subtitle": "Sicherheit für Ihre Einrichtung – Schutz vor Einbruch, Feuer, Wasser und Sturm",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Schadensstatistik",
+ "calculator": "Hausrat-Rechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Infothek"
+ }
+}
diff --git a/public/locales/de/home.json b/public/locales/de/home.json
new file mode 100644
index 0000000..906a249
--- /dev/null
+++ b/public/locales/de/home.json
@@ -0,0 +1,128 @@
+{
+ "title": "Ihre Versicherungsmakler in Düsseldorf",
+ "subtitle": "Individuelle Versicherungslösungen für Privat- und Gewerbekunden",
+
+ "hero": {
+ "title": "Ihr Versicherungsschutz in guten Händen",
+ "subtitle": "Persönliche Beratung und maßgeschneiderte Lösungen für Ihre Versicherungen",
+ "cta": "Jetzt unverbindlich beraten lassen",
+ "finance": {
+ "kicker": "Finanzen",
+ "title": "Finanzielle Sicherheit mit Plan",
+ "subtitle": "Unabhängige Beratung zu Vermögensaufbau, Altersvorsorge und Finanzierung – verständlich und transparent.",
+ "primaryCta": "Beratung",
+ "secondaryCta": "Finanzen",
+ "topic1": "Agentur",
+ "topic2": "Privatkunden",
+ "topic3": "Senioren"
+ },
+ "contact": {
+ "kicker": "Kontakt",
+ "title": "Wir sind für Sie da.",
+ "subtitle": "Kontakt, Adressen und Service – schnell und übersichtlich.",
+ "primaryCta": "Kontakt",
+ "secondaryCta": "Leistungen"
+ },
+ "private": {
+ "kicker": "Privatkunden",
+ "title": "Sicherheit für Ihre Familie und Ihr Zuhause.",
+ "subtitle": "Individuelle Beratung für alle Lebensbereiche – von der Kfz-Versicherung bis zur Altersvorsorge.",
+ "primaryCta": "Privatkunden",
+ "secondaryCta": "Beratung"
+ },
+ "seniors": {
+ "kicker": "Senioren",
+ "title": "Sicherheit und Wohlbefinden im Alter.",
+ "subtitle": "Maßgeschneiderte Lösungen für Ihre Lebensphase – von der Gesundheitsvorsorge bis zur Altersvorsorge.",
+ "primaryCta": "Senioren",
+ "secondaryCta": "Beratung"
+ },
+ "business": {
+ "kicker": "Geschäftskunden",
+ "title": "Sicherheit für Ihr Unternehmen.",
+ "subtitle": "Professionelle Versicherungsberatung für Unternehmen und Selbstständige – individuell, transparent und zuverlässig.",
+ "primaryCta": "Geschäftskunden",
+ "secondaryCta": "Beratung"
+ },
+ "bike": {
+ "kicker": "Motorrad",
+ "title": "Motorradversicherung",
+ "subtitle": "Optimaler Schutz für Motorräder – Haftpflicht, Teilkasko, Vollkasko und flexible Verträge.",
+ "primaryCta": "Angebot",
+ "secondaryCta": "Beratung",
+ "topic1": "Autoversicherung",
+ "topic2": "Motorrad",
+ "topic3": "Quad",
+ "topic4": "FairMobil",
+ "topic5": "Drittfahrer-Schutz",
+ "topic6": "Flotte"
+ },
+ "family": {
+ "kicker": "Familien & Kinder",
+ "title": "Der beste Schutz für Ihre Kleinsten.",
+ "subtitle": "Umfassende Versicherungen für Familien und Kinder – von Geburt an bestens abgesichert.",
+ "primaryCta": "Jetzt berechnen",
+ "secondaryCta": "Beratung"
+ },
+ "rechtsschutz": {
+ "kicker": "Rechtsschutz",
+ "title": "Rechtsschutzversicherung",
+ "subtitle": "Absicherung bei Streitigkeiten – wir finden die passenden Bausteine und Tarife für Sie.",
+ "primaryCta": "Mehr erfahren",
+ "secondaryCta": "Beratung"
+ }
+ },
+
+ "topics": {
+ "title": "Themen für Privatkunden",
+ "subtitle": "Die wichtigsten Lösungen für Ihre private Absicherung",
+ "item1": { "title": "KFZ-Fahrzeuge" },
+ "item2": { "title": "Privatkunden" },
+ "item3": { "title": "Senioren" },
+ "item4": { "title": "Hausrat" },
+ "item5": { "title": "Haftpflicht" },
+ "rechtsschutz": { "title": "Rechtsschutzversicherung" },
+ "item6": { "title": "Unfall – Was jetzt?" }
+ },
+
+ "services": {
+ "title": "Unsere Leistungen",
+ "subtitle": "Alles aus einer Hand für Ihren optimalen Schutz",
+ "car": {
+ "title": "KFZ-Versicherung",
+ "desc": "Umfassender Schutz für Ihr Fahrzeug zu günstigen Konditionen"
+ },
+ "life": {
+ "title": "Lebensversicherung",
+ "desc": "Sichern Sie die Zukunft Ihrer Lieben ab"
+ },
+ "home": {
+ "title": "Wohngebäudeversicherung",
+ "desc": "Schutz für Ihr Eigenheim"
+ },
+ "health": {
+ "title": "Krankenversicherung",
+ "desc": "Die richtige Absicherung für Ihre Gesundheit"
+ }
+ },
+
+ "trust": {
+ "experience": "Jahre Erfahrung",
+ "clients": "Zufriedene Kunden",
+ "partners": "Partner",
+ "support": "Kundenservice"
+ },
+
+ "ctaSection": {
+ "title": "Sie haben Fragen zu Ihren Versicherungen?",
+ "subtitle": "Vereinbaren Sie noch heute einen Beratungstermin",
+ "button": "Termin vereinbaren"
+ },
+
+ "contact": {
+ "title": "Kontaktieren Sie uns",
+ "subtitle": "Wir beraten Sie gerne persönlich",
+ "formTitle": "Schreiben Sie uns eine Nachricht",
+ "formSubtitle": "Wir antworten Ihnen schnellstmöglich"
+ }
+}
diff --git a/public/locales/de/impressum.json b/public/locales/de/impressum.json
new file mode 100644
index 0000000..abf29ce
Binary files /dev/null and b/public/locales/de/impressum.json differ
diff --git a/public/locales/de/kfz.json b/public/locales/de/kfz.json
new file mode 100644
index 0000000..2e321ad
--- /dev/null
+++ b/public/locales/de/kfz.json
@@ -0,0 +1,100 @@
+{
+ "title": "KFZ-Versicherung",
+ "subtitle": "Günstige KFZ-Versicherung mit optimalem Schutz",
+
+ "hero": {
+ "kicker": "KFZ-Versicherungen",
+ "title": "Sicherheit für Ihr Fahrzeug",
+ "subtitle": "Die passende Versicherung für Auto, Motorrad, Quad und mehr",
+ "primaryCta": "Jetzt beraten lassen",
+ "secondaryCta": "Alle Leistungen"
+ },
+
+ "topics": {
+ "title": "KFZ-Versicherungen",
+ "subtitle": "Die wichtigsten Lösungen für Ihr Fahrzeug",
+ "items": {
+ "auto": "Auto",
+ "motorrad": "Motorrad",
+ "quad": "Quad",
+ "fairmobil": "FairMobil",
+ "thirdDriver": "Drittfahrer-Schutz",
+ "fleet": "Flottenversicherung"
+ }
+ },
+
+ "form": {
+ "title": "Kostenlose Beratung anfordern",
+ "subtitle": "Wir beraten Sie gerne persönlich und finden die passende Versicherung für Sie.",
+ "name": "Vor- und Nachname",
+ "email": "E-Mail",
+ "phone": "Telefon",
+ "brand": "Marke",
+ "model": "Modell",
+ "year": "Erstzulassung",
+ "license": "Kennzeichen",
+ "coverage": "Versicherungsschutz",
+ "selectCoverage": "Bitte wählen",
+ "fullyComprehensive": "Vollkasko",
+ "partialCoverage": "Teilkasko",
+ "liability": "Haftpflicht",
+ "submit": "Kostenloses Angebot anfordern",
+ "success": {
+ "title": "Anfrage erfolgreich versendet",
+ "message": "Wir melden uns schnellstmöglich bei Ihnen."
+ }
+ },
+
+ "benefitsTitle": "Ihre Vorteile",
+ "benefits": [
+ "Individuelle Beratung und Betreuung",
+ "Umfassender Vergleich von über 200 Versicherern",
+ "Transparente und verständliche Beratung",
+ "Schnelle und unkomplizierte Schadensregulierung"
+ ],
+
+ "faqTitle": "Häufige Fragen",
+ "faq": {
+ "1": {
+ "q": "Welche Unterlagen benötige ich für ein Angebot?",
+ "a": "Für ein unverbindliches Angebot benötigen wir lediglich einige Informationen zu Ihrem Fahrzeug und Ihrer bisherigen Versicherung."
+ },
+ "2": {
+ "q": "Wie lange dauert die Antragstellung?",
+ "a": "Die Antragstellung dauert in der Regel nur wenige Minuten."
+ },
+ "3": {
+ "q": "Kann ich meinen Vertrag jederzeit wechseln?",
+ "a": "Ja, ein Wechsel ist in der Regel zum Ende der Kündigungsfrist möglich."
+ }
+ },
+
+ "contactTitle": "Kontakt",
+ "contact": {
+ "text": "Haben Sie Fragen? Wir beraten Sie gerne persönlich.",
+ "phone": "0211 / 97629355",
+ "email": "info@finanzen-mizera.de"
+ },
+
+ "sections": {
+ "intro": {
+ "title": "Ihre KFZ-Versicherung in besten Händen",
+ "content": "Wir finden für Sie die passende KFZ-Versicherung – günstig und maßgeschneidert."
+ },
+ "coverage": {
+ "title": "Leistungen",
+ "items": [
+ "Haftpflichtversicherung",
+ "Teilkasko",
+ "Vollkasko",
+ "Rechtsschutzversicherung",
+ "Mietwagen- und Mobilitätsgarantie"
+ ]
+ }
+ },
+
+ "cta": {
+ "quote": "Jetzt KFZ-Versicherung berechnen",
+ "contact": "Beratungstermin vereinbaren"
+ }
+}
diff --git a/public/locales/de/kinder_gesundheit.json b/public/locales/de/kinder_gesundheit.json
new file mode 100644
index 0000000..7919ab6
--- /dev/null
+++ b/public/locales/de/kinder_gesundheit.json
@@ -0,0 +1 @@
+{"hero": {"kicker": "Gesundheit", "title": "Nur das Beste für Ihr Kind?", "subtitle": "Eine sehr gesunde Entscheidung.", "cta1": "Jetzt beraten lassen", "cta2": "Zur Übersicht"}, "overview": {"badge": "Nur das Beste für Ihr Kind?", "title": "Nur das Beste für Ihr Kind?", "subtitle": "Eine sehr gesunde Entscheidung.", "description": "Zusatzversicherungen können Lücken schließen – z. B. bei Zähnen, Sehhilfen oder stationärer Behandlung.", "cta1": "Angebot anfordern", "cta2": "Beratung", "feature1Title": "Planbar", "feature1Desc": "bessere Leistungen", "feature2Title": "Flexibel", "feature2Desc": "Bausteine wählen", "imageCaption": "Zahn, Brille, Klinik", "imageSubtext": "Tarifcheck – passend zum Bedarf."}, "tabs": {"overview": "Übersicht", "details": "Details & Vorteile", "calculator": "Vergleichsrechner", "form": "Anfrageformular", "catalog": "Ratgeber"}, "details": {"kicker": "clinic+ Krankenhaus-Zusatzversicherung", "title": "Ihre clinic+ Leistungen (Auszug)", "description": "Jeder Tag im Krankenhaus ist eine mentale und körperliche Belastung. Umso wichtiger, dass man sich den bestmöglichen Rahmen schafft – und mit clinic+ von Hochleistung, Tag für Tag, profitiert.", "leistung": {"title": "Leistung", "badge": "clinic+", "headers": {"leistung": "Leistung", "clinic": "Ja"}, "rows": ["Freie Arzt- und Krankenhauswahl", "Wahl- oder belegärztliche Behandlung (inklusive Spezialistenbehandlung) – auch über die Höchstsätze der Gebührenordnung hinaus", "Vor- und nachstationäre Behandlungen – auch über die Höchstsätze der Gebührenordnung hinaus", "Wahlweise Unterbringung im Ein- oder Zweibettzimmer", "Begleitperson im Krankenhaus – für Kinder bis zum 10. Geburtstag Kostenübernahme bis 30 Euro täglich bis zu 14 Tage lang", "Kurtagegeld – bei Kuraufenthalten im Anschluss an eine Krankenhausbehandlung: 21 Euro je Tag für maximal 28 Tage", "Medizinisch notwendige Krankentransporte", "Weltweiter Versicherungsschutz – bis zu 12 Monate ohne besondere Vereinbarung", "Über ein separates Krankenhaustagegeld optional abschließbar: Ab einem Alter von 18 Jahren – gesetzliche Zuzahlung für die ersten 28 Tage je Kalenderjahr", "Wartezeiten – es gelten die üblichen Wartezeiten von 3 Monaten (allgemeine Wartezeit, entfällt bei Unfällen) bzw. 8 Monaten (besondere Wartezeiten – für Entbindung, Psychotherapie, Zahnbehandlung, Zahnersatz und Kieferorthopädie)"]}, "ueberblick": {"title": "Die Leistungen im Überblick", "badge": "clinic+", "items": ["Freie Arzt- und Krankenhauswahl", "Wahl- oder belegärztliche Behandlung (inkl. Spezialisten)", "Vor- und nachstationäre Behandlungen", "Unterbringung im Ein- oder Zweibettzimmer", "Begleitperson im Krankenhaus (Kinder bis zum 10. Geburtstag)", "Medizinisch notwendige Krankentransporte", "Weltweiter Versicherungsschutz (bis 12 Monate)"], "disclaimer": "*Auszug aus den Leistungen. Details ergeben sich aus den Versicherungsbedingungen."}, "leistungsfall": {"title": "Leistungsfall / Beispielrechnung", "badge": "Beispiel", "description": "Beispiel: Mandeloperation, 5 Tage Einbettzimmer", "priceSticker": {"prefix": "Nur", "price": "2,97 ", "suffix": "monatlich"}, "rows": [{"label": "Mehrkosten für das Einbettzimmer", "value": "650,00 "}, {"label": "Kosten für wahlärztliche Behandlung", "value": "500,00 "}, {"label": "Laborkosten", "value": "250,00 "}, {"label": "Erstbehandlung", "value": "150,00 "}, {"label": "Leistung der Krankenkasse", "value": "0,00 "}, {"label": "So viel müssten Sie selbst zahlen", "value": "1.550,00 ", "strong": true}], "clinicPlusTitle": "Ihr Vorteil mit clinic+", "clinicPlusLabel": "Sie zahlen selbst nur noch", "clinicPlusValue": "0,00 ", "cta": "Angebot anfordern"}, "hinweis": {"title": "Hinweis", "subtitle": "Wartezeiten & Erstattung", "text": "Tarife unterscheiden sich stark. Wir prüfen Wartezeiten, Begrenzungen und Leistungsstaffeln."}}, "calculator": {"title": "Grobe Beitragsschätzung", "description": "Richtwert zur Orientierung – abhängig von Alter und Bausteinen.", "example": "Beispielrechnung", "exampleDescription": "Beispielhafte Kalkulation für ein Kind, 5 Jahre alt.", "exampleValue": "ca. 2,97 ", "exampleValueDescription": "monatlicher Beitrag für die clinic+ Zusatzversicherung", "exampleDisclaimer": "*Keine Gewähr auf Richtigkeit. Bindende Angebote erhalten Sie auf Anfrage.", "requirements": "Voraussetzungen", "requirementsDescription": "Für die Berechnung benötigen wir:", "requirement1": "Alter des Kindes", "requirement2": "Gewünschte Leistungen", "cta": "Angebot anfordern"}, "form": {"title": "Persönliches Angebot", "description": "Senden Sie uns Ihre Daten – wir erstellen ein passendes Angebot.", "directContact": "Direktkontakt", "directContactDescription": "Wir beraten Sie persönlich.", "phoneNumber": "+49 123 456789", "email": "info@makler-ease.de"}, "catalog": {"title": "Ratgeber & Katalog", "description": "Downloads und Informationen rund um Kinder-Gesundheitsversicherungen.", "download": "Als PDF speichern", "checklist": "Checkliste", "checklistDescription": "Worauf Sie bei der Tarifwahl achten sollten:"}}
diff --git a/public/locales/de/kinder_zahn.json b/public/locales/de/kinder_zahn.json
new file mode 100644
index 0000000..beaac24
--- /dev/null
+++ b/public/locales/de/kinder_zahn.json
@@ -0,0 +1,83 @@
+{
+ "hero": {
+ "kicker": "ZahnPRIVAT 100",
+ "title": "Erste Zahnspange oder neues Smartphone?",
+ "subtitle": "Wir sagen: beides. Dank ZahnPRIVAT müssen Sie sich nicht entscheiden. Kieferorthopädie inklusive.",
+ "cta1": "Beratung",
+ "cta2": "Zur Übersicht"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "calculator": "Vergleichsrechner",
+ "form": "Anfrageformular",
+ "catalog": "Ratgeber",
+ "brochure": "Kundenbroschüre (PDF)"
+ },
+ "overview": {
+ "badge": "Tarif",
+ "product": "ZahnPRIVAT 100",
+ "productSub": "erstattet 100 % für",
+ "sloganLine1": "Erste Zahnspange oder neues Smartphone?",
+ "sloganLine2": "Wir sagen: beides.",
+ "sloganLine3": "Dank ZahnPRIVAT müssen Sie sich nicht entscheiden. Kieferorthopädie inklusive.",
+ "ctaOffer": "Angebot anfordern",
+ "ctaConsulting": "Beratung",
+ "bullets": {
+ "prophylaxe": "Zahnprophylaxe (inkl. professioneller Zahnreinigung – ohne Begrenzung)",
+ "bleaching": "Zahnaufhellung (bis zu 200 Euro in 2 Jahren)",
+ "kfoAdults": "Kieferorthopädie für Erwachsene aufgrund eines Unfalls oder wenn die GKV leistet (bis zu 5.000 Euro)",
+ "treatment": "Zahnbehandlung (z.B. hochwertige Füllungen, Parodontose- und Wurzelbehandlungen)",
+ "prosthetics": "Zahnersatz (z.B. Implantate, Kronen und Brücken)",
+ "anxiety": "Angst- und Schmerzausschaltung (z. B. Akupunktur, Lachgas und Hypnose)"
+ },
+ "disclaimer": "Die jeweiligen Prozentsätze beziehen sich auf den erstattungsfähigen Rechnungsbetrag und enthalten die Vorleistungen der gesetzlichen Krankenkasse."
+ },
+ "details": {
+ "leistungen": {
+ "title": "ZahnPRIVAT 100 – Leistungen",
+ "subtitle": "100 % Erstattung (Auszug)"
+ },
+ "bullets": {
+ "prophylaxe": "Zahnprophylaxe (inkl. professioneller Zahnreinigung – ohne Begrenzung)",
+ "bleaching": "Zahnaufhellung (bis zu 200 Euro in 2 Jahren)",
+ "kfoAdults": "Kieferorthopädie für Erwachsene aufgrund eines Unfalls oder wenn die GKV leistet (bis zu 5.000 Euro)",
+ "treatment": "Zahnbehandlung (z.B. hochwertige Füllungen, Parodontose- und Wurzelbehandlungen)",
+ "prosthetics": "Zahnersatz (z.B. Implantate, Kronen und Brücken)",
+ "anxiety": "Angst- und Schmerzausschaltung (z. B. Akupunktur, Lachgas und Hypnose)"
+ },
+ "disclaimer": "Die jeweiligen Prozentsätze beziehen sich auf den erstattungsfähigen Rechnungsbetrag und enthalten die Vorleistungen der gesetzlichen Krankenkasse.",
+ "examples": {
+ "title": "Beispiele",
+ "subtitle": "So wirkt sich ZahnPRIVAT 100 in der Praxis aus",
+ "kfo": {
+ "title": "Kieferorthopädie (Beispiel)",
+ "invoice": "Rechnungsbetrag: 8.000 Euro",
+ "gkv": "Leistung GKV: 3.500 Euro",
+ "refund": "Erstattung ZahnPRIVAT 100: 4.500 Euro",
+ "own": "Eigenanteil: 0 Euro"
+ },
+ "implant": {
+ "title": "Zahnimplantat (Beispiel)",
+ "invoice": "Rechnungsbetrag: 3.700 Euro",
+ "gkv": "Leistung GKV: 500 Euro",
+ "ownNo": "Eigenanteil ohne Zusatz: 3.200 Euro",
+ "ownWith": "Eigenanteil mit ZahnPRIVAT 100: 0 Euro"
+ }
+ },
+ "contact": {
+ "title": "Kontakt & Hinweis",
+ "subtitle": "Wir beraten schnell und unkompliziert.",
+ "text": "Tarife unterscheiden sich. Wir prüfen Bedingungen, Summenbegrenzungen und Erstattungssätze.",
+ "ctaOffer": "Angebot anfordern",
+ "ctaContact": "Kontakt"
+ }
+ },
+ "brochure": {
+ "title": "Kundenbroschüre (PDF)",
+ "subtitle": "Broschüre als PDF zum Download.",
+ "cardTitle": "ZahnPRIVAT 100 (PDF)",
+ "cardDescription": "335961_DL_ZahnPRIVAT_VKB_05_2024.pdf",
+ "download": "PDF herunterladen"
+ }
+}
diff --git a/public/locales/de/kinderunfall.json b/public/locales/de/kinderunfall.json
new file mode 100644
index 0000000..206bd29
--- /dev/null
+++ b/public/locales/de/kinderunfall.json
@@ -0,0 +1,152 @@
+{
+ "hero": {
+ "kicker": "Familien & Kinder",
+ "title": "Kinderunfall",
+ "subtitle": "Schutz bei Unfällen – und ein Polster für später",
+ "cta1": "Beratung",
+ "cta2": "Zur Übersicht"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "calculator": "Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Leistungsfall",
+ "catalog": "Ratgeber",
+ "brochure": "Kundenbroschüre (PDF)"
+ },
+ "overview": {
+ "badge": "Absicherung + Rücklagen",
+ "title": "Kinderunfall",
+ "subtitle": "Spielplatz, Schule, Sport – rund um die Uhr abgesichert",
+ "description": "Kinder sind ständig in Bewegung – und ein Moment reicht. Wichtig ist dann nicht nur die medizinische Versorgung, sondern auch finanzielle Unterstützung für Reha, Hilfsmittel oder Umbauten. Optional kann parallel ein Polster aufgebaut werden – z.B. für Ausbildung, Führerschein oder den Start ins Erwachsenenleben.",
+ "ctaOffer": "Angebot anfordern",
+ "ctaConsulting": "Beratung",
+ "features": {
+ "f1": { "title": "24/7 Schutz", "desc": "auch in der Freizeit" },
+ "f2": { "title": "Leistungsstark", "desc": "Bausteine flexibel" }
+ },
+ "imageCaption": "Spielplatz, Sport, Schule",
+ "imageSubtext": "Schnell geklärt: Welche Leistungen sind für Kinder wirklich wichtig?",
+ "quick": {
+ "title": "Kurz & klar",
+ "c1": { "title": "24/7 Schutz", "desc": "Weltweit – Freizeit, Sport, Urlaub & Alltag." },
+ "c2": { "title": "Polster aufbauen", "desc": "Optionales Guthaben für spätere Wünsche." },
+ "c3": { "title": "Unterstützung im Fall", "desc": "Wir helfen Eltern bei Meldung & Abwicklung." }
+ }
+ },
+ "details": {
+ "title": "Was ist bei Kindern wichtig?",
+ "description": "Bei Kindern passieren Unfälle oft in der Freizeit: beim Toben, beim Sportverein oder im Urlaub. Gut ist, wenn neben der Grundleistung auch Bausteine wie Reha-/Hilfsmittel, Unterstützung im Haushalt oder kosmetische Eingriffe nach Unfall sinnvoll abgedeckt werden.",
+ "capital": {
+ "title": "Optional: Kapitalpolster für später",
+ "description": "Zusätzlich kann man ein Guthaben aufbauen – z.B. für Ausbildung, Studium, Führerschein oder die erste Wohnung."
+ },
+ "examples": {
+ "child": {
+ "title": "Beispiel: Kind",
+ "subtitle": "So kann ein Startpolster entstehen.",
+ "person": "Sophie (1 Jahr)",
+ "monthly": "Monatlicher Beitrag: 15 Euro",
+ "paidIn": "Einzahlungen über die Laufzeit: 4.037 Euro",
+ "payout": "Auszahlung am Laufzeitende (Fondsguthaben): 4.037 Euro",
+ "use": "Nutzen: z.B. Reise, Ausbildung oder andere größere Wünsche.",
+ "disclaimer": "Beispielrechnung (Tarifvariante BEST, Vertragslaufzeit 24 Jahre, 50.000 Euro Invalidität, 500% Progression, 500 Euro Unfall-Rente). Maßgeblich sind die Vertragsbedingungen."
+ },
+ "adult": {
+ "title": "Beispiel: Erwachsene",
+ "subtitle": "Unfallschutz plus Fondsguthaben.",
+ "person": "Finja (31 Jahre, Lehrerin)",
+ "monthly": "Monatlicher Beitrag: 15 Euro",
+ "paidIn": "Einzahlungen über die Laufzeit: 4.955 Euro",
+ "payout": "Auszahlung am Laufzeitende (Fondsguthaben): 4.965 Euro",
+ "use": "Interpretation: Je nach Wertentwicklung kann der Schutz rechnerisch sehr günstig ausfallen.",
+ "disclaimer": "Beispielrechnung (Tarifvariante SMART, Vertragslaufzeit 30 Jahre, Berufsklasse A, 75.000 Euro Invalidität, 350% Progression, 10.000 Euro Tod). Maßgeblich sind die Vertragsbedingungen."
+ }
+ },
+ "packages": {
+ "title": "Pakete (Beispiele)",
+ "description": "Wir beraten dich, welches Paket zu euch passt – vom soliden Basisschutz bis zum Rundum-Schutz.",
+ "basic": { "title": "Basis", "desc": "Günstiger Einstieg, 24/7 & weltweit – ideal für den Anfang." },
+ "plus": { "title": "Plus", "desc": "Mehr Leistung bei typischen Kinder-Unfällen (Sport/Spielplatz)." },
+ "premium": { "title": "Premium", "desc": "Maximaler Schutz inkl. hoher Zusatzleistungen (z.B. Umbau/Hilfsmittel)." }
+ },
+ "modules": {
+ "title": "Bausteine (optional)",
+ "active": { "title": "Aktiv", "desc": "Für aktive Kids: z.B. Schmerzensgeld + Ersatz für beschädigtes Sportgerät." },
+ "assistance": { "title": "Assistance", "desc": "Unterstützung nach Unfall: Hilfe zu Hause, Organisation, Umbau-/Hilfsmitteloptionen." },
+ "progression": { "title": "Taxe/Progression", "desc": "Mehr Leistung bei dauerhaften Folgen – über passende Gliedertaxe/Progression." }
+ },
+ "side": {
+ "title": "Wichtig",
+ "subtitle": "Invalidität & Progression",
+ "text": "Bei Unfallversicherungen ist entscheidend, wie Invalidität bewertet wird und welche Progression greift. Das prüfen wir mit dir, damit der Schutz im Ernstfall wirklich passt."
+ }
+ },
+ "brochure": {
+ "title": "Kundenbroschüre (PDF)",
+ "subtitle": "PDF zum Download – auf Anfrage.",
+ "cardTitle": "Broschüre anfordern",
+ "cardDescription": "Wir senden dir die passende Broschüre zur Kinderunfall-Absicherung.",
+ "cta": "Broschüre anfragen",
+ "tipTitle": "Hinweis",
+ "tipDescription": "Wir empfehlen die Broschüre passend zu Alter und gewünschter Leistung."
+ },
+ "calculator": {
+ "title": "Was kostet das?",
+ "description": "Beiträge hängen von Paket, Bausteinen, Invalidität/Progression und Laufzeit ab. Wir erstellen dir ein Angebot – passend zu Kind und Familie.",
+ "exampleTitle": "Beispiel",
+ "exampleSubtitle": "Unverbindlich – abhängig von Alter/Leistung.",
+ "exampleBoxTitle": "Beispiel (nur Orientierung)",
+ "examplePricePrefix": "ab",
+ "examplePrice": "ca. 15 €",
+ "examplePriceSuffix": "/Monat",
+ "exampleDisclaimer": "Beispielwert – abhängig von Tarif/Paket und gewünschten Leistungen.",
+ "cta": "Jetzt Angebot anfordern",
+ "needTitle": "Was wir brauchen",
+ "needSubtitle": "Je genauer, desto besser.",
+ "need1": "Alter des Kindes",
+ "need2": "Gewünschte Leistung/Bausteine",
+ "need3": "Laufzeit & Ziel (z.B. Führerschein/Startkapital)"
+ },
+ "form": {
+ "title": "Anfrageformular",
+ "subtitle": "Kurze Infos – wir melden uns schnell zurück.",
+ "openContact": "Kontaktformular öffnen",
+ "print": "Als PDF speichern",
+ "direct": {
+ "title": "Direktkontakt",
+ "subtitle": "Wenn es schnell gehen soll."
+ }
+ },
+ "claims": {
+ "title": "Leistungsfall",
+ "description": "Leistung gibt es typischerweise, wenn ein Unfall zu einer dauerhaften Beeinträchtigung führt (Invalidität). Bei Kindern kann das z.B. nach schweren Stürzen, Sportverletzungen oder Unfällen im Straßenverkehr relevant werden. Der Invaliditätsgrad wird durch ein medizinisches Gutachten bestimmt.",
+ "steps": {
+ "documentation": { "title": "Dokumentation", "desc": "Arztbericht, Befunde, Datum/Ort – bei Kindern am besten sofort sammeln." },
+ "report": { "title": "Melden", "desc": "So schnell wie möglich melden – wir übernehmen die nächsten Schritte." },
+ "assessment": { "title": "Gutachten/Grad", "desc": "Invaliditätsgrad wird individuell festgestellt – wir helfen beim Verständnis." }
+ },
+ "side": {
+ "title": "Hinweis",
+ "subtitle": "Fristen beachten",
+ "text": "Je nach Vertrag gibt es Meldefristen – lieber früh melden."
+ }
+ },
+ "catalog": {
+ "title": "Ratgeber",
+ "subtitle": "Worauf Eltern achten sollten – kurz & praxisnah.",
+ "checklist": {
+ "title": "Checkliste",
+ "subtitle": "Kurzer Überblick",
+ "i1": "Freizeit ist entscheidend: Sport, Spielplatz, Urlaub",
+ "i2": "Progression & Gliedertaxe: Was bedeutet das für Kinder?",
+ "i3": "Bausteine passend zum Alltag (z.B. Sport/Assistance)",
+ "i4": "Kapitalziel festlegen (Führerschein, Ausbildung, Start)"
+ },
+ "side": {
+ "title": "Frage?",
+ "subtitle": "Wir beraten persönlich."
+ }
+ }
+}
diff --git a/public/locales/de/leistungen.json b/public/locales/de/leistungen.json
new file mode 100644
index 0000000..70131c5
--- /dev/null
+++ b/public/locales/de/leistungen.json
@@ -0,0 +1,87 @@
+{
+ "servicesTitle": "Unsere Versicherungslösungen",
+ "services": [
+ {
+ "title": "KFZ-Versicherung",
+ "description": "Umfassende Versicherungslösungen für alle Fahrzeugtypen",
+ "features": [
+ "Haftpflicht",
+ "Vollkasko",
+ "Teilkasko",
+ "Insassenunfallversicherung"
+ ]
+ },
+ {
+ "title": "Sachversicherung",
+ "description": "Schutz für Ihr Hab und Gut",
+ "features": [
+ "Hausratversicherung",
+ "Wohngebäudeversicherung",
+ "Rechtsschutz"
+ ]
+ },
+ {
+ "title": "Personenversicherung",
+ "description": "Absicherung für Sie und Ihre Familie",
+ "features": [
+ "Lebensversicherung",
+ "Risikolebensversicherung",
+ "Berufsunfähigkeitsversicherung"
+ ]
+ },
+ {
+ "title": "Gesundheitsversicherung",
+ "description": "Optimale medizinische Versorgung",
+ "features": [
+ "Private Krankenversicherung",
+ "Zahnzusatzversicherung",
+ "Auslandsreisekrankenversicherung"
+ ]
+ },
+ {
+ "title": "Betriebliche Vorsorge",
+ "description": "Sicherheitsnetz für Unternehmen und Mitarbeiter",
+ "features": [
+ "Betriebliche Altersvorsorge",
+ "Betriebsrat",
+ "Mitarbeiterversicherungen"
+ ]
+ },
+ {
+ "title": "Finanzberatung",
+ "description": "Gestaltung Ihrer finanziellen Zukunft",
+ "features": [
+ "Vorsorgeplanung",
+ "Vermögensaufbau",
+ "Altersvorsorge"
+ ]
+ }
+ ],
+ "advantagesTitle": "Warum Agentur Mizera?",
+ "advantages": [
+ "Unabhängige Beratung von über 50 Versicherungsgesellschaften",
+ "Persönliche Betreuung von der Analyse bis zur Vertragsabwicklung",
+ "Transparente Kostenstruktur - keine versteckten Gebühren",
+ "Regelmäßige Überprüfung und Optimierung Ihrer Verträge",
+ "Schnelle Schadenabwicklung und Unterstützung",
+ "Digitale Verwaltung aller Ihrer Versicherungen"
+ ],
+ "processTitle": "Unser Beratungsprozess",
+ "processStep1Title": "Bedarfsanalyse",
+ "processStep1Description": "Gemeinsame Erfassung Ihrer individuellen Bedürfnisse und Wünsche",
+ "processStep2Title": "Vergleichsanalyse",
+ "processStep2Description": "Vergleich führender Versicherungsanbieter auf dem Markt",
+ "processStep3Title": "Individuelle Empfehlung",
+ "processStep3Description": "Präsentation der passenden Versicherungslösungen",
+ "processStep4Title": "Begleitung",
+ "processStep4Description": "Unterstützung bei der Vertragsabwicklung und laufenden Betreuung",
+ "statisticsTitle": "Unsere Erfolge in Zahlen",
+ "statistics1": "Versicherungspartner",
+ "statistics2": "Zufriedene Kunden",
+ "statistics3": "Jahre Erfahrung",
+ "statistics4": "Kundenzufriedenheit",
+ "contactTitle": "Persönliche Beratung",
+ "contactDescription": "Lassen Sie sich von unseren Experten beraten und finden Sie die optimale Versicherungslösung für Ihre Bedürfnisse.",
+ "contactButton": "Beratung vereinbaren",
+ "contactButton2": "Informationsmaterial anfordern"
+}
diff --git a/public/locales/de/links.json b/public/locales/de/links.json
new file mode 100644
index 0000000..4d7e169
--- /dev/null
+++ b/public/locales/de/links.json
@@ -0,0 +1,24 @@
+{
+ "title": "Nützliche Links",
+ "subtitle": "Wichtige Partner und Ressourcen für unsere Kunden",
+ "cta": "Öffnen",
+ "blocks": {
+ "contact": "Kontakt aufnehmen und Beratung anfragen",
+ "service": "Service und Unterstützung",
+ "imprint": "Impressum und rechtliche Angaben",
+ "services": "Unsere Leistungen im Überblick",
+ "privacy": "Datenschutz und Informationen",
+ "links": "Nützliche Links und Ressourcen"
+ },
+ "partnersTitle": "Unsere Partner",
+ "resourcesTitle": "Nützliche Ressourcen",
+ "partners": {
+ "allianz": "Einer der größten Versicherer weltweit",
+ "axa": "Internationale Versicherungsgruppe"
+ },
+ "resources": {
+ "gdv": "Gesamtverband der Deutschen Versicherungswirtschaft",
+ "bafin": "Bundesanstalt für Finanzdienstleistungsaufsicht",
+ "verbraucherzentrale": "Unabhängige Verbraucherberatung"
+ }
+}
diff --git a/public/locales/de/motorradversicherung.json b/public/locales/de/motorradversicherung.json
new file mode 100644
index 0000000..4343a3b
--- /dev/null
+++ b/public/locales/de/motorradversicherung.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Motorradversicherung",
+ "hero": {
+ "kicker": "Sicherheit für Biker",
+ "title": "Motorradversicherung",
+ "subtitle": "Optimaler Schutz für Motorräder – Haftpflicht, Teilkasko, Vollkasko und flexible Verträge",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Unfallstatistik",
+ "calculator": "Motorrad-Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Bußgeldkatalog"
+ }
+}
diff --git a/public/locales/de/nav.json b/public/locales/de/nav.json
new file mode 100644
index 0000000..f1820fb
--- /dev/null
+++ b/public/locales/de/nav.json
@@ -0,0 +1,32 @@
+{
+ "home": "Startseite",
+ "car": "KFZ",
+ "contact": "Kontakt",
+ "privacy": "Datenschutz",
+ "links": "Links",
+ "privateCustomers": "Privatkunden",
+ "businessCustomers": "Geschäftskunden",
+ "services": "Leistungen",
+ "about": "Über uns",
+ "imprint": "Impressum",
+ "health": "Gesundheit",
+ "property": "Vermögen",
+ "business": "Unternehmen",
+ "seniors": "Senioren",
+ "accident": "Unfall",
+ "household": "Hausrat",
+ "liability": "Haftpflicht",
+ "finances": "Finanzen",
+ "agency": "Agentur",
+ "motorcycle": "Motorrad",
+ "quad": "Quad",
+ "fairMobil": "FairMobil",
+ "thirdPartyProtection": "Drittschutz",
+ "fleet": "Flotte",
+ "householdInsurance": "Hausratversicherung",
+ "liabilityInsurance": "Haftpflichtversicherung",
+ "accidentInsurance": "Unfallversicherung",
+ "service": "Service",
+ "carInsurance": "KFZ-Versicherung",
+ "propertyInsurance": "Sachversicherung"
+}
\ No newline at end of file
diff --git a/public/locales/de/privacy.json b/public/locales/de/privacy.json
new file mode 100644
index 0000000..cbee731
--- /dev/null
+++ b/public/locales/de/privacy.json
@@ -0,0 +1,20 @@
+{
+ "title": "Datenschutzerklärung",
+ "intro": "Wir nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Diese Datenschutzerklärung informiert Sie darüber, wie wir Ihre Daten erheben, verwenden und schützen.",
+ "responsible": {
+ "title": "Verantwortlicher für die Datenverarbeitung",
+ "text": "Marian-Adam Mizera\nRosmarinstraße 30 d\n40235 Düsseldorf\nDeutschland\n\nTelefon: [Telefonnummer]\nE-Mail: [E-Mail-Adresse]"
+ },
+ "data": {
+ "title": "Erhebung und Verarbeitung von Daten",
+ "text": "Wir erheben und verarbeiten Ihre Daten nur, wenn Sie uns diese freiwillig zur Verfügung stellen, insbesondere im Rahmen von Anfragen, Verträgen oder der Kontaktaufnahme. Die Verarbeitung erfolgt auf Grundlage Ihrer Einwilligung oder zur Erfüllung von Verträgen nach Art. 6 Abs. 1 lit. b DSGVO."
+ },
+ "rights": {
+ "title": "Ihre Rechte als Betroffener",
+ "text": "Sie haben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit und Widerspruch gegen die Verarbeitung Ihrer personenbezogenen Daten. Bei Fragen zur Ausübung Ihrer Rechte kontaktieren Sie uns bitte."
+ },
+ "contact": {
+ "title": "Kontakt bei Datenschutzfragen",
+ "text": "Bei Fragen zum Datenschutz oder zur Ausübung Ihrer Rechte erreichen Sie uns unter:\n\nMarian-Adam Mizera\nRosmarinstraße 30 d\n40235 Düsseldorf\nE-Mail: [E-Mail-Adresse]\nTelefon: [Telefonnummer]"
+ }
+}
\ No newline at end of file
diff --git a/public/locales/de/privatkunden.json b/public/locales/de/privatkunden.json
new file mode 100644
index 0000000..b3a8179
--- /dev/null
+++ b/public/locales/de/privatkunden.json
@@ -0,0 +1,56 @@
+{
+ "title": "Privatkunden",
+ "subtitle": "Maßgeschneiderte Versicherungs-lösungen für private Haushalte",
+ "services": [
+ {
+ "title": "Gesundheitsvorsorge",
+ "description": "Optimale medizinische Versorgung für die ganze Familie",
+ "features": [
+ "Private Krankenversicherung",
+ "Zahnzusatzversicherung",
+ "Auslandsreisekrankenversicherung",
+ "Krankentagegeldversicherung"
+ ]
+ },
+ {
+ "title": "Risikoschutz",
+ "description": "Umfassender Schutz für alle Lebensbereiche",
+ "features": [
+ "Unfallversicherung",
+ "Haftpflichtversicherung",
+ "Rechtsschutzversicherung"
+ ]
+ },
+ {
+ "title": "Vermögenssicherung",
+ "description": "Schutz Ihres Lebenswerks und Ihrer Familie",
+ "features": [
+ "Lebensversicherung",
+ "Risikolebensversicherung",
+ "Wohngebäudeversicherung",
+ "Hausratversicherung"
+ ]
+ },
+ {
+ "title": "Vorsorge",
+ "description": "Sorgenfreie Zukunft für Sie und Ihre Liebsten",
+ "features": [
+ "Private Altersvorsorge",
+ "Riester-Rente",
+ "Rürup-Rente",
+ "Betriebliche Altersvorsorge"
+ ]
+ }
+ ],
+ "contactTitle": "Persönliche Beratung",
+ "contactDescription": "Lassen Sie sich von unseren Experten beraten und finden Sie die optimale Versicherung für Ihre Bedürfnisse.",
+ "phoneButton": "Jetzt beraten lassen",
+ "emailButton": "Angebot anfordern",
+ "submenu": {
+ "title": "Untermenü",
+ "kfz": "KFZ",
+ "hausrat": "Hausrat",
+ "haftpflicht": "Haftpflicht",
+ "unfall": "Unfall"
+ }
+}
\ No newline at end of file
diff --git a/public/locales/de/quadversicherung.json b/public/locales/de/quadversicherung.json
new file mode 100644
index 0000000..f2afbc9
--- /dev/null
+++ b/public/locales/de/quadversicherung.json
@@ -0,0 +1,12 @@
+{
+ "pageTitle": "Quadversicherung",
+ "tabs": {
+ "overview": "Übersicht",
+ "details": "Details & Vorteile",
+ "statistics": "Unfallstatistik",
+ "calculator": "Quad-Vergleichsrechner",
+ "form": "Anfrageformular",
+ "claims": "Schadenmeldung!",
+ "catalog": "Bußgeldkatalog"
+ }
+}
diff --git a/public/locales/de/rechtsschutzversicherung.json b/public/locales/de/rechtsschutzversicherung.json
new file mode 100644
index 0000000..2341710
--- /dev/null
+++ b/public/locales/de/rechtsschutzversicherung.json
@@ -0,0 +1,207 @@
+{
+ "pageTitle": "Rechtsschutzversicherung",
+ "hero": {
+ "kicker": "Rechtsschutzversicherung",
+ "title": "Recht haben – und Recht bekommen",
+ "subtitle": "Absicherung bei Streitigkeiten – wir finden die passenden Bausteine und Tarife für Sie.",
+ "primaryCta": "Angebot anfordern",
+ "secondaryCta": "Beratung"
+ },
+ "tabs": {
+ "overview": "Übersicht",
+ "processCosts": "Prozesskosten",
+ "details": "Details & Vorteile",
+ "faq": "FAQ",
+ "form": "Anfrageformular"
+ },
+ "generalNotice": {
+ "text": "Hinweis:\nDie auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens."
+ },
+ "processCosts": {
+ "info": {
+ "title": "Prozesskostenrisiko",
+ "text": "Bei einem Gerichtsverfahren können – je nach Streitwert, Instanz und Verlauf – Gerichts- und Anwaltskosten entstehen. Eine Rechtsschutzversicherung kann dieses Kostenrisiko (je nach Tarif und versicherten Bausteinen) abdecken."
+ },
+ "example": {
+ "headline": "Prozesskostenrisikoberechnung –",
+ "disputeValue": "Streitwert: 6.300,00 € – Beispiel",
+ "instance1": {
+ "title": "1. Instanz",
+ "courtCosts": {
+ "title": "Gerichtskosten:",
+ "desc": "3.00 Gebühr(en) gem. § 11 GKG:"
+ },
+ "lawyerCosts": {
+ "title": "Anwaltskosten:",
+ "desc": "2.50 Gebühr(en) gem. § 13 RVG:"
+ },
+ "opponentLawyerCosts": {
+ "title": "Anwaltskosten Gegner:",
+ "desc": "2.50 Gebühr(en) gem. § 13 RVG:"
+ },
+ "expenses": {
+ "title": "Auslagen gem. Nr. 7002 VV RVG:",
+ "desc": ""
+ },
+ "vat": {
+ "title": "19% Umsatzsteuer:",
+ "desc": ""
+ }
+ },
+ "instance2": {
+ "title": "2. Instanz",
+ "courtCosts": {
+ "title": "Gerichtskosten:",
+ "desc": "4.00 Gebühr(en) gem. § 11 GKG:"
+ },
+ "lawyerCosts": {
+ "title": "Anwaltskosten:",
+ "desc": "3.40 Gebühr(en) gem. § 13 RVG:"
+ },
+ "opponentLawyerCosts": {
+ "title": "Anwaltskosten Gegner:",
+ "desc": "2.80 Gebühr(en) gem. § 13 RVG:"
+ },
+ "expenses": {
+ "title": "Auslagen gem. Nr. 7002 VV RVG:",
+ "desc": ""
+ },
+ "vat": {
+ "title": "19% Umsatzsteuer:",
+ "desc": ""
+ }
+ },
+ "sum": "Summe:",
+ "total12": "Summe 1. und 2. Instanz:",
+ "note": "Hinweis:\nQuelle: Unverbindliche Beispielrechnung.\n\nDie Kosten bei Versäumnisurteil, Anerkenntnis oder Klagerücknahme sind nicht pauschal bestimmbar. Diese Prozesskostenrisikoberechnung berücksichtigt nicht alle möglichen kostenrelevanten Umstände (z. B. Prozesskostenhilfe, Zwangsvollstreckung, besondere Verfahrensarten, Vorsteuerabzugsberechtigung). Maßgeblich sind die im Einzelfall tatsächlich anfallenden Kosten."
+ }
+ },
+ "overview": {
+ "badge": "Sicherheit im Konfliktfall",
+ "title": "Rechtsschutzversicherung",
+ "subtitle": "damit Sie Ihre Rechte durchsetzen können",
+ "description": "Ob Streit im Alltag, Ärger im Verkehr, Konflikte im Job oder Probleme rund ums Wohnen: Mit dem passenden Rechtsschutz reduzieren Sie Kostenrisiken und erhalten Unterstützung.",
+ "primaryButton": "Angebot anfordern",
+ "secondaryButton": "Beratung",
+ "card1Title": "Bausteine wählen",
+ "card1Subtitle": "Privat · Beruf · Verkehr · Wohnen",
+ "card2Title": "Kosten im Blick",
+ "card2Subtitle": "Selbstbeteiligung & Leistung",
+ "rightCardTitle": "Transparenter Vergleich",
+ "rightCardText": "Wir vergleichen passende Tarife, prüfen Wartezeiten & Bausteine und empfehlen eine klare, sinnvolle Absicherung.",
+ "productHighlights": {
+ "title": "Ich biete Rechtsschutz mit folgenden Produkthighlights!",
+ "subtitle": "Das Wichtigste auf einen Blick",
+ "additionalTitle": "Weitere Highlights",
+ "items": [
+ "Produktverbesserungs-Garantie: Die Produktverbesserungs-Garantie gilt vereinbart (Spezialklausel 125 ARB)",
+ "Versicherungssumme: Unbegrenzt in Europa, in den Anliegerstaaten des Mittelmeeres, auf den Kanarischen Inseln, auf den Azoren und auf Madeira (örtlicher Geltungsbereich gemäß § 6 Absatz 1 ARB)",
+ "2 Mio. € je Rechtsschutzfall beim Spezial-Straf-Rechtsschutz",
+ "Strafkautionsdarlehen bis 200.000 € (beim Spezial-Straf-Rechtsschutz unter Anrechnung auf die Versicherungssumme)",
+ "350.000 € je Rechtsschutzfall (einschließlich Strafkautionsdarlehen)"
+ ],
+ "additionalItems": [
+ "Telefonische Erstberatung durch unabhängige Anwälte (alle Rechtsgebiete)",
+ "Weltweiter Versicherungsschutz bei Urlaub sowie Dienst- oder Geschäftsreisen bis zu 12 Monaten",
+ "Opferrechtsschutz mitversichert"
+ ]
+ },
+ "quick": {
+ "title": "Kurz & klar",
+ "item1Title": "Bausteine sind entscheidend",
+ "item1Desc": "Nur passende Bereiche absichern.",
+ "item2Title": "Wartezeiten beachten",
+ "item2Desc": "Je nach Bereich & Anbieter unterschiedlich.",
+ "item3Title": "Selbstbeteiligung steuert Preis",
+ "item3Desc": "Mehr SB = oft weniger Beitrag."
+ }
+ },
+ "details": {
+ "title": "Details & Vorteile",
+ "description": "Rechtsschutz ist besonders sinnvoll, wenn Sie Konflikte nicht allein tragen möchten. Entscheidend ist, dass die Bausteine zu Ihrer Situation passen – und dass Ausschlüsse/Wartezeiten verstanden sind.",
+ "servicesTitle": "Leistungen (Auszug)",
+ "tipTitle": "Tipp",
+ "tipIntro": "Prüfen Sie vor allem:",
+ "tipItems": [
+ "Welche Bausteine sind enthalten?",
+ "Wie hoch ist die Selbstbeteiligung?",
+ "Welche Wartezeiten gelten?",
+ "Welche Ausschlüsse gibt es?"
+ ]
+ },
+ "benefits": [
+ {
+ "title": "Kostenrisiko reduzieren",
+ "description": "Je nach Tarif: Anwalt, Gericht, Gutachter, Zeugen & Mediation."
+ },
+ {
+ "title": "Streitigkeiten professionell klären",
+ "description": "Unterstützung von der Erstberatung bis zur Durchsetzung Ihrer Rechte."
+ },
+ {
+ "title": "Bausteine passend wählen",
+ "description": "Privat, Beruf, Verkehr, Wohnen – sinnvoll kombinieren statt überversichern."
+ },
+ {
+ "title": "Für Singles & Familien",
+ "description": "Tarife für jede Lebensphase – inkl. Selbstbeteiligung nach Wunsch."
+ }
+ ],
+ "services": [
+ "Privatrechtsschutz",
+ "Berufsrechtsschutz",
+ "Verkehrsrechtsschutz",
+ "Wohnungs- & Vermieterrechtsschutz",
+ "Strafrechtsschutz (je nach Tarif)",
+ "Mediation & Konfliktlösung (je nach Tarif)"
+ ],
+ "faq": {
+ "title": "FAQ",
+ "subtitle": "Klicken Sie auf ein Thema, um Details einzublenden.",
+ "items": [
+ {
+ "q": "Was deckt eine Rechtsschutzversicherung ab?",
+ "a": "Je nach Tarif: Anwalts-/Gerichtskosten, Gutachter, Zeugen, ggf. Mediation. Entscheidend sind die gewählten Bausteine (Privat, Beruf, Verkehr, Wohnen)."
+ },
+ {
+ "q": "Gibt es Wartezeiten?",
+ "a": "Häufig ja (z.B. 3 Monate) – abhängig vom Bereich und Anbieter. Verkehrsrechtsschutz kann kürzer sein. Wir prüfen das je Tarif."
+ },
+ {
+ "q": "Was bedeutet Selbstbeteiligung?",
+ "a": "Der Anteil, den Sie im Leistungsfall selbst tragen. Eine höhere Selbstbeteiligung senkt oft den Beitrag."
+ },
+ {
+ "q": "Sind laufende Konflikte versichert?",
+ "a": "In der Regel nicht. Meist sind nur Fälle versichert, deren Ursache nach Vertragsbeginn liegt."
+ }
+ ]
+ },
+ "form": {
+ "title": "Anfrageformular",
+ "subtitle": "Schicken Sie uns kurz Ihre Daten – wir melden uns mit einem passenden Tarifvergleich.",
+ "fields": {
+ "name": "Name",
+ "phone": "Telefon",
+ "email": "E-Mail",
+ "topics": "Bausteine",
+ "message": "Nachricht"
+ },
+ "placeholders": {
+ "name": "Ihr Name",
+ "phone": "Telefonnummer",
+ "email": "E-Mail",
+ "message": "Kurz beschreiben (z.B. Familie, Mietwohnung, berufliche Situation)"
+ },
+ "options": {
+ "opt1": "Privat + Beruf + Verkehr + Wohnen",
+ "opt2": "Privat + Beruf",
+ "opt3": "Privat + Verkehr",
+ "opt4": "Privat + Wohnen",
+ "opt5": "Nur Verkehr"
+ },
+ "submit": "Anfrage senden",
+ "callback": "Rückruf anfragen",
+ "thanks": "Vielen Dank! Wir melden uns kurzfristig bei dir."
+ }
+}
diff --git a/public/locales/de/senioren.json b/public/locales/de/senioren.json
new file mode 100644
index 0000000..f232040
--- /dev/null
+++ b/public/locales/de/senioren.json
@@ -0,0 +1,63 @@
+{
+ "hero": {
+ "kicker": "Versicherungen für Senioren",
+ "title": "Sicherheit und Wohlbefinden im Alter.",
+ "subtitle": "Maßgeschneiderte Lösungen für Ihre Lebensphase – von der Gesundheitsvorsorge bis zur Altersvorsorge.",
+ "primaryCta": "Jetzt beraten lassen",
+ "secondaryCta": "Alle Leistungen"
+ },
+ "topics": {
+ "title": "Themen für Senioren",
+ "subtitle": "Die wichtigsten Lösungen für Ihre Lebensphase"
+ },
+ "focus": {
+ "items": {
+ "health": "Gesundheitsvorsorge",
+ "risk": "Risikoschutz",
+ "retirement": "Altersvorsorge"
+ }
+ },
+ "details": {
+ "label": "Details:",
+ "health": {
+ "links": [
+ { "title": "Private Krankenversicherung", "href": "/senioren" },
+ { "title": "Zahnzusatzversicherung", "href": "/senioren" },
+ { "title": "Auslandsreisekrankenversicherung", "href": "/senioren" }
+ ]
+ },
+ "risk": {
+ "links": [
+ { "title": "Unfallversicherung", "href": "/unfall" },
+ { "title": "Haftpflichtversicherung", "href": "/haftpflicht" },
+ { "title": "Rechtsschutzversicherung", "href": "/service" }
+ ]
+ },
+ "retirement": {
+ "links": [
+ { "title": "Private Rentenversicherung", "href": "/finanzen" },
+ { "title": "Riester-Rente", "href": "/finanzen" },
+ { "title": "Rürup-Rente", "href": "/finanzen" },
+ { "title": "Betriebliche Altersvorsorge", "href": "/finanzen" }
+ ]
+ }
+ },
+ "benefits": {
+ "title": "Ihre Vorteile als Senior",
+ "subtitle": "Wir bieten Ihnen maßgeschneiderte Lösungen für Ihre Lebensphase",
+ "items": [
+ { "title": "Persönliche Beratung", "desc": "Auf Augenhöhe und verständlich" },
+ { "title": "Maßgeschneidert", "desc": "Für Ihre Bedürfnisse optimiert" },
+ { "title": "Vertragsoptimierung", "desc": "Bestehende Verträge verbessern" },
+ { "title": "Pflegegrad-Hilfe", "desc": "Unterstützung bei Einstufung" },
+ { "title": "Kostenoptimierung", "desc": "Ohne Leistungsverlust" },
+ { "title": "Langfristige Betreuung", "desc": "Kontinuierliche Unterstützung" }
+ ]
+ },
+ "contact": {
+ "title": "Kontaktieren Sie uns",
+ "subtitle": "Lassen Sie sich unverbindlich zu Ihren Versicherungsmöglichkeiten beraten.",
+ "primaryCta": "Jetzt anrufen",
+ "secondaryCta": "Termin vereinbaren"
+ }
+}
diff --git a/public/locales/de/service.json b/public/locales/de/service.json
new file mode 100644
index 0000000..64d2c88
--- /dev/null
+++ b/public/locales/de/service.json
@@ -0,0 +1,79 @@
+{
+ "servicesTitle": "Unsere Service-Leistungen",
+ "services": [
+ {
+ "title": "Kundenberatung",
+ "description": "Persönliche Beratung für alle Ihre Fragen",
+ "features": [
+ "Telefonische Beratung",
+ "Vor-Ort-Termine",
+ "Video-Beratung",
+ "E-Mail-Support"
+ ]
+ },
+ {
+ "title": "Vertragsverwaltung",
+ "description": "Umfassende Verwaltung Ihrer Versicherungen",
+ "features": [
+ "Vertragsprüfung",
+ "Schadenmeldung",
+ "Vertragsanpassung",
+ "Kündigungshilfe"
+ ]
+ },
+ {
+ "title": "Schadenabwicklung",
+ "description": "Schnelle und professionelle Schadenregulierung",
+ "features": [
+ "24/7 Schadenhotline",
+ "Digitale Schadenmeldung",
+ "Unterstützung bei Regulierung",
+ "Dokumentenmanagement"
+ ]
+ },
+ {
+ "title": "Informationsdienste",
+ "description": "Alles rund um Ihre Versicherungsinformationen",
+ "features": [
+ "Informationsmaterial",
+ "Vertragsunterlagen",
+ "Bedingungswerke",
+ "Online-Portal"
+ ]
+ }
+ ],
+ "contactTitle": "So erreichen Sie uns",
+ "contactOptions": [
+ {
+ "title": "Telefonische Beratung",
+ "description": "Erreichen Sie uns direkt telefonisch",
+ "contact": "0211 / 97629355",
+ "hours": "Mo-Fr: 9:00 - 18:00 Uhr"
+ },
+ {
+ "title": "E-Mail-Kontakt",
+ "description": "Schreiben Sie uns jederzeit eine E-Mail",
+ "contact": "info@finanzen-mizera.de",
+ "hours": "Antwort innerhalb von 24 Stunden"
+ },
+ {
+ "title": "Rückrufservice",
+ "description": "Wir rufen Sie gerne zurück",
+ "contact": "Rückruf anfordern",
+ "hours": "Mo-Fr: 9:00 - 18:00 Uhr"
+ }
+ ],
+ "benefitsTitle": "Besondere Service-Vorteile",
+ "benefits": [
+ "24/7 Notfall-Hotline",
+ "Persönlicher Ansprechpartner",
+ "Schnelle Schadenabwicklung",
+ "Digitale Verwaltung",
+ "Transparente Kommunikation",
+ "Regelmäßige Updates"
+ ],
+ "helpTitle": "Benötigen Sie Hilfe?",
+ "helpDescription": "Unser Service-Team steht Ihnen gerne zur Verfügung. Kontaktieren Sie uns für eine persönliche Beratung oder bei Fragen zu Ihren Versicherungen.",
+ "phoneButton": "Jetzt anrufen",
+ "callbackButton": "Rückruf anfordern"
+}
diff --git a/public/locales/de/unfall.json b/public/locales/de/unfall.json
new file mode 100644
index 0000000..2f798ed
--- /dev/null
+++ b/public/locales/de/unfall.json
@@ -0,0 +1,79 @@
+{
+ "benefitsTitle": "Was die Unfallversicherung leistet",
+ "benefits": [
+ "Invaliditätsabsicherung",
+ "Todesfallabsicherung",
+ "Unfallrente bei dauerhafter Invalidität",
+ "Kostenübernahme für Bergungs- und Rettungskosten",
+ "Kosmetische Operationen",
+ "Krankenhaustagegeld"
+ ],
+ "coverageTitle": "Versicherungsleistungen im Detail",
+ "coverage": [
+ {
+ "title": "Unfallinvalidität",
+ "description": "Leistung bei dauerhafter Invalidität durch Unfall",
+ "features": [
+ "Gliedertaxe",
+ "Progressionsregel",
+ "Dynamisierung"
+ ]
+ },
+ {
+ "title": "Unfalltod",
+ "description": "Kapitalzahlung bei tödlichem Unfall",
+ "features": [
+ "Sofortzahlung",
+ "Höhe vereinbar",
+ "Steuerfrei"
+ ]
+ },
+ {
+ "title": "Unfallrente",
+ "description": "Monatliche Rente bei Arbeitsunfähigkeit",
+ "features": [
+ "Karenzzeit",
+ "Dauer vereinbar",
+ "Steuerpflichtig"
+ ]
+ }
+ ],
+ "examplesTitle": "Typische Unfallszenarien",
+ "examples": [
+ {
+ "title": "Verkehrsunfall",
+ "description": "Bei einem Autounfall erleiden Sie Rückenverletzungen, die zu einer dauerhaften Invalidität führen."
+ },
+ {
+ "title": "Haushaltsunfall",
+ "description": "Sie stürzen auf einer glatten Treppe und brechen sich mehrere Knochen."
+ },
+ {
+ "title": "Sportunfall",
+ "description": "Beim Fußballspielen erleiden Sie einen Kreuzbandriss mit langen Folgen."
+ },
+ {
+ "title": "Arbeitsunfall",
+ "description": "Bei der Arbeit verletzen Sie sich an einer Maschine schwer."
+ }
+ ],
+ "specialFeaturesTitle": "Besondere Leistungen",
+ "specialFeatures": [
+ "Weltweiter Versicherungsschutz",
+ "24-Stunden-Deckung",
+ "Schlüsselverlust mitversichert",
+ "Bergungs- und Rettungskosten",
+ "Kosmetische Operationen",
+ "Krankenhaustagegeld"
+ ],
+ "importantTitle": "Wichtige Hinweise",
+ "importantNotes": [
+ "Die Unfallversicherung ergänzt die gesetzliche Unfallversicherung.",
+ "Auch im Urlaub und im Ausland sind Sie versichert.",
+ "Kinder können oft kostenlos mitversichert werden."
+ ],
+ "contactTitle": "Unfallversicherung abschließen",
+ "contactDescription": "Lassen Sie sich von unseren Experten zur optimalen Unfallversicherung beraten und sichern Sie sich und Ihre Familie finanziell ab.",
+ "phoneButton": "Beratung vereinbaren",
+ "emailButton": "Angebot anfordern"
+}
diff --git a/public/locales/pl/agentur.json b/public/locales/pl/agentur.json
new file mode 100644
index 0000000..905394e
--- /dev/null
+++ b/public/locales/pl/agentur.json
@@ -0,0 +1,164 @@
+{
+ "hero": {
+ "kicker": "O naszej agencji",
+ "title": "Agentur Mizera & Partner.",
+ "subtitle": "Niezależnie, przejrzyście i osobiście – od 1994 roku po Twojej stronie.",
+ "primaryCta": "Skorzystaj z konsultacji",
+ "secondaryCta": "Oblicz teraz"
+ },
+ "intro": {
+ "title": "O naszej agencji",
+ "subtitle": "Niezależnie, przejrzyście i osobiście – od 1994 roku"
+ },
+ "sections": [
+ {
+ "title": "Nasza filozofia",
+ "description": "Niezależnie, przejrzyście i osobiście – od 1994 roku",
+ "features": [
+ "Niezależność od towarzystw ubezpieczeniowych",
+ "Przejrzyste i zrozumiałe doradztwo",
+ "Rozwiązania dopasowane dla klientów prywatnych i firm",
+ "Długoterminowe relacje z klientami"
+ ]
+ },
+ {
+ "title": "Nasze wartości",
+ "description": "Co jest dla nas ważne w doradztwie",
+ "features": [
+ "Osobista opieka na miejscu",
+ "Regularne szkolenia",
+ "Uczciwy stosunek ceny do zakresu",
+ "Jakość i niezawodność"
+ ]
+ },
+ {
+ "title": "Nasz zespół",
+ "description": "Doświadczenie i wiedza – dostępni dla Ciebie",
+ "features": [
+ "Marian Adam – właściciel",
+ "Specjalista ubezpieczeniowy (BWV)",
+ "W branży od 1994 roku",
+ "Specjalizacja: pracownicze programy emerytalne (DVA)"
+ ]
+ },
+ {
+ "title": "Jak pracujemy",
+ "description": "Strukturalnie, niezależnie i z fokussem na najważniejsze",
+ "features": [
+ "Porównanie ponad 50 towarzystw ubezpieczeniowych",
+ "Indywidualna analiza ryzyka",
+ "Regularny przegląd polis",
+ "Wsparcie w razie szkody"
+ ]
+ }
+ ],
+ "achievementsTitle": "Nasze wyniki w liczbach",
+ "achievements": [
+ "Ponad 25 lat doświadczenia",
+ "Ponad 1 000 zadowolonych klientów",
+ "50+ partnerów ubezpieczeniowych",
+ "Certyfikowani eksperci",
+ "Niezależne doradztwo",
+ "Osobista opieka"
+ ],
+ "contact": {
+ "title": "Poznaj nas",
+ "subtitle": "Chętnie poznamy Cię osobiście i przedstawimy naszą agencję.",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Skontaktuj się"
+ },
+ "tabs": {
+ "overview": "Filozofia",
+ "leistungen": "Usługi agencji",
+ "philosophie": "Ubezpieczenia partnerskie",
+ "kontakt": "Usługi finansowe",
+ "links": "Linki",
+ "vermoegensverwaltung": "Zarządzanie majątkiem",
+ "investmentbanken": "Banki inwestycyjne"
+ },
+ "philosophy": {
+ "title": "Filozofia",
+ "subtitle": "Niezależnie, przejrzyście i osobiście – od 1994 roku po Twojej stronie.",
+ "description": "Jako niezależny makler działamy wyłącznie w Twoim interesie. Znajdujemy najlepsze rozwiązania spośród ponad 50 towarzystw ubezpieczeniowych – bez ukrytych kosztów i z pełną transparentnością.",
+ "points": [
+ "Niezależność od towarzystw ubezpieczeniowych",
+ "Przejrzyste i zrozumiałe doradztwo",
+ "Rozwiązania dopasowane dla klientów prywatnych i firm",
+ "Długoterminowe relacje z klientami"
+ ]
+ },
+ "leistungen": {
+ "title": "Usługi agencji",
+ "subtitle": "Kompleksowe doradztwo ubezpieczeniowe i finansowe",
+ "description": "Oferujemy pełne spektrum usług – od analizy potrzeb przez porównanie ofert aż do wsparcia w razie szkody. Skupiamy się na tym, co dla Ciebie ważne.",
+ "points": [
+ "Analiza potrzeb i ryzyka",
+ "Porównanie ponad 50 towarzystw ubezpieczeniowych",
+ "Indywidualne dopasowanie polis",
+ "Wsparcie w razie szkody",
+ "Regularny przegląd i optymalizacja polis"
+ ]
+ },
+ "partnerversicherungen": {
+ "title": "Ubezpieczenia partnerskie",
+ "subtitle": "Nasi partnerzy ubezpieczeniowi",
+ "description": "Współpracujemy z wiodącymi towarzystwami ubezpieczeniowymi, aby zapewnić Ci najlepsze warunki. Poniżej znajdziesz alfabetyczną listę naszych partnerów z linkami do ich stron.",
+ "note": "Kliknij na logo lub nazwę, aby przejść do strony partnera."
+ },
+ "finanzdienstleistungen": {
+ "title": "Usługi finansowe",
+ "subtitle": "Kompleksowe doradztwo finansowe",
+ "description": "Oprócz ubezpieczeń oferujemy również doradztwo w zakresie finansów – od kredytów hipotecznych po inwestycje i emerytury.",
+ "points": [
+ "Doradztwo kredytowe hipoteczne",
+ "Planowanie emerytalne",
+ "Inwestycje i zarządzanie majątkiem",
+ "Porównanie ofert finansowych",
+ "Wsparcie w decyzjach finansowych"
+ ]
+ },
+ "links": {
+ "title": "Linki",
+ "subtitle": "Przydatne linki i zasoby"
+ },
+ "vermoegensverwaltung": {
+ "title": "Zarządzanie majątkiem",
+ "subtitle": "Strukturalne planowanie majątku – transparentnie i niezależnie",
+ "description": "Wspieramy Cię w strukturalnym planowaniu majątku – transparentnie, niezależnie i zorientowane na Twoje cele.",
+ "services": [
+ {
+ "title": "Analiza majątku",
+ "description": "Podstawowa analiza Twojej obecnej sytuacji finansowej i majątkowej."
+ },
+ {
+ "title": "Strategia inwestycyjna",
+ "description": "Opracowanie spersonalizowanej strategii inwestycyjnej zgodnej z Twoimi celami."
+ },
+ {
+ "title": "Dywersyfikacja",
+ "description": "Dywersyfikacja inwestycji w celu minimalizacji ryzyka i maksymalizacji zysków."
+ },
+ {
+ "title": "Regularny przegląd",
+ "description": "Regularny przegląd i dostosowanie strategii do zmieniających się warunków."
+ }
+ ]
+ },
+ "investmentbanken": {
+ "title": "Banki inwestycyjne",
+ "subtitle": "Nasi partnerzy bankowi",
+ "description": "Współpracujemy z renomowanymi bankami inwestycyjnymi, aby zapewnić Ci dostęp do najlepszych produktów finansowych.",
+ "partners": [
+ {
+ "name": "Commerzbank",
+ "url": "https://www.commerzbank.de",
+ "description": "Jedna z największych niemieckich banków z pełną gamą usług finansowych."
+ },
+ {
+ "name": "Sutor Bank",
+ "url": "https://www.sutorbank.de",
+ "description": "Specjalistyczny bank z naciskiem na doradztwo inwestycyjne i zarządzanie majątkiem."
+ }
+ ]
+ }
+}
diff --git a/public/locales/pl/autoversicherung.json b/public/locales/pl/autoversicherung.json
new file mode 100644
index 0000000..6925e8c
--- /dev/null
+++ b/public/locales/pl/autoversicherung.json
@@ -0,0 +1,75 @@
+{
+ "page": {
+ "title": "Ubezpieczenie OC komunikacyjne"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyka wypadków",
+ "calculator": "Porównywarka OC/AC",
+ "form": "Formularz zapytania",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Taryfikator mandatów"
+ },
+ "hero": {
+ "badge": "Bezpiecznie w drodze – ochrona prawna",
+ "title": "Ubezpieczenie OC komunikacyjne",
+ "subtitle": "obowiązkowa ochrona podstawowa dla wszystkich pojazdów",
+ "description": "OC komunikacyjne jest obowiązkowe. Chroni przed wysokimi kosztami, gdy wyrządzisz szkodę osobom trzecim.",
+ "ctaOffer": "Poproś o ofertę",
+ "ctaConsulting": "Konsultacja",
+ "features": {
+ "f1": { "title": "Ubezpieczenie obowiązkowe", "desc": "bez niego nie pojedziesz" },
+ "f2": { "title": "Ochrona osób trzecich", "desc": "ludzie i mienie" }
+ },
+ "imageHint": "Auto, SUV, dostawczy",
+ "imageText": "Szybkie porównanie taryf – uczciwie i dopasowane do Twoich potrzeb."
+ },
+ "overview": {
+ "quick": {
+ "title": "Krótko i jasno",
+ "c1": { "title": "Wymagane prawem", "desc": "Bez OC nie ma rejestracji." },
+ "c2": { "title": "Warto porównać", "desc": "Składki i zakres mogą się mocno różnić." },
+ "c3": { "title": "Pomoc przy szkodzie", "desc": "Jasne kroki i możliwości kontaktu." }
+ },
+ "costs": {
+ "title": "Co wpływa na koszt OC komunikacyjnego?",
+ "c1": { "title": "Typ pojazdu", "desc": "Samochody sportowe i drogie modele oznaczają wyższe składki." },
+ "c2": { "title": "Profil kierowcy", "desc": "Wiek, doświadczenie i klasa bezszkodowa mocno wpływają na składkę." },
+ "c3": { "title": "Region", "desc": "W dużych miastach składki często są wyższe niż na wsi." },
+ "c4": { "title": "Przebieg roczny", "desc": "Roczne kilometry i dodatkowe opcje wpływają na koszt." },
+ "example": "Przykład: w Niemczech składki często wynoszą od ok. 300 € do ponad 1.000 € rocznie."
+ }
+ },
+ "details": {
+ "title": "Szczegóły i korzyści",
+ "description": "Poza obowiązkowym OC mogą być przydatne dodatkowe elementy (np. AC częściowe/pełne, assistance, ochrona kierowcy) – zależnie od pojazdu i sposobu użytkowania.",
+ "benefits": {
+ "b1": {
+ "title": "Wymagane prawem",
+ "desc": "Bez OC pojazd nie może uczestniczyć w ruchu drogowym"
+ },
+ "b2": {
+ "title": "Ochrona osób trzecich",
+ "desc": "Pokrywa szkody osobowe, majątkowe i finansowe poszkodowanych"
+ },
+ "b3": {
+ "title": "Wysokie sumy gwarancyjne",
+ "desc": "Wysokie limity dla szkód osobowych i majątkowych"
+ },
+ "b4": {
+ "title": "Atrakcyjna ochrona podstawowa",
+ "desc": "Konkurencyjne składki za wymagany prawem zakres"
+ }
+ },
+ "servicesTitle": "Świadczenia (wyciąg)",
+ "services": {
+ "s1": "Autocasco pełne (AC)",
+ "s2": "Autocasco częściowe",
+ "s3": "OC komunikacyjne",
+ "s4": "Ubezpieczenie NNW pasażerów",
+ "s5": "Assistance i pomoc drogowa",
+ "s6": "Ubezpieczenie dla młodych kierowców"
+ }
+ }
+}
diff --git a/public/locales/pl/car.json b/public/locales/pl/car.json
new file mode 100644
index 0000000..82de198
--- /dev/null
+++ b/public/locales/pl/car.json
@@ -0,0 +1,112 @@
+{
+ "title": "Ubezpieczenie samochodowe",
+ "subtitle": "Indywidualna ochrona Twojego pojazdu – konkurencyjne stawki w porównaniu z ponad 150 towarzystwami ubezpieczeniowymi",
+
+ "benefits": {
+ "title": "Twoje korzyści na pierwszy rzut oka",
+ "benefit1": "Oszczędź do 50% w porównaniu z obecną polisą",
+ "benefit2": "Osobiste doradztwo doświadczonych ekspertów ubezpieczeniowych",
+ "benefit3": "Kompleksowe porównanie ponad 150 towarzystw ubezpieczeniowych",
+ "benefit4": "Szybkie i bezproblemowe zawarcie umowy",
+ "benefit5": "Bezpłatne doradztwo bez ukrytych kosztów",
+ "benefit6": "Indywidualne dopasowanie do Twoich potrzeb"
+ },
+
+ "quote": {
+ "title": "Zamów bezpłatną i niezobowiązującą wycenę",
+ "subtitle": "Wypełnij formularz, a przygotujemy dla Ciebie spersonalizowaną ofertę."
+ },
+
+ "form": {
+ "required": "Pola wymagane",
+ "name": "Imię i nazwisko",
+ "email": "Adres e-mail",
+ "phone": "Numer telefonu",
+ "brand": "Marka pojazdu",
+ "model": "Model pojazdu",
+ "year": "Pierwsza rejestracja (DD.MM.RRRR)",
+ "license": "Numer rejestracyjny",
+ "coverage": "Pożądane ubezpieczenie",
+ "selectCoverage": "Wybierz z listy",
+ "additionalInfo": "Dodatkowe informacje (opcjonalne)",
+ "privacy": {
+ "text": "Wyrażam zgodę na przetwarzanie moich danych zgodnie z ",
+ "link": "polityką prywatności",
+ "suffix": "."
+ },
+ "submit": "Zamów bezpłatną wycenę",
+ "successMessage": "Dziękujemy za zapytanie! Otrzymaliśmy Twoje dane i skontaktujemy się z Tobą z indywidualną ofertą w ciągu 24 godzin.",
+ "errorMessage": "Niestety wystąpił błąd. Prosimy spróbować później lub skontaktować się z nami bezpośrednio."
+ },
+
+ "coverageOptions": {
+ "liability": "OC (Odpowiedzialność cywilna)",
+ "partial": "AC z wyłączeniem kradzieży",
+ "full": "Pełne AC (Auto Casco)",
+ "description": {
+ "liability": "Wymagane prawnie podstawowe ubezpieczenie od odpowiedzialności cywilnej wobec osób trzecich",
+ "partial": "Dodatkowa ochrona przed kradzieżą, pożarem i żywiołami",
+ "full": "Kompleksowa ochrona obejmująca również szkody własne"
+ }
+ },
+
+ "faqTitle": "Często zadawane pytania",
+ "faq1": {
+ "q": "Jakie dokumenty są potrzebne do wyceny?",
+ "a": "Do bezpłatnej wyceny potrzebujemy tylko kilku podstawowych informacji o Twoim pojeździe i dotychczasowym ubezpieczeniu."
+ },
+ "faq2": {
+ "q": "Czy mogę zmienić obecne ubezpieczenie?",
+ "a": "Tak, chętnie zajmiemy się wypowiedzeniem Twojej obecnej polisy w najbliższym możliwym terminie."
+ },
+ "faq3": {
+ "q": "Jak szybko otrzymam ofertę?",
+ "a": "Zazwyczaj otrzymujesz od nas bezpłatną wycenę w ciągu 24 godzin."
+ },
+ "faq4": {
+ "q": "Czy oferujecie również assistance?",
+ "a": "Tak, oferujemy różne pakiety assistance z kompleksowym zakresem ochrony."
+ },
+
+ "testimonials": {
+ "title": "Co mówią o nas klienci",
+ "items": [
+ {
+ "text": "Szybka i kompetentna obsługa. Zaoszczędziłem ponad 300€ rocznie!",
+ "author": "Tomasz M., Düsseldorf"
+ },
+ {
+ "text": "Wreszcie doradca ubezpieczeniowy, który znajduje czas i wszystko wyjaśnia w zrozumiały sposób.",
+ "author": "Sabina K., Mettmann"
+ },
+ {
+ "text": "Świetna obsługa! W razie problemów natychmiastowa reakcja. Zdecydowanie polecam!",
+ "author": "Michał B., Ratingen"
+ }
+ ]
+ },
+
+ "cta": {
+ "title": "Skorzystaj z bezpłatnej konsultacji",
+ "subtitle": "Umów się na niezobowiązujące spotkanie już dziś",
+ "button": "Umów wizytę"
+ },
+
+ "contact": {
+ "title": "Masz pytania?",
+ "subtitle": "Nasz zespół jest do Twojej dyspozycji",
+ "phone": "+48 211 976 29 55",
+ "email": "info@finanzen-mizera.de",
+ "hours": "Pon-Pt: 9:00 - 18:00\nSob: 10:00 - 14:00",
+ "address": "Rosmarinstraße 30 d, 40235 Düsseldorf"
+ },
+
+ "experience": {
+ "title": "Ponad 30 lat doświadczenia",
+ "description": "Od 1994 roku działam w branży ubezpieczeniowej i oferuję Ci moje wieloletnie doświadczenie dla indywidualnej porady."
+ },
+
+ "legal": {
+ "notice": "Przedstawione korzyści mają charakter przykładowy i mogą się różnić w zależności od dostawcy. Obowiązują odpowiednie warunki ubezpieczenia. Indywidualna porada jest dostępna na życzenie."
+ }
+}
diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
new file mode 100644
index 0000000..842aa9a
--- /dev/null
+++ b/public/locales/pl/common.json
@@ -0,0 +1,40 @@
+{
+ "language": "Język",
+ "home": "Strona główna",
+ "contact": "Kontakt",
+ "privacy": "Ochrona danych",
+ "links": "Linki",
+ "loading": "Ładowanie...",
+ "submit": "Wyślij",
+ "back": "Wstecz",
+ "next": "Dalej",
+ "required": "Wymagane",
+ "emailInvalid": "Nieprawidłowy adres e-mail",
+ "phoneInvalid": "Nieprawidłowy numer telefonu",
+ "successMessage": "Twoja wiadomość została wysłana!",
+ "errorMessage": "Wystąpił błąd. Prosimy spróbować później.",
+ "generalNotice": {
+ "text": "Uwaga:\nWskazówki i informacje na tych stronach mają charakter ogólny i niewiążący. To prywatna opinia bez gwarancji poprawności, kompletności ani odpowiedzialności i nie zastępuje indywidualnej porady. Wiążące są wyłącznie warunki ubezpieczenia danego ubezpieczyciela."
+ },
+ "nav": {
+ "home": "Strona główna",
+ "car": "Ubezpieczenie samochodu",
+ "privacy": "Ochrona danych",
+ "links": "Linki",
+ "contact": "Kontakt"
+ },
+ "buttons": {
+ "submit": "Wyślij",
+ "cancel": "Anuluj",
+ "back": "Wstecz",
+ "next": "Dalej",
+ "readMore": "Czytaj więcej",
+ "contactUs": "Skontaktuj się z nami"
+ },
+ "footer": {
+ "copyright": "© {year} Wszelkie prawa zastrzeżone",
+ "imprint": "Imprint",
+ "terms": "Warunki korzystania",
+ "privacyPolicy": "Polityka prywatności"
+ }
+}
diff --git a/public/locales/pl/contact.json b/public/locales/pl/contact.json
new file mode 100644
index 0000000..b378d4e
--- /dev/null
+++ b/public/locales/pl/contact.json
@@ -0,0 +1,177 @@
+{
+ "hero": {
+ "kicker": "Kontakt",
+ "title": "Jesteśmy dla Ciebie.",
+ "subtitle": "Kontakt, adresy i serwis – szybko i przejrzyście."
+ },
+ "title": "Marian-Adam Mizera",
+ "subtitle": "Dyplomowany doradca ubezpieczeniowy (BWV) | Makler ubezpieczeniowy",
+ "pageTitle": "Kontakt",
+ "tabs": {
+ "contact": "Kontakt i adresy",
+ "card": "Wizytówka",
+ "reasons": "10 dobrych powodów",
+ "service": "Serwis",
+ "impressum": "Impressum",
+ "leistungen": "Usługi",
+ "datenschutz": "Ochrona danych",
+ "links": "Linki",
+ "news": "Aktualności/News",
+ "faq": "FAQ"
+ },
+ "news": {
+ "title": "Aktualności/News",
+ "subtitle": "Kliknij pozycję, aby wyświetlić szczegóły.",
+ "items": [
+ {
+ "key": "news-1",
+ "title": "Hartz IV – jak chronić swój majątek?",
+ "content": "Krótki przegląd kwot wolnych, majątku chronionego i typowych pułapek. Chętnie doradzimy indywidualnie w Twojej sytuacji."
+ },
+ {
+ "key": "news-2",
+ "title": "Zasiłek rodzicielski (Elterngeld)",
+ "content": "Podstawowe informacje o uprawnieniach, wniosku i terminach. Pomożemy dopasować ochronę ubezpieczeniową i plan finansowy do sytuacji rodzinnej i zawodowej."
+ },
+ {
+ "key": "news-3",
+ "title": "Zasiłek na dziecko (Kindergeld)",
+ "content": "Przegląd: komu przysługuje, jakie dokumenty są potrzebne i jakie są terminy. W razie pytań o zabezpieczenie i przyszłość dzieci – pomożemy."
+ },
+ {
+ "key": "news-4",
+ "title": "Dodatek na dzieci (Kinderzuschlag)",
+ "content": "Krótko: warunki, procedura składania wniosku i częste pytania. Podpowiemy, jakie dokumenty są zwykle wymagane."
+ },
+ {
+ "key": "news-5",
+ "title": "Reforma zdrowotna – obowiązek ubezpieczenia od 16 czerwca 2008",
+ "content": "Co oznacza obowiązek ubezpieczenia i jakie są opcje w GKV/PKV? Sprawdzimy z Tobą, które rozwiązanie pasuje do Twojej sytuacji."
+ },
+ {
+ "key": "news-6",
+ "title": "Podatek od zysków kapitałowych (Abgeltungsteuer)",
+ "content": "Kompaktowy przegląd opodatkowania zysków kapitałowych i możliwego wpływu na strategię oszczędzania i inwestowania. W szczegółach warto skorzystać z doradztwa."
+ }
+ ]
+ },
+ "faq": {
+ "title": "FAQ",
+ "subtitle": "Kliknij temat, aby wyświetlić szczegóły."
+ },
+ "profile": {
+ "role": "Niezależny doradca finansowy i makler ubezpieczeniowy",
+ "qual1": "Certyfikowany specjalista ubezpieczeniowy (BWV)",
+ "qual2": "Ekspert pracowniczych programów emerytalnych (DVA)",
+ "qual2Note": "(*Niemiecka Akademia Ubezpieczeniowa, Monachium*)",
+ "licenseTitle": "Makler ubezpieczeniowy",
+ "licenseSuffix": "z zezwoleniem",
+ "licenseLaw": "zgodnie z § 34d ust. 1 GewO",
+ "since": "Ubezpieczenia od 1994"
+ },
+ "office": {
+ "title": "HomeOffice:",
+ "note": "(Spotkania biurowe – po wcześniejszym umówieniu telefonicznym)"
+ },
+ "labels": {
+ "phone": "Telefon",
+ "mobile": "Komórka"
+ },
+ "appointmentNote": "Terminy po wcześniejszym umówieniu telefonicznym.",
+ "qr": {
+ "title": "Kod QR"
+ },
+ "images": {
+ "profileAlt": "Marian-Adam Mizera",
+ "qrAlt": "Kod QR – Agentur Mizera",
+ "businessCardFrontAlt": "Wizytówka – przód",
+ "businessCardBackAlt": "Wizytówka – tył"
+ },
+ "iframes": {
+ "service": "Serwis",
+ "impressum": "Impressum",
+ "leistungen": "Usługi",
+ "datenschutz": "Ochrona danych",
+ "links": "Linki"
+ },
+ "about": {
+ "title": "O mnie",
+ "description": "Niezależny doradca finansowy i ubezpieczeniowy z ponad 26-letnim doświadczeniem w branży ubezpieczeniowej.",
+ "office": "Biuro w Düsseldorfie",
+ "appointment": "(Spotkania po wcześniejszym umówieniu telefonicznym)",
+ "address": "Rosmarinstraße 30 d, 40235 Düsseldorf"
+ },
+ "contactForm": {
+ "title": "Szybkie zapytanie"
+ },
+ "contactInfo": {
+ "title": "Kontakt",
+ "mobile": "Komórka"
+ },
+ "businessCard": {
+ "title": "Moja wizytówka",
+ "subtitle": "Do zapisania lub wydruku (dwustronnie)",
+ "front": "Przód",
+ "back": "Tył"
+ },
+ "submenu": {
+ "title": "Podmenu",
+ "profile": "Profil",
+ "reasons": "10 powodów",
+ "form": "Formularz",
+ "info": "Informacje",
+ "businessCard": "Wizytówka"
+ },
+ "reasons": {
+ "title": "10 dobrych powodów",
+ "items": [
+ {
+ "title": "Doświadczenie",
+ "description": "Jestem na rynku ubezpieczeniowym od ponad {{years}} lat - a Ty możesz na tym skorzystać: dzięki kompleksowej analizie potrzeb i optymalnym, spersonalizowanym ofertom."
+ },
+ {
+ "title": "Niezależność",
+ "description": "Działam wyłącznie w Twoim interesie - niezależnie od jakichkolwiek zobowiązań wobec konkretnego towarzystwa ubezpieczeniowego."
+ },
+ {
+ "title": "Przejrzystość",
+ "description": "Znajduję rozwiązania szyte na miarę, idealnie dopasowane do Twoich potrzeb."
+ },
+ {
+ "title": "Jakość",
+ "description": "Dbam o nowoczesny zakres ubezpieczenia i najlepszy możliwy stosunek jakości do ceny."
+ },
+ {
+ "title": "Zaufanie",
+ "description": "Jestem Twoim partnerem - na całe życie! Wspólnie wyznaczamy cele i motywujemy się do ich osiągnięcia."
+ },
+ {
+ "title": "Indywidualne podejście",
+ "description": "Analizuję Twoją sytuację i opracowuję indywidualną koncepcję na podstawie Twoich życzeń i wymagań: przejrzystą, niezależną i niezobowiązującą!"
+ },
+ {
+ "title": "Ekskluzywność",
+ "description": "Porównuję dla Ciebie! Skorzystaj z ekskluzywnych koncepcji ubezpieczenia majątkowego dla osób prywatnych i firm oferowanych przez moich partnerów."
+ },
+ {
+ "title": "Wszechstronność",
+ "description": "Mówię Twoim językiem i chętnie pomogę Ci również w języku niemieckim!"
+ },
+ {
+ "title": "Dyskrecja",
+ "description": "Pracuję szybko, bez zbędnej biurokracji i całkowicie dyskretnie - szczególnie w przypadku szkód!"
+ },
+ {
+ "title": "Wszystko w jednym miejscu",
+ "description": "Zapewniam ciągłą opiekę i doradztwo: Mogę szybko zareagować, gdy na rynku pojawią się nowe produkty, zmienią się przepisy lub gdy Twoja sytuacja osobista ulegnie zmianie."
+ }
+ ]
+ },
+ "experience": {
+ "title": "Ponad {{years}} lat doświadczenia",
+ "description": "Jestem na rynku ubezpieczeniowym od ponad {{years}} lat - a Ty możesz na tym skorzystać: dzięki kompleksowej analizie potrzeb i optymalnym, spersonalizowanym ofertom."
+ },
+ "legalNotice": {
+ "text": "Uwaga: Wskazówki i informacje zawarte na tych stronach stanowią ogólne, niezobowiązujące porady dotyczące ubezpieczeń. Mimo mojego zawodowego doświadczenia, są to prywatne opinie, bez roszczeń co do ich poprawności, bez odpowiedzialności i bez zastępowania porady. Obowiązujące przepisy prawne zawarte są w ogólnych warunkach ubezpieczenia odpowiedniego zakładu ubezpieczeń."
+ }
+}
diff --git a/public/locales/pl/drittfahrerSchutz.json b/public/locales/pl/drittfahrerSchutz.json
new file mode 100644
index 0000000..f0f3251
--- /dev/null
+++ b/public/locales/pl/drittfahrerSchutz.json
@@ -0,0 +1,23 @@
+{
+ "title": "Ochrona dodatkowego kierowcy",
+ "hero": {
+ "badge": "Gdy ktoś inny prowadzi Twoje auto",
+ "title": "Ochrona dodatkowego kierowcy",
+ "subtitle": "dla rodziny, znajomych i okazjonalnych kierowców",
+ "description": "Więcej kierowców to większe ryzyko i często ograniczenia w umowie. Z odpowiednią ochroną zabezpieczysz się uczciwie.",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki wypadków",
+ "calculator": "Porównywarka",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Taryfikator mandatów"
+ },
+ "form": {
+ "description": "Wystarczą krótkie informacje – szczegóły ustalimy w rozmowie."
+ }
+}
diff --git a/public/locales/pl/fairmobil.json b/public/locales/pl/fairmobil.json
new file mode 100644
index 0000000..ff9b24a
--- /dev/null
+++ b/public/locales/pl/fairmobil.json
@@ -0,0 +1,43 @@
+{
+ "hero": {
+ "kicker": "FairMobil",
+ "title": "Uczciwa i zrównoważona mobilność",
+ "subtitle": "Niezależne doradztwo w zakresie zrównoważonych ubezpieczeń pojazdów – z korzyścią dla Ciebie i środowiska.",
+ "primaryCta": "Oblicz teraz",
+ "secondaryCta": "Dowiedz się więcej"
+ },
+ "benefitsTitle": "Twoje korzyści z FairMobil",
+ "benefits": [
+ {
+ "title": "Uczciwa taryfa",
+ "description": "Przejrzyste warunki i uczciwe składki"
+ },
+ {
+ "title": "Zrównoważone",
+ "description": "Wspieramy ekologiczne formy mobilności"
+ },
+ {
+ "title": "Elastyczne",
+ "description": "Umowy dopasowane do Twoich potrzeb"
+ },
+ {
+ "title": "Korzystne",
+ "description": "Konkurencyjne składki dla zrównoważonej mobilności"
+ }
+ ],
+ "servicesTitle": "Nasze usługi ubezpieczeniowe FairMobil",
+ "services": [
+ "Ubezpieczenie mobilności elektrycznej",
+ "Ubezpieczenie pojazdów hybrydowych",
+ "Taryfa zielonej energii dla aut elektrycznych",
+ "Ubezpieczenie kabla do ładowania",
+ "Ubezpieczenie baterii",
+ "Zielone rozwiązania ubezpieczeniowe"
+ ],
+ "contact": {
+ "title": "Konsultacja FairMobil",
+ "subtitle": "Skorzystaj z niezobowiązującej konsultacji w sprawie najlepszego zrównoważonego ubezpieczenia pojazdu.",
+ "phoneButton": "Zadzwoń teraz",
+ "emailButton": "Poproś o ofertę"
+ }
+}
diff --git a/public/locales/pl/familien-kinder.json b/public/locales/pl/familien-kinder.json
new file mode 100644
index 0000000..b35d6a3
--- /dev/null
+++ b/public/locales/pl/familien-kinder.json
@@ -0,0 +1,19 @@
+{
+ "title": "Rodzina i dzieci",
+ "hero": {
+ "kicker": "Rodzina i dzieci",
+ "title": "Ochrona tego, co najważniejsze",
+ "subtitle": "Ubezpieczenia dla rodzin i dzieci – jasno, dopasowane i uczciwie.",
+ "primaryCta": "Oblicz składkę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "packages": "Pakiety",
+ "health": "Zdrowie",
+ "accident": "Wypadek",
+ "liability": "OC",
+ "travel": "Podróż",
+ "retirement": "Zabezpieczenie"
+ }
+}
diff --git a/public/locales/pl/finanzen.json b/public/locales/pl/finanzen.json
new file mode 100644
index 0000000..dd1fdc4
--- /dev/null
+++ b/public/locales/pl/finanzen.json
@@ -0,0 +1,42 @@
+{
+ "hero": {
+ "kicker": "Finanse i zabezpieczenie",
+ "title": "Bezpieczeństwo finansowe z planem.",
+ "subtitle": "Niezależne doradztwo w zakresie budowania majątku, emerytury i finansowania – jasno i przejrzyście.",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Wszystkie usługi"
+ },
+ "intro": {
+ "title": "Finanse i zabezpieczenie",
+ "subtitle": "Budowanie majątku, zabezpieczenie i finansowanie – przejrzyście i zrozumiale."
+ },
+ "services": {
+ "title": "Nasze usługi w skrócie"
+ },
+ "tabs": {
+ "finanzberatung": "Doradztwo finansowe",
+ "vorsorge": "Rozwiązania emerytalne",
+ "vermoegen": "Zarządzanie majątkiem",
+ "kredit": "Doradztwo kredytowe"
+ },
+ "badge": {
+ "since1994": "Po Twojej stronie od 1994"
+ },
+ "finanzberatung": {
+ "headline": "Doradztwo finansowe",
+ "subheadline": "Majątek, zabezpieczenie, plan",
+ "welcome": "Witamy",
+ "lead": "Kompleksowe doradztwo dla Twojej przyszłości finansowej",
+ "featuresTitle": "Zakres",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Zobacz usługi",
+ "imageCaption": "Plan finansowy – przejrzyście i zgodnie z Twoimi celami."
+ },
+ "highlightsTitle": "Czego możesz od nas oczekiwać",
+ "contact": {
+ "title": "Indywidualne doradztwo finansowe",
+ "subtitle": "Wspólnie opracujemy strategię dopasowaną do Twojej sytuacji i celów.",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Skontaktuj się"
+ }
+}
diff --git a/public/locales/pl/finanzen.json.bak.20260102142500 b/public/locales/pl/finanzen.json.bak.20260102142500
new file mode 100644
index 0000000..b597032
Binary files /dev/null and b/public/locales/pl/finanzen.json.bak.20260102142500 differ
diff --git a/public/locales/pl/finanzen.utf8.json b/public/locales/pl/finanzen.utf8.json
new file mode 100644
index 0000000..dd1fdc4
--- /dev/null
+++ b/public/locales/pl/finanzen.utf8.json
@@ -0,0 +1,42 @@
+{
+ "hero": {
+ "kicker": "Finanse i zabezpieczenie",
+ "title": "Bezpieczeństwo finansowe z planem.",
+ "subtitle": "Niezależne doradztwo w zakresie budowania majątku, emerytury i finansowania – jasno i przejrzyście.",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Wszystkie usługi"
+ },
+ "intro": {
+ "title": "Finanse i zabezpieczenie",
+ "subtitle": "Budowanie majątku, zabezpieczenie i finansowanie – przejrzyście i zrozumiale."
+ },
+ "services": {
+ "title": "Nasze usługi w skrócie"
+ },
+ "tabs": {
+ "finanzberatung": "Doradztwo finansowe",
+ "vorsorge": "Rozwiązania emerytalne",
+ "vermoegen": "Zarządzanie majątkiem",
+ "kredit": "Doradztwo kredytowe"
+ },
+ "badge": {
+ "since1994": "Po Twojej stronie od 1994"
+ },
+ "finanzberatung": {
+ "headline": "Doradztwo finansowe",
+ "subheadline": "Majątek, zabezpieczenie, plan",
+ "welcome": "Witamy",
+ "lead": "Kompleksowe doradztwo dla Twojej przyszłości finansowej",
+ "featuresTitle": "Zakres",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Zobacz usługi",
+ "imageCaption": "Plan finansowy – przejrzyście i zgodnie z Twoimi celami."
+ },
+ "highlightsTitle": "Czego możesz od nas oczekiwać",
+ "contact": {
+ "title": "Indywidualne doradztwo finansowe",
+ "subtitle": "Wspólnie opracujemy strategię dopasowaną do Twojej sytuacji i celów.",
+ "primaryCta": "Umów konsultację",
+ "secondaryCta": "Skontaktuj się"
+ }
+}
diff --git a/public/locales/pl/flottenversicherung.json b/public/locales/pl/flottenversicherung.json
new file mode 100644
index 0000000..0719f06
--- /dev/null
+++ b/public/locales/pl/flottenversicherung.json
@@ -0,0 +1,25 @@
+{
+ "title": "Ubezpieczenie floty",
+ "hero": {
+ "badge": "Dla firm i flot",
+ "title": "Ubezpieczenie floty",
+ "subtitle": "optymalne rozwiązania flotowe dla Twojej firmy",
+ "description": "Centralna polisa, elastyczny zakres i atrakcyjne warunki – dobierzemy rozwiązanie dla Twojej floty.",
+ "imageHint": "OC + AC dla flot",
+ "imageText": "Indywidualna kalkulacja – dopasowana do użycia i ryzyka.",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki wypadków",
+ "calculator": "Porównywarka",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Taryfikator mandatów"
+ },
+ "form": {
+ "description": "Podaj kilka informacji – przygotujemy dopasowaną ofertę flotową."
+ }
+}
diff --git a/public/locales/pl/footer.json b/public/locales/pl/footer.json
new file mode 100644
index 0000000..3b5b3ec
--- /dev/null
+++ b/public/locales/pl/footer.json
@@ -0,0 +1,23 @@
+{
+ "about": {
+ "description": "Twój zaufany partner ubezpieczeniowy w Düsseldorfie"
+ },
+ "sections": {
+ "contact": "Kontakt",
+ "social": "Media społecznościowe",
+ "links": "Linki"
+ },
+ "contact": {
+ "mobile": "Telefon komórkowy",
+ "office": "Biuro Düsseldorf",
+ "fax": "Faks biuro Düsseldorf",
+ "email": "E-mail",
+ "website": "Strona internetowa",
+ "whatsapp": "WhatsApp",
+ "externalLink": "Link zewnętrzny"
+ },
+ "bottom": {
+ "externalNotice": "Linki do usług zewnętrznych otwierają strony osób trzecich.",
+ "copyright": "© {{year}} Agentur Mizera & Partner. Wszelkie prawa zastrzeżone."
+ }
+}
diff --git a/public/locales/pl/geschaeftskunden.json b/public/locales/pl/geschaeftskunden.json
new file mode 100644
index 0000000..fccdc37
--- /dev/null
+++ b/public/locales/pl/geschaeftskunden.json
@@ -0,0 +1,88 @@
+{
+ "cta": {
+ "title": "Gotowy na optymalną ochronę?",
+ "contact": "Skontaktuj się",
+ "service": "Nasze usługi",
+ "subtitle": "Skontaktuj się z nami w sprawie niezobowiązującej konsultacji"
+ },
+ "hero": {
+ "kicker": "Ubezpieczenia dla firm",
+ "title": "Bezpieczeństwo dla Twojej firmy.",
+ "secondaryCta": "Wszystkie usługi",
+ "primaryCta": "Skorzystaj z konsultacji",
+ "subtitle": "Profesjonalne doradztwo ubezpieczeniowe dla firm i osób samozatrudnionych – indywidualnie, przejrzyście i rzetelnie."
+ },
+ "benefits": {
+ "items": [
+ {
+ "description": "Korzystne warunki dzięki dobrym relacjom z wiodącymi ubezpieczycielami",
+ "title": "Przewaga konkurencyjna"
+ },
+ {
+ "description": "Wszystko w jednym miejscu – od doradztwa po likwidację szkód",
+ "title": "Oszczędność czasu"
+ },
+ {
+ "description": "Indywidualna analiza ryzyka dla najlepszego stosunku ceny do zakresu",
+ "title": "Optymalizacja kosztów"
+ },
+ {
+ "description": "Dedykowany opiekun w sprawach ubezpieczeniowych",
+ "title": "Osobista opieka"
+ }
+ ],
+ "title": "Twoje korzyści jako klient firmowy"
+ },
+ "services": {
+ "items": [
+ {
+ "title": "Ubezpieczenia firmowe",
+ "description": "Kompleksowa ochrona Twojej firmy",
+ "features": [
+ "OC działalności",
+ "Ubezpieczenie mienia firmowego",
+ "Ubezpieczenie przerw w działalności"
+ ]
+ },
+ {
+ "title": "Ubezpieczenie floty",
+ "description": "Optymalne rozwiązania dla floty pojazdów",
+ "features": [
+ "Ubezpieczenie flotowe",
+ "Ubezpieczenie transportowe",
+ "NNW kierowcy"
+ ]
+ },
+ {
+ "title": "Ochrona pracowników",
+ "description": "Bezpieczeństwo dla Twoich pracowników",
+ "features": [
+ "Ubezpieczenie wypadkowe",
+ "Ubezpieczenie zasiłku chorobowego",
+ "Zabezpieczenie emerytalne"
+ ]
+ },
+ {
+ "title": "Zarządzanie majątkiem",
+ "description": "Strategiczne zabezpieczenie majątku firmy",
+ "features": [
+ "OC szkód majątkowych",
+ "Ubezpieczenie D\u0026O",
+ "Ubezpieczenie ochrony prawnej"
+ ]
+ }
+ ],
+ "title": "Rozwiązania dla firm"
+ },
+ "focus": {
+ "title": "Nasze obszary specjalizacji",
+ "items": {
+ "risk": "Ochrona ryzyka",
+ "property": "Ubezpieczenia majątkowe",
+ "fleet": "Ubezpieczenie flotowe",
+ "assets": "Zabezpieczenie majątku",
+ "liability": "OC działalności"
+ },
+ "learnMore": "Dowiedz się więcej"
+ }
+}
diff --git a/public/locales/pl/haftpflicht.json b/public/locales/pl/haftpflicht.json
new file mode 100644
index 0000000..dd604b1
--- /dev/null
+++ b/public/locales/pl/haftpflicht.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Ubezpieczenie OC",
+ "hero": {
+ "kicker": "Podstawowa ochrona dla każdego",
+ "title": "Ubezpieczenie OC",
+ "subtitle": "Ochrona przed roszczeniami – zabezpieczenie finansowe przy szkodach osobowych, rzeczowych i majątkowych",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki szkód",
+ "calculator": "Kalkulator OC",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Poradnik"
+ }
+}
diff --git a/public/locales/pl/hausrat.json b/public/locales/pl/hausrat.json
new file mode 100644
index 0000000..c85bbc1
--- /dev/null
+++ b/public/locales/pl/hausrat.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Ubezpieczenie mienia domowego",
+ "hero": {
+ "kicker": "Twój dom dobrze chroniony",
+ "title": "Ubezpieczenie mienia domowego",
+ "subtitle": "Bezpieczeństwo wyposażenia – ochrona przed włamaniem, pożarem, wodą i burzą",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki szkód",
+ "calculator": "Kalkulator",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Poradnik"
+ }
+}
diff --git a/public/locales/pl/home.json b/public/locales/pl/home.json
new file mode 100644
index 0000000..cbc8be9
--- /dev/null
+++ b/public/locales/pl/home.json
@@ -0,0 +1,144 @@
+{
+ "title": "Twoi doradcy ubezpieczeniowi w Düsseldorfie",
+ "subtitle": "Indywidualne rozwiązania ubezpieczeniowe dla klientów prywatnych i firmowych",
+
+ "hero": {
+ "title": "Twoje ubezpieczenie w dobrych rękach",
+ "subtitle": "Osobiste doradztwo i rozwiązania szyte na miarę Twoich potrzeb",
+ "cta": "Umów się na bezpłatną konsultację",
+ "finance": {
+ "kicker": "Finanse",
+ "title": "Bezpieczeństwo finansowe z planem",
+ "subtitle": "Niezależne doradztwo w zakresie budowania majątku, emerytury i finansowania – jasno i przejrzyście.",
+ "primaryCta": "Konsultacja",
+ "secondaryCta": "Finanse",
+ "topic1": "Agencja",
+ "topic2": "Klienci prywatni",
+ "topic3": "Seniorzy"
+ },
+ "contact": {
+ "kicker": "Kontakt",
+ "title": "Jesteśmy do Twojej dyspozycji.",
+ "subtitle": "Kontakt, adresy i serwis – szybko i przejrzyście.",
+ "primaryCta": "Kontakt",
+ "secondaryCta": "Usługi"
+ },
+ "private": {
+ "kicker": "Klienci prywatni",
+ "title": "Bezpieczeństwo dla rodziny i domu.",
+ "subtitle": "Indywidualne doradztwo w każdej sytuacji życiowej – od ubezpieczeń komunikacyjnych po emeryturę.",
+ "primaryCta": "Klienci prywatni",
+ "secondaryCta": "Konsultacja"
+ },
+ "seniors": {
+ "kicker": "Seniorzy",
+ "title": "Bezpieczeństwo i komfort na emeryturze.",
+ "subtitle": "Rozwiązania dopasowane do etapu życia – od ochrony zdrowia po zabezpieczenie emerytalne.",
+ "primaryCta": "Seniorzy",
+ "secondaryCta": "Konsultacja"
+ },
+ "business": {
+ "kicker": "Klienci firmowi",
+ "title": "Bezpieczeństwo dla Twojej firmy.",
+ "subtitle": "Profesjonalne doradztwo dla firm i samozatrudnionych – indywidualnie, przejrzyście i niezawodnie.",
+ "primaryCta": "Klienci firmowi",
+ "secondaryCta": "Konsultacja"
+ },
+ "bike": {
+ "kicker": "Motocykl",
+ "title": "Ubezpieczenie motocykla",
+ "subtitle": "Optymalna ochrona: OC, AC częściowe/pełne i elastyczne umowy.",
+ "primaryCta": "Oferta",
+ "secondaryCta": "Konsultacja",
+ "topic1": "Ubezpieczenie samochodu",
+ "topic2": "Motocykl",
+ "topic3": "Quad",
+ "topic4": "FairMobil",
+ "topic5": "Ochrona dodatkowego kierowcy",
+ "topic6": "Flota"
+ },
+ "family": {
+ "kicker": "Rodzina i dzieci",
+ "title": "Najlepsza ochrona dla najmłodszych.",
+ "subtitle": "Kompleksowe ubezpieczenia dla rodzin i dzieci – bezpieczeństwo od pierwszych dni.",
+ "primaryCta": "Oblicz składkę",
+ "secondaryCta": "Konsultacja"
+ },
+ "rechtsschutz": {
+ "kicker": "Ochrona prawna",
+ "title": "Ubezpieczenie ochrony prawnej",
+ "subtitle": "Ochrona w sporach – dobierzemy odpowiednie moduły i taryfy.",
+ "primaryCta": "Dowiedz się więcej",
+ "secondaryCta": "Konsultacja"
+ }
+ },
+
+ "topics": {
+ "title": "Tematy dla klientów prywatnych",
+ "subtitle": "Najważniejsze rozwiązania dla Twojego prywatnego zabezpieczenia",
+ "item1": { "title": "Pojazdy KFZ" },
+ "item2": { "title": "Klienci prywatni" },
+ "item3": { "title": "Seniorzy" },
+ "item4": { "title": "Gospodarstwo domowe" },
+ "item5": { "title": "Odpowiedzialność cywilna" },
+ "rechtsschutz": { "title": "Ochrona prawna" },
+ "item6": { "title": "Wypadek" }
+ },
+
+ "experience": {
+ "title": "Ponad {{years}} lata doświadczenia",
+ "description": "Od 1994 roku oferuję moim klientom w Düsseldorfie i okolicach profesjonalne i niezależne doradztwo ubezpieczeniowe. Moim celem jest znalezienie dla każdego optymalnej ochrony na uczciwych warunkach."
+ },
+
+ "benefits": {
+ "title": "Twoje korzyści",
+ "subtitle": "Dlaczego warto wybrać Agentur Mizera",
+ "benefit1": "Ponad {{years}} lat doświadczenia w branży ubezpieczeniowej",
+ "benefit2": "Niezależne porównanie ponad 150 ubezpieczycieli",
+ "benefit3": "Osobiste i indywidualne doradztwo",
+ "benefit4": "Szybka i prosta obsługa umów",
+ "benefit5": "Przejrzyste warunki bez ukrytych kosztów",
+ "benefit6": "Kompleksowa obsługa wraz z likwidacją szkód"
+ },
+
+ "services": {
+ "title": "Nasze usługi",
+ "subtitle": "Wszystko w jednym miejscu dla Twojego bezpieczeństwa",
+ "car": {
+ "title": "Ubezpieczenie samochodu",
+ "desc": "Kompleksowa ochrona Twojego pojazdu w atrakcyjnych cenach"
+ },
+ "life": {
+ "title": "Ubezpieczenie na życie",
+ "desc": "Zabezpiecz przyszłość swoich bliskich"
+ },
+ "home": {
+ "title": "Ubezpieczenie mieszkania",
+ "desc": "Ochrona Twojego domu"
+ },
+ "health": {
+ "title": "Ubezpieczenie zdrowotne",
+ "desc": "Właściwe zabezpieczenie Twojego zdrowia"
+ }
+ },
+
+ "trust": {
+ "experience": "Lat doświadczenia",
+ "clients": "Zadowolonych klientów",
+ "partners": "Partnerów",
+ "support": "Wsparcie klienta"
+ },
+
+ "ctaSection": {
+ "title": "Masz pytania dotyczące ubezpieczeń?",
+ "subtitle": "Umów się na konsultację już dziś",
+ "button": "Umów spotkanie"
+ },
+
+ "contact": {
+ "title": "Skontaktuj się z nami",
+ "subtitle": "Chętnie udzielimy Ci osobistej porady",
+ "formTitle": "Wyślij do nas wiadomość",
+ "formSubtitle": "Odpowiemy najszybciej jak to możliwe"
+ }
+}
diff --git a/public/locales/pl/impressum.json b/public/locales/pl/impressum.json
new file mode 100644
index 0000000..2cece5b
Binary files /dev/null and b/public/locales/pl/impressum.json differ
diff --git a/public/locales/pl/kfz.json b/public/locales/pl/kfz.json
new file mode 100644
index 0000000..ec9be43
--- /dev/null
+++ b/public/locales/pl/kfz.json
@@ -0,0 +1,163 @@
+{
+ "title": "Ubezpieczenie samochodu",
+ "subtitle": "Indywidualna ochrona dla Twojego pojazdu – konkurencyjne stawki w porównaniu z ponad 150 towarzystwami ubezpieczeniowymi",
+
+ "hero": {
+ "kicker": "Ubezpieczenia KFZ",
+ "title": "Bezpieczeństwo dla Twojego pojazdu",
+ "subtitle": "Odpowiednie ubezpieczenie dla auta, motocykla, quada i nie tylko",
+ "primaryCta": "Skorzystaj z konsultacji",
+ "secondaryCta": "Wszystkie usługi"
+ },
+
+ "topics": {
+ "title": "Ubezpieczenia KFZ",
+ "subtitle": "Najważniejsze rozwiązania dla Twojego pojazdu",
+ "items": {
+ "auto": "Auto",
+ "motorrad": "Motocykl",
+ "quad": "Quad",
+ "fairmobil": "FairMobil",
+ "thirdDriver": "Ochrona kierowcy dodatkowego",
+ "fleet": "Ubezpieczenie flotowe"
+ }
+ },
+
+ "quote": {
+ "title": "Zamów bezpłatną ofertę",
+ "subtitle": "Wypełnij formularz, a przygotujemy dla Ciebie spersonalizowaną ofertę."
+ },
+
+ "benefits": {
+ "title": "Twoje korzyści na pierwszy rzut oka",
+ "benefit1": "Oszczędź do 50% w porównaniu z obecną polisą",
+ "benefit2": "Osobiste doradztwo doświadczonych ekspertów ubezpieczeniowych",
+ "benefit3": "Kompleksowe porównanie ponad 150 towarzystw ubezpieczeniowych",
+ "benefit4": "Szybkie i bezproblemowe zawarcie umowy",
+ "benefit5": "Bezpłatne doradztwo bez ukrytych kosztów",
+ "benefit6": "Indywidualne dopasowanie do Twoich potrzeb"
+ },
+
+ "form": {
+ "title": "Zamów bezpłatną i niezobowiązującą wycenę",
+ "subtitle": "Wypełnij formularz, a przygotujemy dla Ciebie spersonalizowaną ofertę.",
+ "required": "Pola wymagane",
+ "name": "Imię i nazwisko",
+ "email": "Adres e-mail",
+ "phone": "Telefon",
+ "brand": "Marka pojazdu",
+ "model": "Model pojazdu",
+ "year": "Pierwsza rejestracja (DD.MM.RRRR)",
+ "license": "Numer rejestracyjny",
+ "coverage": "Pożądane ubezpieczenie",
+ "selectCoverage": "Wybierz z listy",
+ "additionalInfo": "Dodatkowe informacje (opcjonalne)",
+ "privacy": {
+ "text": "Wyrażam zgodę na przetwarzanie moich danych zgodnie z ",
+ "link": "polityką prywatności",
+ "suffix": "."
+ },
+ "submit": "Zamów bezpłatną wycenę",
+ "success": {
+ "title": "Dziękujemy za zapytanie!",
+ "message": "Otrzymaliśmy Twoje dane i skontaktujemy się z Tobą z indywidualną ofertą w ciągu 24 godzin."
+ },
+ "errorMessage": "Niestety wystąpił błąd. Prosimy spróbować później lub skontaktować się z nami bezpośrednio."
+ },
+
+ "coverageOptions": {
+ "liability": "OC (Odpowiedzialność cywilna)",
+ "partial": "AC z wyłączeniem kradzieży",
+ "full": "Pełne AC (Auto Casco)",
+ "description": {
+ "liability": "Wymagane prawnie podstawowe ubezpieczenie od odpowiedzialności cywilnej wobec osób trzecich",
+ "partial": "Dodatkowa ochrona przed kradzieżą, pożarem i żywiołami",
+ "full": "Kompleksowa ochrona obejmująca również szkody własne"
+ }
+ },
+
+ "faqTitle": "Często zadawane pytania",
+ "faq": [
+ {
+ "q": "Jakie dokumenty są potrzebne do wyceny?",
+ "a": "Do bezpłatnej wyceny potrzebujemy tylko podstawowych informacji o Twoim pojeździe i dotychczasowym ubezpieczeniu. Możesz również przesłać nam aktualne świadectwo ubezpieczenia."
+ },
+ {
+ "q": "Czy mogę zmienić obecne ubezpieczenie?",
+ "a": "Tak, chętnie zajmiemy się wypowiedzeniem Twojej obecnej polisy w najbliższym możliwym terminie, z zachowaniem okresu wypowiedzenia, aby uniknąć podwójnych składek."
+ },
+ {
+ "q": "Jak szybko otrzymam ofertę?",
+ "a": "Zazwyczaj otrzymujesz od nas bezpłatną wycenę w ciągu 24 godzin. W pilnych przypadkach możesz nas również skontaktować telefonicznie."
+ },
+ {
+ "q": "Czy oferujecie również assistance?",
+ "a": "Tak, oferujemy różne pakiety assistance z kompleksowym zakresem ochrony, w tym pomoc drogową, samochód zastępczy i holowanie. Chętnie doradzimy w wyborze odpowiedniej opcji."
+ },
+ {
+ "q": "Czy mogę zmodyfikować polisę w trakcie trwania umowy?",
+ "a": "Tak, możesz w każdej chwili zmodyfikować zakres ubezpieczenia. Chętnie doradzimy w zakresie dostępnych opcji i związanych z nimi zmian w składce."
+ },
+ {
+ "q": "Co zrobić w razie szkody?",
+ "a": "W razie szkody jesteśmy do Twojej dyspozycji całodobowo. Nasze biuro likwidacji szkód pomoże Ci w zgłoszeniu szkody i przeprowadzi Cię przez cały proces do momentu rozliczenia."
+ }
+ ],
+
+ "testimonials": {
+ "title": "Co mówią o nas klienci",
+ "items": [
+ {
+ "text": "Szybka i kompetentna obsługa. Zaoszczędziłem ponad 300€ rocznie!",
+ "author": "Tomasz M., Düsseldorf"
+ },
+ {
+ "text": "Wreszcie doradca ubezpieczeniowy, który znajduje czas i wszystko wyjaśnia w zrozumiały sposób.",
+ "author": "Sabina K., Mettmann"
+ },
+ {
+ "text": "Świetna obsługa! W razie problemów natychmiastowa reakcja. Zdecydowanie polecam!",
+ "author": "Michał B., Ratingen"
+ }
+ ]
+ },
+
+ "cta": {
+ "title": "Skorzystaj z bezpłatnej konsultacji",
+ "subtitle": "Umów się na niezobowiązujące spotkanie już dziś",
+ "button": "Umów wizytę",
+ "quote": "Oblicz składkę ubezpieczenia samochodowego",
+ "contact": "Umów się na konsultację",
+ "emergency": "Zgłoś szkodę"
+ },
+
+ "contact": {
+ "title": "Masz pytania?",
+ "subtitle": "Nasz zespół jest do Twojej dyspozycji",
+ "phone": "+48 211 976 29 55",
+ "email": "info@finanzen-mizera.de",
+ "hours": "Pon-Pt: 9:00 - 18:00\nSob: 10:00 - 14:00",
+ "address": "Rosmarinstraße 30 d, 40235 Düsseldorf"
+ },
+
+ "sections": {
+ "intro": {
+ "title": "Twoje ubezpieczenie samochodowe w najlepszych rękach",
+ "content": "Znajdziemy dla Ciebie odpowiednie ubezpieczenie samochodowe – tanie i dostosowane do Twoich potrzeb."
+ },
+ "coverage": {
+ "title": "Zakres ubezpieczenia",
+ "items": [
+ "Ubezpieczenie OC (odpowiedzialność cywilna)",
+ "AC z wyłączeniem kradzieży (częściowe AC)",
+ "Pełne ubezpieczenie AC (Auto Casco)",
+ "Ubezpieczenie assistance",
+ "Gwarancja samochodu zastępczego i mobilności"
+ ]
+ }
+ },
+
+ "legal": {
+ "notice": "Przedstawione korzyści mają charakter przykładowy i mogą się różnić w zależności od dostawcy. Obowiązują odpowiednie warunki ubezpieczenia. Indywidualna porada jest dostępna na życzenie."
+ }
+}
diff --git a/public/locales/pl/kinder_gesundheit.json b/public/locales/pl/kinder_gesundheit.json
new file mode 100644
index 0000000..29257d1
--- /dev/null
+++ b/public/locales/pl/kinder_gesundheit.json
@@ -0,0 +1,125 @@
+{
+ "hero": {
+ "kicker": "Zdrowie",
+ "title": "Tylko to, co najlepsze dla Twojego dziecka?",
+ "subtitle": "To bardzo zdrowa decyzja.",
+ "cta1": "Umów konsultację",
+ "cta2": "Do przeglądu"
+ },
+ "overview": {
+ "badge": "Tylko to, co najlepsze dla Twojego dziecka?",
+ "title": "Tylko to, co najlepsze dla Twojego dziecka?",
+ "subtitle": "To bardzo zdrowa decyzja.",
+ "description": "Ubezpieczenia dodatkowe mogą wypełnić luki – np. w stomatologii, okularach lub leczeniu szpitalnym.",
+ "cta1": "Poproś o ofertę",
+ "cta2": "Doradztwo",
+ "feature1Title": "Przewidywalne",
+ "feature1Desc": "lepsze świadczenia",
+ "feature2Title": "Elastyczne",
+ "feature2Desc": "dobierz moduły",
+ "imageCaption": "Zęby, okulary, szpital",
+ "imageSubtext": "Sprawdzenie taryfy – dopasowane do potrzeb."
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "calculator": "Kalkulator porównawczy",
+ "form": "Formularz zapytania",
+ "catalog": "Poradnik"
+ },
+ "details": {
+ "kicker": "clinic+ – dodatkowe ubezpieczenie szpitalne",
+ "title": "Twoje świadczenia clinic+ (wyciąg)",
+ "description": "Każdy dzień w szpitalu to obciążenie psychiczne i fizyczne. Tym ważniejsze jest zapewnienie sobie jak najlepszych warunków – i korzystanie z clinic+ dzień po dniu.",
+ "leistung": {
+ "title": "Świadczenie",
+ "badge": "clinic+",
+ "headers": {
+ "leistung": "Świadczenie",
+ "clinic": "Tak"
+ },
+ "rows": [
+ "Swobodny wybór lekarza i szpitala",
+ "Leczenie przez lekarza wybranego / ordynatora (w tym specjalistów) – także powyżej limitów taryf",
+ "Badania przed- i po hospitalizacji – także powyżej limitów taryf",
+ "Zakwaterowanie w pokoju jedno- lub dwuosobowym",
+ "Osoba towarzysząca w szpitalu – dla dzieci do 10. urodzin zwrot kosztów do 30 dziennie maks. 14 dni",
+ "Zasiłek rehabilitacyjny po hospitalizacji: 21 za dzień maks. 28 dni",
+ "Niezbędne medycznie transporty sanitarne",
+ "Ochrona na całym świecie – do 12 miesięcy bez dodatkowych uzgodnień",
+ "Opcjonalnie: dodatkowy dzienny zasiłek szpitalny – od 18 lat: ustawowa dopłata za pierwsze 28 dni w roku",
+ "Okresy karencji – standardowo 3 miesiące (ogólna, bez wypadków) oraz 8 miesięcy (szczególna: poród, psychoterapia, leczenie stomatologiczne, protezy, ortodoncja)"
+ ]
+ },
+ "ueberblick": {
+ "title": "Świadczenia w skrócie",
+ "badge": "clinic+",
+ "items": [
+ "Swobodny wybór lekarza i szpitala",
+ "Leczenie przez lekarza wybranego (w tym specjalistów)",
+ "Badania przed- i po hospitalizacji",
+ "Pokój jedno- lub dwuosobowy",
+ "Osoba towarzysząca w szpitalu (dzieci do 10. urodzin)",
+ "Niezbędne medycznie transporty sanitarne",
+ "Ochrona na całym świecie (do 12 miesięcy)"
+ ],
+ "disclaimer": "*Wyciąg ze świadczeń. Szczegóły wynikają z warunków ubezpieczenia."
+ },
+ "leistungsfall": {
+ "title": "Przykład szkody / kalkulacja",
+ "badge": "Przykład",
+ "description": "Przykład: operacja migdałków, 5 dni pokój jednoosobowy",
+ "priceSticker": {
+ "prefix": "Już od",
+ "price": "2,97 ",
+ "suffix": "miesięcznie"
+ },
+ "rows": [
+ { "label": "Dopłata za pokój jednoosobowy", "value": "650,00 " },
+ { "label": "Koszty leczenia przez lekarza wybranego", "value": "500,00 " },
+ { "label": "Koszty laboratoryjne", "value": "250,00 " },
+ { "label": "Pierwsze leczenie", "value": "150,00 " },
+ { "label": "Świadczenie kasy chorych", "value": "0,00 " },
+ { "label": "Tyle musisz zapłacić samodzielnie", "value": "1.550,00 ", "strong": true }
+ ],
+ "clinicPlusTitle": "Twoja korzyść z clinic+",
+ "clinicPlusLabel": "Zapłacisz samodzielnie tylko",
+ "clinicPlusValue": "0,00 ",
+ "cta": "Poproś o ofertę"
+ },
+ "hinweis": {
+ "title": "Wskazówka",
+ "subtitle": "Karencje i zwroty",
+ "text": "Taryfy różnią się znacznie. Sprawdzamy karencje, limity i zasady wypłat."
+ }
+ },
+ "calculator": {
+ "title": "Szacunkowa składka",
+ "description": "Orientacyjna wartość – zależna od wieku i zakresu.",
+ "example": "Przykładowe wyliczenie",
+ "exampleDescription": "Przykładowa kalkulacja dla dziecka w wieku 5 lat.",
+ "exampleValue": "ok. 2,97 ",
+ "exampleValueDescription": "miesięczna składka za ubezpieczenie clinic+",
+ "exampleDisclaimer": "*Bez gwarancji poprawności. Wiążącą ofertę otrzymasz na zapytanie.",
+ "requirements": "Wymagane dane",
+ "requirementsDescription": "Do obliczeń potrzebujemy:",
+ "requirement1": "Wiek dziecka",
+ "requirement2": "Wybrany zakres świadczeń",
+ "cta": "Poproś o ofertę"
+ },
+ "form": {
+ "title": "Oferta indywidualna",
+ "description": "Wyślij dane – przygotujemy dopasowaną ofertę.",
+ "directContact": "Kontakt bezpośredni",
+ "directContactDescription": "Doradzamy osobiście.",
+ "phoneNumber": "+49 123 456789",
+ "email": "info@makler-ease.de"
+ },
+ "catalog": {
+ "title": "Poradnik i materiały",
+ "description": "Pliki i informacje o ubezpieczeniach zdrowotnych dla dzieci.",
+ "download": "Zapisz jako PDF",
+ "checklist": "Lista kontrolna",
+ "checklistDescription": "Na co zwrócić uwagę przy wyborze taryfy:"
+ }
+}
diff --git a/public/locales/pl/kinder_zahn.json b/public/locales/pl/kinder_zahn.json
new file mode 100644
index 0000000..d1d1e7c
--- /dev/null
+++ b/public/locales/pl/kinder_zahn.json
@@ -0,0 +1,83 @@
+{
+ "hero": {
+ "kicker": "ZahnPRIVAT 100",
+ "title": "Pierwszy aparat ortodontyczny czy nowy smartfon?",
+ "subtitle": "Mówimy: oba. Dzięki ZahnPRIVAT nie musisz wybierać. Ortodoncja w cenie.",
+ "cta1": "Konsultacja",
+ "cta2": "Powrót do przeglądu"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "calculator": "Kalkulator porównawczy",
+ "form": "Formularz zapytania",
+ "catalog": "Poradnik",
+ "brochure": "Broszura (PDF)"
+ },
+ "overview": {
+ "badge": "Taryfa",
+ "product": "ZahnPRIVAT 100",
+ "productSub": "refunduje 100% za",
+ "sloganLine1": "Pierwszy aparat ortodontyczny czy nowy smartfon?",
+ "sloganLine2": "Mówimy: oba.",
+ "sloganLine3": "Dzięki ZahnPRIVAT nie musisz wybierać. Ortodoncja w cenie.",
+ "ctaOffer": "Poproś o ofertę",
+ "ctaConsulting": "Konsultacja",
+ "bullets": {
+ "prophylaxe": "Profilaktyka stomatologiczna (w tym profesjonalne czyszczenie zębów – bez limitu)",
+ "bleaching": "Wybielanie zębów (do 200 euro w ciągu 2 lat)",
+ "kfoAdults": "Ortodoncja dla dorosłych po wypadku lub gdy świadczenie przysługuje z kasy chorych (do 5.000 euro)",
+ "treatment": "Leczenie zębów (np. wysokiej jakości wypełnienia, leczenie przyzębia i kanałowe)",
+ "prosthetics": "Uzupełnienia protetyczne (np. implanty, korony i mosty)",
+ "anxiety": "Znieczulenie / redukcja lęku i bólu (np. akupunktura, gaz rozweselający, hipnoza)"
+ },
+ "disclaimer": "Podane procenty odnoszą się do części rachunku podlegającej refundacji i uwzględniają świadczenia ustawowej kasy chorych."
+ },
+ "details": {
+ "leistungen": {
+ "title": "ZahnPRIVAT 100 – świadczenia",
+ "subtitle": "100% refundacji (wyciąg)"
+ },
+ "bullets": {
+ "prophylaxe": "Profilaktyka stomatologiczna (w tym profesjonalne czyszczenie zębów – bez limitu)",
+ "bleaching": "Wybielanie zębów (do 200 euro w ciągu 2 lat)",
+ "kfoAdults": "Ortodoncja dla dorosłych po wypadku lub gdy świadczenie przysługuje z kasy chorych (do 5.000 euro)",
+ "treatment": "Leczenie zębów (np. wysokiej jakości wypełnienia, leczenie przyzębia i kanałowe)",
+ "prosthetics": "Uzupełnienia protetyczne (np. implanty, korony i mosty)",
+ "anxiety": "Znieczulenie / redukcja lęku i bólu (np. akupunktura, gaz rozweselający, hipnoza)"
+ },
+ "disclaimer": "Podane procenty odnoszą się do części rachunku podlegającej refundacji i uwzględniają świadczenia ustawowej kasy chorych.",
+ "examples": {
+ "title": "Przykłady",
+ "subtitle": "Jak ZahnPRIVAT 100 działa w praktyce",
+ "kfo": {
+ "title": "Ortodoncja (przykład)",
+ "invoice": "Kwota rachunku: 8.000 euro",
+ "gkv": "Świadczenie kasy chorych: 3.500 euro",
+ "refund": "Refundacja ZahnPRIVAT 100: 4.500 euro",
+ "own": "Wkład własny: 0 euro"
+ },
+ "implant": {
+ "title": "Implant zęba (przykład)",
+ "invoice": "Kwota rachunku: 3.700 euro",
+ "gkv": "Świadczenie kasy chorych: 500 euro",
+ "ownNo": "Wkład własny bez dodatkowego ubezpieczenia: 3.200 euro",
+ "ownWith": "Wkład własny z ZahnPRIVAT 100: 0 euro"
+ }
+ },
+ "contact": {
+ "title": "Kontakt i informacja",
+ "subtitle": "Doradzamy szybko i bez komplikacji.",
+ "text": "Taryfy się różnią. Sprawdzamy warunki, limity i zasady refundacji.",
+ "ctaOffer": "Poproś o ofertę",
+ "ctaContact": "Kontakt"
+ }
+ },
+ "brochure": {
+ "title": "Broszura (PDF)",
+ "subtitle": "Broszura w PDF do pobrania.",
+ "cardTitle": "ZahnPRIVAT 100 (PDF)",
+ "cardDescription": "335961_DL_ZahnPRIVAT_VKB_05_2024.pdf",
+ "download": "Pobierz PDF"
+ }
+}
diff --git a/public/locales/pl/kinderunfall.json b/public/locales/pl/kinderunfall.json
new file mode 100644
index 0000000..2d8cbaf
--- /dev/null
+++ b/public/locales/pl/kinderunfall.json
@@ -0,0 +1,152 @@
+{
+ "hero": {
+ "kicker": "Rodzina i dzieci",
+ "title": "Wypadek dziecka",
+ "subtitle": "Ochrona na wypadek – i finansowa poduszka na później",
+ "cta1": "Konsultacja",
+ "cta2": "Powrót do przeglądu"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "calculator": "Kalkulator porównawczy",
+ "form": "Formularz zapytania",
+ "claims": "Szkoda / świadczenie",
+ "catalog": "Poradnik",
+ "brochure": "Broszura (PDF)"
+ },
+ "overview": {
+ "badge": "Ochrona + rezerwa",
+ "title": "Wypadek dziecka",
+ "subtitle": "Plac zabaw, szkoła, sport – ochrona 24/7",
+ "description": "Dzieci są ciągle w ruchu – i wystarczy chwila. Liczy się nie tylko opieka medyczna, ale też wsparcie finansowe na rehabilitację, sprzęt pomocniczy lub dostosowania. Dodatkowo można budować kapitał – np. na edukację, prawo jazdy lub start w dorosłość.",
+ "ctaOffer": "Poproś o ofertę",
+ "ctaConsulting": "Konsultacja",
+ "features": {
+ "f1": { "title": "Ochrona 24/7", "desc": "także w czasie wolnym" },
+ "f2": { "title": "Mocna ochrona", "desc": "elastyczne dodatki" }
+ },
+ "imageCaption": "Plac zabaw, sport, szkoła",
+ "imageSubtext": "Szybko ustalimy: jakie świadczenia są naprawdę ważne dla dziecka?",
+ "quick": {
+ "title": "Krótko i jasno",
+ "c1": { "title": "Ochrona 24/7", "desc": "Na całym świecie – czas wolny, sport, wakacje i codzienność." },
+ "c2": { "title": "Budowa kapitału", "desc": "Opcjonalny kapitał na przyszłe cele." },
+ "c3": { "title": "Wsparcie w razie szkody", "desc": "Pomagamy rodzicom w zgłoszeniu i w formalnościach." }
+ }
+ },
+ "details": {
+ "title": "Co jest ważne u dzieci?",
+ "description": "U dzieci wypadki zdarzają się często w czasie wolnym: podczas zabawy, w klubie sportowym albo na wakacjach. Warto, aby oprócz podstawowego świadczenia były też dodatki – np. rehabilitacja/sprzęt pomocniczy, wsparcie w domu czy zabiegi kosmetyczne po wypadku.",
+ "capital": {
+ "title": "Opcjonalnie: finansowa poduszka na później",
+ "description": "Dodatkowo można budować kapitał – np. na edukację, studia, prawo jazdy lub pierwsze mieszkanie."
+ },
+ "examples": {
+ "child": {
+ "title": "Przykład: dziecko",
+ "subtitle": "Tak może powstać kapitał na start.",
+ "person": "Sophie (1 rok)",
+ "monthly": "Składka miesięczna: 15 euro",
+ "paidIn": "Wpłaty w całym okresie: 4.037 euro",
+ "payout": "Wypłata na koniec okresu (środki z funduszu): 4.037 euro",
+ "use": "Zastosowanie: np. podróż, edukacja lub inne większe cele.",
+ "disclaimer": "Przykładowe wyliczenie (wariant BEST, okres 24 lata, 50.000 euro trwałego uszczerbku, 500% progresji, 500 euro renty wypadkowej). Decydują warunki umowy."
+ },
+ "adult": {
+ "title": "Przykład: dorosły",
+ "subtitle": "Ochrona wypadkowa + kapitał z funduszu.",
+ "person": "Finja (31 lat, nauczycielka)",
+ "monthly": "Składka miesięczna: 15 euro",
+ "paidIn": "Wpłaty w całym okresie: 4.955 euro",
+ "payout": "Wypłata na koniec okresu (środki z funduszu): 4.965 euro",
+ "use": "Interpretacja: w zależności od wyników inwestycji ochrona może być w praktyce bardzo korzystna.",
+ "disclaimer": "Przykładowe wyliczenie (wariant SMART, okres 30 lat, klasa zawodowa A, 75.000 euro trwałego uszczerbku, 350% progresji, 10.000 euro na wypadek śmierci). Decydują warunki umowy."
+ }
+ },
+ "packages": {
+ "title": "Pakiety (przykłady)",
+ "description": "Doradzimy, który pakiet pasuje do Was – od solidnej podstawy po maksymalną ochronę.",
+ "basic": { "title": "Podstawowy", "desc": "Dobry start: 24/7 i na całym świecie." },
+ "plus": { "title": "Plus", "desc": "Więcej świadczeń przy typowych wypadkach dzieci (sport/plac zabaw)." },
+ "premium": { "title": "Premium", "desc": "Maksymalna ochrona + wysokie dodatki (np. adaptacje/sprzęt)." }
+ },
+ "modules": {
+ "title": "Dodatki (opcjonalnie)",
+ "active": { "title": "Aktywny", "desc": "Dla aktywnych dzieci: np. zadośćuczynienie + zwrot za uszkodzony sprzęt sportowy." },
+ "assistance": { "title": "Assistance", "desc": "Wsparcie po wypadku: pomoc w domu, organizacja, opcje adaptacji/sprzętu pomocniczego." },
+ "progression": { "title": "Tabela/Progresja", "desc": "Większe świadczenie przy trwałych skutkach – dzięki odpowiedniej tabeli/progresji." }
+ },
+ "side": {
+ "title": "Ważne",
+ "subtitle": "Trwały uszczerbek i progresja",
+ "text": "W ubezpieczeniach NNW kluczowe jest, jak oceniany jest trwały uszczerbek i jaka progresja obowiązuje. Sprawdzimy to z Tobą, aby ochrona w razie potrzeby była naprawdę adekwatna."
+ }
+ },
+ "brochure": {
+ "title": "Broszura (PDF)",
+ "subtitle": "PDF do pobrania – na zapytanie.",
+ "cardTitle": "Zamów broszurę",
+ "cardDescription": "Wyślemy odpowiednią broszurę dotyczącą ochrony NNW dla dziecka.",
+ "cta": "Poproś o broszurę",
+ "tipTitle": "Wskazówka",
+ "tipDescription": "Dobierzemy broszurę do wieku i oczekiwanych świadczeń."
+ },
+ "calculator": {
+ "title": "Ile to kosztuje?",
+ "description": "Składka zależy od pakietu, dodatków, trwałego uszczerbku/progresji oraz okresu. Przygotujemy ofertę dopasowaną do dziecka i rodziny.",
+ "exampleTitle": "Przykład",
+ "exampleSubtitle": "Orientacyjnie – zależnie od wieku i zakresu.",
+ "exampleBoxTitle": "Przykład (tylko orientacyjnie)",
+ "examplePricePrefix": "od",
+ "examplePrice": "ok. 15 €",
+ "examplePriceSuffix": "/mies.",
+ "exampleDisclaimer": "Wartość orientacyjna – zależnie od taryfy/pakietu i wybranych świadczeń.",
+ "cta": "Poproś o ofertę",
+ "needTitle": "Czego potrzebujemy",
+ "needSubtitle": "Im dokładniej, tym lepiej.",
+ "need1": "Wiek dziecka",
+ "need2": "Oczekiwane świadczenia/dodatki",
+ "need3": "Okres i cel (np. prawo jazdy/kapitał na start)"
+ },
+ "form": {
+ "title": "Formularz zapytania",
+ "subtitle": "Krótka informacja – szybko wrócimy z odpowiedzią.",
+ "openContact": "Otwórz formularz kontaktowy",
+ "print": "Zapisz jako PDF",
+ "direct": {
+ "title": "Kontakt bezpośredni",
+ "subtitle": "Gdy ma być szybko."
+ }
+ },
+ "claims": {
+ "title": "Szkoda / świadczenie",
+ "description": "Świadczenie jest wypłacane zazwyczaj, gdy wypadek powoduje trwałe następstwa (trwały uszczerbek). U dzieci może to dotyczyć np. poważnych upadków, urazów sportowych lub wypadków komunikacyjnych. Stopień uszczerbku ustala niezależna opinia medyczna.",
+ "steps": {
+ "documentation": { "title": "Dokumentacja", "desc": "Wypisy, wyniki badań, data/miejsce – u dzieci najlepiej zbierać od razu." },
+ "report": { "title": "Zgłoszenie", "desc": "Zgłoś możliwie szybko – zajmiemy się kolejnymi krokami." },
+ "assessment": { "title": "Ocena/stopień", "desc": "Stopień uszczerbku ustala się indywidualnie – pomożemy to zrozumieć." }
+ },
+ "side": {
+ "title": "Uwaga",
+ "subtitle": "Pamiętaj o terminach",
+ "text": "W zależności od umowy obowiązują terminy zgłoszenia – lepiej zgłosić wcześniej."
+ }
+ },
+ "catalog": {
+ "title": "Poradnik",
+ "subtitle": "Na co rodzice powinni zwrócić uwagę – krótko i praktycznie.",
+ "checklist": {
+ "title": "Checklista",
+ "subtitle": "Krótki przegląd",
+ "i1": "Najważniejszy jest czas wolny: sport, plac zabaw, wakacje",
+ "i2": "Progresja i tabela uszczerbku: co to oznacza dla dziecka?",
+ "i3": "Dodatki dopasowane do codzienności (np. sport/assistance)",
+ "i4": "Ustal cel kapitału (prawo jazdy, edukacja, start)"
+ },
+ "side": {
+ "title": "Masz pytanie?",
+ "subtitle": "Doradzimy osobiście."
+ }
+ }
+}
diff --git a/public/locales/pl/leistungen.json b/public/locales/pl/leistungen.json
new file mode 100644
index 0000000..3629637
--- /dev/null
+++ b/public/locales/pl/leistungen.json
@@ -0,0 +1,87 @@
+{
+ "servicesTitle": "Nasze rozwiązania ubezpieczeniowe",
+ "services": [
+ {
+ "title": "Ubezpieczenie KFZ",
+ "description": "Kompleksowe rozwiązania ubezpieczeniowe dla wszystkich typów pojazdów",
+ "features": [
+ "OC",
+ "Pełne AC",
+ "Częściowe AC",
+ "Ubezpieczenie NNW"
+ ]
+ },
+ {
+ "title": "Ubezpieczenia majątkowe",
+ "description": "Ochrona Twojego mienia",
+ "features": [
+ "Ubezpieczenie mienia ruchomego",
+ "Ubezpieczenie budynku",
+ "Ochrona prawna"
+ ]
+ },
+ {
+ "title": "Ubezpieczenia osobowe",
+ "description": "Zabezpieczenie dla Ciebie i Twojej rodziny",
+ "features": [
+ "Ubezpieczenie na życie",
+ "Ubezpieczenie terminowe",
+ "Ubezpieczenie od niezdolności do pracy"
+ ]
+ },
+ {
+ "title": "Ubezpieczenia zdrowotne",
+ "description": "Optymalna opieka medyczna",
+ "features": [
+ "Prywatne ubezpieczenie zdrowotne",
+ "Dodatkowe ubezpieczenie stomatologiczne",
+ "Ubezpieczenie podróżne"
+ ]
+ },
+ {
+ "title": "Świadczenia pracownicze",
+ "description": "Sieć bezpieczeństwa dla firm i pracowników",
+ "features": [
+ "Pracownicza emerytura",
+ "Zabezpieczenie firmowe",
+ "Ubezpieczenia pracownicze"
+ ]
+ },
+ {
+ "title": "Doradztwo finansowe",
+ "description": "Planowanie Twojej przyszłości finansowej",
+ "features": [
+ "Planowanie zabezpieczenia",
+ "Budowanie majątku",
+ "Zabezpieczenie emerytalne"
+ ]
+ }
+ ],
+ "advantagesTitle": "Dlaczego Agentur Mizera?",
+ "advantages": [
+ "Niezależne doradztwo w oparciu o ponad 50 towarzystw ubezpieczeniowych",
+ "Osobista opieka od analizy po obsługę umowy",
+ "Przejrzysta struktura kosztów – bez ukrytych opłat",
+ "Regularny przegląd i optymalizacja Twoich umów",
+ "Szybka likwidacja szkód i wsparcie",
+ "Cyfrowe zarządzanie wszystkimi Twoimi ubezpieczeniami"
+ ],
+ "processTitle": "Nasz proces doradczy",
+ "processStep1Title": "Analiza potrzeb",
+ "processStep1Description": "Wspólne określenie Twoich indywidualnych potrzeb i oczekiwań",
+ "processStep2Title": "Porównanie ofert",
+ "processStep2Description": "Porównanie wiodących ubezpieczycieli na rynku",
+ "processStep3Title": "Indywidualna rekomendacja",
+ "processStep3Description": "Prezentacja dopasowanych rozwiązań ubezpieczeniowych",
+ "processStep4Title": "Wsparcie",
+ "processStep4Description": "Pomoc w zawarciu umowy i bieżąca obsługa",
+ "statisticsTitle": "Nasze wyniki w liczbach",
+ "statistics1": "Partnerzy ubezpieczeniowi",
+ "statistics2": "Zadowoleni klienci",
+ "statistics3": "Lat doświadczenia",
+ "statistics4": "Satysfakcja klientów",
+ "contactTitle": "Konsultacja osobista",
+ "contactDescription": "Skorzystaj z doradztwa naszych ekspertów i znajdź optymalne rozwiązanie ubezpieczeniowe dla swoich potrzeb.",
+ "contactButton": "Umów konsultację",
+ "contactButton2": "Poproś o materiały"
+}
diff --git a/public/locales/pl/links.json b/public/locales/pl/links.json
new file mode 100644
index 0000000..d9913a8
--- /dev/null
+++ b/public/locales/pl/links.json
@@ -0,0 +1,26 @@
+{
+ "title": "Przydatne linki",
+ "subtitle": "Ważni partnerzy i zasoby dla naszych klientów",
+ "cta": "Otwórz",
+ "blocks": {
+ "contact": "Skontaktuj się i poproś o konsultację",
+ "service": "Serwis i wsparcie",
+ "imprint": "Impressum i informacje prawne",
+ "services": "Nasze usługi w skrócie",
+ "privacy": "Ochrona danych i informacje",
+ "links": "Przydatne linki i zasoby"
+ },
+ "partnersTitle": "Nasi partnerzy",
+ "resourcesTitle": "Przydatne zasoby",
+ "partners": {
+ "allianz": "Jeden z największych ubezpieczycieli na świecie",
+ "axa": "Międzynarodowa grupa ubezpieczeniowa",
+ "ergo": "Niemiecka grupa ubezpieczeniowa",
+ "huk": "Ubezpieczyciel bezpośredni z atrakcyjnymi składkami"
+ },
+ "resources": {
+ "gdv": "Federalny Związek Niemieckiego Przemysłu Ubezpieczeniowego",
+ "bafin": "Federalny Urząd Nadzoru Usług Finansowych",
+ "verbraucherzentrale": "Niezależne doradztwo konsumenckie"
+ }
+}
diff --git a/public/locales/pl/motorradversicherung.json b/public/locales/pl/motorradversicherung.json
new file mode 100644
index 0000000..7483fc1
--- /dev/null
+++ b/public/locales/pl/motorradversicherung.json
@@ -0,0 +1,19 @@
+{
+ "pageTitle": "Ubezpieczenie motocykla",
+ "hero": {
+ "kicker": "Bezpieczeństwo dla motocyklistów",
+ "title": "Ubezpieczenie motocykla",
+ "subtitle": "Optymalna ochrona – OC, AC częściowe/pełne i elastyczne umowy",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki wypadków",
+ "calculator": "Kalkulator / porównywarka",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Taryfikator mandatów"
+ }
+}
diff --git a/public/locales/pl/nav.json b/public/locales/pl/nav.json
new file mode 100644
index 0000000..a22405c
--- /dev/null
+++ b/public/locales/pl/nav.json
@@ -0,0 +1,32 @@
+{
+ "home": "Strona główna",
+ "car": "Samochód",
+ "contact": "Kontakt",
+ "privacy": "Polityka prywatności",
+ "links": "Linki",
+ "privateCustomers": "Klienci prywatni",
+ "businessCustomers": "Klienci biznesowi",
+ "services": "Usługi",
+ "about": "O nas",
+ "imprint": "Zastrzeżenie prawne",
+ "health": "Zdrowie",
+ "property": "Majątek",
+ "business": "Firma",
+ "seniors": "Seniorzy",
+ "accident": "Wypadek",
+ "household": "Gospodarstwo domowe",
+ "liability": "Odpowiedzialność",
+ "finances": "Finanse",
+ "agency": "Agencja",
+ "motorcycle": "Motocykl",
+ "quad": "Quad",
+ "fairMobil": "FairMobil",
+ "thirdPartyProtection": "Ochrona osób trzecich",
+ "fleet": "Flota",
+ "householdInsurance": "Ubezpieczenie gospodarstwa domowego",
+ "liabilityInsurance": "Ubezpieczenie odpowiedzialności",
+ "accidentInsurance": "Ubezpieczenie od wypadków",
+ "service": "Serwis",
+ "carInsurance": "Ubezpieczenie komunikacyjne",
+ "propertyInsurance": "Ubezpieczenia majątkowe"
+}
\ No newline at end of file
diff --git a/public/locales/pl/privacy.json b/public/locales/pl/privacy.json
new file mode 100644
index 0000000..7480743
--- /dev/null
+++ b/public/locales/pl/privacy.json
@@ -0,0 +1,20 @@
+{
+ "title": "Polityka prywatności",
+ "intro": "Bardzo poważnie traktujemy ochronę Państwa danych osobowych. Niniejsza polityka prywatności informuje, w jaki sposób gromadzimy, wykorzystujemy i chronimy Państwa dane.",
+ "responsible": {
+ "title": "Podmiot odpowiedzialny za przetwarzanie danych",
+ "text": "Marian-Adam Mizera\nRosmarinstraße 30 d\n40235 Düsseldorf\nNiemcy\n\nTelefon: [Numer telefonu]\nE-mail: [Adres e-mail]"
+ },
+ "data": {
+ "title": "Zbieranie i przetwarzanie danych",
+ "text": "Gromadzimy i przetwarzamy Państwa dane tylko wtedy, gdy przekazują nam je Państwo dobrowolnie, w szczególności w ramach zapytań, umów lub kontaktu. Przetwarzanie odbywa się na podstawie Państwa zgody lub w celu realizacji umów zgodnie z art. 6 ust. 1 lit. b RODO."
+ },
+ "rights": {
+ "title": "Państwa prawa jako osoby, której dane dotyczą",
+ "text": "Mają Państwo prawo do informacji, sprostowania, usunięcia, ograniczenia przetwarzania, przenoszenia danych i sprzeciwu wobec przetwarzania Państwa danych osobowych. W przypadku pytań dotyczących wykonywania praw prosimy o kontakt."
+ },
+ "contact": {
+ "title": "Kontakt w sprawach prywatności",
+ "text": "W przypadku pytań dotyczących prywatności lub wykonywania praw można z nami skontaktować się pod:\n\nMarian-Adam Mizera\nRosmarinstraße 30 d\n40235 Düsseldorf\nE-mail: [Adres e-mail]\nTelefon: [Numer telefonu]"
+ }
+}
\ No newline at end of file
diff --git a/public/locales/pl/privatkunden.json b/public/locales/pl/privatkunden.json
new file mode 100644
index 0000000..f682bbb
--- /dev/null
+++ b/public/locales/pl/privatkunden.json
@@ -0,0 +1,67 @@
+{
+ "title": "Klienci prywatni",
+ "subtitle": "Dostosowane rozwiązania ubezpieczeniowe dla gospodarstw domowych",
+ "hero": {
+ "kicker": "Ubezpieczenia dla klientów prywatnych",
+ "title": "Bezpieczeństwo dla Twojej rodziny i domu.",
+ "subtitle": "Indywidualne doradztwo dla każdego obszaru życia – od ubezpieczenia komunikacyjnego po zabezpieczenie emerytalne.",
+ "primaryCta": "Skorzystaj z konsultacji",
+ "secondaryCta": "Wszystkie usługi"
+ },
+ "topics": {
+ "title": "Tematy dla klientów prywatnych",
+ "subtitle": "Najważniejsze ubezpieczenia dla Twojego prywatnego zabezpieczenia"
+ },
+ "services": [
+ {
+ "title": "Opieka zdrowotna",
+ "description": "Optymalna opieka medyczna dla całej rodziny",
+ "features": [
+ "Prywatne ubezpieczenie zdrowotne",
+ "Ubezpieczenie dodatkowe stomatologiczne",
+ "Ubezpieczenie podróżne za granicą",
+ "Ubezpieczenie zasiłku chorobowego"
+ ]
+ },
+ {
+ "title": "Ochrona przed ryzykiem",
+ "description": "Kompleksowa ochrona we wszystkich obszarach życia",
+ "features": [
+ "Ubezpieczenie od wypadków",
+ "Ubezpieczenie OC",
+ "Ubezpieczenie ochrony prawnej"
+ ]
+ },
+ {
+ "title": "Zabezpieczenie majątku",
+ "description": "Ochrona Twojego dorobku życia i Twojej rodziny",
+ "features": [
+ "Ubezpieczenie na życie",
+ "Ubezpieczenie ryzykowne na życie",
+ "Ubezpieczenie budynków mieszkalnych",
+ "Ubezpieczenie gospodarstwa domowego"
+ ]
+ },
+ {
+ "title": "Zabezpieczenie na przyszłość",
+ "description": "Beztroska przyszłość dla Ciebie i Twoich bliskich",
+ "features": [
+ "Prywatne ubezpieczenie emerytalne",
+ "Renta Riester",
+ "Renta Rürup",
+ "Pracownicze ubezpieczenie emerytalne"
+ ]
+ }
+ ],
+ "contactTitle": "Porady osobiste",
+ "contactDescription": "Skorzystaj z porady naszych ekspertów i znajdź optymalne ubezpieczenie dla Twoich potrzeb.",
+ "phoneButton": "Poradź się teraz",
+ "emailButton": "Poproś o ofertę",
+ "submenu": {
+ "title": "Podmenu",
+ "kfz": "Ubezpieczenie komunikacyjne",
+ "hausrat": "Ubezpieczenie mieszkania",
+ "haftpflicht": "Odpowiedzialność cywilna",
+ "unfall": "Ubezpieczenie od wypadków"
+ }
+}
\ No newline at end of file
diff --git a/public/locales/pl/quadversicherung.json b/public/locales/pl/quadversicherung.json
new file mode 100644
index 0000000..d3db416
--- /dev/null
+++ b/public/locales/pl/quadversicherung.json
@@ -0,0 +1,12 @@
+{
+ "pageTitle": "Ubezpieczenie quada",
+ "tabs": {
+ "overview": "Przegląd",
+ "details": "Szczegóły i korzyści",
+ "statistics": "Statystyki wypadków",
+ "calculator": "Kalkulator / porównywarka",
+ "form": "Formularz",
+ "claims": "Zgłoszenie szkody!",
+ "catalog": "Taryfikator mandatów"
+ }
+}
diff --git a/public/locales/pl/rechtsschutzversicherung.json b/public/locales/pl/rechtsschutzversicherung.json
new file mode 100644
index 0000000..9dc6a06
--- /dev/null
+++ b/public/locales/pl/rechtsschutzversicherung.json
@@ -0,0 +1,207 @@
+{
+ "pageTitle": "Ubezpieczenie ochrony prawnej",
+ "hero": {
+ "kicker": "Ochrona prawna",
+ "title": "Mieć rację – i móc ją wyegzekwować",
+ "subtitle": "Ochrona w sporach – dobierzemy odpowiednie moduły i taryfy.",
+ "primaryCta": "Poproś o ofertę",
+ "secondaryCta": "Konsultacja"
+ },
+ "tabs": {
+ "overview": "Przegląd",
+ "processCosts": "Koszty procesu",
+ "details": "Szczegóły i korzyści",
+ "faq": "FAQ",
+ "form": "Formularz"
+ },
+ "generalNotice": {
+ "text": "Uwaga:\nWskazówki i informacje na tych stronach mają charakter ogólny i niewiążący. To prywatna opinia bez gwarancji poprawności, kompletności ani odpowiedzialności i nie zastępuje indywidualnej porady. Wiążące są wyłącznie warunki ubezpieczenia danego ubezpieczyciela."
+ },
+ "processCosts": {
+ "info": {
+ "title": "Ryzyko kosztów procesu",
+ "text": "W postępowaniu sądowym – zależnie od wartości przedmiotu sporu, instancji i przebiegu – mogą powstać koszty sądowe oraz koszty pełnomocników. Ubezpieczenie ochrony prawnej może (w zależności od taryfy i zakresu) ograniczyć to ryzyko."
+ },
+ "example": {
+ "headline": "Kalkulacja ryzyka kosztów procesu –",
+ "disputeValue": "Wartość sporu: 6 300,00 € – przykład",
+ "instance1": {
+ "title": "I instancja",
+ "courtCosts": {
+ "title": "Koszty sądowe:",
+ "desc": "3,00 opłaty wg § 11 GKG:"
+ },
+ "lawyerCosts": {
+ "title": "Koszty adwokata:",
+ "desc": "2,50 opłaty wg § 13 RVG:"
+ },
+ "opponentLawyerCosts": {
+ "title": "Koszty adwokata strony przeciwnej:",
+ "desc": "2,50 opłaty wg § 13 RVG:"
+ },
+ "expenses": {
+ "title": "Wydatki wg nr 7002 VV RVG:",
+ "desc": ""
+ },
+ "vat": {
+ "title": "19% VAT:",
+ "desc": ""
+ }
+ },
+ "instance2": {
+ "title": "II instancja",
+ "courtCosts": {
+ "title": "Koszty sądowe:",
+ "desc": "4,00 opłaty wg § 11 GKG:"
+ },
+ "lawyerCosts": {
+ "title": "Koszty adwokata:",
+ "desc": "3,40 opłaty wg § 13 RVG:"
+ },
+ "opponentLawyerCosts": {
+ "title": "Koszty adwokata strony przeciwnej:",
+ "desc": "2,80 opłaty wg § 13 RVG:"
+ },
+ "expenses": {
+ "title": "Wydatki wg nr 7002 VV RVG:",
+ "desc": ""
+ },
+ "vat": {
+ "title": "19% VAT:",
+ "desc": ""
+ }
+ },
+ "sum": "Suma:",
+ "total12": "Suma I i II instancji:",
+ "note": "Uwaga: przykład poglądowy. Rzeczywiste koszty mogą się różnić w zależności od rodzaju i przebiegu postępowania."
+ }
+ },
+ "overview": {
+ "badge": "Bezpieczeństwo w razie sporu",
+ "title": "Ubezpieczenie ochrony prawnej",
+ "subtitle": "aby skutecznie dochodzić swoich praw",
+ "description": "Spory w życiu codziennym, problemy na drodze, konflikty w pracy lub kwestie mieszkaniowe: dobrze dobrana ochrona prawna ogranicza ryzyko kosztów i daje wsparcie.",
+ "primaryButton": "Poproś o ofertę",
+ "secondaryButton": "Konsultacja",
+ "card1Title": "Wybierz moduły",
+ "card1Subtitle": "Prywatne · Praca · Ruch drogowy · Mieszkanie",
+ "card2Title": "Kontrola kosztów",
+ "card2Subtitle": "Udział własny i zakres",
+ "rightCardTitle": "Przejrzyste porównanie",
+ "rightCardText": "Porównujemy taryfy, sprawdzamy okresy karencji i moduły oraz rekomendujemy jasną, sensowną ochronę.",
+ "productHighlights": {
+ "title": "Oferuję ochronę prawną z następującymi wyróżnikami produktu!",
+ "subtitle": "Najważniejsze w skrócie",
+ "additionalTitle": "Dodatkowe atuty",
+ "items": [
+ "Gwarancja ulepszeń produktu: obowiązuje uzgodniona gwarancja ulepszeń produktu (klauzula specjalna 125 ARB)",
+ "Suma ubezpieczenia: bez limitu w Europie, w państwach nad Morzem Śródziemnym, na Wyspach Kanaryjskich, Azorach i Maderze (zakres terytorialny zgodnie z § 6 ust. 1 ARB)",
+ "2 mln € na jedno zdarzenie w specjalnej ochronie prawnej w sprawach karnych (Spezial-Straf-Rechtsschutz)",
+ "Pożyczka na kaucję do 200 000 € (w specjalnej ochronie karnej zaliczana na sumę ubezpieczenia)",
+ "350 000 € na jedno zdarzenie (w tym pożyczka na kaucję)"
+ ],
+ "additionalItems": [
+ "Telefoniczna pierwsza porada u niezależnych prawników (wszystkie dziedziny prawa)",
+ "Ochrona na całym świecie podczas urlopu oraz podróży służbowych/biznesowych do 12 miesięcy",
+ "Ochrona praw ofiar w pakiecie"
+ ]
+ },
+ "quick": {
+ "title": "Krótko i jasno",
+ "item1Title": "Moduły są kluczowe",
+ "item1Desc": "Zabezpiecz tylko potrzebne obszary.",
+ "item2Title": "Sprawdź karencje",
+ "item2Desc": "Różnią się zależnie od zakresu i ubezpieczyciela.",
+ "item3Title": "Udział własny wpływa na cenę",
+ "item3Desc": "Wyższy udział własny = często niższa składka."
+ }
+ },
+ "details": {
+ "title": "Szczegóły i korzyści",
+ "description": "Ochrona prawna jest szczególnie przydatna, gdy nie chcesz ponosić ryzyka kosztów samodzielnie. Najważniejsze: moduły dopasowane do Twojej sytuacji oraz świadomość wyłączeń i karencji.",
+ "servicesTitle": "Zakres (wyciąg)",
+ "tipTitle": "Wskazówka",
+ "tipIntro": "Sprawdź przede wszystkim:",
+ "tipItems": [
+ "Jakie moduły są w pakiecie?",
+ "Jaki jest udział własny?",
+ "Jakie obowiązują karencje?",
+ "Jakie są wyłączenia?"
+ ]
+ },
+ "benefits": [
+ {
+ "title": "Mniejsze ryzyko kosztów",
+ "description": "W zależności od taryfy: prawnik, sąd, biegli, świadkowie, mediacje."
+ },
+ {
+ "title": "Profesjonalne rozwiązywanie sporów",
+ "description": "Wsparcie od konsultacji po dochodzenie roszczeń."
+ },
+ {
+ "title": "Dobór modułów",
+ "description": "Prywatne, praca, ruch drogowy, mieszkanie – sensownie, bez nadmiaru."
+ },
+ {
+ "title": "Dla singli i rodzin",
+ "description": "Taryfy na każdy etap życia – z udziałem własnym według potrzeb."
+ }
+ ],
+ "services": [
+ "Ochrona prawna prywatna",
+ "Ochrona prawna w pracy",
+ "Ochrona prawna w ruchu drogowym",
+ "Ochrona prawna mieszkaniowa / dla wynajmujących",
+ "Ochrona w sprawach karnych (zależnie od taryfy)",
+ "Mediacje i rozwiązywanie konfliktów (zależnie od taryfy)"
+ ],
+ "faq": {
+ "title": "FAQ",
+ "subtitle": "Kliknij temat, aby zobaczyć szczegóły.",
+ "items": [
+ {
+ "q": "Co obejmuje ubezpieczenie ochrony prawnej?",
+ "a": "W zależności od taryfy: koszty prawnika i sądu, biegłych, świadków oraz ewentualnie mediacje. Kluczowe są wybrane moduły (prywatne, praca, ruch drogowy, mieszkanie)."
+ },
+ {
+ "q": "Czy obowiązują okresy karencji?",
+ "a": "Często tak (np. 3 miesiące) – zależnie od zakresu i ubezpieczyciela. Dla ochrony w ruchu drogowym karencja bywa krótsza. Sprawdzimy to w porównaniu taryf."
+ },
+ {
+ "q": "Co oznacza udział własny?",
+ "a": "To kwota, którą pokrywasz sam w razie szkody/sporu. Wyższy udział własny zwykle obniża składkę."
+ },
+ {
+ "q": "Czy trwające spory są objęte ochroną?",
+ "a": "Zazwyczaj nie. Najczęściej obejmuje się tylko sprawy, których przyczyna powstała po rozpoczęciu umowy."
+ }
+ ]
+ },
+ "form": {
+ "title": "Formularz",
+ "subtitle": "Zostaw dane – wrócimy z dopasowanym porównaniem taryf.",
+ "fields": {
+ "name": "Imię i nazwisko",
+ "phone": "Telefon",
+ "email": "E-mail",
+ "topics": "Moduły",
+ "message": "Wiadomość"
+ },
+ "placeholders": {
+ "name": "Twoje imię i nazwisko",
+ "phone": "Numer telefonu",
+ "email": "E-mail",
+ "message": "Krótko opisz sytuację (np. rodzina, wynajem, praca)"
+ },
+ "options": {
+ "opt1": "Prywatne + praca + ruch drogowy + mieszkanie",
+ "opt2": "Prywatne + praca",
+ "opt3": "Prywatne + ruch drogowy",
+ "opt4": "Prywatne + mieszkanie",
+ "opt5": "Tylko ruch drogowy"
+ },
+ "submit": "Wyślij zapytanie",
+ "callback": "Poproś o kontakt",
+ "thanks": "Dziękujemy! Wkrótce się odezwiemy."
+ }
+}
diff --git a/public/locales/pl/senioren.json b/public/locales/pl/senioren.json
new file mode 100644
index 0000000..6d1d8d6
--- /dev/null
+++ b/public/locales/pl/senioren.json
@@ -0,0 +1,111 @@
+{
+ "benefits": {
+ "title": "Twoje korzyści jako senior",
+ "items": [
+ {
+ "desc": "Jasno i zrozumiale",
+ "title": "Osobiste doradztwo"
+ },
+ {
+ "desc": "Zoptymalizowane pod Twoje potrzeby",
+ "title": "Dopasowane rozwiązania"
+ },
+ {
+ "desc": "Poprawa istniejących polis",
+ "title": "Optymalizacja umów"
+ },
+ {
+ "desc": "Wsparcie w ocenie i formalnościach",
+ "title": "Pomoc przy stopniu opieki"
+ },
+ {
+ "desc": "Bez utraty zakresu",
+ "title": "Optymalizacja kosztów"
+ },
+ {
+ "desc": "Stałe wsparcie",
+ "title": "Długoterminowa opieka"
+ }
+ ],
+ "subtitle": "Oferujemy rozwiązania dopasowane do Twojego etapu życia"
+ },
+ "details": {
+ "label": "Szczegóły:",
+ "retirement": {
+ "links": [
+ {
+ "href": "/finanzen",
+ "title": "Prywatne ubezpieczenie emerytalne"
+ },
+ {
+ "href": "/finanzen",
+ "title": "Emerytura Riester"
+ },
+ {
+ "href": "/finanzen",
+ "title": "Emerytura Rürup"
+ },
+ {
+ "href": "/finanzen",
+ "title": "Pracownicze zabezpieczenie emerytalne"
+ }
+ ]
+ },
+ "health": {
+ "links": [
+ {
+ "href": "/senioren",
+ "title": "Prywatne ubezpieczenie zdrowotne"
+ },
+ {
+ "href": "/senioren",
+ "title": "Dodatkowe ubezpieczenie stomatologiczne"
+ },
+ {
+ "href": "/senioren",
+ "title": "Ubezpieczenie podróżne za granicę"
+ }
+ ]
+ },
+ "risk": {
+ "links": [
+ {
+ "href": "/unfall",
+ "title": "Ubezpieczenie od wypadków"
+ },
+ {
+ "href": "/haftpflicht",
+ "title": "Ubezpieczenie OC"
+ },
+ {
+ "href": "/service",
+ "title": "Ubezpieczenie ochrony prawnej"
+ }
+ ]
+ }
+ },
+ "focus": {
+ "items": {
+ "retirement": "Zabezpieczenie emerytalne",
+ "health": "Profilaktyka zdrowotna",
+ "risk": "Ochrona ryzyka"
+ }
+ },
+ "topics": {
+ "subtitle": "Najważniejsze rozwiązania na Twoim etapie życia",
+ "title": "Tematy dla seniorów"
+ },
+ "hero": {
+ "kicker": "Ubezpieczenia dla seniorów",
+ "title": "Bezpieczeństwo i dobre samopoczucie na emeryturze.",
+ "secondaryCta": "Wszystkie usługi",
+ "primaryCta": "Skorzystaj z konsultacji",
+ "subtitle": "Rozwiązania dopasowane do Twojego etapu życia – od profilaktyki zdrowotnej po zabezpieczenie emerytalne."
+ },
+ "contact": {
+ "secondaryCta": "Umów termin",
+ "title": "Skontaktuj się z nami",
+ "primaryCta": "Zadzwoń teraz",
+ "subtitle": "Skorzystaj z niezobowiązującej konsultacji w sprawie Twoich możliwości ubezpieczeniowych."
+ }
+}
diff --git a/public/locales/pl/service.json b/public/locales/pl/service.json
new file mode 100644
index 0000000..81a45f1
--- /dev/null
+++ b/public/locales/pl/service.json
@@ -0,0 +1,79 @@
+{
+ "servicesTitle": "Nasze usługi serwisowe",
+ "services": [
+ {
+ "title": "Doradztwo dla klientów",
+ "description": "Osobiste doradztwo we wszystkich Twoich pytaniach",
+ "features": [
+ "Doradztwo telefoniczne",
+ "Spotkania na miejscu",
+ "Doradztwo wideo",
+ "Wsparcie e-mail"
+ ]
+ },
+ {
+ "title": "Zarządzanie umowami",
+ "description": "Kompleksowe zarządzanie Twoimi ubezpieczeniami",
+ "features": [
+ "Analiza umów",
+ "Zgłaszanie szkód",
+ "Dostosowanie umów",
+ "Pomoc w wypowiedzeniu"
+ ]
+ },
+ {
+ "title": "Likwidacja szkód",
+ "description": "Szybka i profesjonalna obsługa szkód",
+ "features": [
+ "Infolinia szkód 24/7",
+ "Cyfrowe zgłoszenie szkody",
+ "Wsparcie w likwidacji",
+ "Zarządzanie dokumentami"
+ ]
+ },
+ {
+ "title": "Usługi informacyjne",
+ "description": "Wszystko, co dotyczy Twoich informacji ubezpieczeniowych",
+ "features": [
+ "Materiały informacyjne",
+ "Dokumenty umów",
+ "Warunki ubezpieczeń",
+ "Portal online"
+ ]
+ }
+ ],
+ "contactTitle": "Jak się z nami skontaktować",
+ "contactOptions": [
+ {
+ "title": "Doradztwo telefoniczne",
+ "description": "Skontaktuj się z nami bezpośrednio telefonicznie",
+ "contact": "0211 / 97629355",
+ "hours": "Pn-Pt: 9:00 - 18:00"
+ },
+ {
+ "title": "Kontakt e-mail",
+ "description": "Napisz do nas w dowolnym momencie",
+ "contact": "info@finanzen-mizera.de",
+ "hours": "Odpowiedź w ciągu 24 godzin"
+ },
+ {
+ "title": "Usługa oddzwonienia",
+ "description": "Chętnie do Ciebie oddzwonimy",
+ "contact": "Poproś o oddzwonienie",
+ "hours": "Pn-Pt: 9:00 - 18:00"
+ }
+ ],
+ "benefitsTitle": "Szczególne korzyści serwisowe",
+ "benefits": [
+ "Infolinia awaryjna 24/7",
+ "Osobisty opiekun",
+ "Szybka likwidacja szkód",
+ "Cyfrowe zarządzanie",
+ "Przejrzysta komunikacja",
+ "Regularne aktualizacje"
+ ],
+ "helpTitle": "Potrzebujesz pomocy?",
+ "helpDescription": "Nasz zespół serwisowy chętnie Ci pomoże. Skontaktuj się z nami w celu konsultacji lub w razie pytań dotyczących ubezpieczeń.",
+ "phoneButton": "Zadzwoń teraz",
+ "callbackButton": "Poproś o oddzwonienie"
+}
diff --git a/public/locales/pl/unfall.json b/public/locales/pl/unfall.json
new file mode 100644
index 0000000..4c756a1
--- /dev/null
+++ b/public/locales/pl/unfall.json
@@ -0,0 +1,79 @@
+{
+ "benefitsTitle": "Co obejmuje ubezpieczenie od wypadków",
+ "benefits": [
+ "Ochrona na wypadek inwalidztwa",
+ "Ochrona na wypadek śmierci",
+ "Renta wypadkowa przy trwałym uszczerbku",
+ "Pokrycie kosztów akcji ratunkowych i poszukiwawczych",
+ "Zabiegi chirurgii plastycznej",
+ "Dzienna stawka za pobyt w szpitalu"
+ ],
+ "coverageTitle": "Zakres ochrony – szczegóły",
+ "coverage": [
+ {
+ "title": "Trwały uszczerbek na zdrowiu",
+ "description": "Świadczenie w przypadku trwałego uszczerbku na zdrowiu wskutek wypadku",
+ "features": [
+ "Tabela uszczerbków",
+ "Progresja",
+ "Indeksacja"
+ ]
+ },
+ {
+ "title": "Śmierć w wyniku wypadku",
+ "description": "Wypłata świadczenia w przypadku śmiertelnego wypadku",
+ "features": [
+ "Szybka wypłata",
+ "Ustalana suma",
+ "Zazwyczaj bez podatku"
+ ]
+ },
+ {
+ "title": "Renta wypadkowa",
+ "description": "Miesięczna renta w przypadku niezdolności do pracy",
+ "features": [
+ "Okres karencji",
+ "Ustalany czas",
+ "Może podlegać opodatkowaniu"
+ ]
+ }
+ ],
+ "examplesTitle": "Typowe scenariusze wypadków",
+ "examples": [
+ {
+ "title": "Wypadek drogowy",
+ "description": "W wyniku wypadku samochodowego doznajesz urazu kręgosłupa, który prowadzi do trwałego uszczerbku."
+ },
+ {
+ "title": "Wypadek w domu",
+ "description": "Poślizgnięcie na schodach i złamanie kilku kości."
+ },
+ {
+ "title": "Wypadek sportowy",
+ "description": "Podczas gry w piłkę nożną dochodzi do zerwania więzadła krzyżowego z długimi konsekwencjami."
+ },
+ {
+ "title": "Wypadek w pracy",
+ "description": "Poważne zranienie przy pracy z maszyną."
+ }
+ ],
+ "specialFeaturesTitle": "Dodatkowe świadczenia",
+ "specialFeatures": [
+ "Ochrona na całym świecie",
+ "Ochrona 24 godziny na dobę",
+ "Ubezpieczenie utraty kluczy",
+ "Koszty ratownictwa i poszukiwań",
+ "Zabiegi chirurgii plastycznej",
+ "Dzienna stawka za pobyt w szpitalu"
+ ],
+ "importantTitle": "Ważne informacje",
+ "importantNotes": [
+ "Ubezpieczenie wypadkowe uzupełnia ustawowe ubezpieczenie wypadkowe.",
+ "Jesteś chroniony także na urlopie i za granicą.",
+ "Dzieci często mogą być objęte ochroną bez dodatkowych kosztów."
+ ],
+ "contactTitle": "Zadbaj o ubezpieczenie od wypadków",
+ "contactDescription": "Skorzystaj z doradztwa w wyborze optymalnego ubezpieczenia wypadkowego i zabezpiecz finansowo siebie oraz rodzinę.",
+ "phoneButton": "Umów konsultację",
+ "emailButton": "Poproś o ofertę"
+}
diff --git a/public/placeholder.svg b/public/placeholder.svg
new file mode 100644
index 0000000..e763910
--- /dev/null
+++ b/public/placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..6018e70
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,14 @@
+User-agent: Googlebot
+Allow: /
+
+User-agent: Bingbot
+Allow: /
+
+User-agent: Twitterbot
+Allow: /
+
+User-agent: facebookexternalhit
+Allow: /
+
+User-agent: *
+Allow: /
diff --git a/scripts/extract-pdf-text.mjs b/scripts/extract-pdf-text.mjs
new file mode 100644
index 0000000..45c95d6
--- /dev/null
+++ b/scripts/extract-pdf-text.mjs
@@ -0,0 +1,35 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import process from 'node:process';
+
+const projectRoot = process.cwd();
+const inPath = path.join(projectRoot, 'public', '335961_DL_ZahnPRIVAT_VKB_05_2024.pdf');
+const outPath = path.join(projectRoot, 'public', '335961_DL_ZahnPRIVAT_VKB_05_2024.txt');
+
+const pdfjs = await import('pdfjs-dist/legacy/build/pdf.mjs');
+
+const data = new Uint8Array(fs.readFileSync(inPath));
+const loadingTask = pdfjs.getDocument({ data });
+const doc = await loadingTask.promise;
+
+let text = '';
+for (let pageNum = 1; pageNum <= doc.numPages; pageNum++) {
+ const page = await doc.getPage(pageNum);
+ const content = await page.getTextContent();
+ const pageText = content.items
+ .map((it) => (typeof it?.str === 'string' ? it.str : ''))
+ .filter(Boolean)
+ .join(' ');
+
+ text += `\n\n--- Page ${pageNum} ---\n`;
+ text += pageText;
+ text += '\n';
+}
+
+fs.writeFileSync(outPath, text, 'utf8');
+
+console.log('ok');
+console.log('pages:', doc.numPages);
+console.log('chars:', text.length);
+console.log('out:', outPath);
+console.log('preview:\n' + text.slice(0, 1200));
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 0000000..b9d355d
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,42 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..6957079
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,148 @@
+import React from "react";
+import { Toaster } from "@/components/ui/toaster";
+import { Toaster as Sonner } from "@/components/ui/sonner";
+import { TooltipProvider } from "@/components/ui/tooltip";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { BrowserRouter, Routes, Route } from "react-router-dom";
+import { I18nextProvider } from 'react-i18next';
+import i18n from './i18n/i18n';
+import Index from "./pages/Index";
+import KFZ from "./pages/KFZ";
+import Datenschutz from "./pages/Datenschutz";
+import Links from "./pages/Links";
+import Contact from "./pages/Contact";
+import Impressum from "./pages/Impressum";
+import Leistungen from "./pages/Leistungen";
+import Privatkunden from "./pages/Privatkunden";
+import Senioren from "./pages/Senioren";
+import Geschaeftskunden from "./pages/Geschaeftskunden";
+import Finanzen from "./pages/Finanzen";
+import Agentur from "./pages/Agentur";
+import Service from "./pages/Service";
+import Hausrat from "./pages/hausrat";
+import Unfall from "./pages/unfall";
+import Motorradversicherung from "./pages/Motorradversicherung";
+import Quadversicherung from "./pages/Quadversicherung";
+import Hausratversicherung from "./pages/Hausratversicherung";
+import Autoversicherung from "./pages/Autoversicherung";
+import FairMobil from "./pages/FairMobil";
+import Flottenversicherung from "./pages/Flottenversicherung";
+import DrittfahrerSchutz from "./pages/DrittfahrerSchutz";
+import FamilienKinder from "./pages/FamilienKinder";
+import Kinderunfall from "./pages/Kinderunfall";
+import KinderGesundheit from "./pages/KinderGesundheit";
+import KinderGesundheitZahn from "./pages/KinderGesundheitZahn";
+import FamilienReise from "./pages/FamilienReise";
+import FamilienVorsorge from "./pages/FamilienVorsorge";
+import Rechtsschutzversicherung from "./pages/Rechtsschutzversicherung";
+import Tierversicherung from "./pages/Tierversicherung";
+import Hundeversicherung from "./pages/Hundeversicherung";
+import Pferdeversicherung from "./pages/Pferdeversicherung";
+import Katzenversicherung from "./pages/Katzenversicherung";
+import Tagesgeld from "./pages/Tagesgeld";
+import Investmentsparplan from "./pages/Investmentsparplan";
+import Depots from "./pages/Depots";
+import Beteiligungen from "./pages/Beteiligungen";
+import Finanzierung from "./pages/Finanzierung";
+import KreditVergleichsrechner from "./pages/KreditVergleichsrechner";
+import Kreditabsicherung from "./pages/Kreditabsicherung";
+import BruttoNettoRechner from "./pages/BruttoNettoRechner";
+import SeniorenAltersvorsorge from "./pages/SeniorenAltersvorsorge";
+import SeniorenGesundheitsvorsorge from "./pages/SeniorenGesundheitsvorsorge";
+import SeniorenRisikoschutz from "./pages/SeniorenRisikoschutz";
+import NotFound from "./pages/NotFound";
+
+const queryClient = new QueryClient();
+
+class ErrorBoundary extends React.Component<
+ { children: React.ReactNode },
+ { hasError: boolean; error?: unknown }
+> {
+ state = { hasError: false as boolean, error: undefined as unknown };
+
+ static getDerivedStateFromError(error: unknown) {
+ return { hasError: true, error };
+ }
+
+ render() {
+ if (!this.state.hasError) return this.props.children;
+
+ const message = this.state.error instanceof Error ? this.state.error.message : String(this.state.error);
+
+ return (
+
+
+
+
Fehler in der App
+
{message}
+
+
+
+ );
+ }
+}
+
+const App = () => (
+
+
+
+
+
+
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ Test-Route funktioniert! Agentur-Test} />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+
+
+
+
+);
+
+export default App;
diff --git a/src/components/AccessibilityBar.tsx b/src/components/AccessibilityBar.tsx
new file mode 100644
index 0000000..8b851b8
--- /dev/null
+++ b/src/components/AccessibilityBar.tsx
@@ -0,0 +1,253 @@
+import { useState, useEffect } from 'react';
+import {
+ Eye,
+ EyeOff,
+ Type,
+ Volume2,
+ VolumeX,
+ Sun,
+ Moon,
+ Contrast,
+ ZoomIn,
+ ZoomOut,
+ Keyboard,
+ RotateCcw,
+ Undo2
+} from 'lucide-react';
+import { Button } from '@/components/ui/button';
+
+const AccessibilityBar = () => {
+ const [fontSize, setFontSize] = useState<'small' | 'medium' | 'large'>('medium');
+ const [isHighContrast, setIsHighContrast] = useState(false);
+ const [isDarkMode, setIsDarkMode] = useState(false);
+ const [isReading, setIsReading] = useState(false);
+ const [zoom, setZoom] = useState(100);
+
+ // Schriftgröße anpassen
+ useEffect(() => {
+ const root = document.documentElement;
+ root.classList.remove('text-sm', 'text-base', 'text-lg', 'text-xl');
+
+ switch (fontSize) {
+ case 'small':
+ root.classList.add('text-sm');
+ break;
+ case 'medium':
+ root.classList.add('text-base');
+ break;
+ case 'large':
+ root.classList.add('text-lg');
+ break;
+ }
+
+ localStorage.setItem('fontSize', fontSize);
+ }, [fontSize]);
+
+ // Kontrastmodus
+ useEffect(() => {
+ const root = document.documentElement;
+ if (isHighContrast) {
+ root.classList.add('high-contrast');
+ } else {
+ root.classList.remove('high-contrast');
+ }
+ localStorage.setItem('highContrast', isHighContrast.toString());
+ }, [isHighContrast]);
+
+ // Dunkelmodus
+ useEffect(() => {
+ const root = document.documentElement;
+ if (isDarkMode) {
+ root.classList.add('dark');
+ } else {
+ root.classList.remove('dark');
+ }
+ localStorage.setItem('darkMode', isDarkMode.toString());
+ }, [isDarkMode]);
+
+ // Zoom
+ useEffect(() => {
+ document.body.style.zoom = `${zoom}%`;
+ localStorage.setItem('zoom', zoom.toString());
+ }, [zoom]);
+
+ // Text-to-Speech
+ const toggleReading = () => {
+ if (isReading) {
+ window.speechSynthesis.cancel();
+ setIsReading(false);
+ } else {
+ const text = document.body.innerText;
+ const utterance = new SpeechSynthesisUtterance(text);
+ utterance.lang = 'de-DE';
+ utterance.rate = 0.9;
+ utterance.onend = () => setIsReading(false);
+ window.speechSynthesis.speak(utterance);
+ setIsReading(true);
+ }
+ };
+
+ // Alles zurücksetzen
+ const resetAll = () => {
+ // Text-to-Speech stoppen
+ if (isReading) {
+ window.speechSynthesis.cancel();
+ setIsReading(false);
+ }
+
+ // Schriftgröße zurücksetzen
+ setFontSize('medium');
+
+ // Kontrast zurücksetzen
+ setIsHighContrast(false);
+
+ // Dunkelmodus zurücksetzen
+ setIsDarkMode(false);
+
+ // Zoom zurücksetzen
+ setZoom(100);
+
+ // LocalStorage leeren
+ localStorage.removeItem('fontSize');
+ localStorage.removeItem('highContrast');
+ localStorage.removeItem('darkMode');
+ localStorage.removeItem('zoom');
+ };
+
+ // Gespeicherte Einstellungen laden
+ useEffect(() => {
+ const savedFontSize = localStorage.getItem('fontSize') as 'small' | 'medium' | 'large';
+ const savedHighContrast = localStorage.getItem('highContrast') === 'true';
+ const savedDarkMode = localStorage.getItem('darkMode') === 'true';
+ const savedZoom = parseInt(localStorage.getItem('zoom') || '100');
+
+ if (savedFontSize) setFontSize(savedFontSize);
+ if (savedHighContrast) setIsHighContrast(savedHighContrast);
+ if (savedDarkMode) setIsDarkMode(savedDarkMode);
+ if (savedZoom) setZoom(savedZoom);
+ }, []);
+
+ return (
+
+
Barrierefreiheit
+
+ {/* Alles zurücksetzen - Oben prominent */}
+
+
+
+
+ {/* Schriftgröße */}
+
+
+
Schrift:
+
+
+
+
+
+
+
+ {/* Zoom */}
+
+
Zoom:
+
+
+ {zoom}%
+
+
+
+
+ {/* Kontrast */}
+
+
+ Kontrast:
+
+
+
+ {/* Dunkelmodus */}
+
+ {isDarkMode ? : }
+ Modus:
+
+
+
+ {/* Vorlesen */}
+
+ {isReading ? : }
+ Vorlesen:
+
+
+
+ {/* Tastatur-Hinweis */}
+
+
+ Tab für Navigation
+
+
+ );
+};
+
+export default AccessibilityBar;
diff --git a/src/components/AccessibilityToggle.tsx b/src/components/AccessibilityToggle.tsx
new file mode 100644
index 0000000..f3cbbc2
--- /dev/null
+++ b/src/components/AccessibilityToggle.tsx
@@ -0,0 +1,68 @@
+import { useState, useEffect, useRef } from 'react';
+import { Accessibility, X } from 'lucide-react';
+import { Button } from '@/components/ui/button';
+import AccessibilityBar from './AccessibilityBar';
+
+const AccessibilityToggle = () => {
+ const [isOpen, setIsOpen] = useState(false);
+ const barRef = useRef(null);
+
+ // Klick außerhalb der Bar schließen
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (barRef.current && !barRef.current.contains(event.target as Node)) {
+ const toggleButton = document.querySelector('[aria-label="Barrierefreiheitsoptionen"]');
+ if (toggleButton && !toggleButton.contains(event.target as Node)) {
+ setIsOpen(false);
+ }
+ }
+ };
+
+ if (isOpen) {
+ document.addEventListener('mousedown', handleClickOutside);
+ }
+
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ };
+ }, [isOpen]);
+
+ // Escape-Taste zum Schließen
+ useEffect(() => {
+ const handleEscape = (event: KeyboardEvent) => {
+ if (event.key === 'Escape' && isOpen) {
+ setIsOpen(false);
+ }
+ };
+
+ if (isOpen) {
+ document.addEventListener('keydown', handleEscape);
+ }
+
+ return () => {
+ document.removeEventListener('keydown', handleEscape);
+ };
+ }, [isOpen]);
+
+ return (
+ <>
+ {/* Toggle Button */}
+
+
+ {/* Accessibility Bar */}
+ {isOpen && (
+
+ )}
+ >
+ );
+};
+
+export default AccessibilityToggle;
diff --git a/src/components/BruttoNettoRechnerWidget.tsx b/src/components/BruttoNettoRechnerWidget.tsx
new file mode 100644
index 0000000..3f8123f
--- /dev/null
+++ b/src/components/BruttoNettoRechnerWidget.tsx
@@ -0,0 +1,234 @@
+import React, { useState } from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Button } from '@/components/ui/button';
+import { Calculator, Euro, TrendingUp, Users } from 'lucide-react';
+
+const BruttoNettoRechnerWidget = () => {
+ const [brutto, setBrutto] = useState('');
+ const [berechnungsart, setBerechnungsart] = useState('monatlich');
+ const [steuerklasse, setSteuerklasse] = useState('1');
+ const [kirchensteuer, setKirchensteuer] = useState('0');
+ const [kinder, setKinder] = useState('0');
+ const [alter, setAlter] = useState('30');
+ const [ergebnis, setErgebnis] = useState(null);
+
+ const berechneNetto = () => {
+ const bruttoNum = parseFloat(brutto) || 0;
+ const kinderNum = parseInt(kinder) || 0;
+ const alterNum = parseInt(alter) || 30;
+
+ // Umrechnung bei monatlicher Angabe
+ const bruttoJaehrlich = berechnungsart === 'monatlich' ? bruttoNum * 12 : bruttoNum;
+
+ // Vereinfachte Berechnung (2024 Werte)
+ let steuersatz = 0;
+ let solidaritaetszuschlag = 0;
+ let kirchensteuersatz = 0;
+
+ if (bruttoJaehrlich > 0) {
+ // Einkommensteuer (vereinfacht)
+ if (bruttoJaehrlich <= 12000) steuersatz = 0;
+ else if (bruttoJaehrlich <= 20000) steuersatz = 0.20;
+ else if (bruttoJaehrlich <= 40000) steuersatz = 0.30;
+ else if (bruttoJaehrlich <= 60000) steuersatz = 0.35;
+ else steuersatz = 0.42;
+
+ // Solidaritätszuschlag
+ if (bruttoJaehrlich > 97200) solidaritaetszuschlag = 0.055;
+
+ // Kirchensteuer
+ if (kirchensteuer === 'ev' || kirchensteuer === 'kath') {
+ kirchensteuersatz = 0.09;
+ } else if (kirchensteuer === 'sonstige') {
+ kirchensteuersatz = 0.08;
+ }
+
+ // Sozialversicherungsbeiträge (vereinfacht)
+ const sozialabgaben = bruttoJaehrlich * 0.205; // ca. 20.5%
+
+ // Steuerfreibeträge
+ const grundfreibetrag = 12000;
+ const kinderfreibetrag = kinderNum * 9312;
+ const alterfreibetrag = alterNum >= 65 ? 2400 : 0;
+
+ const zuVersteuerndes = Math.max(0, bruttoJaehrlich - sozialabgaben - grundfreibetrag - kinderfreibetrag - alterfreibetrag);
+ const einkommensteuer = zuVersteuerndes * steuersatz;
+ const soli = einkommensteuer * solidaritaetszuschlag;
+ const kirchensteuerBetrag = einkommensteuer * kirchensteuersatz;
+
+ const nettoJaehrlich = bruttoJaehrlich - sozialabgaben - einkommensteuer - soli - kirchensteuerBetrag;
+ const nettoMonatlich = nettoJaehrlich / 12;
+
+ setErgebnis({
+ brutto: bruttoNum,
+ bruttoJaehrlich,
+ netto: berechnungsart === 'monatlich' ? nettoMonatlich : nettoJaehrlich,
+ nettoJaehrlich,
+ nettoMonatlich,
+ steuern: einkommensteuer + soli + kirchensteuerBetrag,
+ sozialabgaben,
+ steuersatz: steuersatz * 100
+ });
+ }
+ };
+
+ return (
+
+
+
+
+ Brutto-Netto-Rechner
+
+
+ Berechnen Sie Ihr Nettoeinkommen schnell und einfach
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setBrutto(e.target.value)}
+ className="w-full px-3 py-2 border border-gray-300 rounded-md"
+ placeholder={berechnungsart === 'monatlich' ? 'z.B. 4.200' : 'z.B. 50.000'}
+ />
+
+
+
+
+
+
+
+
+
+
+
+ setKinder(e.target.value)}
+ className="w-full px-3 py-2 border border-gray-300 rounded-md"
+ placeholder="0"
+ min="0"
+ />
+
+
+
+ setAlter(e.target.value)}
+ className="w-full px-3 py-2 border border-gray-300 rounded-md"
+ placeholder="30"
+ min="0"
+ />
+
+
+
+
+
+ {ergebnis && (
+
+
Ergebnis:
+
+
+ Brutto ({berechnungsart === 'monatlich' ? 'monatlich' : 'jährlich'}):
+ {ergebnis.brutto.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+
+ Netto ({berechnungsart === 'monatlich' ? 'monatlich' : 'jährlich'}):
+ {ergebnis.netto.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+ {berechnungsart === 'monatlich' && (
+
+ Netto (jährlich):
+ {ergebnis.nettoJaehrlich.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+ )}
+ {berechnungsart === 'jaehrlich' && (
+
+ Netto (monatlich):
+ {ergebnis.nettoMonatlich.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+ )}
+
+ Steuern:
+ {ergebnis.steuern.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+
+ Sozialabgaben:
+ {ergebnis.sozialabgaben.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })}
+
+
+ Steuersatz:
+ {ergebnis.steuersatz.toFixed(1)}%
+
+
+
+ )}
+
+
+ );
+};
+
+export default BruttoNettoRechnerWidget;
diff --git a/src/components/ContactForm.tsx b/src/components/ContactForm.tsx
new file mode 100644
index 0000000..4c33126
--- /dev/null
+++ b/src/components/ContactForm.tsx
@@ -0,0 +1,99 @@
+import { useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Textarea } from '@/components/ui/textarea';
+import { Label } from '@/components/ui/label';
+import { useToast } from '@/hooks/use-toast';
+import { Send } from 'lucide-react';
+
+const ContactForm = () => {
+ const { t, i18n } = useTranslation('contact');
+ const { toast } = useToast();
+ const [isLoading, setIsLoading] = useState(false);
+ const [formData, setFormData] = useState({
+ name: '',
+ email: '',
+ phone: '',
+ message: '',
+ });
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setIsLoading(true);
+
+ // Simulate form submission (email sending can be added later)
+ await new Promise((resolve) => setTimeout(resolve, 1000));
+
+ toast({
+ title: i18n.language === 'pl' ? 'Wiadomość wysłana!' : 'Nachricht gesendet!',
+ description: i18n.language === 'pl'
+ ? `Dziękujemy za wiadomość, ${formData.name}. Skontaktujemy się z Tobą wkrótce.`
+ : `Vielen Dank für Ihre Nachricht, ${formData.name}. Wir werden uns in Kürze bei Ihnen melden.`,
+ });
+
+ setFormData({ name: '', email: '', phone: '', message: '' });
+ setIsLoading(false);
+ };
+
+ const isPolish = i18n.language === 'pl';
+
+ return (
+
+ );
+};
+
+export default ContactForm;
diff --git a/src/components/ContactInfo.tsx b/src/components/ContactInfo.tsx
new file mode 100644
index 0000000..46f2b05
--- /dev/null
+++ b/src/components/ContactInfo.tsx
@@ -0,0 +1,85 @@
+import { Phone, Mail, MapPin, Printer, Globe } from 'lucide-react';
+import { motion } from 'framer-motion';
+
+const ContactInfo = () => {
+ const WHATSAPP_URL = 'https://wa.me/491719864053';
+
+ const contactItems = [
+ {
+ icon: ,
+ title: 'Mobil',
+ value: '0171 / 98 64 053',
+ href: 'tel:01719864053',
+ whatsappHref: WHATSAPP_URL,
+ },
+ {
+ icon: ,
+ title: 'Büro Düsseldorf',
+ value: '0211 / 97629355',
+ href: 'tel:021197629355'
+ },
+ {
+ icon: ,
+ title: 'Fax Büro Düsseldorf',
+ value: '0211 / 97629358',
+ href: 'fax:021197629358'
+ },
+ {
+ icon: ,
+ title: 'E-Mail',
+ value: 'info@finanzen-mizera.de',
+ href: 'mailto:info@finanzen-mizera.de'
+ },
+ {
+ icon: ,
+ title: 'Webseite',
+ value: 'www.finanzen-mizera.de',
+ href: 'https://www.finanzen-mizera.de'
+ }
+ ];
+
+ return (
+
+
Kontaktinformationen
+
+ {contactItems.map((item, index) => (
+
+
+ {item.icon}
+
+
+
+ ))}
+
+
+ );
+};
+
+export default ContactInfo;
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
new file mode 100644
index 0000000..f4fff6f
--- /dev/null
+++ b/src/components/Footer.tsx
@@ -0,0 +1,374 @@
+import { useEffect, useMemo, useState } from 'react';
+import { Link } from 'react-router-dom';
+import { Phone, Mail, MapPin, Smartphone, Printer, Globe, Home, Shield, FileText, Truck, Link as LinkIcon } from 'lucide-react';
+import { useTranslation } from 'react-i18next';
+import { motion } from 'framer-motion';
+
+const BrandFacebook = ({ className }: { className?: string }) => (
+
+);
+
+const BrandInstagram = ({ className }: { className?: string }) => (
+
+);
+
+const BrandLinkedIn = ({ className }: { className?: string }) => (
+
+);
+
+const BrandWhatsApp = ({ className }: { className?: string }) => (
+
+);
+
+const Footer = () => {
+ const { t } = useTranslation('footer');
+ const { t: tNav } = useTranslation('nav');
+ const baseUrl = import.meta.env.BASE_URL;
+
+ const storageKey = 'footerQuickLinkClicks';
+ const [clickCounts, setClickCounts] = useState>({});
+
+ useEffect(() => {
+ try {
+ const raw = localStorage.getItem(storageKey);
+ if (!raw) return;
+ const parsed = JSON.parse(raw) as unknown;
+ if (parsed && typeof parsed === 'object') {
+ setClickCounts(parsed as Record);
+ }
+ } catch {
+ // ignore
+ }
+ }, []);
+
+ const bumpClick = (id: string) => {
+ setClickCounts((prev) => {
+ const next = { ...prev, [id]: (prev[id] ?? 0) + 1 };
+ try {
+ localStorage.setItem(storageKey, JSON.stringify(next));
+ } catch {
+ // ignore
+ }
+ return next;
+ });
+ };
+
+ const quickLinks = useMemo(() => {
+ const base = [
+ { id: 'home', to: '/', label: tNav('home', 'Startseite'), icon: Home },
+ { id: 'contact', to: '/contact#contact', label: tNav('contact', 'Kontakt'), icon: Phone },
+ { id: 'privacy', to: '/datenschutz', label: tNav('privacy', 'Datenschutz'), icon: Shield },
+ { id: 'imprint', to: '/impressum', label: tNav('imprint', 'Impressum'), icon: FileText },
+ { id: 'car', to: '/kfz', label: tNav('car', 'Kfz-Versicherung'), icon: Truck },
+ { id: 'links', to: '/links', label: tNav('links', 'Links'), icon: LinkIcon },
+ ];
+
+ return base.sort((a, b) => {
+ const countA = clickCounts[a.id] ?? 0;
+ const countB = clickCounts[b.id] ?? 0;
+ if (countA !== countB) return countB - countA;
+ return a.label.localeCompare(b.label);
+ });
+ }, [clickCounts, tNav]);
+
+ return (
+
+ );
+};
+
+export default Footer;
diff --git a/src/components/GeneralNotice.tsx b/src/components/GeneralNotice.tsx
new file mode 100644
index 0000000..6755eff
--- /dev/null
+++ b/src/components/GeneralNotice.tsx
@@ -0,0 +1,19 @@
+import { AlertTriangle } from 'lucide-react';
+import { useTranslation } from 'react-i18next';
+
+type Props = {
+ className?: string;
+};
+
+export default function GeneralNotice({ className }: Props) {
+ const { t } = useTranslation('common');
+
+ return (
+
+
+
+
{t('generalNotice.text')}
+
+
+ );
+}
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
new file mode 100644
index 0000000..06de410
--- /dev/null
+++ b/src/components/Header.tsx
@@ -0,0 +1,191 @@
+import { useState } from 'react';
+import { Link, useLocation, useNavigate } from 'react-router-dom';
+import { useTranslation } from 'react-i18next';
+import { Menu, X, Phone, Home, Shield, FileText, Truck, Users, Search } from 'lucide-react';
+import { Button } from '@/components/ui/button';
+import LanguageSwitcher from '@/components/LanguageSwitcher';
+
+const Header = () => {
+ const { t } = useTranslation('nav');
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
+ const location = useLocation();
+ const navigate = useNavigate();
+ const [searchQuery, setSearchQuery] = useState('');
+ const baseUrl = import.meta.env.BASE_URL;
+
+ const navigation = [
+ { name: t('home'), href: '/', icon: Home },
+ { name: t('privateCustomers'), href: '/privatkunden', icon: Users },
+ { name: t('familiesAndChildren', 'Familien & Kinder'), href: '/familien-kinder', icon: Users },
+ { name: t('seniors'), href: '/senioren', icon: Shield },
+ { name: t('businessCustomers'), href: '/geschaeftskunden', icon: Truck },
+ ];
+
+ const rightMenuItems = [
+ { name: t('agency'), href: '/agentur', icon: Shield },
+ { name: t('finances'), href: '/finanzen', icon: FileText },
+ { name: t('contact'), href: '/contact#contact', icon: Phone },
+ ];
+
+ const searchItems = [
+ ...navigation,
+ ...rightMenuItems,
+ { name: t('accidentInsurance', 'Unfall'), href: '/unfall', icon: Shield },
+ { name: t('carInsurance', 'KFZ'), href: '/kfz', icon: Truck },
+ { name: t('services', 'Leistungen'), href: '/leistungen', icon: FileText },
+ ];
+
+ const normalizedQuery = searchQuery.trim().toLowerCase();
+ const filteredItems = normalizedQuery
+ ? searchItems.filter((item) => item.name.toLowerCase().includes(normalizedQuery))
+ : [];
+
+ return (
+
+
+
+
+ {/* Logo */}
+
+
+

+
+
+
+ {/* Right side items */}
+
+ {/* Header Search (Desktop) */}
+
+
+
setSearchQuery(e.target.value)}
+ className="w-44 lg:w-56 2xl:w-72 h-10 rounded-full border border-gray-200 bg-white pl-9 pr-4 text-sm shadow-sm"
+ placeholder={t('searchPlaceholder', 'Suche...')}
+ />
+
+ {filteredItems.length > 0 && (
+
+ {filteredItems.slice(0, 8).map((item) => (
+
+ ))}
+
+ )}
+
+
+
+
+ {/* Mobile menu button */}
+
+
+
+
+ {/* Desktop Navigation (zweite Zeile) */}
+
+
+
+
+ {rightMenuItems.map((item) => {
+ const Icon = item.icon;
+ const isActive = location.pathname === item.href;
+
+ return (
+
+
+ {item.name}
+
+ );
+ })}
+
+
+
+ {/* Mobile Navigation */}
+ {isMenuOpen && (
+
+
+
+ )}
+
+
+ );
+};
+
+export default Header;
\ No newline at end of file
diff --git a/src/components/HeroSlider.tsx b/src/components/HeroSlider.tsx
new file mode 100644
index 0000000..f8d04e8
--- /dev/null
+++ b/src/components/HeroSlider.tsx
@@ -0,0 +1,234 @@
+import * as React from "react";
+import { Link } from "react-router-dom";
+
+import { Button } from "@/components/ui/button";
+import {
+ Carousel,
+ CarouselApi,
+ CarouselContent,
+ CarouselItem,
+ CarouselNext,
+ CarouselPrevious,
+} from "@/components/ui/carousel";
+import { cn } from "@/lib/utils";
+
+type HeroTopic = {
+ label: string;
+ href: string;
+};
+
+type HeroCta = {
+ label: string;
+ href: string;
+ variant?: "default" | "outline";
+};
+
+type HeroSlide = {
+ id: string;
+ title: string;
+ subtitle?: string;
+ imageUrl: string;
+ imagePosition?: string;
+ kicker?: string;
+ ctas?: HeroCta[];
+ topics?: HeroTopic[];
+};
+
+type HeroSliderProps = {
+ slides: HeroSlide[];
+ autoPlay?: boolean;
+ autoPlayIntervalMs?: number;
+ className?: string;
+ slideClassName?: string;
+ persistKey?: string;
+};
+
+export default function HeroSlider({
+ slides,
+ autoPlay = true,
+ autoPlayIntervalMs = 10000,
+ className,
+ slideClassName,
+ persistKey,
+}: HeroSliderProps) {
+ const [api, setApi] = React.useState();
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
+ const [scrollSnaps, setScrollSnaps] = React.useState([]);
+ const baseUrl = import.meta.env.BASE_URL;
+ const fallbackImageUrl = `${baseUrl}${encodeURI("Fotolia_2466577_XS.jpg")}`;
+
+ React.useEffect(() => {
+ if (!api) return;
+ if (!persistKey) return;
+ if (slides.length <= 1) return;
+
+ try {
+ const stored = window.localStorage.getItem(`hero_slider:${persistKey}`);
+ const lastIndex = stored != null ? Number.parseInt(stored, 10) : -1;
+ const safeLastIndex = Number.isFinite(lastIndex) ? lastIndex : -1;
+ const nextIndex = ((safeLastIndex + 1) % slides.length + slides.length) % slides.length;
+ api.scrollTo(nextIndex, true);
+ } catch {
+ // ignore storage errors
+ }
+ }, [api, persistKey, slides.length]);
+
+ React.useEffect(() => {
+ if (!autoPlay) return;
+ if (!api) return;
+ if (slides.length <= 1) return;
+
+ const handle = window.setInterval(() => {
+ api.scrollNext();
+ }, autoPlayIntervalMs);
+
+ return () => {
+ window.clearInterval(handle);
+ };
+ }, [api, autoPlay, autoPlayIntervalMs, slides.length]);
+
+ React.useEffect(() => {
+ if (!api) return;
+
+ const onSelect = () => {
+ const idx = api.selectedScrollSnap();
+ setSelectedIndex(idx);
+ if (persistKey) {
+ try {
+ window.localStorage.setItem(`hero_slider:${persistKey}`, String(idx));
+ } catch {
+ // ignore storage errors
+ }
+ }
+ };
+
+ setScrollSnaps(api.scrollSnapList().map((_, idx) => idx));
+ onSelect();
+
+ api.on("reInit", onSelect);
+ api.on("select", onSelect);
+
+ return () => {
+ api.off("reInit", onSelect);
+ api.off("select", onSelect);
+ };
+ }, [api]);
+
+ if (!slides.length) return null;
+
+ return (
+
+
+
+ {slides.map((slide) => (
+
+
+ {(() => {
+ const backgroundUrl = slide.imageUrl ? slide.imageUrl : fallbackImageUrl;
+
+ return (
+
+ );
+ })()}
+
+
+
+
+
+ {slide.kicker ? (
+
{slide.kicker}
+ ) : null}
+
+
+ {slide.title.includes("\n")
+ ? slide.title.split("\n").map((line, idx, arr) => {
+ const isLast = idx === arr.length - 1;
+ const weightClass = idx === 0 ? "font-medium" : "font-bold";
+
+ return (
+
+ {line}
+ {isLast ? null :
}
+
+ );
+ })
+ : (
+ {slide.title}
+ )}
+
+
+ {slide.subtitle ? (
+
{slide.subtitle}
+ ) : null}
+
+ {slide.ctas?.length ? (
+
+ {slide.ctas.map((cta) => (
+
+ ))}
+
+ ) : null}
+
+
+
+
+
+ ))}
+
+
+ {slides.length > 1 ? (
+
+ {scrollSnaps.map((idx) => {
+ const isActive = idx === selectedIndex;
+
+ return (
+
+ ) : null}
+
+ {slides.length > 1 ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+ );
+}
diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx
new file mode 100644
index 0000000..e8e9710
--- /dev/null
+++ b/src/components/LanguageSwitcher.tsx
@@ -0,0 +1,43 @@
+import { useTranslation } from 'react-i18next';
+
+const LanguageSwitcher = () => {
+ const { i18n } = useTranslation();
+
+ const changeLanguage = (lng: string) => {
+ i18n.changeLanguage(lng);
+ };
+
+ const current = (i18n.language || 'de').slice(0, 2);
+
+ const baseBtn =
+ 'inline-flex items-center gap-2 h-9 px-3 rounded-full border border-gray-200 bg-white text-sm font-semibold transition-colors';
+
+ const activeBtn = 'bg-blue-50 text-blue-700 border-blue-200';
+ const inactiveBtn = 'text-gray-700 hover:bg-gray-50';
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default LanguageSwitcher;
diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx
new file mode 100644
index 0000000..e2f407e
--- /dev/null
+++ b/src/components/Layout.tsx
@@ -0,0 +1,130 @@
+import { ReactNode, useEffect, useState } from 'react';
+import { Link, useLocation } from 'react-router-dom';
+import { useTranslation } from 'react-i18next';
+import { ArrowUp, Phone } from 'lucide-react';
+import Header from './Header';
+import Footer from './Footer';
+import AccessibilityToggle from './AccessibilityToggle';
+import { Button } from '@/components/ui/button';
+import '@/styles/accessibility.css';
+
+interface LayoutProps {
+ children: ReactNode;
+}
+
+const Layout = ({ children }: LayoutProps) => {
+ const location = useLocation();
+ const { t: tNav } = useTranslation('nav');
+ const isEmbed = new URLSearchParams(location.search).get('embed') === '1';
+
+ const [showToTop, setShowToTop] = useState(false);
+
+ useEffect(() => {
+ const onScroll = () => {
+ setShowToTop(window.scrollY > 300);
+ };
+
+ onScroll();
+ window.addEventListener('scroll', onScroll, { passive: true });
+
+ return () => {
+ window.removeEventListener('scroll', onScroll);
+ };
+ }, []);
+
+ const rawSegments = location.pathname.split('/').filter(Boolean);
+ const showBreadcrumbs = rawSegments.length >= 1;
+
+ const segmentLabel = (segment: string) => {
+ const map: Record = {
+ contact: tNav('contact', 'Kontakt'),
+ links: tNav('links', 'Links'),
+ privatkunden: tNav('privateCustomers', 'Privatkunden'),
+ senioren: tNav('seniors', 'Senioren'),
+ geschaeftskunden: tNav('businessCustomers', 'Geschäftskunden'),
+ leistungen: tNav('services', 'Leistungen'),
+ finanzen: tNav('finances', 'Finanzen'),
+ agentur: tNav('agency', 'Agentur'),
+ impressum: tNav('imprint', 'Impressum'),
+ datenschutz: tNav('privacy', 'Datenschutz'),
+ unfall: tNav('accident', 'Unfall'),
+ kfz: tNav('car', 'KFZ'),
+ };
+
+ if (map[segment]) return map[segment];
+ return decodeURIComponent(segment).replace(/[-_]/g, ' ');
+ };
+
+ if (isEmbed) {
+ return {children};
+ }
+
+ return (
+
+
+
+ {showBreadcrumbs && (
+
+
+
+
+
+ )}
+
+
{children}
+
+
+ {/* Skip-Links für Screen Reader */}
+
+ Zum Hauptinhalt springen
+
+
+
+
+
+ {showToTop ? (
+
+ ) : null}
+
+
+
+
+ );
+};
+
+export default Layout;
diff --git a/src/components/NavLink.tsx b/src/components/NavLink.tsx
new file mode 100644
index 0000000..a561a95
--- /dev/null
+++ b/src/components/NavLink.tsx
@@ -0,0 +1,28 @@
+import { NavLink as RouterNavLink, NavLinkProps } from "react-router-dom";
+import { forwardRef } from "react";
+import { cn } from "@/lib/utils";
+
+interface NavLinkCompatProps extends Omit {
+ className?: string;
+ activeClassName?: string;
+ pendingClassName?: string;
+}
+
+const NavLink = forwardRef(
+ ({ className, activeClassName, pendingClassName, to, ...props }, ref) => {
+ return (
+
+ cn(className, isActive && activeClassName, isPending && pendingClassName)
+ }
+ {...props}
+ />
+ );
+ },
+);
+
+NavLink.displayName = "NavLink";
+
+export { NavLink };
diff --git a/src/components/SubMenuBlocks.tsx b/src/components/SubMenuBlocks.tsx
new file mode 100644
index 0000000..38844d6
--- /dev/null
+++ b/src/components/SubMenuBlocks.tsx
@@ -0,0 +1,47 @@
+import { Link, useLocation } from 'react-router-dom';
+import { useTranslation } from 'react-i18next';
+import { Phone, Shield, FileText, Link as LinkIcon } from 'lucide-react';
+
+const SubMenuBlocks = () => {
+ const { t } = useTranslation('nav');
+ const location = useLocation();
+
+ const items = [
+ { key: 'contact', href: '/contact', icon: Phone },
+ { key: 'service', href: '/service', icon: Shield },
+ { key: 'imprint', href: '/impressum', icon: FileText },
+ { key: 'services', href: '/leistungen', icon: Shield },
+ { key: 'privacy', href: '/datenschutz', icon: Shield },
+ { key: 'links', href: '/links', icon: LinkIcon },
+ ] as const;
+
+ return (
+
+
+
+ {items.map((item) => {
+ const Icon = item.icon;
+ const isActive = location.pathname === item.href;
+
+ return (
+
+
+ {t(item.key)}
+
+ );
+ })}
+
+
+
+ );
+};
+
+export default SubMenuBlocks;
diff --git a/src/components/TenReasons.tsx b/src/components/TenReasons.tsx
new file mode 100644
index 0000000..b3ca3f6
--- /dev/null
+++ b/src/components/TenReasons.tsx
@@ -0,0 +1,109 @@
+import { motion } from 'framer-motion';
+import { ChevronRight, ChevronDown } from 'lucide-react';
+import { useState } from 'react';
+
+interface ReasonItem {
+ title: string;
+ description: string;
+}
+
+interface TenReasonsProps {
+ title: string;
+ items: ReasonItem[];
+ years?: number;
+}
+
+export default function TenReasons({ title, items, years }: TenReasonsProps) {
+ const [expandedItems, setExpandedItems] = useState([]);
+
+ // Ensure items is always an array
+ const safeItems = Array.isArray(items) ? items : [];
+
+ // Replace {{years}} placeholder in descriptions
+ const processedItems = safeItems.map((item) => {
+ const safeTitle = String((item as ReasonItem | undefined)?.title ?? '');
+ const safeDescription = String((item as ReasonItem | undefined)?.description ?? '');
+
+ return {
+ title: safeTitle,
+ description: safeDescription.replace('{{years}}', years?.toString() || '26'),
+ };
+ });
+
+ const toggleItem = (index: number) => {
+ setExpandedItems(prev =>
+ prev.includes(index)
+ ? prev.filter(i => i !== index)
+ : [...prev, index]
+ );
+ };
+
+ return (
+
+
+
+
{title}
+
+ {processedItems.length}
+
+
+
+
+
+
+ {processedItems.map((item, index) => {
+ const isOpen = expandedItems.includes(index);
+
+ return (
+
+
+
+ {isOpen && (
+
+
+ {item.description}
+
+
+ )}
+
+ );
+ })}
+
+
+
+ );
+}
diff --git a/src/components/tab-pages/RightImageCard.tsx b/src/components/tab-pages/RightImageCard.tsx
new file mode 100644
index 0000000..260a484
--- /dev/null
+++ b/src/components/tab-pages/RightImageCard.tsx
@@ -0,0 +1,36 @@
+import React from 'react';
+
+type RightImageCardProps = {
+ src: string;
+ alt: string;
+ heightClassName?: string;
+ className?: string;
+ children?: React.ReactNode;
+};
+
+const RightImageCard = ({
+ src,
+ alt,
+ heightClassName = 'h-[240px]',
+ className,
+ children,
+}: RightImageCardProps) => {
+ return (
+
+
+

{
+ (e.currentTarget as HTMLImageElement).style.display = 'none';
+ }}
+ />
+
+ {children ?
{children}
: null}
+
+ );
+};
+
+export default RightImageCard;
diff --git a/src/components/tab-pages/TwoColumnTab.tsx b/src/components/tab-pages/TwoColumnTab.tsx
new file mode 100644
index 0000000..a8d9c9b
--- /dev/null
+++ b/src/components/tab-pages/TwoColumnTab.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+
+type TwoColumnTabProps = {
+ left: React.ReactNode;
+ right: React.ReactNode;
+ className?: string;
+};
+
+const TwoColumnTab = ({ left, right, className }: TwoColumnTabProps) => {
+ return (
+
+ );
+};
+
+export default TwoColumnTab;
diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx
new file mode 100644
index 0000000..1e7878c
--- /dev/null
+++ b/src/components/ui/accordion.tsx
@@ -0,0 +1,52 @@
+import * as React from "react";
+import * as AccordionPrimitive from "@radix-ui/react-accordion";
+import { ChevronDown } from "lucide-react";
+
+import { cn } from "@/lib/utils";
+
+const Accordion = AccordionPrimitive.Root;
+
+const AccordionItem = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AccordionItem.displayName = "AccordionItem";
+
+const AccordionTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ svg]:rotate-180",
+ className,
+ )}
+ {...props}
+ >
+ {children}
+
+
+
+));
+AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
+
+const AccordionContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}
+
+));
+
+AccordionContent.displayName = AccordionPrimitive.Content.displayName;
+
+export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx
new file mode 100644
index 0000000..6dfbfb4
--- /dev/null
+++ b/src/components/ui/alert-dialog.tsx
@@ -0,0 +1,104 @@
+import * as React from "react";
+import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
+
+import { cn } from "@/lib/utils";
+import { buttonVariants } from "@/components/ui/button";
+
+const AlertDialog = AlertDialogPrimitive.Root;
+
+const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
+
+const AlertDialogPortal = AlertDialogPrimitive.Portal;
+
+const AlertDialogOverlay = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
+
+const AlertDialogContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+
+));
+AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
+
+const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes) => (
+
+);
+AlertDialogHeader.displayName = "AlertDialogHeader";
+
+const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes) => (
+
+);
+AlertDialogFooter.displayName = "AlertDialogFooter";
+
+const AlertDialogTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
+
+const AlertDialogDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
+
+const AlertDialogAction = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
+
+const AlertDialogCancel = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
+
+export {
+ AlertDialog,
+ AlertDialogPortal,
+ AlertDialogOverlay,
+ AlertDialogTrigger,
+ AlertDialogContent,
+ AlertDialogHeader,
+ AlertDialogFooter,
+ AlertDialogTitle,
+ AlertDialogDescription,
+ AlertDialogAction,
+ AlertDialogCancel,
+};
diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx
new file mode 100644
index 0000000..2efc3c8
--- /dev/null
+++ b/src/components/ui/alert.tsx
@@ -0,0 +1,43 @@
+import * as React from "react";
+import { cva, type VariantProps } from "class-variance-authority";
+
+import { cn } from "@/lib/utils";
+
+const alertVariants = cva(
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
+ {
+ variants: {
+ variant: {
+ default: "bg-background text-foreground",
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+);
+
+const Alert = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes & VariantProps
+>(({ className, variant, ...props }, ref) => (
+
+));
+Alert.displayName = "Alert";
+
+const AlertTitle = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+AlertTitle.displayName = "AlertTitle";
+
+const AlertDescription = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+AlertDescription.displayName = "AlertDescription";
+
+export { Alert, AlertTitle, AlertDescription };
diff --git a/src/components/ui/aspect-ratio.tsx b/src/components/ui/aspect-ratio.tsx
new file mode 100644
index 0000000..c9e6f4b
--- /dev/null
+++ b/src/components/ui/aspect-ratio.tsx
@@ -0,0 +1,5 @@
+import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
+
+const AspectRatio = AspectRatioPrimitive.Root;
+
+export { AspectRatio };
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx
new file mode 100644
index 0000000..68d21bb
--- /dev/null
+++ b/src/components/ui/avatar.tsx
@@ -0,0 +1,38 @@
+import * as React from "react";
+import * as AvatarPrimitive from "@radix-ui/react-avatar";
+
+import { cn } from "@/lib/utils";
+
+const Avatar = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+Avatar.displayName = AvatarPrimitive.Root.displayName;
+
+const AvatarImage = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AvatarImage.displayName = AvatarPrimitive.Image.displayName;
+
+const AvatarFallback = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
+
+export { Avatar, AvatarImage, AvatarFallback };
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
new file mode 100644
index 0000000..0853c44
--- /dev/null
+++ b/src/components/ui/badge.tsx
@@ -0,0 +1,29 @@
+import * as React from "react";
+import { cva, type VariantProps } from "class-variance-authority";
+
+import { cn } from "@/lib/utils";
+
+const badgeVariants = cva(
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+ {
+ variants: {
+ variant: {
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
+ outline: "text-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+);
+
+export interface BadgeProps extends React.HTMLAttributes, VariantProps {}
+
+function Badge({ className, variant, ...props }: BadgeProps) {
+ return ;
+}
+
+export { Badge, badgeVariants };
diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx
new file mode 100644
index 0000000..ca91ff5
--- /dev/null
+++ b/src/components/ui/breadcrumb.tsx
@@ -0,0 +1,90 @@
+import * as React from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { ChevronRight, MoreHorizontal } from "lucide-react";
+
+import { cn } from "@/lib/utils";
+
+const Breadcrumb = React.forwardRef<
+ HTMLElement,
+ React.ComponentPropsWithoutRef<"nav"> & {
+ separator?: React.ReactNode;
+ }
+>(({ ...props }, ref) => );
+Breadcrumb.displayName = "Breadcrumb";
+
+const BreadcrumbList = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+BreadcrumbList.displayName = "BreadcrumbList";
+
+const BreadcrumbItem = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+BreadcrumbItem.displayName = "BreadcrumbItem";
+
+const BreadcrumbLink = React.forwardRef<
+ HTMLAnchorElement,
+ React.ComponentPropsWithoutRef<"a"> & {
+ asChild?: boolean;
+ }
+>(({ asChild, className, ...props }, ref) => {
+ const Comp = asChild ? Slot : "a";
+
+ return ;
+});
+BreadcrumbLink.displayName = "BreadcrumbLink";
+
+const BreadcrumbPage = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+BreadcrumbPage.displayName = "BreadcrumbPage";
+
+const BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<"li">) => (
+ svg]:size-3.5", className)} {...props}>
+ {children ?? }
+
+);
+BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
+
+const BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<"span">) => (
+
+
+ More
+
+);
+BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
+
+export {
+ Breadcrumb,
+ BreadcrumbList,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ BreadcrumbPage,
+ BreadcrumbSeparator,
+ BreadcrumbEllipsis,
+};
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
new file mode 100644
index 0000000..a834936
--- /dev/null
+++ b/src/components/ui/button.tsx
@@ -0,0 +1,47 @@
+import * as React from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { cva, type VariantProps } from "class-variance-authority";
+
+import { cn } from "@/lib/utils";
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
+ {
+ variants: {
+ variant: {
+ default: "bg-blue-600 text-white hover:bg-blue-700",
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ outline: "border border-blue-600 text-blue-600 bg-white hover:bg-blue-50",
+ secondary: "bg-blue-600 text-white hover:bg-blue-700",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-10 px-4 py-2",
+ sm: "h-9 rounded-md px-3",
+ lg: "h-11 rounded-md px-8",
+ icon: "h-10 w-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+);
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean;
+}
+
+const Button = React.forwardRef(
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button";
+ return ;
+ },
+);
+Button.displayName = "Button";
+
+export { Button, buttonVariants };
diff --git a/src/components/ui/calendar.tsx b/src/components/ui/calendar.tsx
new file mode 100644
index 0000000..900a69e
--- /dev/null
+++ b/src/components/ui/calendar.tsx
@@ -0,0 +1,54 @@
+import * as React from "react";
+import { ChevronLeft, ChevronRight } from "lucide-react";
+import { DayPicker } from "react-day-picker";
+
+import { cn } from "@/lib/utils";
+import { buttonVariants } from "@/components/ui/button";
+
+export type CalendarProps = React.ComponentProps;
+
+function Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {
+ return (
+ ,
+ IconRight: ({ ..._props }) => ,
+ }}
+ {...props}
+ />
+ );
+}
+Calendar.displayName = "Calendar";
+
+export { Calendar };
diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx
new file mode 100644
index 0000000..e282748
--- /dev/null
+++ b/src/components/ui/card.tsx
@@ -0,0 +1,43 @@
+import * as React from "react";
+
+import { cn } from "@/lib/utils";
+
+const Card = React.forwardRef>(({ className, ...props }, ref) => (
+
+));
+Card.displayName = "Card";
+
+const CardHeader = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+CardHeader.displayName = "CardHeader";
+
+const CardTitle = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+CardTitle.displayName = "CardTitle";
+
+const CardDescription = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+CardDescription.displayName = "CardDescription";
+
+const CardContent = React.forwardRef>(
+ ({ className, ...props }, ref) => ,
+);
+CardContent.displayName = "CardContent";
+
+const CardFooter = React.forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ ),
+);
+CardFooter.displayName = "CardFooter";
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
diff --git a/src/components/ui/carousel.tsx b/src/components/ui/carousel.tsx
new file mode 100644
index 0000000..3aa0f31
--- /dev/null
+++ b/src/components/ui/carousel.tsx
@@ -0,0 +1,224 @@
+import * as React from "react";
+import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
+import { ArrowLeft, ArrowRight } from "lucide-react";
+
+import { cn } from "@/lib/utils";
+import { Button } from "@/components/ui/button";
+
+type CarouselApi = UseEmblaCarouselType[1];
+type UseCarouselParameters = Parameters;
+type CarouselOptions = UseCarouselParameters[0];
+type CarouselPlugin = UseCarouselParameters[1];
+
+type CarouselProps = {
+ opts?: CarouselOptions;
+ plugins?: CarouselPlugin;
+ orientation?: "horizontal" | "vertical";
+ setApi?: (api: CarouselApi) => void;
+};
+
+type CarouselContextProps = {
+ carouselRef: ReturnType[0];
+ api: ReturnType[1];
+ scrollPrev: () => void;
+ scrollNext: () => void;
+ canScrollPrev: boolean;
+ canScrollNext: boolean;
+} & CarouselProps;
+
+const CarouselContext = React.createContext(null);
+
+function useCarousel() {
+ const context = React.useContext(CarouselContext);
+
+ if (!context) {
+ throw new Error("useCarousel must be used within a ");
+ }
+
+ return context;
+}
+
+const Carousel = React.forwardRef & CarouselProps>(
+ ({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }, ref) => {
+ const [carouselRef, api] = useEmblaCarousel(
+ {
+ ...opts,
+ axis: orientation === "horizontal" ? "x" : "y",
+ },
+ plugins,
+ );
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
+
+ const onSelect = React.useCallback((api: CarouselApi) => {
+ if (!api) {
+ return;
+ }
+
+ setCanScrollPrev(api.canScrollPrev());
+ setCanScrollNext(api.canScrollNext());
+ }, []);
+
+ const scrollPrev = React.useCallback(() => {
+ api?.scrollPrev();
+ }, [api]);
+
+ const scrollNext = React.useCallback(() => {
+ api?.scrollNext();
+ }, [api]);
+
+ const handleKeyDown = React.useCallback(
+ (event: React.KeyboardEvent) => {
+ if (event.key === "ArrowLeft") {
+ event.preventDefault();
+ scrollPrev();
+ } else if (event.key === "ArrowRight") {
+ event.preventDefault();
+ scrollNext();
+ }
+ },
+ [scrollPrev, scrollNext],
+ );
+
+ React.useEffect(() => {
+ if (!api || !setApi) {
+ return;
+ }
+
+ setApi(api);
+ }, [api, setApi]);
+
+ React.useEffect(() => {
+ if (!api) {
+ return;
+ }
+
+ onSelect(api);
+ api.on("reInit", onSelect);
+ api.on("select", onSelect);
+
+ return () => {
+ api?.off("select", onSelect);
+ };
+ }, [api, onSelect]);
+
+ return (
+
+
+ {children}
+
+
+ );
+ },
+);
+Carousel.displayName = "Carousel";
+
+const CarouselContent = React.forwardRef>(
+ ({ className, ...props }, ref) => {
+ const { carouselRef, orientation } = useCarousel();
+
+ return (
+
+ );
+ },
+);
+CarouselContent.displayName = "CarouselContent";
+
+const CarouselItem = React.forwardRef>(
+ ({ className, ...props }, ref) => {
+ const { orientation } = useCarousel();
+
+ return (
+
+ );
+ },
+);
+CarouselItem.displayName = "CarouselItem";
+
+const CarouselPrevious = React.forwardRef>(
+ ({ className, variant = "outline", size = "icon", ...props }, ref) => {
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
+
+ return (
+
+ );
+ },
+);
+CarouselPrevious.displayName = "CarouselPrevious";
+
+const CarouselNext = React.forwardRef>(
+ ({ className, variant = "outline", size = "icon", ...props }, ref) => {
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
+
+ return (
+
+ );
+ },
+);
+CarouselNext.displayName = "CarouselNext";
+
+export { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext };
diff --git a/src/components/ui/chart.tsx b/src/components/ui/chart.tsx
new file mode 100644
index 0000000..08d40d9
--- /dev/null
+++ b/src/components/ui/chart.tsx
@@ -0,0 +1,303 @@
+import * as React from "react";
+import * as RechartsPrimitive from "recharts";
+
+import { cn } from "@/lib/utils";
+
+// Format: { THEME_NAME: CSS_SELECTOR }
+const THEMES = { light: "", dark: ".dark" } as const;
+
+export type ChartConfig = {
+ [k in string]: {
+ label?: React.ReactNode;
+ icon?: React.ComponentType;
+ } & ({ color?: string; theme?: never } | { color?: never; theme: Record });
+};
+
+type ChartContextProps = {
+ config: ChartConfig;
+};
+
+const ChartContext = React.createContext(null);
+
+function useChart() {
+ const context = React.useContext(ChartContext);
+
+ if (!context) {
+ throw new Error("useChart must be used within a ");
+ }
+
+ return context;
+}
+
+const ChartContainer = React.forwardRef<
+ HTMLDivElement,
+ React.ComponentProps<"div"> & {
+ config: ChartConfig;
+ children: React.ComponentProps["children"];
+ }
+>(({ id, className, children, config, ...props }, ref) => {
+ const uniqueId = React.useId();
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
+
+ return (
+
+
+
+ {children}
+
+
+ );
+});
+ChartContainer.displayName = "Chart";
+
+const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
+ const colorConfig = Object.entries(config).filter(([_, config]) => config.theme || config.color);
+
+ if (!colorConfig.length) {
+ return null;
+ }
+
+ return (
+