commit 48d9c5b4cd36720e33360a278151fe7fabaef533 Author: Alaguraj0361 Date: Fri Mar 27 22:04:14 2026 +0530 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8bd0e39 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,5 @@ + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..43c994c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..05e726d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..8d6cd13 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,14 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + images: { + remotePatterns: [ + { + protocol: 'https', + hostname: 'images.unsplash.com', + }, + ], + }, +}; + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..61931e7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6008 @@ +{ + "name": "web-hondavert", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web-hondavert", + "version": "0.1.0", + "dependencies": { + "framer-motion": "^12.38.0", + "lucide-react": "^1.7.0", + "next": "16.2.1", + "react": "19.2.4", + "react-dom": "19.2.4" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.2.1", + "typescript": "^5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "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.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@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.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "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/@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/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.1.tgz", + "integrity": "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.1.tgz", + "integrity": "sha512-r0epZGo24eT4g08jJlg2OEryBphXqO8aL18oajoTKLzHJ6jVr6P6FI58DLMug04MwD3j8Fj0YK0slyzneKVyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.1.tgz", + "integrity": "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.1.tgz", + "integrity": "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.1.tgz", + "integrity": "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.1.tgz", + "integrity": "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.1.tgz", + "integrity": "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.1.tgz", + "integrity": "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.1.tgz", + "integrity": "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.1.tgz", + "integrity": "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==", + "cpu": [ + "x64" + ], + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "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/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", + "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", + "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/type-utils": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.57.2", + "eslint": "^8.57.0 || ^9.0.0 || ^10.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.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", + "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", + "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.57.2", + "@typescript-eslint/types": "^8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", + "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2" + }, + "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.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", + "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "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.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", + "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "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.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", + "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.57.2", + "@typescript-eslint/tsconfig-utils": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", + "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", + "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "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.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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.10.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz", + "integrity": "sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "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", + "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/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001781", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", + "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "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/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "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/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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.327", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.327.tgz", + "integrity": "sha512-hLxLdIJDf8zIzKoH2TPCs+Botc+wUmj9sp4jVMwklY/sKleM8xxxOExRX3Gxj73nCXmJe3anhG7SvsDDPDvmuQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.1.tgz", + "integrity": "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.1.tgz", + "integrity": "sha512-qhabwjQZ1Mk53XzXvmogf8KQ0tG0CQXF0CZ56+2/lVhmObgmaqj7x5A1DSrWdZd3kwI7GTPGUjFne+krRxYmFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "16.2.1", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "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/node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.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/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.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "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/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-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "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.4" + }, + "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==", + "dev": true, + "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.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "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==", + "dev": true, + "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.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "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/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "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/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "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/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "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/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/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.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.7.0.tgz", + "integrity": "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "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/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/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "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": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.1.tgz", + "integrity": "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==", + "license": "MIT", + "dependencies": { + "@next/env": "16.2.1", + "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.9.19", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.2.1", + "@next/swc-darwin-x64": "16.2.1", + "@next/swc-linux-arm64-gnu": "16.2.1", + "@next/swc-linux-arm64-musl": "16.2.1", + "@next/swc-linux-x64-gnu": "16.2.1", + "@next/swc-linux-x64-musl": "16.2.1", + "@next/swc-win32-arm64-msvc": "16.2.1", + "@next/swc-win32-x64-msvc": "16.2.1", + "sharp": "^0.34.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT" + }, + "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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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==", + "dev": true, + "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": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "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/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "optional": true, + "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/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "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/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz", + "integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.57.2", + "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "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/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/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "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": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..de6870e --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "web-hondavert", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint" + }, + "dependencies": { + "framer-motion": "^12.38.0", + "lucide-react": "^1.7.0", + "next": "16.2.1", + "react": "19.2.4", + "react-dom": "19.2.4" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.2.1", + "typescript": "^5" + } +} diff --git a/public/ecu_kpro.png b/public/ecu_kpro.png new file mode 100644 index 0000000..63d7b61 Binary files /dev/null and b/public/ecu_kpro.png differ diff --git a/public/engine_bay.png b/public/engine_bay.png new file mode 100644 index 0000000..339421e Binary files /dev/null and b/public/engine_bay.png differ diff --git a/public/file.svg b/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/globe.svg b/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/hondavert_logo.png b/public/hondavert_logo.png new file mode 100644 index 0000000..6d02ae6 Binary files /dev/null and b/public/hondavert_logo.png differ diff --git a/public/hud_telemetry.png b/public/hud_telemetry.png new file mode 100644 index 0000000..bb3dbd4 Binary files /dev/null and b/public/hud_telemetry.png differ diff --git a/public/map_graph.png b/public/map_graph.png new file mode 100644 index 0000000..58ba777 Binary files /dev/null and b/public/map_graph.png differ diff --git a/public/map_sensor.png b/public/map_sensor.png new file mode 100644 index 0000000..e553071 Binary files /dev/null and b/public/map_sensor.png differ diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/precan_car.png b/public/precan_car.png new file mode 100644 index 0000000..3d33540 Binary files /dev/null and b/public/precan_car.png differ diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/window.svg b/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/about/AboutPage.module.css b/src/app/about/AboutPage.module.css new file mode 100644 index 0000000..8a0244c --- /dev/null +++ b/src/app/about/AboutPage.module.css @@ -0,0 +1,377 @@ +.main { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO */ +.hero { + position: relative; + min-height: 85vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.heroBg { + position: absolute; + inset: 0; + z-index: 1; +} + +.bgImg { + object-fit: cover; + filter: brightness(0.25) saturate(0.2) contrast(1.1); +} + +.heroOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to right, rgba(0,0,0,0.95) 0%, rgba(0,0,0,0.5) 100%); + z-index: 2; +} + +.heroContent { + position: relative; + z-index: 3; + max-width: 800px; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.3em; + display: block; + margin-bottom: 2rem; +} + +.title { + font-size: clamp(3rem, 7vw, 5.5rem); + font-weight: 900; + line-height: 0.95; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.desc { + font-size: 1.2rem; + color: #888; + line-height: 1.6; + max-width: 600px; +} + +/* 2. STORY SECTION */ +.story { + padding: 15rem 0; + border-bottom: 1px solid var(--border); +} + +.storyGrid { + display: grid; + grid-template-columns: 1.2fr 1fr; + gap: 10rem; + align-items: center; +} + +.storyText h2 { + font-size: 3rem; + font-weight: 900; + margin-bottom: 3rem; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.storyText p { + font-size: 1.1rem; + color: #888; + line-height: 1.8; + margin-bottom: 4rem; +} + +.stats { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 3rem; +} + +.statItem strong { + display: block; + font-size: 2.5rem; + font-weight: 900; + color: #fff; + margin-bottom: 0.5rem; +} + +.statItem span { + font-size: 0.6rem; + color: #555; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.storyVisual { + position: relative; + display: flex; + justify-content: center; +} + +.visualStack { + position: relative; + width: 100%; +} + +.mainVisual { + width: 100%; + height: auto; + filter: saturate(0.5) contrast(1.1); + border-radius: 8px; +} + +.floatingTag { + position: absolute; + bottom: -30px; + right: 20px; + background-color: var(--primary); + color: #fff; + padding: 1.5rem 2.5rem; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + border-radius: 4px; + box-shadow: 0 20px 40px rgba(0,0,0,0.5); +} + +/* 3. LAB SECTION */ +.lab { + padding: 15rem 0; + background-color: var(--secondary); + border-bottom: 1px solid var(--border); +} + +.labHeader { + text-align: center; + max-width: 800px; + margin: 0 auto 8rem; +} + +.redIcon { + margin-bottom: 2rem; + filter: drop-shadow(0 0 10px var(--primary)); +} + +.labHeader h2 { + font-size: 3.5rem; + font-weight: 900; + margin-bottom: 2rem; +} + +.labHeader p { + font-size: 1.1rem; + color: #888; + line-height: 1.6; +} + +.labGrid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2rem; +} + +.labCard { + background-color: var(--neutral); + border: 1px solid var(--border); + padding: 3rem; + border-radius: 8px; + transition: all 0.4s ease; +} + +.labCard:hover { + border-color: var(--primary); + transform: translateY(-10px); +} + +.labImgBox { + position: relative; + width: 100%; + height: 300px; + border-radius: 4px; + overflow: hidden; + margin-bottom: 2.5rem; +} + +.labImg { + object-fit: cover; + filter: brightness(0.6) saturate(0.2); + transition: transform 0.6s ease; +} + +.labCard:hover .labImg { + filter: brightness(0.8) saturate(0.6); + transform: scale(1.1); +} + +.labCard h3 { + font-size: 1.1rem; + font-weight: 900; + margin-bottom: 1rem; + color: #fff; + letter-spacing: 0.1em; +} + +.labCard p { + font-size: 0.85rem; + color: #777; + line-height: 1.6; +} + +/* 4. TIMELINE SEC */ +.timelineSec { + padding: 15rem 0; + background-color: var(--neutral); +} + +.timelineTitle { + font-size: 3.5rem; + font-weight: 900; + text-align: center; + margin-bottom: 8rem; +} + +.timeline { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 2rem; + position: relative; +} + +.tlItem { + position: relative; + padding-top: 4rem; +} + +.tlYear { + font-size: 1rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.1em; + display: block; + margin-bottom: 1.5rem; +} + +.tlDot { + width: 16px; + height: 16px; + background-color: var(--primary); + border-radius: 50%; + position: absolute; + top: -8px; + left: 0; + box-shadow: 0 0 15px var(--primary); +} + +.timeline::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 1px; + background-color: var(--border); + z-index: 1; +} + +.tlItem h3 { + font-size: 1.2rem; + font-weight: 900; + margin-bottom: 1rem; +} + +.tlItem p { + font-size: 0.85rem; + color: #666; + line-height: 1.6; +} + +/* 5. CTA SECTION */ +.cta { + padding: 10rem 0 15rem; +} + +.ctaCard { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 8rem 5rem; + border-radius: 8px; + text-align: center; + position: relative; + overflow: hidden; +} + +.ctaCard h2 { + font-size: 3.5rem; + font-weight: 900; + margin-bottom: 2rem; + letter-spacing: -0.05em; +} + +.ctaCard p { + font-size: 1.2rem; + color: #888; + margin-bottom: 4rem; +} + +.ctaActions { + display: flex; + justify-content: center; + gap: 2rem; +} + +.primaryBtn { + background-color: var(--primary); + color: #fff; + padding: 1.5rem 3.5rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 900; + display: flex; + align-items: center; + gap: 1.2rem; + transition: all 0.3s ease; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + color: #fff; + padding: 1.5rem 3.5rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 900; + transition: all 0.3s ease; +} + +.primaryBtn:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(255, 0, 0, 0.2); } +.secondaryBtn:hover { background-color: rgba(255, 255, 255, 0.05); transform: translateY(-3px); } + +@media (max-width: 1024px) { + .storyGrid, .labGrid, .timeline { grid-template-columns: 1fr; gap: 4rem; } +} + +@media (max-width: 768px) { + .container { padding: 0 2rem; } +} diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 0000000..321bb45 --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,183 @@ +'use client'; + +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Shield, Target, Cpu, Globe, Zap, History, ChevronRight } from 'lucide-react'; +import styles from './AboutPage.module.css'; + +export default function AboutPage() { + const milestones = [ + { year: '2004', title: 'The Foundation', desc: 'Hondavert born from high-performance circuit racing needs.' }, + { year: '2010', title: 'CAN Interface Rev 1', desc: 'First universal CAN-Bus interface developed for K-Series.' }, + { year: '2018', title: 'Rev 4 Legacy', desc: 'Release of the Bluetooth-enabled daughterboard system.' }, + { year: '2026', title: 'Future of Flash', desc: 'Expanding platform diagnostics to modern direct-injection engines.' }, + ]; + + return ( +
+ + + {/* 1. INNER BANNER (UNIQUE HERO) */} +
+
+ Engineering Hub +
+
+
+ + ESTABLISHED 2004 +

BEYOND TUNING.
WE ENGINEER SOLUTIONS.

+

+ With over 20 years of technical intelligence, Hondavert is the global standard for Honda engine management hardware and software. +

+
+
+
+ + {/* 2. THE ENGINEERING STORY (UNIQUE LOOK) */} +
+
+
+ +

OUR TECHNICAL LEGACY

+

+ From building prototype motherboards in a small Warsaw laboratory to supporting thousands of K-Swap projects worldwide, + our DNA has always been rooted in precision electronics. We don't just sell interfaces; we develop the bridges that connect + modern computational speed with classic performance automotive engines. +

+
+
+ 40+ + COUNTRIES SUPPORTED +
+
+ 100k+ + LINE CODES WRITTEN +
+
+ 100Hz + DATALOGGING STANDARDS +
+
+
+ +
+ ECU Engineering +
REV.4 CORE
+
+
+
+
+
+ + {/* 3. LABORATORY FOCUS (NEW SECTION) */} +
+
+ + +

THE LABORATORY

+

Our in-house R&D facility utilizes specialized oscilloscope diagnostic tools and high-speed data acquisition + systems to ensure maximum stability on every board produced.

+
+ +
+
+
+ Lab 1 +
+

PROTO-BOARDING

+

Rigorous multi-layer PCB testing for thermal stability and noise isolation.

+
+
+
+ Lab 2 +
+

FIRMWARE STABILITY

+

Real-time OKI/MCU emulation to eliminate communication lag.

+
+
+
+ Lab 3 +
+

CAN-BUS AUDITS

+

Ensuring 100% telemetry accuracy for diagnostic tools.

+
+
+
+
+ + {/* 4. TIMELINE (NEW SECTION) */} +
+
+

OUR JOURNEY

+
+ {milestones.map((m, i) => ( + + {m.year} +
+

{m.title}

+

{m.desc}

+
+ ))} +
+
+
+ + {/* 5. CTA SECTION */} +
+
+ +

READY TO UNLOCK YOUR ENGINE?

+

Our technical team is ready to support your next high-performance ECU upgrade.

+
+ + +
+
+
+
+ +
+
+ ); +} diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx new file mode 100644 index 0000000..2f92821 --- /dev/null +++ b/src/app/blog/page.tsx @@ -0,0 +1,21 @@ +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import Blog from '@/components/Blog'; +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Blog | Engineering Hub | Hondavert Performance', + description: 'Technical insights, firmware updates, and news on JDM engine management systems.', +}; + +export default function BlogPage() { + return ( +
+ +
+ +
+
+
+ ); +} diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx new file mode 100644 index 0000000..167767c --- /dev/null +++ b/src/app/contact/page.tsx @@ -0,0 +1,19 @@ +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import Contact from '@/components/Contact'; +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Contact Us | Technical Support & Sales | Hondavert Performance', + description: 'Reach our specialized team for technical consultations, installation queries, and dealer netwok applications.', +}; + +export default function ContactPage() { + return ( +
+ + +
+
+ ); +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000..718d6fe Binary files /dev/null and b/src/app/favicon.ico differ diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..e238a6b --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,67 @@ +:root { + --primary: #FF0000; + --primary-hover: #D60000; + --secondary: #212121; + --tertiary: #00808C; + --neutral: #121212; + --background: #121212; + --card-bg: #212121; + --text-main: #FFFFFF; + --text-muted: #A1A1A1; + --border: rgba(255, 255, 255, 0.08); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background-color: var(--background); + color: var(--text-main); + font-family: 'Inter', sans-serif; + overflow-x: hidden; + -webkit-font-smoothing: antialiased; +} + +a { + color: inherit; + text-decoration: none; +} + +button { + background: none; + border: none; + cursor: pointer; + font-family: inherit; + transition: all 0.2s ease; +} + +/* Custom Scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: var(--background); +} + +::-webkit-scrollbar-thumb { + background: var(--secondary); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--primary); +} + +/* Utility Animations */ +@keyframes fadeIn { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +.fade-in { + animation: fadeIn 0.8s ease forwards; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..c60db24 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,27 @@ +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "./globals.css"; + +const inter = Inter({ + variable: "--font-inter", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "HONDA VERT | ECU Management & Performance Engineering", + description: "The ultimate tuning interface for Honda K-Series engines. Surgical precision meets raw performance.", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/src/app/page.module.css b/src/app/page.module.css new file mode 100644 index 0000000..643fe27 --- /dev/null +++ b/src/app/page.module.css @@ -0,0 +1,142 @@ +.page { + --background: #fafafa; + --foreground: #fff; + + --text-primary: #000; + --text-secondary: #666; + + --button-primary-hover: #383838; + --button-secondary-hover: #f2f2f2; + --button-secondary-border: #ebebeb; + + display: flex; + flex: 1; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: var(--font-geist-sans); + background-color: var(--background); +} + +.main { + display: flex; + flex: 1; + width: 100%; + max-width: 800px; + flex-direction: column; + align-items: flex-start; + justify-content: space-between; + background-color: var(--foreground); + padding: 120px 60px; +} + +.intro { + display: flex; + flex-direction: column; + align-items: flex-start; + text-align: left; + gap: 24px; +} + +.intro h1 { + max-width: 320px; + font-size: 40px; + font-weight: 600; + line-height: 48px; + letter-spacing: -2.4px; + text-wrap: balance; + color: var(--text-primary); +} + +.intro p { + max-width: 440px; + font-size: 18px; + line-height: 32px; + text-wrap: balance; + color: var(--text-secondary); +} + +.intro a { + font-weight: 500; + color: var(--text-primary); +} + +.ctas { + display: flex; + flex-direction: row; + width: 100%; + max-width: 440px; + gap: 16px; + font-size: 14px; +} + +.ctas a { + display: flex; + justify-content: center; + align-items: center; + height: 40px; + padding: 0 16px; + border-radius: 128px; + border: 1px solid transparent; + transition: 0.2s; + cursor: pointer; + width: fit-content; + font-weight: 500; +} + +a.primary { + background: var(--text-primary); + color: var(--background); + gap: 8px; +} + +a.secondary { + border-color: var(--button-secondary-border); +} + +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + a.primary:hover { + background: var(--button-primary-hover); + border-color: transparent; + } + + a.secondary:hover { + background: var(--button-secondary-hover); + border-color: transparent; + } +} + +@media (max-width: 600px) { + .main { + padding: 48px 24px; + } + + .intro { + gap: 16px; + } + + .intro h1 { + font-size: 32px; + line-height: 40px; + letter-spacing: -1.92px; + } +} + +@media (prefers-color-scheme: dark) { + .logo { + filter: invert(); + } + + .page { + --background: #000; + --foreground: #000; + + --text-primary: #ededed; + --text-secondary: #999; + + --button-primary-hover: #ccc; + --button-secondary-hover: #1a1a1a; + --button-secondary-border: #1a1a1a; + } +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..2d0f252 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,36 @@ +import Navbar from '@/components/Navbar'; +import HomeHeroSlider from '@/components/HomeHeroSlider'; +import About from '@/components/About'; +import HomeProducts from '@/components/HomeProducts'; +import WhyChooseUs from '@/components/WhyChooseUs'; +import Testimonials from '@/components/Testimonials'; +import Blog from '@/components/Blog'; +import Footer from '@/components/Footer'; + +export default function Home() { + return ( +
+ + + {/* 1. BANNER 3 SLIDER */} + + + {/* 2. ABOUT SECTION */} + + + {/* 3. PRODUCTS SECTION */} + + + {/* 4. WHY CHOOSE US SECTION */} + + + {/* 5. CLIENT TESTIMONIALS SECTION */} + + + {/* 6. BLOG SECTION */} + + +
+
+ ); +} diff --git a/src/app/products/ProductsPage.module.css b/src/app/products/ProductsPage.module.css new file mode 100644 index 0000000..d4588dd --- /dev/null +++ b/src/app/products/ProductsPage.module.css @@ -0,0 +1,101 @@ +.wrapper { + background-color: #000; + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + padding-top: 100px; + padding-bottom: 50px; + overflow: hidden; +} + +.heroGlow { + position: absolute; + top: -20%; + right: -10%; + width: 800px; + height: 800px; + background: radial-gradient(circle at center, rgba(255, 0, 0, 0.08) 0%, transparent 70%); + filter: blur(100px); + z-index: 1; +} + +.heroContent { + position: relative; + z-index: 2; + max-width: 800px; +} + +.badge { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + border: 1px solid var(--primary); + padding: 0.4rem 1rem; + border-radius: 99px; + letter-spacing: 0.2rem; + margin-bottom: 2.5rem; + display: inline-block; +} + +.heroTitle { + font-size: clamp(4rem, 10vw, 8rem); + font-weight: 900; + letter-spacing: -0.06em; + line-height: 0.8; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.heroDesc { + font-size: 1.2rem; + max-width: 600px; + color: #888; + line-height: 1.6; + font-weight: 500; +} + +.productsSection { + background-color: #050505; + padding: 100px 0; + position: relative; +} + +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); + gap: 3rem; + margin-top: -150px; /* Overlap effect */ + position: relative; + z-index: 10; +} + +@media (max-width: 1024px) { + .hero { + min-height: 60vh; + text-align: center; + } + .heroContent { + margin: 0 auto; + } + .grid { + margin-top: 0; + grid-template-columns: 1fr; + } +} diff --git a/src/app/products/[id]/page.tsx b/src/app/products/[id]/page.tsx new file mode 100644 index 0000000..500f878 --- /dev/null +++ b/src/app/products/[id]/page.tsx @@ -0,0 +1,76 @@ +import { notFound } from 'next/navigation'; +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import Hero from '@/components/Hero'; +import Compatibility from '@/components/Compatibility'; +import PreCAN from '@/components/PreCAN'; +import Telemetry from '@/components/Telemetry'; +import Sensor from '@/components/Sensor'; +import ProductShowcase from '@/components/ProductShowcase'; +import CANFlash from '@/components/CANFlash'; +import S300 from '@/components/S300'; +import MapSensor from '@/components/MapSensor'; +import Features from '@/components/Features'; +import CTA from '@/components/CTA'; +import { products } from '@/lib/products'; + +interface PageProps { + params: Promise<{ id: string }>; +} + +export default async function ProductDetailPage({ params }: PageProps) { + const { id } = await params; + const product = products.find((p) => p.id === id); + + if (!product) { + notFound(); + } + + return ( +
+ + + {id === 'kpro' && ( + <> + + + + + )} + + {id === 'canflash' && ( + <> + + + )} + + {id === 'precan' && ( + <> + + + )} + + {id === 's300' && ( + <> + + + )} + + {id === 'map-sensor' && ( + <> + + + )} + + {id !== 'kpro' && id !== 'canflash' && id !== 'precan' && id !== 's300' && id !== 'map-sensor' && } +
+
+ ); +} diff --git a/src/app/products/kpro/page.tsx b/src/app/products/kpro/page.tsx new file mode 100644 index 0000000..8916025 --- /dev/null +++ b/src/app/products/kpro/page.tsx @@ -0,0 +1,19 @@ +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import KPro from '@/components/KPro'; +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'KPro | Hondavert Performance', + description: 'Unlock the full potential of your Honda K-Series ECU with the Hondavert KPro daughterboard. Live tuning, datalogging, and advanced engine protection.', +}; + +export default function KProPage() { + return ( +
+ + +
+
+ ); +} diff --git a/src/app/products/page.tsx b/src/app/products/page.tsx new file mode 100644 index 0000000..ad2f8a8 --- /dev/null +++ b/src/app/products/page.tsx @@ -0,0 +1,47 @@ +import Navbar from '@/components/Navbar'; +import Footer from '@/components/Footer'; +import ProductCard from '@/components/ProductCard'; +import { products } from '@/lib/products'; +import styles from './ProductsPage.module.css'; + +export default function ProductsPage() { + return ( +
+ + +
+
+
+
+ PRECISION ENGINEERED +

SELECT YOUR
PLATFORM

+

+ Mission-critical engine management for the most demanding Honda builds. + Scroll to explore our complete technological ecosystem. +

+
+
+
+ +
+
+
+ {products.map((product, i) => ( + + ))} +
+
+
+ +
+
+ ); +} diff --git a/src/components/About.module.css b/src/components/About.module.css new file mode 100644 index 0000000..085ec1a --- /dev/null +++ b/src/components/About.module.css @@ -0,0 +1,155 @@ +.section { + padding: 150px 0; + background-color: var(--neutral); + overflow: hidden; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1.2fr; + gap: 10rem; + align-items: center; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.15em; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(2rem, 4vw, 3.5rem); + font-weight: 900; + line-height: 1; + letter-spacing: -0.05em; + margin-bottom: 3.5rem; +} + +.desc { + font-size: 1.1rem; + color: #888; + line-height: 1.8; + margin-bottom: 4rem; +} + +.stats { + display: flex; + flex-direction: column; + gap: 3rem; + margin-bottom: 4rem; +} + +.statItem { + display: flex; + gap: 2rem; +} + +.statIcon { + width: 50px; + height: 50px; + background-color: var(--secondary); + border: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + color: var(--primary); +} + +.statText h3 { + font-size: 0.85rem; + font-weight: 900; + letter-spacing: 0.05em; + margin-bottom: 0.8rem; +} + +.statText p { + font-size: 0.85rem; + color: #666; + line-height: 1.6; +} + +.moreBtn { + background-color: transparent; + border: 1px solid var(--border); + padding: 1.2rem 2.8rem; + font-size: 0.75rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + border-radius: 4px; + transition: all 0.2s; +} + +.moreBtn:hover { + background-color: #fff; + color: #000; +} + +.visual { + position: relative; + padding-left: 5rem; +} + +.imageOverlay { + position: absolute; + top: -2rem; + left: 0; + width: 300px; + height: 300px; + background-color: var(--primary); + opacity: 0.05; + z-index: 1; + border-radius: 50%; + filter: blur(80px); +} + +.aboutImg { + width: 100%; + height: auto; + filter: saturate(0) brightness(0.7); + border-radius: 4px; +} + +.founderBox { + position: absolute; + bottom: -2rem; + left: 0; + max-width: 320px; + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 3rem; + border-left: 4px solid var(--primary); +} + +.founderBox strong { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + display: block; + margin-bottom: 1.2rem; + letter-spacing: 0.15rem; +} + +.founderBox p { + font-size: 0.95rem; + color: #fff; + font-style: italic; + font-family: serif; + line-height: 1.6; +} + +@media (max-width: 1024px) { + .grid { grid-template-columns: 1fr; gap: 8rem; } + .founderBox { position: relative; margin-top: 2rem; left: 2rem; } +} diff --git a/src/components/About.tsx b/src/components/About.tsx new file mode 100644 index 0000000..e5bed28 --- /dev/null +++ b/src/components/About.tsx @@ -0,0 +1,54 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Target, History, Globe } from 'lucide-react'; +import styles from './About.module.css'; + +export default function About() { + return ( +
+
+
+
+ ESTABLISHED 2004 +

PRECISION ENGINEERING FOR THE JDM COMMUNITY.

+

+ For over two decades, HondaVert has been at the forefront of aftermarket engine management solutions. + Born from a passion for circuit racing and technical excellence, we develop hardware and software + that empowers enthusiasts to push the limits of their Honda platforms. +

+ +
+
+
+
+

OUR MISSION

+

To provide surgical-grade tuning tools that bridge the gap between amateur builds and professional racing teams.

+
+
+
+
+
+

GLOBAL NETWORK

+

Supported by a world-wide network of certified tuners and distributors across 40+ countries.

+
+
+
+ + +
+ +
+
+ Engineering Legacy +
+ DRIVEN BY PERFORMANCE +

"We don't just sell parts; we provide the keys to unlock hidden potential."

+
+
+
+
+
+ ); +} diff --git a/src/components/Blog.module.css b/src/components/Blog.module.css new file mode 100644 index 0000000..735d94f --- /dev/null +++ b/src/components/Blog.module.css @@ -0,0 +1,143 @@ +.section { + padding: 150px 0; + background-color: var(--neutral); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + display: flex; + justify-content: space-between; + align-items: flex-end; + margin-bottom: 80px; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.15em; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(2rem, 5vw, 4rem); + font-weight: 900; + line-height: 1; + letter-spacing: -0.05em; +} + +.allBtn { + background-color: transparent; + border: 1px solid var(--border); + padding: 1.2rem 2.5rem; + font-size: 0.75rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + border-radius: 4px; + transition: all 0.2s; +} + +.allBtn:hover { + background-color: #fff; + color: #000; +} + +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); + gap: 3rem; +} + +.card { + background-color: var(--secondary); + border: 1px solid var(--border); + border-radius: 4px; + overflow: hidden; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.card:hover { + border-color: var(--primary); + transform: translateY(-10px); +} + +.imageBox { + position: relative; + height: 250px; +} + +.blogImg { + object-fit: cover; + filter: saturate(0) brightness(0.6); + transition: transform 0.5s; +} + +.card:hover .blogImg { + transform: scale(1.05); +} + +.content { + padding: 3rem; +} + +.meta { + display: flex; + gap: 1.5rem; + margin-bottom: 2rem; +} + +.metaItem { + display: flex; + align-items: center; + gap: 0.8rem; + font-size: 0.55rem; + font-weight: 900; + color: #555; + letter-spacing: 0.1em; +} + +.redIcon { color: var(--primary); } + +.content h3 { + font-size: 1.1rem; + font-weight: 900; + letter-spacing: -0.02em; + margin-bottom: 1.5rem; + line-height: 1.25; +} + +.content p { + font-size: 0.85rem; + color: #666; + line-height: 1.6; + margin-bottom: 2.5rem; +} + +.readBtn { + display: flex; + align-items: center; + gap: 1rem; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.05rem; + color: #fff; + border-bottom: 1px solid var(--primary); + padding-bottom: 0.5rem; + transition: all 0.2s; +} + +.readBtn:hover { + color: var(--primary); +} + +@media (max-width: 1024px) { + .header { flex-direction: column; align-items: flex-start; gap: 4rem; } +} diff --git a/src/components/Blog.tsx b/src/components/Blog.tsx new file mode 100644 index 0000000..4d72db5 --- /dev/null +++ b/src/components/Blog.tsx @@ -0,0 +1,80 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Calendar, User, ArrowRight } from 'lucide-react'; +import styles from './Blog.module.css'; + +export default function Blog() { + const posts = [ + { + title: 'OPTIMIZING THE K-SERIES FOR TRACK USE', + desc: 'Technical insights into fuel and ignition management for circuit racing environments.', + date: 'MARCH 15, 2026', + author: 'MARK H.', + img: '/ecu_kpro.png' + }, + { + title: 'S300 V3 FIRMWARE UPDATE RELEASED', + desc: 'Exploring the new link stability improvements and telemetry protocols in the latest release.', + date: 'MARCH 10, 2026', + author: 'ADMIN', + img: '/hondavert_hud_telemetry_1774593564690.png' + }, + { + title: 'PRECISION TUNING: THE FUTURE OF FLASHING', + desc: 'A look into how CANFlash is changing the speed of development for modern ECU platforms.', + date: 'MARCH 02, 2026', + author: 'MARK H.', + img: '/engine_bay.png' + } + ]; + + return ( +
+
+
+
+ LATEST NEWS +

ENGINEERING HUB

+
+ +
+ +
+ {posts.map((item, i) => ( + +
+ {item.title} +
+
+
+
+ + {item.date} +
+
+ + {item.author} +
+
+

{item.title}

+

{item.desc}

+ +
+
+ ))} +
+
+
+ ); +} diff --git a/src/components/CANFlash.module.css b/src/components/CANFlash.module.css new file mode 100644 index 0000000..14f542b --- /dev/null +++ b/src/components/CANFlash.module.css @@ -0,0 +1,219 @@ +.wrapper { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO */ +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.bgWrapper { + position: absolute; + inset: 0; + z-index: 1; +} + +.heroImg { + object-fit: cover; + filter: saturate(0.2) contrast(1.2) brightness(0.4); +} + +.heroOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to bottom, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.9) 100%); + z-index: 2; +} + +.heroGrid { + position: relative; + z-index: 3; + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 5rem; + align-items: center; +} + +.heroLabel { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 2rem; +} + +.heroTitle { + font-size: clamp(4rem, 8vw, 6.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { color: var(--primary); font-style: italic; } + +.heroDesc { + font-size: 1.1rem; + color: #888; + line-height: 1.6; + margin-bottom: 3.5rem; + max-width: 600px; +} + +.heroActions { display: flex; gap: 1rem; } + +.primaryBtn { + background-color: var(--primary); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; +} + +.specBox { + background-color: rgba(18, 18, 18, 0.4); + border: 1px solid rgba(255, 255, 255, 0.05); + backdrop-filter: blur(10px); + padding: 3rem; + width: 100%; + max-width: 400px; + border-radius: 4px; + position: relative; + overflow: hidden; +} + +.progressLine { + position: absolute; + top: 0; left: 0; width: 60%; + height: 2px; + background-color: var(--primary); +} + +.specItem { margin-bottom: 2.5rem; } +.specItem:last-child { margin-bottom: 0; } + +.specLabel { + font-size: 0.55rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.8rem; +} + +.specItem h3 { font-size: 1.3rem; font-weight: 900; font-style: italic; } + +/* 2. OVERVIEW */ +.overview { padding: 120px 0; background-color: var(--neutral); } +.overviewGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8rem; align-items: center; } +.overviewContent h2 { font-size: 3rem; font-weight: 900; letter-spacing: -0.05em; margin-bottom: 3rem; line-height: 0.9; } +.featuresGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem 4rem; } + +.featureItem { display: flex; flex-direction: column; gap: 1.2rem; } +.fIcon { width: 32px; height: 32px; color: var(--primary); } +.featureItem h3 { font-size: 0.85rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; } +.featureItem p { font-size: 0.75rem; color: #777; line-height: 1.5; font-weight: 500; } + +.hwImg { width: 100%; height: auto; border-radius: 4px; filter: saturate(0.8) contrast(1.1); } + +/* 3. COMPATIBILITY */ +.compatibility { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } +.platformGrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1.5rem; } +.platformCard { background-color: var(--secondary); border: 1px solid var(--border); padding: 2rem; border-radius: 8px; transition: all 0.3s ease; position: relative; overflow: hidden; } +.platformCard:hover { border-color: var(--primary); transform: translateY(-4px); box-shadow: 0 10px 30px rgba(0,0,0,0.5); } +.platformCard::before { content: ""; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background-color: var(--border); transition: all 0.3s ease; } +.platformCard:hover::before { background-color: var(--primary); } + +.platformHeader { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 1rem; } +.platformIcon { color: var(--primary); } +.platformHeader h3 { font-size: 0.9rem; font-weight: 900; text-transform: uppercase; color: #fff; margin: 0; letter-spacing: 0.05em; } + +.variantList { display: flex; flex-direction: column; gap: 0.8rem; } +.variantTag { background-color: rgba(255,255,255,0.03); border: 1px solid transparent; padding: 0.8rem 1rem; border-radius: 4px; font-size: 0.7rem; color: #aaa; display: block; border-left: 2px solid transparent; transition: all 0.2s ease; } +.variantTag:hover { background-color: rgba(255,0,0,0.05); border-color: rgba(255,0,0,0.1); border-left-color: var(--primary); color: #fff; } + +/* 4. GUIDES */ +.guides { padding: 120px 0; background-color: var(--neutral); overflow: hidden; } +.sectionHeader { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 5rem; } +.headerTitle .sub { font-size: 0.65rem; font-weight: 900; color: var(--primary); letter-spacing: 0.2rem; display: block; margin-bottom: 1rem; text-transform: uppercase; } +.headerTitle h2 { font-size: 2.5rem; font-weight: 900; margin: 0; line-height: 1; letter-spacing: -0.05em; text-transform: uppercase; } + +.sliderNav { display: flex; gap: 1rem; } +.navBtn { width: 50px; height: 50px; border-radius: 50%; background-color: var(--secondary); border: 1px solid var(--border); color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; } +.navBtn:hover:not(.disabled) { background-color: var(--primary); border-color: var(--primary); } +.navBtn.disabled { opacity: 0.3; cursor: not-allowed; } + +.sliderContainer { width: 100%; overflow: hidden; padding: 1rem 0; } +.sliderTray { display: grid; grid-auto-flow: column; grid-auto-columns: calc(33.333% - 1.333rem); gap: 2rem; width: 100%; } + +.guideCard { background-color: var(--secondary); border: 1px solid var(--border); padding: 3rem; border-radius: 8px; transition: all 0.3s ease; display: flex; flex-direction: column; gap: 1.5rem; height: 100%; min-height: 350px; } +.guideCard:hover { border-color: var(--primary); transform: translateY(-10px); } + +.cardHeader { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1rem; } +.iconBox { width: 60px; height: 60px; background-color: rgba(255, 0, 0, 0.05); border: 1px solid rgba(255, 0, 0, 0.1); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); } +.cardNum { font-size: 1.5rem; font-weight: 900; color: rgba(255, 255, 255, 0.1); letter-spacing: -0.05em; } + +.guideCard h3 { font-size: 1.2rem; font-weight: 900; line-height: 1.3; margin: 0; letter-spacing: -0.02em; } +.guideCard p { font-size: 0.85rem; color: #888; line-height: 1.6; margin: 0; flex-grow: 1; } +.cardBtn { font-size: 0.7rem; font-weight: 900; color: #fff; display: flex; align-items: center; gap: 0.5rem; letter-spacing: 0.1em; background: none; border: none; padding: 0; margin-top: auto; cursor: pointer; transition: color 0.3s ease; } +.guideCard:hover .cardBtn { color: var(--primary); } + +/* 5. DOWNLOADS */ +.downloads { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); } +.dlHeader { text-align: center; margin-bottom: 5rem; } +.dlHeader h2 { font-size: 2.5rem; font-weight: 900; text-transform: uppercase; } + +.dlDashboard { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; } +.dlCard { background-color: var(--neutral); border: 1px solid var(--border); padding: 4rem; border-radius: 8px; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 2rem; position: relative; } +.dlCard h3 { font-size: 1.3rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.05em; } +.dlCard p { font-size: 0.8rem; color: #777; line-height: 1.6; } + +.passwordBox { background-color: rgba(255, 255, 255, 0.02); border: 1px dashed var(--border); padding: 1.5rem; border-radius: 4px; display: flex; flex-direction: column; gap: 0.5rem; width: 100%; margin-top: auto; } +.passwordBox span { font-size: 0.55rem; font-weight: 900; color: #444; text-transform: uppercase; } +.passKey { font-family: monospace; font-size: 1.2rem; color: #fff; font-weight: 900; letter-spacing: 0.3em; } + +.extractNote { font-size: 0.65rem; color: #555; margin-top: 1rem; } +.extractNote a { color: var(--primary); font-weight: 700; text-decoration: underline; } + +.versionTag { font-size: 0.65rem; font-weight: 900; color: var(--primary); background-color: rgba(255, 0, 0, 0.1); padding: 0.5rem 1.5rem; border-radius: 100px; margin-top: auto; } + +.dlBtn { background-color: #fff; color: #000; padding: 1.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: 900; display: flex; align-items: center; justify-content: center; gap: 1.2rem; width: 100%; transition: all 0.3s ease; text-transform: uppercase; letter-spacing: 0.1em; } +.dlBtn:hover { background-color: var(--primary); color: #fff; } + +@media (max-width: 1024px) { + .heroGrid, .overviewGrid, .compGrid, .dlDashboard { grid-template-columns: 1fr; gap: 4rem; } +} diff --git a/src/components/CANFlash.tsx b/src/components/CANFlash.tsx new file mode 100644 index 0000000..a6e03e7 --- /dev/null +++ b/src/components/CANFlash.tsx @@ -0,0 +1,256 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { + Info, + BookOpen, + Download, + ShieldCheck, + Activity, + Gauge, + Settings, + Cpu, + Terminal, + Lock, + User, + ChevronLeft, + ChevronRight, + Zap +} from 'lucide-react'; +import { useState, useRef } from 'react'; +import styles from './CANFlash.module.css'; + +export default function CANFlash() { + const [currentSlide, setCurrentSlide] = useState(0); + + const infoRef = useRef(null); + const guidesRef = useRef(null); + const downloadRef = useRef(null); + + const scrollToSection = (ref: React.RefObject) => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: 'smooth' }); + } + }; + + const coreFeatures = [ + { title: 'Direct ECU Reflashing', desc: 'Modify factory firmware natively via CAN Bus through the OBDII port.', icon: }, + { title: 'Drive-by-Wire & VTC', desc: 'Full electronic throttle curve tuning and variable timing control.', icon: }, + { title: 'Live Sensor Logging', desc: 'Precision data streaming for closed-loop combustion analysis.', icon: }, + { title: '2-Step & Launch', desc: 'Customizable 2-step rev limiters for aggressive launch strategies.', icon: }, + { title: 'Monitor Disabling', desc: 'Deactivate specific sensors and emissions monitors for track use.', icon: }, + { title: 'MAF Scaling', desc: 'Scale Mass Air Flow sensors for high-flow intake systems.', icon: }, + ]; + + const supportedVehicles = [ + { title: 'Acura ILX', variants: ['13-22 Acura ILX'] }, + { title: 'Acura MDX', variants: ['07-13 Acura MDX', '14-15 Acura MDX'] }, + { title: 'Acura RDX', variants: ['19-23 Acura RDX'] }, + { title: 'Acura TL', variants: ['07-08 Acura TL', '09-14 Acura TL'] }, + { title: 'Acura TLX', variants: ['15-20 Acura TLX I', '21+ Acura TLX II'] }, + { title: 'Acura TSX', variants: ['07-08 Acura TSX I', '09-14 Acura TSX II'] }, + { title: 'Honda Accord', variants: ['08-12 Honda Accord 8 (USA Spec.)', '08-12 Honda Accord 8 (JDM Spec.)', '13-17 Honda Accord 9', '18-22 Honda Accord X'] }, + { title: 'Honda Civic', variants: ['06-11 Honda Civic 8', '12-15 Honda Civic 9', '16-21 Honda Civic X', '22+ Honda Civic 11'] }, + { title: 'Honda CR-V', variants: ['17-22 Honda CR-V'] }, + { title: 'Honda CR-Z', variants: ['11-16 Honda CR-Z'] }, + { title: 'Honda Element', variants: ['07-08 Honda Element'] }, + { title: 'Honda Fit', variants: ['09-13 Honda Fit', '15-20 Honda Fit'] }, + { title: 'Honda Ridgeline', variants: ['09-14 Honda Ridgeline'] }, + { title: 'Honda S2000', variants: ['06-09 Honda S2000 AP2'] }, + ]; + + return ( +
+ {/* 1. HERO SECTION */} +
+
+ CANFlash Hero +
+
+
+
+ + OBDII FLASHING INTERFACE +

+ CANFLASH +

+

+ Designed to modify your factory ECU firmware directly via the CAN Bus through the OBDII connector, + achieving total control without requiring any physical hardware modifications to your ECU. +

+
+ + + +
+
+ + +
+
+
+ CONNECTION TYPE +

OBDII PORT NATIVE

+
+
+ HARDWARE MODS +

ZERO REQUIRED

+
+
+ SYSTEM COMPATIBILITY +

ABS / VSA / CLIMATE

+
+
+
+
+
+
+ + {/* 2. CORE CAPABILITIES */} +
+
+
+ +

CORE PERFORMANCE
ENGINEERING

+
+ {coreFeatures.map((feature, i) => ( +
+
{feature.icon}
+

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+
+ CANFlash OBDII Tuning Interface +
+
+
+
+ + {/* 3. SUPPORTED VEHICLES */} +
+
+
+
+ NATIVE OBDII DEPLOYMENT +

SUPPORTED VEHICLES

+
+
+
+ {supportedVehicles.map((platform, bIdx) => ( +
+
+ +

{platform.title}

+
+
+ {platform.variants.map((v, i) => ( + {v} + ))} +
+
+ ))} +
+
+
+ + {/* 4. TECH GUIDES (SLIDER) */} +
+
+
+
+ TECHNICAL INTELLIGENCE +

DOCUMENTATION SYSTEM

+
+
+ +
+ + {[ + { title: 'Device LEDs Meaning', desc: 'Troubleshoot status indicators and system health.', icon: }, + { title: 'Sign In or Register', desc: 'Create KTuner Account or Sign In to your dashboard.', icon: }, + { title: 'Registering CANFlash Unit', desc: 'Initialize and lock your hardware to your software account.', icon: }, + ].map((card, i) => ( +
+
+
{card.icon}
+ 0{i+1} +
+

{card.title}

+

{card.desc}

+ +
+ ))} +
+
+
+
+ + {/* 5. DOWNLOADS */} +
+
+
+

SOFTWARE HUB

+
+
+
+ +

Security & Instructions

+

False virus detections may occur. If you have trouble downloading, temporarily disable Antivirus and Windows Defender.

+
+ Archive Password +
1234
+
+

+ * Extract with WinRAR or 7-Zip. +

+
+
+ +

KTuner Manager

+

Get the latest KTuner Software Environment. Flash multiple map setups directly to your ECU.

+ V1.0.11.2 STABLE + + + DOWNLOAD INSTALLER + +
+
+
+
+
+ ); +} diff --git a/src/components/CTA.module.css b/src/components/CTA.module.css new file mode 100644 index 0000000..0ecea31 --- /dev/null +++ b/src/components/CTA.module.css @@ -0,0 +1,102 @@ +.section { + padding: 150px 0; + background-color: #000; + text-align: center; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + margin-bottom: 5rem; +} + +.title { + font-size: clamp(3rem, 8vw, 6rem); + font-weight: 900; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.grid { + display: flex; + justify-content: center; + gap: 3rem; + flex-wrap: wrap; +} + +.card { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 3rem 4rem; + min-width: 400px; + border-radius: 4px; +} + +.top { + margin-bottom: 2rem; +} + +.label { + font-size: 0.6rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.5rem; +} + +.card h3 { + font-size: 1.8rem; + font-weight: 800; +} + +.btnPrimary { + background-color: var(--primary); + color: white; + padding: 1.2rem 2.5rem; + border-radius: 4px; + font-size: 0.85rem; + font-weight: 900; + letter-spacing: 0.1em; + display: flex; + align-items: center; + gap: 1.5rem; + margin: 0 auto; +} + +.btnSecondary { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid #222; + color: white; + padding: 1.2rem 2.5rem; + border-radius: 4px; + font-size: 0.85rem; + font-weight: 900; + letter-spacing: 0.1em; + display: flex; + align-items: center; + gap: 1.5rem; + margin: 0 auto; + transition: all 0.2s; +} + +.btnSecondary:hover { + background-color: #111; + border-color: #333; +} + +@media (max-width: 768px) { + .card { + min-width: 100%; + } +} diff --git a/src/components/CTA.tsx b/src/components/CTA.tsx new file mode 100644 index 0000000..29004b0 --- /dev/null +++ b/src/components/CTA.tsx @@ -0,0 +1,45 @@ +'use client'; + +import { motion } from 'framer-motion'; +import { Download, BookOpen } from 'lucide-react'; +import styles from './CTA.module.css'; + +export default function CTA() { + return ( +
+
+ +

+ READY TO IGNITE? +

+
+ +
+
+
+ FIRMWARE +

v2.1 Stable

+
+ +
+ +
+
+ DOCUMENTATION +

User Manual

+
+ +
+
+
+
+ ); +} diff --git a/src/components/Compatibility.module.css b/src/components/Compatibility.module.css new file mode 100644 index 0000000..fc7b549 --- /dev/null +++ b/src/components/Compatibility.module.css @@ -0,0 +1,247 @@ +.section { + padding: 100px 0; + background-color: var(--background); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + margin-bottom: 3rem; + border-left: 2px solid var(--primary); + padding-left: 1.5rem; +} + +.subtitle { + font-size: 0.75rem; + color: var(--primary); + font-weight: 800; + letter-spacing: 0.1rem; + margin-bottom: 0.5rem; + display: block; +} + +.title { + font-size: 3rem; + font-weight: 900; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.grid { + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 2rem; + margin-bottom: 2rem; +} + +.cardMain { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 2.5rem; + border-radius: 4px; +} + +.cardHeader { + display: flex; + align-items: center; + gap: 1.5rem; + margin-bottom: 2rem; + border-bottom: 1px solid #222; + padding-bottom: 1.5rem; +} + +.cardHeader h3 { + font-size: 1.2rem; + font-weight: 900; + letter-spacing: -0.02em; +} + +.iconRed { + color: var(--primary); +} + +.list { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1.5rem; + margin-bottom: 2rem; +} + +.list li { + display: flex; + align-items: center; + gap: 0.8rem; + color: #888; + font-size: 0.9rem; + font-weight: 600; +} + +.redDot { + width: 6px; + height: 6px; + background-color: var(--primary); + border-radius: 50%; +} + +.divider { + height: 1px; + background-color: #222; + margin: 1.5rem 0; +} + +.hardwareNote { + font-size: 0.65rem; + color: #444; + font-weight: 900; + letter-spacing: 0.1em; +} + +.cardRight { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.cardSmall { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 1.5rem; + height: 100%; +} + +.listSmall { + margin-bottom: 1.5rem; +} + +.listSmall li { + margin-bottom: 0.8rem; + font-size: 0.9rem; + color: #999; + font-weight: 600; +} + +.alert { + background-color: #0a0808; + border: 1px solid #241212; + padding: 1rem; + display: flex; + gap: 1rem; + align-items: flex-start; +} + +.alertContent strong { + display: block; + font-size: 0.65rem; + color: var(--primary); + font-weight: 900; + margin-bottom: 0.3rem; +} + +.alertContent p { + font-size: 0.75rem; + color: #666; + line-height: 1.4; +} + +.statsGrid { + display: grid; + grid-template-columns: 1fr 2fr 1fr; + gap: 2rem; +} + +.specBox, .performanceBox, .versionBox { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 2rem; +} + +.specLabel { + display: block; + font-size: 0.75rem; + font-weight: 900; + color: #fff; + margin-bottom: 1.5rem; + border-bottom: 1px solid #222; + padding-bottom: 0.8rem; +} + +.specItem { + display: flex; + justify-content: space-between; + margin-bottom: 1.2rem; + font-size: 0.85rem; + font-weight: 600; + color: #555; +} + +.red { + color: var(--primary); +} + +.note { + font-size: 0.85rem; + color: #666; + margin-bottom: 1.5rem; + line-height: 1.6; +} + +.progressItem { + margin-bottom: 1.5rem; +} + +.progressHeader { + display: flex; + justify-content: space-between; + margin-bottom: 0.6rem; + font-size: 0.75rem; + font-weight: 900; +} + +.progressBar { + height: 4px; + background-color: #222; + border-radius: 2px; +} + +.progressFill { + height: 100%; + background-color: var(--primary); + border-radius: 2px; +} + +.versionBox { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + border-top: 4px solid var(--primary); +} + +.vLabel { + font-size: 3.5rem; + font-weight: 900; + letter-spacing: -0.05em; + margin-bottom: 0.5rem; +} + +.vStatus { + font-size: 0.65rem; + color: #444; + font-weight: 900; + letter-spacing: 0.1em; +} + +@media (max-width: 1024px) { + .grid { + grid-template-columns: 1fr; + } + .statsGrid { + grid-template-columns: 1fr; + } +} diff --git a/src/components/Compatibility.tsx b/src/components/Compatibility.tsx new file mode 100644 index 0000000..7114114 --- /dev/null +++ b/src/components/Compatibility.tsx @@ -0,0 +1,99 @@ +import { Car, Info, TriangleAlert } from 'lucide-react'; +import styles from './Compatibility.module.css'; + +export default function Compatibility() { + return ( +
+
+
+ COMPATIBILITY MATRIX +

ECU COMPATIBILITY LIST

+
+ +
+
+
+ +

CIVIC & INTEGRA HIGH-PERFORMANCE

+
+ +
+
    +
  • 02-05 Honda Civic Si (EP3)
  • +
  • 01-05 Honda Civic TypeR (EP3)
  • +
  • 01-06 Honda Integra DC5
  • +
  • 02-06 Honda Integra TypeR
  • +
+ +
+

HARDWARE REVISION: 4.2 (FEB 2026)

+
+
+ +
+
+
+ +

ACURA RSX LINEUP

+
+
    +
  • 02-04 Acura RSX Base
  • +
  • 02-04 Acura RSX TypeS
  • +
+ +
+ +
+ TECHNICAL CONSTRAINT +

Pr-Kpro for automatic not supported. Manual & Sequential conversion required for full functionality.

+
+
+
+
+
+ +
+
+ INTERFACE SPECS +
+ CAN RATE: + 500kbps +
+
+ CONNECTIVITY: + USB 2.1 TYPE-C +
+
+ ONBOARD STORAGE: + 8GB FLASH +
+
+ +
+ PERFORMANCE GAINS +

Real-world benchmarking across supported ECU platforms shows significant response improvement.

+
+
+ VTEC ENGAGEMENT + +12.6% PRECISION +
+
+
+
+
+ FUEL INJECTION MAP + +11.2% EFFICIENCY +
+
+
+
+ +
+
v4.2
+ FIRMWARE REV 0226 +
+
+
+
+ ); +} diff --git a/src/components/Contact.module.css b/src/components/Contact.module.css new file mode 100644 index 0000000..67f7146 --- /dev/null +++ b/src/components/Contact.module.css @@ -0,0 +1,174 @@ +.section { + padding: 15rem 0 10rem; + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + margin-bottom: 8rem; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.2rem; + display: block; + margin-bottom: 1.5rem; +} + +.title { + font-size: 3.5rem; + font-weight: 900; + margin-bottom: 2rem; + line-height: 1.1; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.desc { + max-width: 600px; + font-size: 1.1rem; + color: #888; + line-height: 1.6; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1.5fr; + gap: 8rem; + align-items: start; +} + +.infoCol { + display: grid; + grid-template-columns: 1fr; + gap: 3rem; +} + +.infoCard { + display: flex; + gap: 2rem; + align-items: center; + padding: 2.5rem; + background-color: var(--secondary); + border: 1px solid var(--border); + border-radius: 4px; + transition: all 0.3s ease; +} + +.infoCard:hover { + border-color: var(--primary); + transform: translateY(-5px); +} + +.infoIcon { + width: 60px; + height: 60px; + background-color: rgba(255, 0, 0, 0.05); + border: 1px solid rgba(255, 0, 0, 0.1); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: var(--primary); +} + +.infoText h4 { + font-size: 0.75rem; + font-weight: 900; + margin-bottom: 0.8rem; + color: #fff; + letter-spacing: 0.1em; +} + +.infoText p { + font-size: 0.9rem; + color: #888; + line-height: 1.5; +} + +.contactForm { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 5rem; + border-radius: 4px; +} + +.inputGroup { + margin-bottom: 3rem; + display: flex; + flex-direction: column; + gap: 1.2rem; +} + +.inputGroup label { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.1em; +} + +.inputGroup input, +.inputGroup select, +.inputGroup textarea { + background-color: #0c0c0c; + border: 1px solid var(--border); + border-radius: 4px; + padding: 1.5rem; + color: #fff; + font-size: 0.9rem; + width: 100%; + transition: all 0.3s ease; +} + +.inputGroup input:focus, +.inputGroup select:focus, +.inputGroup textarea:focus { + outline: none; + border-color: var(--primary); + border-width: 2px; +} + +.submitBtn { + width: 100%; + background-color: var(--primary); + color: #fff; + padding: 1.5rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 900; + display: flex; + align-items: center; + justify-content: center; + gap: 1.2rem; + letter-spacing: 0.1em; + transition: all 0.3s ease; +} + +.submitBtn:hover { + background-color: #ff4444; + transform: translateY(-3px); + box-shadow: 0 10px 30px rgba(255, 0, 0, 0.2); +} + +@media (max-width: 1024px) { + .grid { grid-template-columns: 1fr; gap: 4rem; } +} + +@media (max-width: 768px) { + .container { padding: 0 2rem; } + .title { font-size: 2.5rem; } + .contactForm { padding: 3rem 2rem; } +} diff --git a/src/components/Contact.tsx b/src/components/Contact.tsx new file mode 100644 index 0000000..8c85a9c --- /dev/null +++ b/src/components/Contact.tsx @@ -0,0 +1,123 @@ +'use client'; + +import { motion } from 'framer-motion'; +import { Mail, Phone, MapPin, Send, MessageSquare, Clock } from 'lucide-react'; +import styles from './Contact.module.css'; + +export default function Contact() { + return ( +
+
+
+ + GET IN TOUCH + + + TECHNICAL SUPPORT & SALES + + + Our specialized team is available for technical consultations, installation queries, and dealer network applications. + +
+ +
+ +
+
+
+

EMAIL ENQUIRIES

+

support@hondavert.com

+

sales@hondavert.com

+
+
+ +
+
+
+

DIRECT LINE

+

+48 123 456 789 (EU Support)

+

+1 (800) 555-JDM (US Support)

+
+
+ +
+
+
+

TECHNICAL HOURS

+

Mon - Fri: 09:00 - 18:00 (GMT+1)

+

Saturday: Emergency Support Only

+
+
+ +
+
+
+

GLOBAL HUB

+

Precision Engineering HQ

+

Warsaw, Poland. Europe

+
+
+
+ + +
e.preventDefault()}> +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+
+
+
+ ); +} diff --git a/src/components/Features.module.css b/src/components/Features.module.css new file mode 100644 index 0000000..235c535 --- /dev/null +++ b/src/components/Features.module.css @@ -0,0 +1,133 @@ +.section { + padding: 150px 0; + background-color: #050505; + overflow: hidden; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1.5fr; + gap: 6rem; + align-items: center; +} + +.title { + font-size: clamp(2.5rem, 6vw, 4.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 5rem; + text-transform: uppercase; +} + +.outline { + color: transparent; + -webkit-text-stroke: 1px var(--primary); + font-style: italic; +} + +.featureList { + display: flex; + flex-direction: column; + gap: 3rem; +} + +.feature { + display: flex; + gap: 2rem; + align-items: center; +} + +.iconBox { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 1.5rem; + border-radius: 4px; +} + +.red { + color: var(--primary); +} + +.content h3 { + font-size: 1.1rem; + font-weight: 900; + margin-bottom: 0.8rem; + letter-spacing: -0.02em; +} + +.content p { + font-size: 0.85rem; + color: #777; + line-height: 1.6; + font-weight: 500; +} + +.right { + position: relative; +} + +.imageWrapper { + position: relative; + background: radial-gradient(circle at center, rgba(255, 0, 0, 0.05) 0%, transparent 70%); +} + +.detailImg { + width: 100%; + height: auto; + object-fit: cover; + border-radius: 12px; + filter: saturate(0) brightness(0.8); +} + +.buildQuality { + position: absolute; + bottom: -40px; + right: 40px; + max-width: 300px; + background-color: #0d0d0d; + border: 1px solid #1a1a1a; + padding: 2.5rem; + border-bottom: 3px solid var(--primary); +} + +.buildQuality strong { + font-size: 0.7rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.1em; + display: block; + margin-bottom: 1rem; +} + +.buildQuality p { + font-size: 0.75rem; + color: #555; + line-height: 1.5; + font-family: monospace; +} + +@media (max-width: 1024px) { + .grid { + grid-template-columns: 1fr; + text-align: center; + } + .feature { + flex-direction: column; + align-items: center; + text-align: center; + } + .buildQuality { + position: relative; + bottom: auto; + right: auto; + margin: 2rem auto 0; + } +} diff --git a/src/components/Features.tsx b/src/components/Features.tsx new file mode 100644 index 0000000..fa55511 --- /dev/null +++ b/src/components/Features.tsx @@ -0,0 +1,61 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Radio, ShieldCheck } from 'lucide-react'; +import styles from './Features.module.css'; + +export default function Features() { + return ( +
+
+
+
+

+ THE PRECISION
+ DIFFERENCE +

+ +
+
+
+ +
+
+

REAL-TIME TELEMETRY

+

Stream live engine data with zero latency directly to your workstation for surgical tuning precision.

+
+
+ +
+
+ +
+
+

FAIL-SAFE RECOVERY

+

Advanced brick-protection logic ensures your ECU remains accessible even in the event of power interruption.

+
+
+
+
+ +
+
+ ECU Detail +
+ BUILD QUALITY +

"Engineered for the workshop environment. Anodized aluminum housing with reinforced strain-relief cabling."

+
+
+
+
+
+
+ ); +} diff --git a/src/components/Footer.module.css b/src/components/Footer.module.css new file mode 100644 index 0000000..ec2e191 --- /dev/null +++ b/src/components/Footer.module.css @@ -0,0 +1,139 @@ +.footer { + padding: 100px 0 50px; + background-color: var(--neutral); + border-top: 1px solid var(--border); + color: #fff; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.grid { + display: grid; + grid-template-columns: 1.5fr 2fr 1fr; + gap: 4rem; + margin-bottom: 80px; +} + +.branding { + max-width: 400px; +} + +.logoText { + font-size: 1.5rem; + font-weight: 900; + letter-spacing: -0.05em; + margin-bottom: 1.5rem; +} + +.red { + color: var(--primary); +} + +.description { + font-size: 0.75rem; + color: #555; + font-weight: 800; + line-height: 1.6; + letter-spacing: 0.05em; + margin-bottom: 2rem; +} + +.socials { + display: flex; + gap: 1.5rem; + color: #333; +} + +.socials svg:hover { + color: var(--primary); + cursor: pointer; +} + +.links { + display: flex; + gap: 4rem; +} + +.col h4 { + font-size: 0.75rem; + font-weight: 900; + color: var(--primary); + margin-bottom: 1.5rem; + letter-spacing: 0.2rem; +} + +.col { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.col a { + font-size: 0.8rem; + color: #888; + font-weight: 600; + transition: color 0.2s; +} + +.col a:hover { + color: #fff; +} + +.statusBox { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 2rem; + border-radius: 4px; +} + +.statusLine { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 0.5rem; +} + +.dot { + width: 6px; + height: 6px; + background-color: #00ff00; + border-radius: 50%; + box-shadow: 0 0 10px #00ff00; +} + +.statusLine strong { + font-size: 0.75rem; + font-weight: 900; +} + +.statusBox p { + font-size: 0.65rem; + color: #444; + font-weight: 900; + letter-spacing: 0.1em; +} + +.bottom { + border-top: 1px solid var(--secondary); + padding-top: 2rem; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.65rem; + color: #333; + font-weight: 900; + letter-spacing: 0.1em; +} + + +@media (max-width: 768px) { + .grid { + grid-template-columns: 1fr; + gap: 3rem; + } +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx new file mode 100644 index 0000000..bcfaa88 --- /dev/null +++ b/src/components/Footer.tsx @@ -0,0 +1,61 @@ +import Link from 'next/link'; +import Image from 'next/image'; +import { Camera, Play, MessageSquare } from 'lucide-react'; +import styles from './Footer.module.css'; + +export default function Footer() { + return ( +
+
+
+
+
+ HondaVert +
+

+ PRECISION ENGINEERING FOR THE MODERN HONDA ENTHUSIAST. BUILT FOR THE TRACK, REFINED IN THE GARAGE. +

+
+ + + +
+
+ +
+
+

PRODUCT

+ SUPPORT + PRIVACY POLICY + TERMS OF SERVICE +
+
+

CONNECT

+ NEWSLETTER + CONTACT +
+
+ +
+
+
+ + SERVER ONLINE +
+

GLOBAL NET NODE 0863

+
+
+
+ +
+
+ © 2026 HONDA VERT PRECISION ENGINEERING. ALL RIGHTS RESERVED. +
+
+ LAT: 35.6895° N | LON: 139.6917° E +
+
+
+
+ ); +} diff --git a/src/components/Hero.module.css b/src/components/Hero.module.css new file mode 100644 index 0000000..4761204 --- /dev/null +++ b/src/components/Hero.module.css @@ -0,0 +1,140 @@ +.hero { + min-height: 100vh; + padding-top: 100px; + display: flex; + align-items: center; + background-color: var(--background); + overflow: hidden; + position: relative; +} + +.content { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; + display: grid; + grid-template-columns: 1.2fr 1fr; + gap: 4rem; + align-items: center; +} + +.version { + color: #555; + font-size: 0.75rem; + letter-spacing: 0.2rem; + font-weight: 700; + border-left: 2px solid var(--primary); + padding-left: 0.8rem; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(3rem, 7vw, 6rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); +} + +.description { + font-size: 1.1rem; + color: var(--text-dim); + line-height: 1.6; + max-width: 500px; + margin-bottom: 3rem; +} + +.actions { + display: flex; + gap: 1rem; + flex-wrap: wrap; +} + +.btn { + display: flex; + align-items: center; + gap: 0.8rem; + padding: 1rem 1.8rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 800; + letter-spacing: 0.1em; + transition: all 0.2s; +} + +.btnPrimary { + background-color: var(--primary); + color: white; +} + +.btnSecondary { + background-color: rgba(255, 255, 255, 0.05); + border: 1px solid #222; + color: white; +} + +.btnDownload { + background-color: #1a1a1a; + border: 1px solid #333; + color: #fff; +} + +.btn:hover { + transform: translateY(-2px); + filter: brightness(1.2); +} + +.right { + position: relative; +} + +.imageWrapper { + position: relative; + background: radial-gradient(circle at center, rgba(255, 0, 0, 0.1) 0%, transparent 70%); + border-radius: 20px; +} + +.mainImage { + width: 100%; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.5)); +} + +.badge { + position: absolute; + top: 20px; + right: 20px; + background-color: var(--primary); + color: white; + padding: 0.4rem 0.8rem; + font-size: 0.6rem; + font-weight: 900; + letter-spacing: 0.1rem; + text-transform: uppercase; + z-index: 10; +} + +@media (max-width: 1024px) { + .content { + grid-template-columns: 1fr; + text-align: center; + padding: 0 2rem; + gap: 3rem; + } + + .description { + margin: 0 auto 3rem; + } + + .actions { + justify-content: center; + } +} diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx new file mode 100644 index 0000000..c3452fa --- /dev/null +++ b/src/components/Hero.tsx @@ -0,0 +1,69 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Info, BookOpen, Download } from 'lucide-react'; +import styles from './Hero.module.css'; + +interface HeroProps { + version?: string; + title1: string; + title2: string; + description: string; + image: string; + badge?: string; + className?: string; +} + +export default function Hero({ version, title1, title2, description, image, badge, className }: HeroProps) { + return ( +
+
+ + {version && {version}} +

+ {title1}
+ {title2} +

+

{description}

+ +
+ + + +
+
+ + +
+ {badge &&
{badge}
} + {title1} +
+
+
+
+ ); +} diff --git a/src/components/HomeHeroSlider.module.css b/src/components/HomeHeroSlider.module.css new file mode 100644 index 0000000..afb7873 --- /dev/null +++ b/src/components/HomeHeroSlider.module.css @@ -0,0 +1,153 @@ +.wrapper { + position: relative; + height: 100vh; + width: 100%; + overflow: hidden; + background-color: #000; +} + +.slide { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; +} + +.bgWrapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; +} + +.bgImg { + object-fit: cover; + filter: saturate(0.2) contrast(1.2) brightness(0.4); +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(to right, rgba(18, 18, 18, 0.9) 0%, rgba(18, 18, 18, 0.45) 50%, rgba(18, 18, 18, 0.2) 100%); + z-index: 2; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; + position: relative; + z-index: 3; +} + +.content { + max-width: 800px; +} + +.subtitle { + font-size: 1rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.3rem; + display: block; + margin-bottom: 2rem; + text-transform: uppercase; +} + +.title { + font-size: clamp(4rem, 12vw, 9rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.06em; + margin-bottom: 4rem; + text-transform: uppercase; +} + +.desc { + font-size: 1.2rem; + color: #888; + line-height: 1.6; + margin-bottom: 4.5rem; + max-width: 650px; +} + +.ctaBtn { + background-color: var(--primary); + color: #fff; + padding: 1.5rem 3.5rem; + border-radius: 4px; + font-size: 0.9rem; + font-weight: 900; + letter-spacing: 0.15rem; + display: flex; + align-items: center; + gap: 1.5rem; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.ctaBtn:hover { + background-color: var(--primary-hover); + transform: translateY(-5px); + box-shadow: 0 15px 40px rgba(255, 0, 0, 0.3); +} + +.nav { + position: absolute; + bottom: 4rem; + right: 4rem; + display: flex; + gap: 1.5rem; + z-index: 10; +} + +.navBtn { + background-color: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + color: #fff; + padding: 1.5rem; + cursor: pointer; + transition: all 0.2s; +} + +.navBtn:hover { + background-color: var(--primary); + border-color: var(--primary); +} + +.dots { + position: absolute; + bottom: 5.5rem; + left: 4rem; + display: flex; + gap: 1.5rem; + z-index: 10; +} + +.dot { + width: 60px; + height: 4px; + background-color: rgba(255, 255, 255, 0.1); + cursor: pointer; + transition: all 0.3s; +} + +.activeDot { + background-color: var(--primary); + width: 120px; +} + +@media (max-width: 1024px) { + .content { text-align: center; } + .ctaBtn { margin: 0 auto; } + .nav { display: none; } + .dots { left: 50%; transform: translateX(-50%); bottom: 2rem; } +} diff --git a/src/components/HomeHeroSlider.tsx b/src/components/HomeHeroSlider.tsx new file mode 100644 index 0000000..99a5ac3 --- /dev/null +++ b/src/components/HomeHeroSlider.tsx @@ -0,0 +1,96 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import Image from 'next/image'; +import { ChevronRight, ChevronLeft, Zap } from 'lucide-react'; +import styles from './HomeHeroSlider.module.css'; + +const slides = [ + { + title: 'KPRO V4.0', + subtitle: 'UNLEASHED PERFORMANCE', + desc: 'The ultimate tuning interface for Honda K-Series engines. Surgical precision meets raw performance.', + img: '/ecu_kpro.png', + link: '/products/kpro' + }, + { + title: 'CAN FLASH', + subtitle: 'HIGH-SPEED TUNING', + desc: 'The definitive OBDII tuning interface for modern platforms. Advanced encryption and extreme flashing speed.', + img: '/engine_bay.png', + link: '/products/canflash' + }, + { + title: 'S300 CORE', + subtitle: 'LEGACY REDEFINED', + desc: 'Professional grade engine management for OBD1 Honda ECUs. Real-time data logging and track-ready metrics.', + img: '/hondavert_map_sensor_1774593624455.png', + link: '/products/s300' + } +]; + +export default function HomeHeroSlider() { + const [current, setCurrent] = useState(0); + + useEffect(() => { + const timer = setInterval(() => { + setCurrent((prev) => (prev + 1) % slides.length); + }, 6000); + return () => clearInterval(timer); + }, []); + + const next = () => setCurrent((prev) => (prev + 1) % slides.length); + const prev = () => setCurrent((prev) => (prev - 1 + slides.length) % slides.length); + + return ( +
+ + +
+ {slides[current].title} +
+
+ +
+ + {slides[current].subtitle} +

{slides[current].title}

+

{slides[current].desc}

+ +
+
+
+
+ +
+ + +
+ +
+ {slides.map((_, i) => ( +
setCurrent(i)} + /> + ))} +
+
+ ); +} diff --git a/src/components/HomeProducts.module.css b/src/components/HomeProducts.module.css new file mode 100644 index 0000000..b7e3d49 --- /dev/null +++ b/src/components/HomeProducts.module.css @@ -0,0 +1,57 @@ +.section { + padding: 150px 0; + background-color: var(--background); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + display: flex; + justify-content: space-between; + align-items: flex-end; + margin-bottom: 80px; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.15em; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(2.5rem, 5vw, 4rem); + font-weight: 900; + line-height: 1; + letter-spacing: -0.05em; +} + +.allBtn { + font-size: 0.75rem; + font-weight: 900; + color: #fff; + border-bottom: 2px solid var(--primary); + padding-bottom: 0.5rem; + transition: all 0.2s; +} + +.allBtn:hover { + color: var(--primary); +} + +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: 3rem; +} + +@media (max-width: 768px) { + .header { flex-direction: column; align-items: flex-start; gap: 4rem; } +} diff --git a/src/components/HomeProducts.tsx b/src/components/HomeProducts.tsx new file mode 100644 index 0000000..d78afe6 --- /dev/null +++ b/src/components/HomeProducts.tsx @@ -0,0 +1,50 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Link from 'next/link'; +import ProductCard from './ProductCard'; +import { products } from '@/lib/products'; +import styles from './HomeProducts.module.css'; + +export default function HomeProducts() { + const displayProducts = [ + products.find(p => p.id === 'kpro'), + products.find(p => p.id === 'canflash'), + products.find(p => p.id === 's300'), + ].filter(Boolean); + + return ( +
+
+
+
+ DISCOVER OUR LINEUP +

PRECISION PRODUCTS

+
+ VIEW ALL PRODUCTS +
+ +
+ {displayProducts.map((product, i) => ( + + + + ))} +
+
+
+ ); +} diff --git a/src/components/KPro.module.css b/src/components/KPro.module.css new file mode 100644 index 0000000..d1d8ce7 --- /dev/null +++ b/src/components/KPro.module.css @@ -0,0 +1,684 @@ +.wrapper { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO SECTION */ +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.bgWrapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; +} + +.heroImg { + object-fit: cover; + filter: saturate(0.2) contrast(1.2) brightness(0.4); +} + +.heroOverlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(to bottom, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.9) 100%); + z-index: 2; +} + +.heroGrid { + position: relative; + z-index: 3; + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 5rem; + align-items: center; +} + +.heroLabel { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 2rem; +} + +.heroTitle { + font-size: clamp(4rem, 8vw, 6.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.heroDesc { + font-size: 1.1rem; + color: #888; + line-height: 1.6; + margin-bottom: 3.5rem; + max-width: 600px; +} + +.heroActions { + display: flex; + gap: 1rem; +} + +.primaryBtn { + background-color: var(--primary); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; +} + +.heroSpecs { + display: flex; + justify-content: flex-end; +} + +.specBox { + background-color: rgba(18, 18, 18, 0.4); + border: 1px solid rgba(255, 255, 255, 0.05); + backdrop-filter: blur(10px); + padding: 3rem; + width: 100%; + max-width: 400px; + border-radius: 4px; + position: relative; + overflow: hidden; +} + +.progressLine { + position: absolute; + top: 0; + left: 0; + width: 60%; + height: 2px; + background-color: var(--primary); +} + +.specItem { + margin-bottom: 2.5rem; +} + +.specItem:last-child { margin-bottom: 0; } + +.specLabel { + font-size: 0.55rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.8rem; +} + +.specItem h3 { + font-size: 1.3rem; + font-weight: 900; + font-style: italic; +} + +/* 2. OVERVIEW */ +.overview { + padding: 120px 0; + background-color: var(--neutral); +} + +.overviewGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8rem; + align-items: center; +} + +.overviewContent h2 { + font-size: 3rem; + font-weight: 900; + letter-spacing: -0.05em; + margin-bottom: 3rem; + line-height: 0.9; +} + +.featuresGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem 4rem; +} + +.featureItem { + display: flex; + flex-direction: column; + gap: 1.2rem; +} + +.fIcon { + width: 32px; + height: 32px; + color: var(--primary); +} + +.featureItem h3 { + font-size: 0.85rem; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.featureItem p { + font-size: 0.75rem; + color: #777; + line-height: 1.5; + font-weight: 500; +} + +.overviewImage { + position: relative; +} + +.hwImg { + width: 100%; + height: auto; + border-radius: 4px; + filter: saturate(0.8) contrast(1.1); +} + +.imageOverlay { + position: absolute; + inset: -20px; + border: 1px solid var(--border); + z-index: -1; + border-radius: 4px; +} + +/* 3. ADVANCED FEATURES */ +.advanced { + padding: 120px 0; + background-color: var(--secondary); + border-top: 1px solid var(--border); + border-bottom: 1px solid var(--border); +} + +.advHeader { + text-align: center; + margin-bottom: 6rem; +} + +.advHeader h2 { + font-size: 2.5rem; + font-weight: 900; + margin-bottom: 1rem; +} + +.advHeader p { + font-size: 0.8rem; + color: var(--primary); + font-weight: 800; + letter-spacing: 0.2em; +} + +.advGrid { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-rows: 250px; + gap: 1.5rem; +} + +.advCard { + position: relative; + background-color: rgba(33, 33, 33, 0.5); + border: 1px solid var(--border); + border-radius: 12px; + overflow: hidden; + backdrop-filter: blur(10px); + transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1); + display: flex; + flex-direction: column; +} + +/* Bento Variants */ +.advCardWide { grid-column: span 2; } +.advCardTall { grid-row: span 2; } + +.advCard:hover { + border-color: var(--primary); + transform: scale(1.02); + box-shadow: 0 20px 40px rgba(0,0,0,0.5), 0 0 20px rgba(255,0,0,0.1); +} + +.cardImage { + position: absolute; + inset: 0; + z-index: 1; +} + +.advImg { + object-fit: cover; + filter: brightness(0.4) saturate(0.5); + transition: all 0.7s ease; +} + +.advCard:hover .advImg { + filter: brightness(0.6) saturate(1); + transform: scale(1.05); +} + +.cardOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to top, rgba(18, 18, 18, 0.9) 0%, transparent 100%); + z-index: 2; +} + +.cardContent { + position: relative; + z-index: 3; + padding: 2.5rem; + margin-top: auto; +} + +.advCard h3 { + font-size: 1.1rem; + font-weight: 900; + margin-bottom: 0.8rem; + color: #fff; + text-transform: uppercase; + letter-spacing: 0.1em; + display: flex; + align-items: center; + gap: 1rem; +} + +.advCard h3::before { + content: ''; + width: 20px; + height: 3px; + background-color: var(--primary); + box-shadow: 0 0 10px var(--primary); +} + +.cardContent p { + font-size: 0.75rem; + color: #aaa; + line-height: 1.6; + max-width: 400px; +} + +@media (max-width: 1024px) { + .advGrid { + grid-template-columns: 1fr; + grid-auto-rows: auto; + } + .advCardWide, .advCardTall { + grid-column: auto; + grid-row: auto; + } +} + +/* 4. COMPATIBILITY */ +.compatibility { + padding: 120px 0; + background-color: var(--neutral); +} + +.compGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4rem; +} + +.compBox { + background-color: var(--card-bg); + border: 1px solid var(--border); + padding: 3rem; + border-radius: 4px; +} + +.compBox h2 { + font-size: 1.5rem; + font-weight: 900; + margin-bottom: 2rem; + border-bottom: 1px solid var(--border); + padding-bottom: 1rem; +} + +.vList { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.vItem { + display: flex; + justify-content: space-between; + font-size: 0.85rem; + padding-bottom: 0.8rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); +} + +.vTag { + font-family: monospace; + color: var(--primary); + font-weight: 700; +} + +/* 5. TECH SUITE / INSTALLATION */ +.techSuite { + padding: 150px 0; + background-color: var(--secondary); + border-top: 1px solid var(--border); + border-bottom: 1px solid var(--border); +} + +.techHeader { + margin-bottom: 3rem; + text-align: center; +} + +.techHeader h2 { + font-size: 3.5rem; + font-weight: 900; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.guideGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); + gap: 2rem; +} + +.guideCard { + position: relative; + background-color: var(--secondary); + border: 1px solid var(--border); + min-height: 450px; + border-radius: 8px; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); + display: flex; + flex-direction: column; + justify-content: flex-end; +} + +.guideCard:hover { + border-color: var(--primary); + transform: translateY(-8px); +} + +.cardBg { + position: absolute; + inset: 0; + z-index: 1; +} + +.bgImg { + object-fit: cover; + filter: saturate(0.2) brightness(0.5); + transition: transform 0.6s ease; +} + +.guideCard:hover .bgImg { + transform: scale(1.1); + filter: saturate(0.5) brightness(0.6); +} + +.cardOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to top, rgba(18, 18, 18, 1) 10%, rgba(18, 18, 18, 0.5) 50%, transparent 100%); + z-index: 2; +} + +.guideContent { + position: relative; + z-index: 3; + padding: 3rem; +} + +.guideIconBox { + color: var(--primary); + margin-bottom: 2rem; +} + +.guideCard h3 { + font-size: 1.2rem; + font-weight: 900; + margin-bottom: 1rem; + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.guideCard p { + font-size: 0.8rem; + color: #888; + line-height: 1.6; + margin-bottom: 2.5rem; +} + +.guideBtn { + font-size: 0.65rem; + font-weight: 900; + color: #fff; + border-bottom: 2px solid var(--primary); + padding-bottom: 0.5rem; + text-transform: uppercase; + letter-spacing: 0.1em; + transition: all 0.2s; +} + +.guideBtn:hover { + color: var(--primary); +} + +@media (max-width: 1024px) { + .guideGrid { grid-template-columns: 1fr; } +} + +/* 6. DOWNLOADS & SOFTWARE HUB */ +.downloads { + padding: 150px 0; + background-color: var(--neutral); + position: relative; + border-top: 1px solid var(--border); +} + +.dlHeader { + text-align: center; + margin-bottom: 6rem; +} + +.dlHeader h2 { + font-size: 3.5rem; + font-weight: 900; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.alertBox { + max-width: 800px; + margin: 0 auto 5rem; + background-color: rgba(255, 0, 0, 0.05); + border: 1px solid rgba(255, 0, 0, 0.2); + padding: 2rem 3rem; + border-radius: 8px; + display: flex; + gap: 2rem; + align-items: center; +} + +.alertIcon { color: var(--primary); } + +.alertText h4 { + font-size: 0.9rem; + font-weight: 900; + margin-bottom: 0.5rem; + color: var(--primary); + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.alertText p { + font-size: 0.8rem; + color: #888; + line-height: 1.6; +} + +.dlDashboard { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: 2rem; +} + +.dlCard { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 4rem 3rem; + border-radius: 8px; + text-align: center; + transition: all 0.3s ease; + display: flex; + flex-direction: column; + align-items: center; + gap: 2rem; + position: relative; +} + +.dlCard:hover { + border-color: var(--primary); + transform: translateY(-8px); +} + +.dlIconBox { + width: 60px; + height: 60px; + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: var(--primary); +} + +.dlCard h3 { + font-size: 1.2rem; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.dlCard p { + font-size: 0.75rem; + color: #666; + line-height: 1.6; + margin-bottom: 1rem; +} + +.passwordBox { + background-color: rgba(255, 255, 255, 0.02); + border: 1px dashed var(--border); + padding: 1rem 1.5rem; + border-radius: 4px; + display: flex; + flex-direction: column; + gap: 0.5rem; + width: 100%; +} + +.passwordBox span { + font-size: 0.55rem; + font-weight: 900; + color: #444; + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.passKey { + font-family: monospace; + font-size: 1.1rem; + color: #fff; + font-weight: 900; + letter-spacing: 0.3em; +} + +.dlVersion { + font-size: 0.6rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.1em; + padding: 0.4rem 1.2rem; + background-color: rgba(255, 0, 0, 0.1); + border-radius: 100px; +} + +.dlBtn { + width: 100%; + background-color: #fff; + color: #000; + padding: 1.2rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 900; + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.dlBtn:hover { + background-color: var(--primary); + color: #fff; +} + +@media (max-width: 1024px) { + .instGrid, .dlDashboard { + grid-template-columns: 1fr; + } +} diff --git a/src/components/KPro.tsx b/src/components/KPro.tsx new file mode 100644 index 0000000..a3ce9cf --- /dev/null +++ b/src/components/KPro.tsx @@ -0,0 +1,488 @@ +'use client'; + +import { useRef } from 'react'; +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { + Info, + BookOpen, + Download, + ShieldCheck, + Activity, + Car, + Gauge, + LayoutGrid, + Cpu, + Zap, + Layers, + Server, + Bluetooth, + FileText, + ExternalLink, + ChevronRight, + Settings, + CircleCheck, + Smartphone, + AlertTriangle, + ShieldAlert +} from 'lucide-react'; +import styles from './KPro.module.css'; + +export default function KPro() { + const infoRef = useRef(null); + const guidesRef = useRef(null); + const downloadRef = useRef(null); + + const scrollTo = (ref: React.RefObject) => { + ref.current?.scrollIntoView({ behavior: 'smooth' }); + }; + + const coreFeatures = [ + { title: 'Live Engine Tuning', desc: 'Modify and calibrate fuel, ignition, and cam timing maps in real-time.', icon: }, + { title: 'Live Sensors Logging', desc: 'High-speed data streaming of all critical engine sensors for precision analysis.', icon: }, + { title: 'Boost Management', desc: 'Comprehensive boost tables and control with custom MAP sensor support.', icon: }, + { title: 'Engine Protection', desc: 'Failsafe logic for lean AFR, overboost, and overheat conditions.', icon: }, + { title: 'Launch Control', desc: 'Programmable launch parameters with integrated anti-lag systems.', icon: }, + { title: 'Custom Outputs', desc: 'Programmable outputs for nitrous, methanol injection, and shift lights.', icon: }, + ]; + + const advancedFeatures = [ + { title: 'Bluetooth Connect', desc: 'Wireless datalogging and mobile app integration (Rev.4 boards only).', image: 'https://images.unsplash.com/photo-1758411897998-999b2fe9d8e6?auto=format&fit=crop&q=80&w=1200' }, + { title: 'Onboard Datalog', desc: 'High-precision 100Hz onboard logging for standalone data capture.', image: 'https://images.unsplash.com/photo-1771920800290-53f22e5ac3f8?auto=format&fit=crop&q=80&w=1200' }, + { title: 'FlexFuel Support', desc: 'Ethanol sensor input for automatic fuel and ignition adjustments.', image: 'https://images.unsplash.com/photo-1549411210-613d9061df8d?auto=format&fit=crop&q=80&w=1200' }, + { title: 'Engine Safety', desc: 'Advanced engine protection logic for high-performance builds.', image: 'https://images.unsplash.com/photo-1486496146582-9ffcd0b2b2b7?auto=format&fit=crop&q=80&w=800' }, + { title: 'Analog Inputs', desc: 'Eight additional analog inputs for external wideband and sensors.', image: 'https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&q=80&w=800' }, + { title: 'Target Lambda', desc: 'Closed-loop target lambda tables for optimized fuel control.', image: 'https://images.unsplash.com/photo-1565105158896-8fce03d1024f?auto=format&fit=crop&q=80&w=1200' }, + ]; + + const ecuRevisions = [ + { name: '001DD-L5005-A0', type: 'OKI 66Q592 MCU' }, + { name: '001DD-L5003-00', type: 'OKI 66Q592 MCU' }, + ]; + + const factoryModels = [ + { name: '02-05 Honda Civic Si', years: '02-05' }, + { name: '01-05 Honda Civic TypeR', years: '01-05' }, + { name: '01-06 Honda Integra DC5', years: '01-06' }, + { name: '02-06 Honda Integra TypeR', years: '02-06' }, + { name: '02-04 Acura RSX Base', years: '02-04' }, + { name: '02-04 Acura RSX TypeS', years: '02-04' }, + ]; + + const replacementModels = [ + { name: '99-03 Honda S2000 AP1', years: '99-03' }, + { name: '02-05 Honda Civic D17 MT', years: '02-05' }, + { name: 'EG/EK/DC K-Swap', years: 'Various' }, + ]; + + const downloads = [ + { name: 'KPro Manager Software', size: 'V4.5.6', type: 'Setup Executable' }, + { name: 'USB Driver Pack', size: '1.2 MB', type: 'Drivers' }, + ]; + + const guides = [ + { name: 'Hardware Installation Guide', type: 'PDF Documentation' }, + { name: 'Bluetooth Setup Utility', type: 'Config Tool' }, + { name: 'Board LEDs Quick Reference', type: 'Pinout Guide' }, + ]; + + return ( +
+ {/* 1. HERO SECTION */} +
+
+ Engine Bay +
+
+
+
+ + ULTIMATE ECU UPGRADE INTERFACE +

+ KPRO +

+

+ The Hondavert KPro daughterboard is the definitive performance upgrade for Honda K-Series ECUs. + Unlock live tuning, advanced engine protection, and professional motorsport features. +

+
+ + + +
+
+ + +
+
+
+ PLATFORM SUPPORT +

K-SERIES / VTC

+
+
+ DATALOG RATE +

100Hz REALTIME

+
+
+ CONNECTIVITY +

USB / BLUETOOTH

+
+
+
+
+
+
+ + {/* 2. OVERVIEW & FEATURES */} +
+
+
+ +

CORE PERFORMANCE
CAPABILITIES

+
+ {coreFeatures.map((feature, i) => ( + +
{feature.icon}
+

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+ + KPro Daughterboard +
+
+
+
+
+ + {/* 3. ADVANCED FEATURES (SUBSCRIPTION) */} +
+
+ +

REV.4 EXCLUSIVE FEATURES

+

ADVANCED ENGINE MANAGEMENT

+
+
+ {advancedFeatures.map((adv, i) => ( + +
+ {adv.title} +
+
+
+

{adv.title}

+

{adv.desc}

+
+
+ ))} +
+
+
+ + {/* 4. COMPATIBILITY */} +
+
+
+ +

FACTORY EQUIPPED

+
+ {factoryModels.map((m, i) => ( +
+ {m.name} + {m.years} +
+ ))} +
+
+ +

ECU MODIFICATION REQUIRED

+
+ {replacementModels.map((m, i) => ( +
+ {m.name} + {m.years} +
+ ))} +
+
+ +

OEM ECUs in these vehicles are not directly compatible. Replacement with a supported ECU is required.

+
+
+
+ + +

SUPPORTED ECU ARCHITECTURE

+
+ {ecuRevisions.map((rev, i) => ( +
+

BOARD REVISION

+

{rev.name}

+
+ ))} +
+
+
+
+ + {/* 5. TECH SUITE / INSTALLATION */} +
+
+ +

TECHNICAL INTELLIGENCE

+
+ +
+ +
+ Installation +
+
+
+
+

Hardware Installation

+

Comprehensive step-by-step soldering and seating guide for the KPro daughterboard onto your ECU PCB.

+ +
+
+ + +
+ Bluetooth +
+
+
+
+

Bluetooth Config

+

Wireless connection protocols, pairing procedures, and list of compatible mobile tuning applications.

+ +
+
+ + +
+ LED Indicators +
+
+
+
+

Board LEDs Meaning

+

Decipher onboard DIAG LED patterns for rapid troubleshooting and system status verification.

+ +
+
+ + +
+ ECU Pinout +
+
+
+
+

ECU Pinout

+

Detailed technical mapping of all ECU connectors, sensor inputs, and programmable output pins.

+ +
+
+ + +
+ O2 Sensors +
+
+
+
+

O2 Sensor Types

+

In-depth analysis of PRA vs PRB sensor differences, compatibility notes, and custom wiring diagrams.

+ +
+
+
+
+
+ + {/* 6. DOWNLOADS & SOFTWARE HUB */} +
+
+ +

SOFTWARE HUB

+
+ + + +
+ +
+

Security & Tools

+

False virus detections may occur. If you have trouble downloading, temporarily disable your antivirus and Windows Defender.

+ +
+ Archive Password +
1234
+
+ +

+ * Extract with WinRAR or 7-Zip for best results. +

+
+ + +
+

KPro Manager

+

Get Latest KPro Manager + Service Utility Securely. Standard installation package for all K-Series platforms.

+ + V4.5.6 STABLE + + + + DOWNLOAD INSTALLER + +
+
+
+
+
+ ); + +} diff --git a/src/components/MapSensor.module.css b/src/components/MapSensor.module.css new file mode 100644 index 0000000..d4c6b9a --- /dev/null +++ b/src/components/MapSensor.module.css @@ -0,0 +1,179 @@ +.wrapper { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO */ +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.bgWrapper { + position: absolute; + inset: 0; + z-index: 1; +} + +.heroImg { + object-fit: contain; + filter: saturate(0.5) contrast(1.1) brightness(0.6); +} + +.heroOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to right, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.4) 100%); + z-index: 2; +} + +.heroGrid { + position: relative; + z-index: 3; + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 5rem; + align-items: center; +} + +.heroLabel { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 2rem; +} + +.heroTitle { + font-size: clamp(4rem, 8vw, 6.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { color: var(--primary); font-style: italic; } + +.heroDesc { + font-size: 1.1rem; + color: #888; + line-height: 1.6; + margin-bottom: 3.5rem; + max-width: 600px; +} + +.heroActions { display: flex; gap: 1rem; } + +.primaryBtn { + background-color: var(--primary); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; + border: none; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; +} + +.specBox { + background-color: rgba(18, 18, 18, 0.4); + border: 1px solid rgba(255, 255, 255, 0.05); + backdrop-filter: blur(10px); + padding: 3rem; + width: 100%; + max-width: 400px; + border-radius: 4px; + position: relative; + overflow: hidden; +} + +.progressLine { + position: absolute; + top: 0; left: 0; width: 60%; + height: 2px; + background-color: var(--primary); +} + +.specItem { margin-bottom: 2.5rem; } +.specItem:last-child { margin-bottom: 0; } + +.specLabel { + font-size: 0.55rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.8rem; +} + +.specItem h3 { font-size: 1.3rem; font-weight: 900; font-style: italic; } + +/* 2. OVERVIEW */ +.overview { padding: 120px 0; background-color: var(--neutral); } +.overviewGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8rem; align-items: center; } +.overviewContent h2 { font-size: 3rem; font-weight: 900; letter-spacing: -0.05em; margin-bottom: 3rem; line-height: 0.9; text-transform: uppercase; } +.featuresGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem 4rem; } + +.featureItem { display: flex; flex-direction: column; gap: 1.2rem; } +.fIcon { width: 32px; height: 32px; color: var(--primary); } +.featureItem h3 { font-size: 0.85rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; } +.featureItem p { font-size: 0.75rem; color: #777; line-height: 1.5; font-weight: 500; } + +.hwImg { width: 100%; height: auto; border-radius: 4px; filter: saturate(0.8) contrast(1.1); } + +/* 3. CALIBRATION (COMPATIBILITY FORMAT) */ +.calibration { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } +.compGrid { display: grid; grid-template-columns: 1fr 1.3fr; gap: 4rem; align-items: start; } +.compBox { background-color: var(--neutral); border: 1px solid var(--border); padding: 4rem; border-radius: 4px; width: 100%; height: 100%; } +.compBox h2 { font-size: 1.2rem; font-weight: 900; margin-bottom: 3.5rem; border-bottom: 1px solid var(--border); padding-bottom: 1.2rem; letter-spacing: 0.05em; text-align: center; } + +.graphContainer { width: 100%; display: flex; align-items: center; justify-content: center; background-color: #fff; padding: 1.5rem; border-radius: 4px; border: 1px solid rgba(255,255,255,0.1); } +.graphImg { width: 100%; height: auto; object-fit: contain; } + +.vList { display: flex; flex-direction: column; gap: 1.5rem; margin-bottom: 3rem; } +.vItem { display: flex; justify-content: space-between; font-size: 1rem; padding-bottom: 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.03); align-items: center; } +.vTag { font-family: monospace; color: var(--primary); font-weight: 900; font-size: 1.5rem; text-transform: uppercase; } + +.note { display: flex; gap: 1rem; color: var(--primary); font-size: 0.85rem; margin-top: 2rem; font-weight: 700; opacity: 0.8; line-height: 1.6; } + +.ecuSupported { margin-top: 2.5rem; background-color: rgba(255,255,255,0.02); padding: 2rem; border-radius: 4px; border: 1px solid var(--border); text-align: center; } +.ecuRow { display: flex; flex-direction: column; gap: 1rem; } +.ecuRegion { font-size: 0.75rem; font-weight: 900; color: var(--primary); letter-spacing: 0.1em; } +.ecuVer { font-size: 0.9rem; color: #bbb; line-height: 1.6; } + +@media (max-width: 1024px) { + .heroGrid, .overviewGrid { grid-template-columns: 1fr; gap: 4rem; } + .featuresGrid { grid-template-columns: 1fr; } +} diff --git a/src/components/MapSensor.tsx b/src/components/MapSensor.tsx new file mode 100644 index 0000000..01b2c49 --- /dev/null +++ b/src/components/MapSensor.tsx @@ -0,0 +1,166 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { + Info, + Activity, + Settings, + Gauge, + Zap, + CheckCircle, + Database +} from 'lucide-react'; +import { useRef } from 'react'; +import styles from './MapSensor.module.css'; + +export default function MapSensor() { + + const infoRef = useRef(null); + const specsRef = useRef(null); + + const scrollToSection = (ref: React.RefObject) => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: 'smooth' }); + } + }; + + const coreFeatures = [ + { title: 'Direct Plug & Play', desc: 'Installs securely in under 60 seconds. Completely eliminates risky custom wiring splices.', icon: }, + { title: '4-Bar Pressure Limit', desc: 'Reads vacuum to upwards of 43+ PSI of boost precisely across the curve.', icon: }, + { title: 'Linear Calibration', desc: 'Exceptional linear voltage scaling ensures tuning stability under high output.', icon: }, + { title: 'B-D-F-H Series Fitment', desc: 'Bolts directly to the B/D/F/H-series proprietary factory throttle bodies.', icon: }, + { title: 'K-Series Fitment', desc: 'Available in specifically engineered K-series intake manifold form factors.', icon: }, + { title: 'Data Resolution', desc: 'High-speed transducer delivers robust feedback for ECU closed-loop processes.', icon: }, + ]; + + return ( +
+ {/* 1. HERO SECTION */} +
+
+ MAP Sensor Hero +
+
+
+
+ + PLUG-COMPATIBLE ENGINE SENSOR +

+ 4-BAR MAP +

+

+ The HondaVert 4 bar MAP sensor is a direct-fit replacement engineered for + B, D, H, F, and K-series engines. Safely and accurately measure up to 43+ PSI of boost. +

+
+ + +
+
+ + +
+
+
+ PLATFORM SUPPORT +

B/D/F/H & K SERIES

+
+
+ MAXIMUM PRESSURE +

4 BAR (43.5 PSI)

+
+
+ INSTALLATION +

PLUG & PLAY - NO WIRING

+
+
+
+
+
+
+ + {/* 2. CORE CAPABILITIES */} +
+
+
+ +

HARDWARE
INTEGRATION

+
+ {coreFeatures.map((feature, i) => ( +
+
{feature.icon}
+

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+
+ 4 Bar MAP Sensor Hardware +
+
+
+
+ + {/* 3. CALIBRATION DATA */} +
+
+
+
+

ECU CALIBRATION CHARACTERISTICS

+
+
+ Required Scalar Value + 838 +
+
+ Required Offset Value + 31 +
+
+
+ +

Ensure these values are accurately entered into your engine management software to guarantee precise output vs absolute pressure scaling.

+
+
+
+ SOFTWARE COMPATIBILITY + Native support within Hondata, KPro, PreCAN, CANFlash, and S300 Manager. Select "HondaVert 4-Bar" or input the scalar/offset manually. +
+
+
+ +
+

OUTPUT VS ABSOLUTE PRESSURE

+
+ MAP Sensor Transfer Function Graph +
+
+
+
+
+
+ ); +} diff --git a/src/components/Navbar.module.css b/src/components/Navbar.module.css new file mode 100644 index 0000000..4b0ddf0 --- /dev/null +++ b/src/components/Navbar.module.css @@ -0,0 +1,174 @@ +.nav { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 80px; + background-color: rgba(18, 18, 18, 0.85); + backdrop-filter: blur(10px); + border-bottom: 1px solid rgba(255, 0, 0, 0.1); + z-index: 1000; + display: flex; + align-items: center; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 2rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.logoImg { + display: block; + object-fit: contain; + filter: brightness(1); +} + +.links { + display: flex; + gap: 2.5rem; + align-items: center; +} + +.navItemDropdown { + position: relative; + height: 80px; + display: flex; + align-items: center; +} + +.chevron { + margin-left: 0.5rem; + transition: transform 0.2s; +} + +.navItemDropdown:hover .chevron { + transform: rotate(180deg); + color: var(--primary); +} + +.navItemDropdown > a { + display: flex; + align-items: center; +} + +.links > a, .navItemDropdown > a { + font-size: 0.75rem; + font-weight: 800; + color: #888; + letter-spacing: 0.1em; + transition: color 0.2s; +} + +.links > a:hover, .navItemDropdown > a:hover { + color: #fff; +} + +.links a.active { + color: var(--primary); +} + +.submenu { + position: absolute; + top: 100%; + left: -20px; + background-color: var(--secondary); + border: 1px solid var(--border); + border-top: 2px solid var(--primary); + border-radius: 4px; + padding: 1.5rem; + width: 450px; + opacity: 0; + visibility: hidden; + transform: translateY(-10px); + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8); +} + +.navItemDropdown:hover .submenu { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.submenuGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; +} + +.submenuItem { + display: flex; + gap: 1.2rem; + align-items: center; + padding: 1rem; + border-radius: 4px; + transition: background-color 0.2s; +} + +.submenuItem:hover { + background-color: var(--neutral); +} + +.submenuIcon { + width: 32px; + height: 32px; + background-color: var(--neutral); + border: 1px solid var(--border); + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + color: var(--primary); +} + +.submenuItem:hover .submenuIcon { + border-color: var(--primary); + background-color: #000; +} + +.submenuContent { + display: flex; + flex-direction: column; +} + +.submenuTitle { + font-size: 0.85rem; + font-weight: 900; + color: #fff; + letter-spacing: -0.01em; +} + +.submenuSubtitle { + font-size: 0.65rem; + color: #555; + font-weight: 800; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.tuningBtn { + background-color: var(--primary); + color: white; + padding: 0.7rem 1.6rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 900; + letter-spacing: 0.1em; + transition: background-color 0.2s; +} + +.tuningBtn:hover { + background-color: var(--primary-hover); +} + + +@media (max-width: 1024px) { + .links { + display: none; + } +} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx new file mode 100644 index 0000000..633f58e --- /dev/null +++ b/src/components/Navbar.tsx @@ -0,0 +1,59 @@ +'use client'; + +import Link from 'next/link'; +import Image from 'next/image'; +import { ChevronDown, Cpu, Zap, Activity, Gauge, Settings } from 'lucide-react'; +import { products } from '@/lib/products'; +import styles from './Navbar.module.css'; + +const icons = { + 'kpro': , + 'canflash': , + 'precan': , + 's300': , + 'map-sensor': +}; + +export default function Navbar() { + return ( + + ); +} diff --git a/src/components/PreCAN.module.css b/src/components/PreCAN.module.css new file mode 100644 index 0000000..12c6f25 --- /dev/null +++ b/src/components/PreCAN.module.css @@ -0,0 +1,218 @@ +.wrapper { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO */ +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.bgWrapper { + position: absolute; + inset: 0; + z-index: 1; +} + +.heroImg { + object-fit: cover; + filter: saturate(0.2) contrast(1.2) brightness(0.4); +} + +.heroOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to bottom, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.9) 100%); + z-index: 2; +} + +.heroGrid { + position: relative; + z-index: 3; + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 5rem; + align-items: center; +} + +.heroLabel { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 2rem; +} + +.heroTitle { + font-size: clamp(4rem, 8vw, 6.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { color: var(--primary); font-style: italic; } + +.heroDesc { + font-size: 1.1rem; + color: #888; + line-height: 1.6; + margin-bottom: 3.5rem; + max-width: 600px; +} + +.heroActions { display: flex; gap: 1rem; } + +.primaryBtn { + background-color: var(--primary); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; + border: none; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; +} + +.specBox { + background-color: rgba(18, 18, 18, 0.4); + border: 1px solid rgba(255, 255, 255, 0.05); + backdrop-filter: blur(10px); + padding: 3rem; + width: 100%; + max-width: 400px; + border-radius: 4px; + position: relative; + overflow: hidden; +} + +.progressLine { + position: absolute; + top: 0; left: 0; width: 60%; + height: 2px; + background-color: var(--primary); +} + +.specItem { margin-bottom: 2.5rem; } +.specItem:last-child { margin-bottom: 0; } + +.specLabel { + font-size: 0.55rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.8rem; +} + +.specItem h3 { font-size: 1.3rem; font-weight: 900; font-style: italic; } + +/* 2. OVERVIEW */ +.overview { padding: 120px 0; background-color: var(--neutral); } +.overviewGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8rem; align-items: center; } +.overviewContent h2 { font-size: 3rem; font-weight: 900; letter-spacing: -0.05em; margin-bottom: 3rem; line-height: 0.9; } +.featuresGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem 4rem; } + +.featureItem { display: flex; flex-direction: column; gap: 1.2rem; } +.fIcon { width: 32px; height: 32px; color: var(--primary); } +.featureItem h3 { font-size: 0.85rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; } +.featureItem p { font-size: 0.75rem; color: #777; line-height: 1.5; font-weight: 500; } + +.hwImg { width: 100%; height: auto; border-radius: 4px; filter: saturate(0.8) contrast(1.1); } + +/* 3. COMPATIBILITY */ +.compatibility { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } +.compGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; } +.compBox { background-color: var(--neutral); border: 1px solid var(--border); padding: 3rem; border-radius: 4px; } +.compBox h2 { font-size: 1.2rem; font-weight: 900; margin-bottom: 2.5rem; border-bottom: 1px solid var(--border); padding-bottom: 1.2rem; letter-spacing: 0.05em; } +.vList { display: flex; flex-direction: column; gap: 1rem; } + +.vItem { display: flex; justify-content: space-between; font-size: 0.85rem; padding-bottom: 0.8rem; border-bottom: 1px solid rgba(255, 255, 255, 0.03); } +.vTag { font-family: monospace; color: var(--primary); font-weight: 700; text-transform: uppercase; } + +.note { display: flex; gap: 1rem; color: var(--primary); font-size: 0.75rem; margin-top: 2rem; font-weight: 700; opacity: 0.8; } + +/* 4. GUIDES */ +.guides { padding: 120px 0; background-color: var(--neutral); overflow: hidden; } +.sectionHeader { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 5rem; } +.headerTitle .sub { font-size: 0.65rem; font-weight: 900; color: var(--primary); letter-spacing: 0.2rem; display: block; margin-bottom: 1rem; text-transform: uppercase; } +.headerTitle h2 { font-size: 2.5rem; font-weight: 900; margin: 0; line-height: 1; letter-spacing: -0.05em; text-transform: uppercase; } + +.sliderNav { display: flex; gap: 1rem; } +.navBtn { width: 50px; height: 50px; border-radius: 50%; background-color: var(--secondary); border: 1px solid var(--border); color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; } +.navBtn:hover:not(.disabled) { background-color: var(--primary); border-color: var(--primary); } +.navBtn.disabled { opacity: 0.3; cursor: not-allowed; } + +.sliderContainer { width: 100%; overflow: hidden; padding: 1rem 0; } +.sliderTray { display: grid; grid-auto-flow: column; grid-auto-columns: calc(33.333% - 1.333rem); gap: 2rem; width: 100%; } + +.guideCard { background-color: var(--secondary); border: 1px solid var(--border); padding: 3rem; border-radius: 8px; transition: all 0.3s ease; display: flex; flex-direction: column; gap: 1.5rem; height: 100%; min-height: 350px; } +.guideCard:hover { border-color: var(--primary); transform: translateY(-10px); } + +.cardHeader { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1rem; } +.iconBox { width: 60px; height: 60px; background-color: rgba(255, 0, 0, 0.05); border: 1px solid rgba(255, 0, 0, 0.1); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); } +.cardNum { font-size: 1.5rem; font-weight: 900; color: rgba(255, 255, 255, 0.1); letter-spacing: -0.05em; } + +.guideCard h3 { font-size: 1.2rem; font-weight: 900; line-height: 1.3; margin: 0; letter-spacing: -0.02em; } +.guideCard p { font-size: 0.85rem; color: #888; line-height: 1.6; margin: 0; flex-grow: 1; } +.cardBtn { font-size: 0.7rem; font-weight: 900; color: #fff; display: flex; align-items: center; gap: 0.5rem; letter-spacing: 0.1em; background: none; border: none; padding: 0; margin-top: auto; cursor: pointer; transition: color 0.3s ease; } +.guideCard:hover .cardBtn { color: var(--primary); } + +/* 5. DOWNLOADS */ +.downloads { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); } +.dlHeader { text-align: center; margin-bottom: 5rem; } +.dlHeader h2 { font-size: 2.5rem; font-weight: 900; text-transform: uppercase; } + +.dlDashboard { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; } +.dlCard { background-color: var(--neutral); border: 1px solid var(--border); padding: 4rem; border-radius: 8px; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 2rem; position: relative; } +.dlCard h3 { font-size: 1.3rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.05em; } +.dlCard p { font-size: 0.8rem; color: #777; line-height: 1.6; } + +.passwordBox { background-color: rgba(255, 255, 255, 0.02); border: 1px dashed var(--border); padding: 1.5rem; border-radius: 4px; display: flex; flex-direction: column; gap: 0.5rem; width: 100%; margin-top: auto; } +.passwordBox span { font-size: 0.55rem; font-weight: 900; color: #444; text-transform: uppercase; } +.passKey { font-family: monospace; font-size: 1.2rem; color: #fff; font-weight: 900; letter-spacing: 0.3em; } + +.extractNote { font-size: 0.65rem; color: #555; margin-top: 1rem; } +.extractNote a { color: var(--primary); font-weight: 700; text-decoration: underline; } + +.versionTag { font-size: 0.65rem; font-weight: 900; color: var(--primary); background-color: rgba(255, 0, 0, 0.1); padding: 0.5rem 1.5rem; border-radius: 100px; margin-top: auto; } + +.dlBtn { background-color: #fff; color: #000; padding: 1.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: 900; display: flex; align-items: center; justify-content: center; gap: 1.2rem; width: 100%; transition: all 0.3s ease; text-transform: uppercase; letter-spacing: 0.1em; } +.dlBtn:hover { background-color: var(--primary); color: #fff; } + +@media (max-width: 1024px) { + .heroGrid, .overviewGrid, .compGrid, .dlDashboard { grid-template-columns: 1fr; gap: 4rem; } +} diff --git a/src/components/PreCAN.tsx b/src/components/PreCAN.tsx new file mode 100644 index 0000000..9ca65c7 --- /dev/null +++ b/src/components/PreCAN.tsx @@ -0,0 +1,281 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { + Info, + BookOpen, + Download, + ShieldCheck, + Activity, + Gauge, + Zap, + Layers, + Settings, + Cpu, + AlertTriangle, + Terminal, + Lock, + User, + ChevronLeft, + ChevronRight +} from 'lucide-react'; +import { useState, useRef } from 'react'; +import styles from './PreCAN.module.css'; + +export default function PreCAN() { + const [currentSlide, setCurrentSlide] = useState(0); + + const infoRef = useRef(null); + const guidesRef = useRef(null); + const downloadRef = useRef(null); + + const scrollToSection = (ref: React.RefObject) => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: 'smooth' }); + } + }; + + const coreFeatures = [ + { title: 'Live Engine Tuning', desc: 'Real-time calibration of fuel, ignition, and cam timing maps.', icon: }, + { title: 'High-Speed Logging', desc: 'Precision sensor data streaming for accurate combustion analysis.', icon: }, + { title: 'Boost Management', desc: 'Variable boost control with custom MAP sensor support.', icon: }, + { title: 'Engine Safety', desc: 'Failsafe logic for lean AFR, overboost, and overheat conditions.', icon: }, + { title: 'Launch Control', desc: 'Programmable launch strategy with integrated anti-lag utility.', icon: }, + { title: 'Nitrous / Methanol', desc: 'Programmable outputs for auxiliary injection and nitrous control.', icon: }, + ]; + + const factoryModels = [ + { name: '05-06 Acura RSX Base', years: '05-06' }, + { name: '05-06 Acura RSX TypeS', years: '05-06' }, + { name: '05-07 Honda Accord USA', years: '05-07' }, + { name: '05-06 Honda Element', years: '05-06' }, + ]; + + const replacementModels = [ + { name: '03-07 Honda Accord EuroR', codes: 'EuroR' }, + { name: '03-04 Honda Accord USA Spec.', codes: 'CM4-CM8' }, + { name: '03-07 Honda Accord JDM Spec.', codes: 'CL7-CL9' }, + { name: '03-07 Acura TSX I', codes: 'TSX I' }, + { name: '03-04 Honda Element', codes: 'MT Only' }, + { name: 'Various EG/EK/DC K-Swapped Vehicles', codes: 'K-Swap' }, + ]; + + return ( +
+ {/* 1. HERO SECTION */} +
+
+ PreCAN Hero +
+
+
+
+ + ENGINE MANAGEMENT SYSTEMS +

+ PRECAN +

+

+ Expand your ECU capabilities with the PreCAN daughterboard system. Native Renesas SH7058 support, + live tuning, and professional motorsport-grade failsafes for K-Series platforms. +

+
+ + + +
+
+ + +
+
+
+ MCU SUPPORT +

SH7058 RENESAS

+
+
+ DATALOG MEMORY +

2 HOURS ON-BOARD

+
+
+ PROTOCOL +

CAN-BUS / K-LINE

+
+
+
+
+
+
+ + {/* 2. CORE CAPABILITIES */} +
+
+
+ +

CORE PERFORMANCE
ENGINEERING

+
+ {coreFeatures.map((feature, i) => ( +
+
{feature.icon}
+

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+
+ PreCAN Hardware +
+
+
+
+ + {/* 3. COMPATIBILITY */} +
+
+
+
+

FACTORY NATIVE SUPPORT

+
+ {factoryModels.map((m, i) => ( +
+ {m.name} + {m.years} +
+ ))} +
+
+
+

REPLACEMENT REQUIRED

+
+ {replacementModels.map((m, i) => ( +
+ {m.name} + {m.codes} +
+ ))} +
+
+ +

OEM ECUs in these models aren't directly compatible. Requires hardware replacement with a supported board version.

+
+
+
+
+
+ + {/* 4. TECH GUIDES (SLIDER) */} +
+
+
+
+ TECHNICAL INTELLIGENCE +

DOCUMENTATION SYSTEM

+
+
+ + +
+
+ +
+ + {[ + { title: 'Hardware Installation', desc: 'Step by Step installation Guide', icon: }, + { title: 'Board LEDs Meaning', desc: 'Troubleshooting using DIAG LEDs', icon: }, + { title: 'Sign In or Register', desc: 'Create KTuner Account or Sign In', icon: }, + { title: 'Registering PreCAN Unit', desc: 'Hardware Registration & ECU Locking', icon: }, + { title: 'ECU Pinout', desc: 'Detailed ECU Connectors Pinout', icon: }, + { title: 'Throttle Body Variants', desc: 'Mechanical vs Electronic Throttle Bodies', icon: }, + ].map((card, i) => ( +
+
+
{card.icon}
+ 0{i+1} +
+

{card.title}

+

{card.desc}

+ +
+ ))} +
+
+
+
+ + {/* 5. DOWNLOADS */} +
+
+
+

SOFTWARE HUB

+
+
+
+ +

Security & Instructions

+

False virus detections may occur. If you have trouble downloading, temporarily disable Antivirus and Windows Defender.

+
+ Archive Password +
1234
+
+

+ * Extract with WinRAR or 7-Zip. +

+
+
+ +

KTuner Manager

+

Get the latest KTuner Manager + Service Utility. Compatible with CANFlash and PreCAN units.

+ V1.0.11.2 STABLE + + + DOWNLOAD INSTALLER + +
+
+
+
+
+ ); +} diff --git a/src/components/ProductCard.module.css b/src/components/ProductCard.module.css new file mode 100644 index 0000000..097cb07 --- /dev/null +++ b/src/components/ProductCard.module.css @@ -0,0 +1,193 @@ +.card { + background-color: #0d0d0d; + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 8px; + overflow: hidden; + display: flex; + flex-direction: column; + height: 100%; + transition: all 0.3s ease; + position: relative; +} + +.card:hover { + border-color: var(--primary); + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); +} + +.topBar { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 1.5rem; + background-color: #111; + border-bottom: 1px solid #1a1a1a; +} + +.redIcon { + color: var(--primary); +} + +.sku { + font-size: 0.5rem; + font-family: monospace; + font-weight: 800; + letter-spacing: 0.1em; + color: #444; +} + +.imageBox { + position: relative; + background: radial-gradient(circle at center, #111 0%, #0d0d0d 100%); + padding: 3rem; + display: flex; + justify-content: center; + align-items: center; + border-bottom: 1px solid #1a1a1a; + overflow: hidden; +} + +.glow { + position: absolute; + width: 100px; + height: 100px; + background-color: var(--primary); + filter: blur(80px); + opacity: 0.1; + z-index: 1; +} + +.img { + width: 100%; + height: 220px; + object-fit: contain; + transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + z-index: 2; +} + +.card:hover .img { + transform: translateY(-5px) scale(1.05); +} + +.content { + padding: 2.5rem; + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.title { + margin-bottom: 1.5rem; + display: flex; + flex-direction: column; + gap: 0.2rem; +} + +.mainTitle { + font-size: 2rem; + font-weight: 900; + letter-spacing: -0.05em; + text-transform: uppercase; +} + +.red { + font-size: 1.8rem; + color: var(--primary); + font-weight: 900; + font-style: italic; + margin-top: -0.5rem; +} + +.desc { + font-size: 0.9rem; + color: #666; + line-height: 1.6; + margin-bottom: 2rem; + flex-grow: 1; + font-weight: 500; +} + +.stats { + display: flex; + gap: 1.5rem; + margin-bottom: 2.5rem; +} + +.stat { + display: flex; + align-items: center; + gap: 0.6rem; + font-size: 0.6rem; + font-weight: 900; + color: #555; + letter-spacing: 0.1em; +} + +.cardFooter { + display: flex; + justify-content: space-between; + align-items: center; + border-top: 1px solid #1a1a1a; + padding-top: 2rem; +} + +.priceContainer { + display: flex; + flex-direction: column; +} + +.label { + font-size: 0.5rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; +} + +.price { + font-size: 1.4rem; + font-weight: 900; + color: #fff; + letter-spacing: -0.02em; +} + +.btn { + display: flex; + align-items: center; + gap: 1.2rem; + background-color: #161616; + border: 1px solid #222; + border-radius: 4px; + padding: 0.2rem 0.2rem 0.2rem 1.2rem; +} + +.btnText { + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.05em; + color: #fff; +} + +.arrowBox { + background-color: var(--primary); + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + color: #fff; + transition: all 0.2s; +} + +.btn:hover .arrowBox { + transform: translateX(3px); + filter: brightness(1.2); + background-color: #fff; + color: #000; +} + +@media (max-width: 480px) { + .mainTitle { font-size: 1.6rem; } + .red { font-size: 1.4rem; } +} diff --git a/src/components/ProductCard.tsx b/src/components/ProductCard.tsx new file mode 100644 index 0000000..c73a785 --- /dev/null +++ b/src/components/ProductCard.tsx @@ -0,0 +1,71 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import Link from 'next/link'; +import { ArrowRight, Cpu, Zap, Activity } from 'lucide-react'; +import styles from './ProductCard.module.css'; + +interface ProductCardProps { + id: string; + name: string; + subtitle: string; + description: string; + image: string; + price: string; +} + +export default function ProductCard({ id, name, subtitle, description, image, price }: ProductCardProps) { + return ( + +
+ + SKU: HV-{id.toUpperCase()} +
+ +
+
+ {name} +
+ +
+

+ {name} + {subtitle} +

+ +

{description.substring(0, 85)}...

+ +
+
+ + LOW LATENCY +
+
+ + TELEMETRY +
+
+ +
+
+ MSRP + {price} +
+ + READ MORE +
+ +
+ +
+
+
+ ); +} diff --git a/src/components/ProductShowcase.module.css b/src/components/ProductShowcase.module.css new file mode 100644 index 0000000..3df7c79 --- /dev/null +++ b/src/components/ProductShowcase.module.css @@ -0,0 +1,174 @@ +.section { + position: relative; + min-height: 80vh; + padding: 100px 0; + background-color: #000; + display: flex; + align-items: center; + overflow: hidden; +} + +.bgImage { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0.8; + z-index: 1; +} + +.image { + object-fit: cover; + filter: saturate(0.5) contrast(1.1); +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(circle at 30% 50%, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.4) 60%, transparent 100%); + z-index: 2; +} + +.container { + position: relative; + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; + z-index: 3; + display: flex; + justify-content: space-between; + align-items: center; +} + +.top { + max-width: 600px; +} + +.label { + font-size: 0.75rem; + font-weight: 800; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 1rem; +} + +.title { + font-size: clamp(3rem, 6vw, 5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); + font-style: italic; +} + +.description { + font-size: 1.1rem; + color: #aaa; + line-height: 1.6; + margin-bottom: 3rem; +} + +.actions { + display: flex; + gap: 1rem; +} + +.btn { + display: flex; + align-items: center; + gap: 0.8rem; + padding: 1rem 1.8rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 800; + letter-spacing: 0.1em; + transition: all 0.2s; +} + +.btnPrimary { + background-color: var(--primary); + color: white; +} + +.btnSecondary { + background-color: rgba(255, 255, 255, 0.05); + border: 1px solid #222; + color: white; +} + +.btnDownload { + background-color: #1a1a1a; + border: 1px solid #333; + color: #fff; +} + +.right { + min-width: 350px; +} + +.specBox { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 2.5rem; + border-radius: 4px; + position: relative; + z-index: 10; +} + +.specHeader { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + margin-bottom: 1.5rem; + border-bottom: 1px solid #222; + padding-bottom: 0.8rem; + letter-spacing: 0.2rem; +} + +.specItem { + display: flex; + flex-direction: column; + margin-bottom: 1.2rem; + font-size: 0.8rem; +} + +.specItem span { + color: #444; + font-weight: 800; + margin-bottom: 0.3rem; + text-transform: uppercase; +} + +.specItem strong { + font-size: 1.2rem; + font-weight: 800; + color: #fff; + font-style: italic; +} + +@media (max-width: 1024px) { + .container { + flex-direction: column; + text-align: center; + gap: 3rem; + padding: 0 2rem; + } + .actions { + justify-content: center; + } + .right { + min-width: unset; + width: 100%; + } +} diff --git a/src/components/ProductShowcase.tsx b/src/components/ProductShowcase.tsx new file mode 100644 index 0000000..c6a3f2d --- /dev/null +++ b/src/components/ProductShowcase.tsx @@ -0,0 +1,60 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { Info, BookOpen, Download } from 'lucide-react'; +import styles from './ProductShowcase.module.css'; + +interface ProductShowcaseProps { + label: string; + title1: string; + title2: string; + image: string; + specs: { label: string; value: string }[]; + description: string; +} + +export default function ProductShowcase({ label, title1, title2, image, specs, description }: ProductShowcaseProps) { + return ( +
+
+ {title1} +
+
+ +
+
+ {label} +

+ {title1} {title2} +

+

{description}

+ +
+ + + +
+
+ +
+
+
TECHNICAL SPECS
+ {specs.map((spec, i) => ( +
+ {spec.label} + {spec.value} +
+ ))} +
+
+
+
+ ); +} diff --git a/src/components/S300.module.css b/src/components/S300.module.css new file mode 100644 index 0000000..92bdf35 --- /dev/null +++ b/src/components/S300.module.css @@ -0,0 +1,232 @@ +.wrapper { + background-color: var(--neutral); + min-height: 100vh; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +/* 1. HERO */ +.hero { + position: relative; + min-height: 80vh; + display: flex; + align-items: center; + overflow: hidden; + padding-top: 100px; +} + +.bgWrapper { + position: absolute; + inset: 0; + z-index: 1; +} + +.heroImg { + object-fit: cover; + filter: saturate(0.2) contrast(1.2) brightness(0.4); +} + +.heroOverlay { + position: absolute; + inset: 0; + background: linear-gradient(to bottom, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.9) 100%); + z-index: 2; +} + +.heroGrid { + position: relative; + z-index: 3; + display: grid; + grid-template-columns: 1.5fr 1fr; + gap: 5rem; + align-items: center; +} + +.heroLabel { + font-size: 0.65rem; + font-weight: 900; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 2rem; +} + +.heroTitle { + font-size: clamp(4rem, 8vw, 6.5rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2.5rem; + text-transform: uppercase; +} + +.red { color: var(--primary); font-style: italic; } + +.heroDesc { + font-size: 1.1rem; + color: #888; + line-height: 1.6; + margin-bottom: 3.5rem; + max-width: 600px; +} + +.heroActions { display: flex; gap: 1rem; } + +.primaryBtn { + background-color: var(--primary); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; + border: none; +} + +.secondaryBtn { + background-color: rgba(255, 255, 255, 0.02); + border: 1px solid var(--border); + padding: 1.2rem 2.2rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 900; + letter-spacing: 0.1em; + color: #fff; + display: flex; + align-items: center; + gap: 1.2rem; + cursor: pointer; +} + +.specBox { + background-color: rgba(18, 18, 18, 0.4); + border: 1px solid rgba(255, 255, 255, 0.05); + backdrop-filter: blur(10px); + padding: 3rem; + width: 100%; + max-width: 400px; + border-radius: 4px; + position: relative; + overflow: hidden; +} + +.progressLine { + position: absolute; + top: 0; left: 0; width: 60%; + height: 2px; + background-color: var(--primary); +} + +.specItem { margin-bottom: 2.5rem; } +.specItem:last-child { margin-bottom: 0; } + +.specLabel { + font-size: 0.55rem; + font-weight: 900; + color: #444; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.8rem; +} + +.specItem h3 { font-size: 1.3rem; font-weight: 900; font-style: italic; } + +/* 2. OVERVIEW */ +.overview { padding: 120px 0; background-color: var(--neutral); } +.overviewGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8rem; align-items: center; } +.overviewContent h2 { font-size: 3rem; font-weight: 900; letter-spacing: -0.05em; margin-bottom: 3rem; line-height: 0.9; } +.featuresGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem 4rem; } + +.featureItem { display: flex; flex-direction: column; gap: 1.2rem; } +.fIcon { width: 32px; height: 32px; color: var(--primary); } +.featureItem h3 { font-size: 0.85rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; } +.featureItem p { font-size: 0.75rem; color: #777; line-height: 1.5; font-weight: 500; } + +.hwImg { width: 100%; height: auto; border-radius: 4px; filter: saturate(0.8) contrast(1.1); } + +/* 3. COMPATIBILITY */ +.compatibility { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } +.compGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; } +.compBox { background-color: var(--neutral); border: 1px solid var(--border); padding: 3rem; border-radius: 4px; } +.compBox h2 { font-size: 1.2rem; font-weight: 900; margin-bottom: 2.5rem; border-bottom: 1px solid var(--border); padding-bottom: 1.2rem; letter-spacing: 0.05em; } +.vList { display: flex; flex-direction: column; gap: 1rem; } + +.vItem { display: flex; justify-content: space-between; font-size: 0.85rem; padding-bottom: 0.8rem; border-bottom: 1px solid rgba(255, 255, 255, 0.03); } +.vTag { font-family: monospace; color: var(--primary); font-weight: 700; text-transform: uppercase; } + +.note { display: flex; gap: 1rem; color: var(--primary); font-size: 0.75rem; margin-top: 2rem; font-weight: 700; opacity: 0.8; } + +.ecuSupported { margin-top: 2.5rem; background-color: rgba(255,255,255,0.02); padding: 1.5rem; border-radius: 4px; border: 1px solid var(--border); } +.ecuRow { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1.2rem; } +.ecuRow:last-child { margin-bottom: 0; } +.ecuRegion { font-size: 0.65rem; font-weight: 900; color: var(--primary); letter-spacing: 0.1em; } +.ecuVer { font-family: monospace; font-size: 0.8rem; color: #bbb; line-height: 1.5; } + +/* 4. GUIDES */ +.guides { padding: 120px 0; background-color: var(--neutral); overflow: hidden; } +.sectionHeader { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 5rem; } +.headerTitle .sub { font-size: 0.65rem; font-weight: 900; color: var(--primary); letter-spacing: 0.2rem; display: block; margin-bottom: 1rem; text-transform: uppercase; } +.headerTitle h2 { font-size: 2.5rem; font-weight: 900; margin: 0; line-height: 1; letter-spacing: -0.05em; text-transform: uppercase; } + +.sliderNav { display: flex; gap: 1rem; } +.navBtn { width: 50px; height: 50px; border-radius: 50%; background-color: var(--secondary); border: 1px solid var(--border); color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; } +.navBtn:hover:not(.disabled) { background-color: var(--primary); border-color: var(--primary); } +.navBtn.disabled { opacity: 0.3; cursor: not-allowed; } + +.sliderContainer { width: 100%; overflow: hidden; padding: 1rem 0; } +.sliderTray { display: grid; grid-auto-flow: column; grid-auto-columns: calc(33.333% - 1.333rem); gap: 2rem; width: 100%; } + +.guideCard { background-color: var(--secondary); background-image: linear-gradient(to bottom, rgba(10,10,10,0.7) 0%, rgba(0,0,0,1) 100%), var(--card-bg); background-size: cover; background-position: center; border: 1px solid var(--border); padding: 3rem; border-radius: 8px; transition: all 0.3s ease; display: flex; flex-direction: column; gap: 1.5rem; height: 100%; min-height: 350px; position: relative; } +.guideCard:hover { border-color: var(--primary); transform: translateY(-10px); background-image: linear-gradient(to bottom, rgba(220, 38, 38, 0.05) 0%, rgba(0,0,0,0.95) 100%), var(--card-bg); } + +.cardHeader { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1rem; } +.iconBox { width: 60px; height: 60px; background-color: rgba(255, 0, 0, 0.05); border: 1px solid rgba(255, 0, 0, 0.1); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); } +.cardNum { font-size: 1.5rem; font-weight: 900; color: rgba(255, 255, 255, 0.1); letter-spacing: -0.05em; } + +.guideCard h3 { font-size: 1.2rem; font-weight: 900; line-height: 1.3; margin: 0; letter-spacing: -0.02em; } +.guideCard p { font-size: 0.85rem; color: #888; line-height: 1.6; margin: 0; flex-grow: 1; } +.cardBtn { font-size: 0.7rem; font-weight: 900; color: #fff; display: flex; align-items: center; gap: 0.5rem; letter-spacing: 0.1em; background: none; border: none; padding: 0; margin-top: auto; cursor: pointer; transition: color 0.3s ease; } +.guideCard:hover .cardBtn { color: var(--primary); } + +/* 5. DOWNLOADS */ +.downloads { padding: 120px 0; background-color: var(--secondary); border-top: 1px solid var(--border); } +.dlHeader { text-align: center; margin-bottom: 5rem; } +.dlHeader h2 { font-size: 2.5rem; font-weight: 900; text-transform: uppercase; } + +.dlDashboard { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; } +.dlCard { background-color: var(--neutral); border: 1px solid var(--border); padding: 4rem; border-radius: 8px; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 2rem; position: relative; } +.dlCard h3 { font-size: 1.3rem; font-weight: 900; text-transform: uppercase; letter-spacing: 0.05em; } +.dlCard p { font-size: 0.8rem; color: #777; line-height: 1.6; } + +.passwordBox { background-color: rgba(255, 255, 255, 0.02); border: 1px dashed var(--border); padding: 1.5rem; border-radius: 4px; display: flex; flex-direction: column; gap: 0.5rem; width: 100%; margin-top: auto; } +.passwordBox span { font-size: 0.55rem; font-weight: 900; color: #444; text-transform: uppercase; } +.passKey { font-family: monospace; font-size: 1.2rem; color: #fff; font-weight: 900; letter-spacing: 0.3em; } + +.extractNote { font-size: 0.65rem; color: #555; margin-top: 1rem; } +.extractNote a { color: var(--primary); font-weight: 700; text-decoration: underline; } + +.dlStack { display: flex; flex-direction: column; gap: 2rem; } +.dlRowCard { background-color: var(--neutral); border: 1px solid var(--border); padding: 3rem; border-radius: 8px; display: flex; justify-content: space-between; align-items: center; transition: all 0.3s ease; } +.dlRowCard:hover { border-color: var(--primary); } +.dlRowInfo { display: flex; flex-direction: column; align-items: flex-start; gap: 0.8rem; } +.dlRowInfo h4 { font-size: 1.1rem; font-weight: 900; margin: 0; color: #fff; } +.dlRowInfo p { font-size: 0.8rem; color: #888; margin: 0; } +.versionTag { font-size: 0.65rem; font-weight: 900; color: var(--primary); background-color: rgba(255, 0, 0, 0.1); padding: 0.3rem 0.8rem; border-radius: 100px; } + +.dlBtn { background-color: #fff; color: #000; padding: 1.2rem 2.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: 900; display: flex; align-items: center; justify-content: center; gap: 1.2rem; transition: all 0.3s ease; text-transform: uppercase; letter-spacing: 0.1em; } +.dlBtn:hover { background-color: var(--primary); color: #fff; box-shadow: 0 10px 20px rgba(255,0,0,0.2); } + +@media (max-width: 1024px) { + .heroGrid, .overviewGrid, .compGrid, .dlDashboard { grid-template-columns: 1fr; gap: 4rem; } + .dlRowCard { flex-direction: column; gap: 2rem; align-items: stretch; text-align: center; } + .dlRowInfo { align-items: center; } +} diff --git a/src/components/S300.tsx b/src/components/S300.tsx new file mode 100644 index 0000000..d4b2b9d --- /dev/null +++ b/src/components/S300.tsx @@ -0,0 +1,314 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { + Info, + BookOpen, + Download, + ShieldCheck, + Activity, + Zap, + Layers, + Settings, + Cpu, + AlertTriangle, + Terminal, + ChevronLeft, + ChevronRight, + Bluetooth, + Gauge +} from 'lucide-react'; +import { useState, useRef } from 'react'; +import styles from './S300.module.css'; + +export default function S300() { + const [currentSlide, setCurrentSlide] = useState(0); + + const infoRef = useRef(null); + const guidesRef = useRef(null); + const downloadRef = useRef(null); + + const scrollToSection = (ref: React.RefObject) => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: 'smooth' }); + } + }; + + const coreFeatures = [ + { title: 'Live Engine Tuning', desc: 'Real-time calibration of fuel, ignition, and injector settings.', icon: }, + { title: 'Advanced Bluetooth', desc: 'Wireless datalogging and telemetry via S300 Rev.3 architecture.', icon: }, + { title: 'Flex Fuel & Boost', desc: 'Variable boost control, Flex Fuel support, and custom MAP sensor logic.', icon: }, + { title: 'Engine Protection', desc: 'Failsafe logic for lean AFR, overboost, and overheat conditions.', icon: }, + { title: 'Launch Control', desc: 'Full throttle shift capabilities and programmable anti-lag.', icon: }, + { title: 'Nitrous / Methanol', desc: 'Auxiliary outputs for nitrous control and methanol injection systems.', icon: }, + ]; + + const factoryModels = [ + { name: '91-92 Honda Integra DA', codes: 'DA' }, + { name: '93-95 Honda Integra DB', codes: 'DB' }, + { name: '92-95 Honda Civic', codes: 'EG/EH/EJ' }, + { name: '92-95 Honda CR-X DelSol', codes: 'EG1/EG2' }, + ]; + + const replacementModels = [ + { name: '96-01 Honda Civic', codes: 'EK/EJ' }, + { name: '96-01 Honda Integra', codes: 'DC2/DC4' }, + { name: '96-01 Honda Prelude 5', codes: 'BB5-BB8' }, + { name: '95-01 Honda CR-V', codes: 'RD1' }, + ]; + + const ecuSupport = [ + { region: 'USDM ECU BOARDS', versions: '02D011F0-1500, 02D01720-1500, 02D01980-1500' }, + { region: 'JDM ECU BOARDS', versions: '02D01550-1500, 02D01840-1501' }, + { region: 'EDM ECU BOARDS', versions: '2PU6098-4460P1, 2PU6098-4508P1' }, + ]; + + return ( +
+ {/* 1. HERO SECTION */} +
+
+ S300 Hero Component +
+
+
+
+ + OBD1 ENGINE MANAGEMENT SYSTEM +

+ S300
+ CORE +

+

+ Expand your Honda OBD1 ECU capabilities. Professional grade engine management + featuring Live Tuning, Flex Fuel support, and advanced Bluetooth telemetry options. +

+
+ + + +
+
+ + +
+
+
+ PLATFORM SUPPORT +

OBD1 USDM/JDM/EDM

+
+
+ SOFTWARE PROTOCOL +

S300 / OSTRICH 2

+
+
+ I/O EXPANSION +

6 ANALOG INPUTS

+
+
+
+
+
+
+ + {/* 2. CORE CAPABILITIES */} +
+
+
+ +

CORE PERFORMANCE
ENGINEERING

+
+ {coreFeatures.map((feature, i) => ( +
+
{feature.icon}
+

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+
+ S300 Hardware +
+
+
+
+ + {/* 3. COMPATIBILITY */} +
+
+
+
+

FACTORY NATIVE SUPPORT

+
+ {factoryModels.map((m, i) => ( +
+ {m.name} + {m.codes} +
+ ))} +
+
+ {ecuSupport.map((ecu, index) => ( +
+ {ecu.region} + {ecu.versions} +
+ ))} +
+
+
+

REPLACEMENT REQUIRED

+
+ {replacementModels.map((m, i) => ( +
+ {m.name} + {m.codes} +
+ ))} +
+
+ +

OEM ECUs in these models aren't directly compatible. Requires hardware replacement with a supported OBD1 board version.

+
+
+
+
+
+ + {/* 4. TECH GUIDES (SLIDER) */} +
+
+
+
+ TECHNICAL INTELLIGENCE +

DOCUMENTATION SYSTEM

+
+
+ + +
+
+ +
+ + {[ + { title: 'Hardware Install (USDM ECU)', desc: 'Step by Step installation Guide', icon: , img: '/engine_bay.png' }, + { title: 'Hardware Install (EDM ECU)', desc: 'Step by Step installation Guide', icon: , img: '/engine_bay.png' }, + { title: 'Hardware Install (JDM ECU)', desc: 'Step by Step installation Guide', icon: , img: '/engine_bay.png' }, + { title: 'Bluetooth', desc: 'Connection Guide and Compatible Applications', icon: , img: '/hud_telemetry.png' }, + { title: 'S300 / Ostrich 2 Mode Switch', desc: 'Use board with S300 Manager or 3rd-party software', icon: , img: '/precan_car.png' }, + { title: 'Board LEDs Meaning', desc: 'Troubleshooting using DIAG LEDs', icon: , img: '/map_sensor.png' }, + { title: 'ECU Pinout', desc: 'Detailed ECU Connectors Pinout', icon: , img: '/ecu_kpro.png' }, + { title: 'Automatic Transmission Setup', desc: 'How to control an automatic transmission using S300 Manager', icon: , img: '/ecu_kpro.png' }, + ].map((card, i) => ( +
+
+
{card.icon}
+ 0{i+1} +
+

{card.title}

+

{card.desc}

+ +
+ ))} +
+
+
+
+ + {/* 5. DOWNLOADS */} +
+
+
+

SOFTWARE HUB

+
+
+
+ +

Security & Instructions

+

False virus detections may occur. If you have trouble downloading, temporarily disable Antivirus and Windows Defender.

+
+ Archive Password +
1234
+
+

+ * Extract with WinRAR or 7-Zip. +

+
+
+
+
+

S300 MANAGER

+

Native tuning software environment.

+ PRIMARY GUI +
+ + + DOWNLOAD + +
+ +
+
+

HTS 2.15

+

Ostrich 2 Protocol mapping software.

+ LEGACY COM +
+ + + DOWNLOAD + +
+
+
+
+
+
+ ); +} diff --git a/src/components/Sensor.module.css b/src/components/Sensor.module.css new file mode 100644 index 0000000..f14777f --- /dev/null +++ b/src/components/Sensor.module.css @@ -0,0 +1,253 @@ +.section { + padding: 100px 0; + background-color: var(--background); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.productGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 5rem; + align-items: center; + margin-bottom: 100px; +} + +.imageMain { + position: relative; + border-radius: 12px; + background: radial-gradient(circle at center, rgba(255, 255, 255, 0.05) 0%, transparent 80%); +} + +.imagePlaceholder { + position: relative; + width: 100%; + height: 500px; + display: flex; + align-items: center; + justify-content: center; +} + +.sensorImg { + width: 80%; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.5)); +} + +.label { + font-size: 0.75rem; + font-weight: 800; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 1rem; +} + +.title { + font-size: clamp(3rem, 7vw, 6rem); + font-weight: 900; + line-height: 0.85; + letter-spacing: -0.05em; + margin-bottom: 2rem; +} + +.red { + color: var(--primary); +} + +.description { + font-size: 1.1rem; + color: #aaa; + margin-bottom: 3rem; + line-height: 1.6; +} + +.compLabel { + font-size: 0.65rem; + color: #444; + font-weight: 900; + letter-spacing: 0.1em; + display: block; + margin-bottom: 1rem; +} + +.tags { + display: flex; + gap: 1rem; + margin-bottom: 3rem; +} + +.tags span { + font-size: 0.65rem; + font-weight: 900; + color: #fff; + background-color: #111; + padding: 0.5rem 1rem; + border: 1px solid #222; + border-radius: 4px; +} + +.purchaseBox { + display: flex; + align-items: center; + gap: 3rem; + border-top: 1px solid #1a1a1a; + padding-top: 2rem; +} + +.msrp { + font-size: 0.65rem; + color: #444; + font-weight: 900; + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.3rem; +} + +.amount { + font-size: 2.5rem; + font-weight: 900; + letter-spacing: -0.05em; +} + +.btnAction { + background-color: var(--primary); + color: white; + padding: 1.2rem 2.5rem; + border-radius: 4px; + font-size: 0.85rem; + font-weight: 900; + letter-spacing: 0.1em; + display: flex; + align-items: center; + gap: 1.5rem; +} + +.specsGrid { + display: grid; + grid-template-columns: 1fr 1fr 1.2fr; + gap: 3rem; +} + +.specsCol, .specsColMiddle { + background-color: #0c0c0c; + border: 1px solid #1a1a1a; + padding: 3rem; + border-radius: 4px; +} + +.specsColMiddle { + border-left: 2px solid var(--primary); +} + +.colTitle { + font-size: 1.1rem; + font-weight: 900; + margin-bottom: 2rem; + letter-spacing: -0.02em; +} + +.specItem { + margin-bottom: 1.5rem; +} + +.specName { + font-size: 0.65rem; + color: #555; + font-weight: 900; + letter-spacing: 0.05em; + display: block; + margin-bottom: 0.5rem; +} + +.specVal { + font-size: 1.2rem; + font-weight: 700; + margin-bottom: 0.5rem; +} + +.specBar { + height: 2px; + background-color: #222; + border-radius: 1px; +} + +.specFill { + height: 100%; + background-color: var(--primary); + border-radius: 1px; +} + +.dataRow { + display: flex; + justify-content: space-between; + margin-bottom: 1.5rem; + font-size: 0.85rem; + border-bottom: 1px solid #1a1a1a; + padding-bottom: 0.8rem; +} + +.dataRow span { + color: #888; +} + +.dataRow strong { + font-weight: 800; +} + +.downloadBox { + display: flex; + gap: 1.5rem; + align-items: flex-start; + margin-top: 3rem; + font-size: 0.7rem; + color: #555; + font-weight: 700; + line-height: 1.4; +} + +.colPara { + font-size: 0.9rem; + color: #aaa; + line-height: 1.6; + margin-bottom: 3rem; +} + +.proTip { + background-color: #0d0d0d; + border: 1px solid #222; + padding: 1.5rem; + display: flex; + gap: 1.5rem; + align-items: flex-start; +} + +.tipContent strong { + display: block; + font-size: 0.65rem; + color: var(--primary); + font-weight: 900; + margin-bottom: 0.5rem; +} + +.tipContent p { + font-size: 0.75rem; + color: #777; + line-height: 1.4; +} + +@media (max-width: 1024px) { + .productGrid { + grid-template-columns: 1fr; + text-align: center; + } + .specsGrid { + grid-template-columns: 1fr; + } +} diff --git a/src/components/Sensor.tsx b/src/components/Sensor.tsx new file mode 100644 index 0000000..626bce8 --- /dev/null +++ b/src/components/Sensor.tsx @@ -0,0 +1,126 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { ShoppingCart, FileText, Settings, ShieldCheck, Activity } from 'lucide-react'; +import styles from './Sensor.module.css'; + +export default function Sensor() { + return ( +
+
+
+ +
+ 4BAR MAP Sensor +
+
+ +
+ PRECISION ENGINEERING +

+ 4BAR MAP
+ SENSOR +

+

+ Engineered for high-boost applications requiring surgical telemetry accuracy. + Rapid response frequency with +/- 0.01% deviation for consistent performance. +

+ +
+ DEVICE COMPATIBILITY +
+ HONDA VERT KPRO + HONDA VERT PRECAN + HONDA VERT S300 +
+
+ +
+
+ MSRP + $149.00 +
+ +
+
+
+ +
+
+

PERFORMANCE SPECS

+
+ PRESSURE RANGE +

0.1 - 4.0 BAR

+
+
+
+ VOLTAGE OUTPUT +

0.5V - 4.5V Linear

+
+
+ THERMAL TOLERANCE +

-40°C to +125°C

+
+
+ +
+

INSTALLATION DATA

+
+ Thread Pitch + 1/8" NPT +
+
+ Connector Type + 3-PIN WEATHERPROOF +
+
+ Input Voltage + 5.0V DC +
+
+ Calibration + PLUG & PLAY PROFILE +
+ +
+ +
+

DOWNLOAD WIRING DIAGRAM FOR PRECAN INTEGRATION (PDF 1.4MB)

+
+
+
+ +
+

HARDWARE LOGIC

+

+ Our sensors utilize a solid-state piezoresistive design, encapsulated in + high-grade chemical-resistant composite housing. Unlike cheap alternatives, + the HondaVert 4Bar sensor maintains zero-point calibration even under extreme + engine bay heat-soak conditions. +

+
+ +
+ PRO TIP: +

Ensure sensor is mounted above the manifold vacuum port to prevent fuel condensation buildup.

+
+
+
+
+
+
+ ); +} diff --git a/src/components/Telemetry.module.css b/src/components/Telemetry.module.css new file mode 100644 index 0000000..bd9df14 --- /dev/null +++ b/src/components/Telemetry.module.css @@ -0,0 +1,124 @@ +.section { + padding: 150px 0; + background-color: #050505; + overflow: hidden; +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 6rem; + align-items: center; +} + +.left { + position: relative; +} + +.hudOverlay { + position: relative; + background: radial-gradient(circle at center, rgba(255, 0, 0, 0.05) 0%, transparent 80%); + border-radius: 12px; + overflow: hidden; +} + +.hudImg { + width: 100%; + height: auto; + object-fit: cover; + border-radius: 8px; + filter: saturate(0.5) contrast(1.2); +} + +.hudLabel { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 2.5rem; + background: linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, transparent 100%); + border-bottom: 5px solid var(--primary); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.hudLabel span { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.1em; + display: block; + margin-bottom: 0.5rem; +} + +.hudLabel h3 { + font-size: 1.5rem; + font-weight: 800; +} + +.label { + font-size: 0.75rem; + font-weight: 800; + color: #555; + letter-spacing: 0.2rem; + display: block; + margin-bottom: 1rem; +} + +.title { + font-size: clamp(2rem, 5vw, 4rem); + font-weight: 900; + line-height: 0.9; + letter-spacing: -0.04em; + margin-bottom: 4rem; + text-transform: uppercase; +} + +.red { + color: var(--primary); +} + +.featureList { + display: flex; + flex-direction: column; + gap: 3.5rem; +} + +.feature { + display: flex; + gap: 2rem; + align-items: flex-start; +} + +.feature h3 { + font-size: 1.1rem; + font-weight: 900; + margin-bottom: 0.8rem; + letter-spacing: -0.02em; +} + +.feature p { + font-size: 0.85rem; + color: #777; + line-height: 1.6; + font-weight: 500; +} + +@media (max-width: 1024px) { + .grid { + grid-template-columns: 1fr; + text-align: center; + } + .feature { + flex-direction: column; + align-items: center; + text-align: center; + } +} diff --git a/src/components/Telemetry.tsx b/src/components/Telemetry.tsx new file mode 100644 index 0000000..10148fb --- /dev/null +++ b/src/components/Telemetry.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { LayoutDashboard, Database, Lock } from 'lucide-react'; +import styles from './Telemetry.module.css'; + +export default function Telemetry() { + return ( +
+
+
+ +
+ HUD Telemetry +
+ VISUAL INTERFACE +

Real-Time HUD Telemetry

+
+
+
+ +
+ PERFORMANCE DATA +

+ ENGINEERED FOR THE
+ TRACK +

+ +
+
+ +
+

LIVE TABLE EDITING

+

Modify fuel and ignition maps while the engine is running. Instant feedback for precise tuning results.

+
+
+ +
+ +
+

ADVANCED DATA LOGGING

+

Capture up to 100 sensors simultaneously at high frequency. Export to CSV or view in our proprietary analyzer.

+
+
+ +
+ +
+

FULL SECURITY CONTROL

+

Immobilizer bypass and valet mode settings built-in. Protect your intellectual property with encrypted map files.

+
+
+
+
+
+
+
+ ); +} diff --git a/src/components/Testimonials.module.css b/src/components/Testimonials.module.css new file mode 100644 index 0000000..0cc9741 --- /dev/null +++ b/src/components/Testimonials.module.css @@ -0,0 +1,93 @@ +.section { + padding: 150px 0; + background-color: var(--background); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.header { + text-align: center; + margin-bottom: 80px; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.15em; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(2rem, 5vw, 4rem); + font-weight: 900; + line-height: 1; + letter-spacing: -0.05em; +} + +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); + gap: 3rem; +} + +.card { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 4rem; + border-radius: 4px; + display: flex; + flex-direction: column; + justify-content: space-between; + transition: all 0.2s; +} + +.card:hover { + transform: translateY(-5px); + background-color: var(--neutral); +} + +.stars { + display: flex; + gap: 0.4rem; + margin-bottom: 2.5rem; +} + +.iconBox { + color: var(--primary); + opacity: 0.2; + margin-bottom: 2rem; +} + +.quote { + font-size: 1.15rem; + color: #fff; + line-height: 1.7; + font-style: italic; + font-family: serif; + margin-bottom: 3.5rem; +} + +.user strong { + font-size: 0.85rem; + font-weight: 900; + display: block; + margin-bottom: 0.4rem; +} + +.user span { + font-size: 0.65rem; + font-weight: 800; + color: var(--primary); + letter-spacing: 0.1rem; +} + +@media (max-width: 768px) { + .card { padding: 3rem; } +} diff --git a/src/components/Testimonials.tsx b/src/components/Testimonials.tsx new file mode 100644 index 0000000..bde2ab0 --- /dev/null +++ b/src/components/Testimonials.tsx @@ -0,0 +1,66 @@ +'use client'; + +import { motion } from 'framer-motion'; +import { Quote, Star } from 'lucide-react'; +import styles from './Testimonials.module.css'; + +export default function Testimonials() { + const reviews = [ + { + name: 'ALEX R.', + role: 'TIME ATTACK DRIVER', + quote: 'Switched to HondaVert V4.0 last season. The data fidelity and zero-latency logging changed how we approach our setup. Unmatched precision.', + stars: 5, + }, + { + name: 'KEVIN L.', + role: 'MASTER TUNER', + quote: 'As a tuner, I need reliability. HondaVert consistently delivers hardware that doesn\'t crash, software that is intuitive, and support that actually knows their stuff.', + stars: 5, + }, + { + name: 'SARAH M.', + role: 'DRAG RACING SPECIALIST', + quote: 'From real-time telemetry to custom launch control, the S300 Core has been rock solid for my turbo setup. Highly recommend for any serious build.', + stars: 5, + } + ]; + + return ( +
+
+
+ CLIENT FEEDBACK +

VOICES OF THE COMMUNITY

+
+ +
+ {reviews.map((item, i) => ( + +
+ {[...Array(item.stars)].map((_, i) => ( + + ))} +
+
+

"{item.quote}"

+
+
+ {item.name} + {item.role} +
+
+
+ ))} +
+
+
+ ); +} diff --git a/src/components/WhyChooseUs.module.css b/src/components/WhyChooseUs.module.css new file mode 100644 index 0000000..d025049 --- /dev/null +++ b/src/components/WhyChooseUs.module.css @@ -0,0 +1,92 @@ +.section { + padding: 150px 0; + background-color: var(--neutral); +} + +.container { + max-width: 1400px; + width: 100%; + margin: 0 auto; + padding: 0 4rem; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1.5fr; + gap: 8rem; +} + +.header { + max-width: 400px; +} + +.label { + font-size: 0.65rem; + font-weight: 900; + color: var(--primary); + letter-spacing: 0.15em; + margin-bottom: 2rem; + display: block; +} + +.title { + font-size: clamp(2rem, 5vw, 4rem); + font-weight: 900; + line-height: 1; + letter-spacing: -0.05em; + margin-bottom: 4rem; +} + +.header .desc { + font-size: 1.1rem; + color: #888; + line-height: 1.8; +} + +.reasons { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; +} + +.card { + background-color: var(--secondary); + border: 1px solid var(--border); + padding: 3rem; + border-radius: 4px; + display: flex; + flex-direction: column; + gap: 2.5rem; + transition: all 0.3s; +} + +.card:hover { + border-color: var(--primary); + transform: translateY(-5px); +} + +.iconBox { + color: var(--primary); +} + +.cardContent h3 { + font-size: 0.9rem; + font-weight: 900; + letter-spacing: 0.05em; + margin-bottom: 1rem; +} + +.cardContent p { + font-size: 0.85rem; + color: #666; + line-height: 1.6; +} + +@media (max-width: 1024px) { + .grid { grid-template-columns: 1fr; gap: 6rem; } + .header { max-width: none; } +} + +@media (max-width: 768px) { + .reasons { grid-template-columns: 1fr; } +} diff --git a/src/components/WhyChooseUs.tsx b/src/components/WhyChooseUs.tsx new file mode 100644 index 0000000..56fc98f --- /dev/null +++ b/src/components/WhyChooseUs.tsx @@ -0,0 +1,65 @@ +'use client'; + +import { motion } from 'framer-motion'; +import { ShieldCheck, Zap, Cpu, Award } from 'lucide-react'; +import styles from './WhyChooseUs.module.css'; + +export default function WhyChooseUs() { + const reasons = [ + { + title: 'PRECISION HARDWARE', + desc: 'Our proprietary hardware is built to surgical standards in-house, ensuring zero-latency communication and unmatched reliability.', + icon: + }, + { + title: 'RAPID SUPPORT', + desc: 'Expert technical assistance from actual enthusiasts. We speak your language and understand your build goals.', + icon: + }, + { + title: 'SECURE ENCRYPTION', + desc: 'Industry-leading AES-256 bit encryption ensures your custom tunes and intellectual property remain yours and yours alone.', + icon: + }, + { + title: 'PROVEN PERFORMANCE', + desc: 'Over 20 years of track records across time attack, drag, and circuit series worldwide.', + icon: + } + ]; + + return ( +
+
+
+
+ WHY HONDA VERT +

THE PRECISION DIFFERENCE

+

+ We don't manufacture parts; we craft engineering solutions for those who demand more than 'adequate' performance. +

+
+ +
+ {reasons.map((item, i) => ( + +
{item.icon}
+
+

{item.title}

+

{item.desc}

+
+
+ ))} +
+
+
+
+ ); +} diff --git a/src/lib/products.ts b/src/lib/products.ts new file mode 100644 index 0000000..c522933 --- /dev/null +++ b/src/lib/products.ts @@ -0,0 +1,81 @@ +export interface Product { + id: string; + name: string; + subtitle: string; + description: string; + image: string; + price: string; + version: string; + badge?: string; + specs: { label: string; value: string }[] | null; +} + +export const products: Product[] = [ + { + id: 'kpro', + name: 'KPRO', + subtitle: 'UNLEASHED', + description: 'The ultimate tuning interface for Honda K-Series engines. Surgical precision meets raw performance. Full telemetry, real-time mapping, and total control over your ECU environment.', + image: '/ecu_kpro.png', + price: '$699.00', + version: 'PERFORMANCE ENGINEERING V4.0', + badge: 'LIVE TELEMETRY ENABLED', + specs: [ + { label: 'CAN RATE', value: '500kbps' }, + { label: 'CONNECTIVITY', value: 'USB 2.1 TYPE-C' }, + { label: 'STORAGE', value: '8GB FLASH' } + ] + }, + { + id: 'canflash', + name: 'CAN', + subtitle: 'FLASH', + description: 'The definitive OBDII tuning interface for modern Honda/Acura platforms. Surgical data accuracy meets raw flashing speed.', + image: '/engine_bay.png', + price: '$549.00', + version: 'HIGH-PRECISION FLASHING INTERFACE', + specs: [ + { label: 'ENCRYPTION PROTOCOL', value: 'AES-256 BIT' }, + { label: 'INTERFACE TYPE', value: 'OBDII / J2534' } + ] + }, + { + id: 'precan', + name: 'PRECAN', + subtitle: 'SERIES', + description: 'Surgical precision for legacy K-Series platforms. Our PreCAN interface bridges the gap between raw mechanical potential and digital mastery.', + image: '/precan_car.png', + price: '$599.00', + version: 'ENGINE MANAGEMENT SYSTEMS', + specs: [ + { label: 'LATENCY', value: 'ZERO' }, + { label: 'SUPPORT', value: 'MT + AT' } + ] + }, + { + id: 's300', + name: 'S300', + subtitle: 'CORE', + description: 'Professional grade engine management for OBD1 Honda ECUs. Full real-time tuning, data logging, and track-ready performance metrics.', + image: '/ecu_kpro.png', + price: '$499.00', + version: 'PRECISION TUNER SERIES', + specs: [ + { label: 'USB RATE', value: '98% OPTIMAL' }, + { label: 'LATENCY', value: '3.4MS' } + ] + }, + { + id: 'map-sensor', + name: '4BAR MAP', + subtitle: 'SENSOR', + description: 'Engineered for high-boost applications requiring surgical telemetry accuracy. Rapid response frequency with +/- 0.01% deviation.', + image: '/map_sensor.png', + price: '$149.00', + version: 'PRECISION ENGINEERING', + specs: [ + { label: 'RANGE', value: '0.1-4.0 BAR' }, + { label: 'OUTPUT', value: '0.5V-4.5V' } + ] + } +]; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..cf9c65d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +}