diff --git a/.gitignore b/.gitignore index a547bf3..0282ad1 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ dist-ssr *.njsproj *.sln *.sw? + +repopack-output.txt \ No newline at end of file diff --git a/index.html b/index.html index e4b78ea..9e8a9ed 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@ - + - Vite + React + TS + Overaly Protocol
diff --git a/package-lock.json b/package-lock.json index c8f0a7c..76d610a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,12 +8,18 @@ "name": "overlay-landing-v2", "version": "0.0.0", "dependencies": { + "@radix-ui/react-aspect-ratio": "^1.1.0", + "@radix-ui/themes": "^3.1.4", + "@stitches/react": "^1.2.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-slick": "^0.30.2", + "slick-carousel": "^1.8.1" }, "devDependencies": { "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", + "@types/react-slick": "^0.23.13", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", @@ -844,6 +850,40 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -868,118 +908,1346 @@ "concat-map": "0.0.1" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@radix-ui/colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", + "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" + }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" + }, + "node_modules/@radix-ui/react-accessible-icon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.0.tgz", + "integrity": "sha512-i9Zg4NOSXlfUva0agzI2DjWrvFJm9uO4L6CMW7nmMa5CIOOX/Yin894W7WwjodFQWPwe5kmAJ4JF33R8slKI2g==", + "dependencies": { + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.1.tgz", + "integrity": "sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dialog": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.0.tgz", + "integrity": "sha512-dP87DM/Y7jFlPgUZTlhx6FF5CEzOiaxp2rBCKlaXlpH5Ip/9Fg5zZ9lDOQ5o/MOfUlf36eak14zoWYpgcgGoOg==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.0.tgz", + "integrity": "sha512-Q/PbuSMk/vyAd/UoIShVGZ7StHHeRFYU7wXmi5GV+8cLXflZAEpHL/F697H1klrzxKXNtZ97vWiC0q3RKUH8UA==", + "dependencies": { + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.0.tgz", + "integrity": "sha512-3+kSzVfMONtP3B6CvaOrXLVTyGYws7tGmG5kOY0AfyH9sexkLytIwciNwjZhY0RoGOEbxI7bMS21XYB8H5itWQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.1.tgz", + "integrity": "sha512-wvMKKIeb3eOrkJ96s722vcidZ+2ZNfcYZWBPRHIB1VWrF+fiF851Io6LX0kmK5wTDQFKdulCCKJk2c3SBaQHvA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-menu": "2.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", + "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", + "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.1.tgz", + "integrity": "sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-menu": "2.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", + "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.0.tgz", + "integrity": "sha512-1/oVYPDjbFILOLIarcGcMKo+y6SbTVT/iUKVEw59CF4offwZgBgC3ZOeSBewjqU0vdA6FWTPWTN63obj55S/tQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-label": "2.1.0", + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.1.tgz", + "integrity": "sha512-IwzAOP97hQpDADYVKrEEHUH/b2LA+9MgB0LgdmnbFO2u/3M5hmEofjjr2M6CyzUblaAqJdFm6B7oFtU72DPXrA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.1.tgz", + "integrity": "sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz", + "integrity": "sha512-OQ8tcwAOR0DhPlSY3e4VMXeHiol7la4PPdJWhhwJiJA+NLX0SaCaonOkRnI3gCDHoZ7Fo7bb/G6q25fRM2Y+3Q==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz", + "integrity": "sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", + "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", + "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.0.tgz", + "integrity": "sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==", + "dependencies": { + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.0.tgz", + "integrity": "sha512-yv+oiLaicYMBpqgfpSPw6q+RyXlLdIpQWDHZbUKURxe+nEh53hFXPPlfhfQQtYkS5MMK/5IWIa76SksleQZSzw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.1.0.tgz", + "integrity": "sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.1.tgz", + "integrity": "sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.0.tgz", + "integrity": "sha512-dAHCDA4/ySXROEPaRtaMV5WHL8+JB/DbtyTbJjYkY0RXmKMO2Ln8DFZhywG5/mVQ4WqHDBc8smc14yPXPqZHYA==", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.0.tgz", + "integrity": "sha512-OBzy5WAj641k0AOSpKQtreDMe+isX0MQJ1IVyF03ucdF3DunOnROVrjWs8zsXUxC3zfZ6JL9HFVCUlMghz9dJw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz", + "integrity": "sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.0.tgz", + "integrity": "sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.0.tgz", + "integrity": "sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-toggle": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.1.tgz", + "integrity": "sha512-LLE8nzNE4MzPMw3O2zlVlkLFid3y9hMUs7uCbSHyKSo+tCN4yMCf+ZCCcfrYgsOC0TiHBPQ1mtpJ2liY3ZT3SQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" }, - "engines": { - "node": "*" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@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, - "engines": { - "node": ">=12.22" + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@radix-ui/react-use-callback-ref": "1.1.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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, - "engines": { - "node": ">=6.0.0" + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@radix-ui/react-use-layout-effect": "1.1.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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, - "engines": { - "node": ">= 8" + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@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, + "node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + }, + "node_modules/@radix-ui/themes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/themes/-/themes-3.1.4.tgz", + "integrity": "sha512-HmyU8UpoYPmdfXSQIwbEnJS2Wv/5wbzxe/Niw/sMLMJTrlZiUKM/dEOM7N+bc7w2OMpUaQ8OH9czCGpcjHx98w==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@radix-ui/colors": "3.0.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-accessible-icon": "1.1.0", + "@radix-ui/react-alert-dialog": "1.1.1", + "@radix-ui/react-aspect-ratio": "1.1.0", + "@radix-ui/react-avatar": "1.1.0", + "@radix-ui/react-checkbox": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context-menu": "2.2.1", + "@radix-ui/react-dialog": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dropdown-menu": "2.1.1", + "@radix-ui/react-form": "0.1.0", + "@radix-ui/react-hover-card": "1.1.1", + "@radix-ui/react-navigation-menu": "1.2.0", + "@radix-ui/react-popover": "1.1.1", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-progress": "1.1.0", + "@radix-ui/react-radio-group": "1.2.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-scroll-area": "1.1.0", + "@radix-ui/react-select": "2.1.1", + "@radix-ui/react-slider": "1.2.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-switch": "1.1.0", + "@radix-ui/react-tabs": "1.1.0", + "@radix-ui/react-toggle-group": "1.1.0", + "@radix-ui/react-tooltip": "1.1.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", + "classnames": "2.3.2", + "react-remove-scroll-bar": "2.3.4" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -1190,6 +2458,14 @@ "win32" ] }, + "node_modules/@stitches/react": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", + "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1247,13 +2523,13 @@ "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true + "devOptional": true }, "node_modules/@types/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1263,6 +2539,15 @@ "version": "18.3.0", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-slick": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz", + "integrity": "sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==", "dev": true, "dependencies": { "@types/react": "*" @@ -1553,6 +2838,17 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1664,6 +2960,11 @@ "node": ">=4" } }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1709,7 +3010,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "devOptional": true }, "node_modules/debug": { "version": "4.3.4", @@ -1734,6 +3035,11 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1764,6 +3070,11 @@ "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==", "dev": true }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -2246,6 +3557,14 @@ "node": ">=6.9.0" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2394,6 +3713,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2439,6 +3766,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2486,6 +3819,14 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -2535,6 +3876,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2854,6 +4200,94 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-slick": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", + "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2996,6 +4430,14 @@ "node": ">=8" } }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -3005,6 +4447,11 @@ "node": ">=0.10.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3080,6 +4527,11 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3156,6 +4608,47 @@ "punycode": "^2.1.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/vite": { "version": "5.2.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", diff --git a/package.json b/package.json index c51b8a3..5ef3d4a 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,18 @@ "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-aspect-ratio": "^1.1.0", + "@radix-ui/themes": "^3.1.4", + "@stitches/react": "^1.2.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-slick": "^0.30.2", + "slick-carousel": "^1.8.1" }, "devDependencies": { "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", + "@types/react-slick": "^0.23.13", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", diff --git a/public/btcd-market.png b/public/btcd-market.png new file mode 100644 index 0000000..80b02c5 Binary files /dev/null and b/public/btcd-market.png differ diff --git a/public/cs-skins-market.png b/public/cs-skins-market.png new file mode 100644 index 0000000..f63b302 Binary files /dev/null and b/public/cs-skins-market.png differ diff --git a/public/ev-market.png b/public/ev-market.png new file mode 100644 index 0000000..2c146b4 Binary files /dev/null and b/public/ev-market.png differ diff --git a/public/overlay-logo.svg b/public/overlay-logo.svg new file mode 100644 index 0000000..4a114b4 --- /dev/null +++ b/public/overlay-logo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/vite.svg b/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/App.css b/src/App.css index b9d355d..c06cc5c 100644 --- a/src/App.css +++ b/src/App.css @@ -1,8 +1,30 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + padding: 0; + min-width: 320px; + min-height: 100vh; +} + #root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; + width: 100%; + height: 100vh; + display: flex; + flex-direction: column; } .logo { diff --git a/src/App.tsx b/src/App.tsx index afe48ac..e31b735 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,34 +1,34 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' +import React from 'react' import './App.css' +import Hero from './sections/Hero' +import OverlayLogoSection from './sections/OverlayLogoSection' +import Header from './sections/Header' +import TrendingSection from './sections/TrendingSection' +import HowItWorksSection from './sections/HowItWorksSection' +import GovernanceSection from './sections/GovernanceSection' +import TradeEverythingSection from './sections/TradeEverythingSection' +import AuditsSection from './sections/AuditSection' +import WhitePaperSection from './sections/WhitePaperSection' +import Footer from './sections/Footer' +import DynamicIndexesSection from './sections/DynamicIndexesSection' +import VcSection from './sections/VcSection' -function App() { - const [count, setCount] = useState(0) - +const App: React.FC = () => { return ( - <> -
- - Vite logo - - - React logo - -
-

Vite + React

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- +
+
+ + + + + + + + + + +
) } diff --git a/src/assets/OverlayLogo.tsx b/src/assets/OverlayLogo.tsx new file mode 100644 index 0000000..9590d9e --- /dev/null +++ b/src/assets/OverlayLogo.tsx @@ -0,0 +1,23 @@ +import React from 'react'; + +const OverlayLogo: React.FC> = (props) => ( + + + + + + + + + + + + + + + + + +); + +export default OverlayLogo; \ No newline at end of file diff --git a/src/assets/background.tsx b/src/assets/background.tsx new file mode 100644 index 0000000..7a83e1a --- /dev/null +++ b/src/assets/background.tsx @@ -0,0 +1,186 @@ +import React, { useState, useEffect, useRef } from 'react'; + +interface Props { + className?: string; +} + +interface GradientPosition { + x: number; + y: number; + rotation: number; +} + +interface Square { + x: number; + y: number; + opacity: number; + targetOpacity: number; +} + +const DynamicBackgroundSVG: React.FC = ({ className }) => { + const [gradientPositions, setGradientPositions] = useState<{ + [key: string]: GradientPosition; + }>({ + purple: { x: 50, y: 50, rotation: 180 }, + orange: { x: 50, y: 50, rotation: 180 }, + yellow: { x: 50, y: 50, rotation: 180 }, + }); + + const [squares, setSquares] = useState([ + { x: 320, y: 109, opacity: 0, targetOpacity: 0 }, + { x: 160, y: 349, opacity: 0, targetOpacity: 0 }, + { x: 1200, y: 269, opacity: 0, targetOpacity: 0 }, + { x: 1360, y: 429, opacity: 0, targetOpacity: 0 }, + { x: 480, y: 189, opacity: 0, targetOpacity: 0 }, + { x: 720, y: 509, opacity: 0, targetOpacity: 0 }, + { x: 960, y: 669, opacity: 0, targetOpacity: 0 }, + { x: 640, y: 29, opacity: 0, targetOpacity: 0 }, + ]); + + const animationRef = useRef(); + const timeRef = useRef(0); + + const updateAnimation = (time: number) => { + if (timeRef.current === 0) { + timeRef.current = time; + } + + timeRef.current = time; + + setGradientPositions({ + purple: { + x: 50 * Math.sin(time * 0.0002) + 50, + y: 50 * Math.cos(time * 0.0003) + 50, + rotation: 180 * Math.sin(time * 0.0001) + 180, + }, + orange: { + x: 50 * Math.sin(time * 0.0003) + 50, + y: 50 * Math.cos(time * 0.0002) + 50, + rotation: 180 * Math.cos(time * 0.00015) + 180, + }, + yellow: { + x: 50 * Math.cos(time * 0.0004) + 50, + y: 50 * Math.sin(time * 0.0005) + 50, + rotation: 180 * Math.sin(time * 0.0002) + 180, + }, + }); + + setSquares(prev => prev.map(square => { + const newOpacity = square.opacity + (square.targetOpacity - square.opacity) * 0.05; + return { ...square, opacity: newOpacity }; + })); + + animationRef.current = requestAnimationFrame(updateAnimation); + }; + + useEffect(() => { + animationRef.current = requestAnimationFrame(updateAnimation); + return () => { + if (animationRef.current) { + cancelAnimationFrame(animationRef.current); + } + }; + }); + + useEffect(() => { + const intervalId = setInterval(() => { + setSquares(prev => prev.map(square => ({ + ...square, + targetOpacity: Math.random() > 0.7 ? 0.3 : 0, + }))); + }, 2000); + + return () => clearInterval(intervalId); + }, []); + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* Keep existing paths and groups */} + + + + + + + + + + + {[...Array(11)].map((_, i) => ( + + ))} + + + {[...Array(18)].map((_, i) => ( + + ))} + + + {squares.map((square, index) => ( + + ))} + + + ); +}; + +export default DynamicBackgroundSVG; \ No newline at end of file diff --git a/src/assets/external-link-icon.svg b/src/assets/external-link-icon.svg new file mode 100644 index 0000000..854383b --- /dev/null +++ b/src/assets/external-link-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/governance-desktop.png b/src/assets/governance-desktop.png new file mode 100644 index 0000000..e679d5c Binary files /dev/null and b/src/assets/governance-desktop.png differ diff --git a/src/assets/governance-mobile.png b/src/assets/governance-mobile.png new file mode 100644 index 0000000..0adad4d Binary files /dev/null and b/src/assets/governance-mobile.png differ diff --git a/src/assets/governance-tablet.png b/src/assets/governance-tablet.png new file mode 100644 index 0000000..0c369a8 Binary files /dev/null and b/src/assets/governance-tablet.png differ diff --git a/src/assets/hero-image.png b/src/assets/hero-image.png new file mode 100644 index 0000000..4cc6933 Binary files /dev/null and b/src/assets/hero-image.png differ diff --git a/src/assets/indexes.png b/src/assets/indexes.png new file mode 100644 index 0000000..8dc1d9e Binary files /dev/null and b/src/assets/indexes.png differ diff --git a/src/assets/la-audit.png b/src/assets/la-audit.png new file mode 100644 index 0000000..102068d Binary files /dev/null and b/src/assets/la-audit.png differ diff --git a/src/assets/menu-icon.svg b/src/assets/menu-icon.svg new file mode 100644 index 0000000..5022e7d --- /dev/null +++ b/src/assets/menu-icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/onekx-logo.png b/src/assets/onekx-logo.png new file mode 100644 index 0000000..e514d8c Binary files /dev/null and b/src/assets/onekx-logo.png differ diff --git a/src/assets/overlay-logo.svg b/src/assets/overlay-logo.svg new file mode 100644 index 0000000..4a114b4 --- /dev/null +++ b/src/assets/overlay-logo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/parafi-logo.png b/src/assets/parafi-logo.png new file mode 100644 index 0000000..ff2dd51 Binary files /dev/null and b/src/assets/parafi-logo.png differ diff --git a/src/assets/polychain-logo.png b/src/assets/polychain-logo.png new file mode 100644 index 0000000..f9e2bd4 Binary files /dev/null and b/src/assets/polychain-logo.png differ diff --git a/src/assets/spearbit-audit.png b/src/assets/spearbit-audit.png new file mode 100644 index 0000000..7534ca0 Binary files /dev/null and b/src/assets/spearbit-audit.png differ diff --git a/src/assets/tob-audit.png b/src/assets/tob-audit.png new file mode 100644 index 0000000..618cc16 Binary files /dev/null and b/src/assets/tob-audit.png differ diff --git a/src/assets/trending-mobile.png b/src/assets/trending-mobile.png new file mode 100644 index 0000000..e9e7c30 Binary files /dev/null and b/src/assets/trending-mobile.png differ diff --git a/src/assets/trending.png b/src/assets/trending.png new file mode 100644 index 0000000..e9f67bd Binary files /dev/null and b/src/assets/trending.png differ diff --git a/src/assets/white-paper.png b/src/assets/white-paper.png new file mode 100644 index 0000000..865cd4b Binary files /dev/null and b/src/assets/white-paper.png differ diff --git a/src/config/marketConfig.ts b/src/config/marketConfig.ts new file mode 100644 index 0000000..f2bc253 --- /dev/null +++ b/src/config/marketConfig.ts @@ -0,0 +1,74 @@ +export interface Market { + name: string; + price: string; + icon: string; + up: boolean; + row?: number[]; +} + +export const marketConfig: Market[] = [ + { + name: 'EV Commodity Index', + price: '$94.21', + icon: '/ev-market.png', + up: false, + row: [1], + }, + { + name: 'BTC Dominance', + price: '54.53%', + icon: '/btcd-market.png', + up: true, + row: [1, 2], + }, + { + name: 'CS 2 Skins Index', + price: '$9.48M', + icon: '/cs-skins-market.png', + up: true, + row: [2, 3], + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + { + name: 'Bitcoin Frogs', + price: '₿ 0.035', + icon: '/cs-skins-market.png', + up: false, + // No row specified, will appear in all rows + }, + // Add more markets as needed +]; \ No newline at end of file diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..f00fcb8 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,25 @@ +export const BREAKPOINTS = { + mobile: 768, + tablet: 1024, +} as const; + +export const mediaQueries = { + mobile: `@media (max-width: ${BREAKPOINTS.mobile}px)`, + tablet: `@media (max-width: ${BREAKPOINTS.tablet}px)`, +}; + +export const LINKS = { + documentation: "https://example.com/documentation", + governance: "https://example.com/governance", + whitepaper: "https://example.com/whitepaper", + trade: "https://app.overlay.market", + markets: "https://example.com/markets", + spearbitAudit: "https://example.com/spearbit-audit", + leastAuthorityAudit: "https://example.com/least-authority-audit", + trailOfBitsAudit: "https://example.com/trail-of-bits-audit", + github: "https://github.com/overlay-market", + discord: "https://discord.gg/overlay", + twitter: "https://twitter.com/overlay_protocol", + mirror: "https://mirror.xyz/0x8c9F87668E544D9A5cf4F29C54E2E5AC6CEcE72D", + termsOfService: "https://example.com/terms-of-service", +}; \ No newline at end of file diff --git a/src/sections/AuditSection.tsx b/src/sections/AuditSection.tsx new file mode 100644 index 0000000..2de1303 --- /dev/null +++ b/src/sections/AuditSection.tsx @@ -0,0 +1,135 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { LINKS, mediaQueries } from '../constants'; +import ExternalLinkIcon from '../assets/external-link-icon.svg'; +import SpearbitAuditImage from '../assets/spearbit-audit.png'; +import LeastAuthorityAuditImage from '../assets/la-audit.png'; +import TrailOfBitsAuditImage from '../assets/tob-audit.png'; + +const SectionWrapper = styled('div', { + display: 'flex', + padding: '160px 0px', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + gap: '80px', + alignSelf: 'stretch', + + [mediaQueries.tablet]: { + padding: '120px 40px', + }, + + [mediaQueries.mobile]: { + padding: '80px 20px', + }, +}); + +const Title = styled('h2', { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '16px', + color: '#FFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + margin: 0, + + [mediaQueries.mobile]: { + fontSize: '24px', + }, +}); + +const AuditSectionsContainer = styled('div', { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'flex-end', + width: '100%', + maxWidth: '850px', + + [mediaQueries.tablet]: { + gap: '60px', + }, + + [mediaQueries.mobile]: { + flexDirection: 'column', + alignItems: 'center', + gap: '40px', + }, +}); + +const AuditSection = styled('div', { + display: 'flex', + width: '200px', + height: '138px', + flexDirection: 'column', + justifyContent: 'flex-end', + alignItems: 'center', + gap: '26px', +}); + +const AuditImage = styled('img', { + gap: '10px', + flex: '1 0 0', + height: '90px', +}); + +const AuditLink = styled('a', { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + gap: '4px', + width: '200px', + height: '22px', + flexShrink: 0, + color: '#12B4FF', + textAlign: 'center', + fontFamily: '"IBM Plex Mono", monospace', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: 'normal', + textDecorationLine: 'underline', + cursor: 'pointer', +}); + +const LinkIcon = styled('img', { + width: '20px', + height: '20px', +}); + +const AuditsSection: React.FC = () => { + return ( + + Backed up by the most formidable + + + + + Spearbit Dao Audit + + + + + + + Least Authority Audit + + + + + + + Trail of Bits Audit + + + + + + ); +}; + +export default AuditsSection; \ No newline at end of file diff --git a/src/sections/DesktopButtonBar.tsx b/src/sections/DesktopButtonBar.tsx new file mode 100644 index 0000000..5e4b8fd --- /dev/null +++ b/src/sections/DesktopButtonBar.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { mediaQueries, LINKS } from '../constants'; + +const ButtonBarContainer = styled('div', { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + padding: '12px 20px', + gap: '32px', + borderRadius: '100px', + background: 'rgba(255, 255, 255, 0.10)', + backdropFilter: 'blur(20px)', + marginBottom: '40px', + + [mediaQueries.tablet]: { + display: 'none', + }, +}); + +const ButtonLink = styled('a', { + color: '#FFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 500, + lineHeight: 'normal', + textDecoration: 'none', + padding: '8px 16px', + borderRadius: '100px', + transition: 'background-color 0.3s', + opacity: '0.6', + + '&:hover': { + backgroundColor: 'rgba(255, 255, 255, 0.1)', + opacity: '0.9', + color: '#FFF', + }, +}); + +const DesktopButtonBar: React.FC = () => { + return ( + + + Documentation + + + Governance + + + White Paper + + + ); +}; + +export default DesktopButtonBar; \ No newline at end of file diff --git a/src/sections/DynamicIndexesSection.tsx b/src/sections/DynamicIndexesSection.tsx new file mode 100644 index 0000000..235f9e4 --- /dev/null +++ b/src/sections/DynamicIndexesSection.tsx @@ -0,0 +1,201 @@ +import React, { useState, useEffect } from 'react'; +import { styled } from '@stitches/react'; +import Slider from 'react-slick'; +import 'slick-carousel/slick/slick.css'; +import 'slick-carousel/slick/slick-theme.css'; +import { marketConfig, Market } from '../config/marketConfig'; +import { LINKS, mediaQueries } from '../constants'; +import ExternalLinkIcon from '../assets/external-link-icon.svg'; + +const SectionWrapper = styled('div', { + '--market-card-gap': '32px', + display: 'flex', + padding: '120px 0', + flexDirection: 'column', + alignItems: 'center', + gap: '48px', + alignSelf: 'stretch', + borderTop: '1px solid #FFF', + overflow: 'hidden', + + [mediaQueries.tablet]: { + padding: '80px 0', + }, + + [mediaQueries.mobile]: { + padding: '80px 0', + }, +}); + +const Title = styled('h2', { + color: '#FFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + alignSelf: 'stretch', + padding: '0 20px', + margin: 0, +}); + +const MarketsContainer = styled('div', { + display: 'flex', + width: '100%', + flexDirection: 'column', + gap: 'var(--market-card-gap)', +}); + +const SliderContainer = styled('div', { + width: '100%', + overflow: 'hidden', + '& .slick-track': { + display: 'flex', + alignItems: 'center', + }, + '& .slick-slide': { + height: 'auto', + }, +}); + +const MarketCardWrapper = styled('div', { + padding: '0 16px', +}); + +const MarketCard = styled('div', { + display: 'flex', + padding: '10px 32px 10px 10px', + alignItems: 'center', + gap: '16px', + borderRadius: '200px', + border: '1px solid rgba(255, 255, 255, 0.05)', + background: '#393939', + flexShrink: 0, +}); + +const MarketIcon = styled('img', { + width: '48px', + height: '48px', + borderRadius: '50%', +}); + +const MarketInfo = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + justifyContent: 'center', +}); + +const MarketPrice = styled('span', { + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 700, + lineHeight: 'normal', + variants: { + up: { + true: { color: '#1FFF9C' }, + false: { color: '#FF5A5A' }, + }, + }, +}); + +const MarketName = styled('span', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '20px', +}); + +const LinkButton = styled('a', { + display: 'flex', + alignItems: 'center', + gap: '4px', + textDecoration: 'none', +}); + +const LinkText = styled('span', { + color: '#12B4FF', + textAlign: 'center', + fontFamily: '"IBM Plex Mono", monospace', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: 'normal', +}); + +const LinkIcon = styled('img', { + width: '20px', + height: '20px', +}); + +const DynamicIndexesSection: React.FC = () => { + const [markets, setMarkets] = useState([]); + + useEffect(() => { + const shuffledMarkets = [...marketConfig].sort(() => Math.random() - 0.5); + setMarkets(shuffledMarkets); + }, []); + + const renderMarketCard = (market: Market) => ( + + + + + {market.price} + {market.name} + + + + ); + + const sliderSettings = (speed: number) => ({ + dots: false, + infinite: true, + autoplay: true, + speed: speed, + autoplaySpeed: 0, + pauseOnHover: false, + variableWidth: true, + arrows: false, + cssEase: "linear" + }); + + const renderRow = (rowNumber: number, speed: number) => { + const rowMarkets = markets.filter(market => + !market.row || market.row.length === 0 || market.row.includes(rowNumber) + ); + + return ( + + + {rowMarkets.map((market, index) => ( + + {renderMarketCard(market)} + + ))} + + + ); + }; + + return ( + + Wide world of new markets + + {renderRow(1, 6500)} + {renderRow(2, 3000)} + {renderRow(3, 7500)} + + + List of markets section + + + + ); +}; + +export default DynamicIndexesSection; \ No newline at end of file diff --git a/src/sections/Footer.tsx b/src/sections/Footer.tsx new file mode 100644 index 0000000..efec7d5 --- /dev/null +++ b/src/sections/Footer.tsx @@ -0,0 +1,174 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import OverlayLogo from '../assets/OverlayLogo'; +import { LINKS, mediaQueries } from '../constants'; + +const footerConfig = [ + { + title: 'Protocol', + links: [ + { label: 'Github', url: LINKS.github }, + { label: 'Documentation', url: LINKS.documentation }, + { label: 'Governance', url: LINKS.governance }, + { label: 'White Paper V1', url: LINKS.whitepaper }, + ], + }, + { + title: 'Connect', + links: [ + { label: 'Discord', url: LINKS.discord }, + { label: 'Twitter', url: LINKS.twitter }, + { label: 'Mirror', url: LINKS.mirror }, + ], + }, + { + title: 'Legal', + links: [ + { label: 'Terms of Service', url: LINKS.termsOfService }, + ], + }, +]; + +const FooterWrapper = styled('footer', { + display: 'flex', + padding: '55px 170px', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + alignSelf: 'stretch', + borderTop: '1px solid #FFF', + background: '#232323', + + [mediaQueries.tablet]: { + padding: '55px 40px', + }, + + [mediaQueries.mobile]: { + padding: '55px 20px', + }, +}); + +const FooterContainer = styled('div', { + width: '100%', + maxWidth: '1100px', + display: 'flex', + flexDirection: 'column', +}); + +const TopRow = styled('div', { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'flex-start', + marginBottom: '40px', + + [mediaQueries.tablet]: { + flexDirection: 'column', + alignItems: 'center', + gap: '40px', + }, +}); + +const LogoContainer = styled('div', { + display: 'flex', + alignItems: 'center', +}); + +const LinksContainer = styled('div', { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'flex-start', + flex: 1, + maxWidth: '600px', + width: '100%', + + [mediaQueries.mobile]: { + flexDirection: 'column', + gap: '40px', + }, +}); + +const LinkColumn = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', +}); + +const ColumnTitle = styled('h3', { + paddingBottom: '6px', + color: '#FFF', + fontFamily: '"Be Vietnam Pro", sans-serif', + fontSize: '20px', + fontWeight: 600, + marginBottom: '10px', +}); + +const LinkList = styled('ul', { + listStyle: 'none', + padding: 0, + margin: 0, +}); + +const LinkItem = styled('li', { + padding: '10px 0', +}); + +const StyledLink = styled('a', { + color: '#636363', + fontFamily: 'Inter, sans-serif', + fontSize: '15px', + fontWeight: 400, + textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, +}); + +const Divider = styled('div', { + width: '100%', + height: '1px', + background: '#636363', + margin: '20px 0', +}); + +const Copyright = styled('p', { + color: '#636363', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontWeight: 400, + lineHeight: '20px', +}); + +const Footer: React.FC = () => { + return ( + + + + + + + + {footerConfig.map((column) => ( + + {column.title} + + {column.links.map((link) => ( + + + {link.label} + + + ))} + + + ))} + + + + Copyright 2024 © Overlay Foundation, All Rights Reserved + + + ); +}; + +export default Footer; \ No newline at end of file diff --git a/src/sections/GovernanceSection.tsx b/src/sections/GovernanceSection.tsx new file mode 100644 index 0000000..c4d1334 --- /dev/null +++ b/src/sections/GovernanceSection.tsx @@ -0,0 +1,85 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { mediaQueries, LINKS, BREAKPOINTS } from '../constants'; +import governanceImage from '../assets/governance-desktop.png'; +import governanceTabletImage from '../assets/governance-tablet.png'; +import governanceMobileImage from '../assets/governance-mobile.png'; + +const SectionWrapper = styled('div', { + '--OV-gradiant-1': 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + display: 'flex', + padding: '120px 40px', + flexDirection: 'column', + alignItems: 'center', + gap: '48px', + alignSelf: 'stretch', + borderTop: '1px solid #FFF', + + [mediaQueries.tablet]: { + padding: '80px 40px', + }, + + [mediaQueries.mobile]: { + padding: '80px 20px', + }, +}); + +const Title = styled('h2', { + color: '#FFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + alignSelf: 'stretch', +}); + +const ImageContainer = styled('div', { + display: 'flex', + width: 'auto', + maxWidth: '1120px', + justifyContent: 'center', + alignItems: 'flex-start', + alignContent: 'flex-start', + gap: '32px', + flexWrap: 'wrap', + cursor: 'pointer', + + [mediaQueries.tablet]: { + maxWidth: '728px', + }, + + [mediaQueries.mobile]: { + maxWidth: '265px', + }, +}); + +const StyledImage = styled('img', { + maxWidth: '100%', + height: 'auto', +}); + +const GovernanceSection: React.FC = () => { + const handleGov = () => { + window.open( + LINKS.trade, + '_blank' + ) + }; + + return ( + + Governance + + + + + + + + + ); +}; + +export default GovernanceSection; \ No newline at end of file diff --git a/src/sections/Header.tsx b/src/sections/Header.tsx new file mode 100644 index 0000000..cf996af --- /dev/null +++ b/src/sections/Header.tsx @@ -0,0 +1,146 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { styled } from '@stitches/react'; +import { mediaQueries, LINKS } from '../constants'; +import OverlayLogo from '../assets/overlay-logo.svg'; +import MenuIcon from '../assets/menu-icon.svg'; + +const HeaderWrapper = styled('div', { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + zIndex: 10, +}); + +const HeaderContainer = styled('header', { + position: 'relative', + maxWidth: '1120px', + margin: '0 auto', + padding: '20px', + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', +}); + +const LogoContainer = styled('div', { + display: 'flex', + height: '40px', + alignItems: 'center', + flexShrink: 0, +}); + +const StyledLogo = styled('img', { + width: '40px', + height: '40px', + flexShrink: 0, +}); + +const LogoText = styled('span', { + color: '#FFFFFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 700, + lineHeight: '16px', + marginLeft: '16px', + + [mediaQueries.mobile]: { + display: 'none', + }, +}); + +const MenuIconContainer = styled('div', { + display: 'none', + cursor: 'pointer', + + [mediaQueries.tablet]: { + display: 'block', + }, +}); + +const MenuItems = styled('div', { + display: 'none', + flexDirection: 'column', + position: 'absolute', + top: '100%', + right: '20px', + backgroundColor: 'rgba(0, 0, 0, 0.8)', + borderRadius: '8px', + padding: '16px', + + [mediaQueries.tablet]: { + display: 'flex', + }, +}); + +const MenuItem = styled('a', { + color: '#FFF', + textDecoration: 'none', + padding: '8px 16px', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontWeight: 500, + '&:hover': { + backgroundColor: 'rgba(255, 255, 255, 0.1)', + color: '#FFF', + }, +}); + +const Header: React.FC = () => { + const [isMenuOpen, setIsMenuOpen] = useState(false); + const menuRef = useRef(null); + const menuIconRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if ( + isMenuOpen && + menuRef.current && + !menuRef.current.contains(event.target as Node) && + menuIconRef.current && + !menuIconRef.current.contains(event.target as Node) + ) { + setIsMenuOpen(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [isMenuOpen]); + + const toggleMenu = () => { + setIsMenuOpen(!isMenuOpen); + }; + + return ( + + + + + The Trade Everything Engine + + + Menu + + {isMenuOpen && ( + + + Documentation + + + Governance + + + White Paper + + + )} + + + ); +}; + +export default Header; \ No newline at end of file diff --git a/src/sections/Hero.tsx b/src/sections/Hero.tsx new file mode 100644 index 0000000..6a2d55d --- /dev/null +++ b/src/sections/Hero.tsx @@ -0,0 +1,171 @@ +import React from 'react'; +import { styled } from '@stitches/react'; + +import DynamicBackgroundSVG from '../assets/background' +import CardsImage from '../assets/hero-image.png'; +import { mediaQueries, LINKS } from '../constants'; + +const HeroContainer = styled('div', { + '--OV-gradiant-1': 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + position: 'relative', + width: '100vw', + minHeight: '100vh', + marginLeft: 'calc(-50vw + 50%)', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + color: 'white', + overflow: 'hidden', + paddingTop: '80px', +}); + +const BackgroundWrapper = styled('div', { + position: 'absolute', + top: 0, + left: '50%', + transform: 'translateX(-50%)', + width: '100vw', + height: '100%', + zIndex: 0, +}); + +const StyledBackgroundSVG = styled(DynamicBackgroundSVG, { + width: '100%', + height: '100%', + display: 'block', +}); + +const ContentWrapper = styled('div', { + position: 'relative', + display: 'flex', + width: '90%', + minHeight: '100vh', + justifyContent: 'space-between', + alignItems: 'center', + gap: '40px', + maxWidth: '1120px', + zIndex: 1, + + [mediaQueries.mobile]: { + flexDirection: 'column', + justifyContent: 'center', + }, +}); + +const Content = styled('div', { + display: 'flex', + width: '100%', + maxWidth: '438px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '32px', + + [mediaQueries.mobile]: { + maxWidth: '100%', + alignItems: 'center', + textAlign: 'center', + }, +}); + +const TitleSubtitleContainer = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '10px', + alignSelf: 'stretch', + + [mediaQueries.mobile]: { + alignItems: 'center', + }, +}); + +const Title = styled('h1', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '64px', + fontStyle: 'normal', + fontWeight: 700, + lineHeight: '80px', + margin: 0, + + [mediaQueries.mobile]: { + fontSize: '48px', + lineHeight: '60px', + }, +}); + +const Subtitle = styled('h2', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + margin: 0, + + [mediaQueries.mobile]: { + fontSize: '24px', + }, +}); + +export const TradeButton = styled('button', { + display: 'flex', + width: '100%', + maxWidth: '360px', + height: '60px', + padding: '10.5px 24px', + justifyContent: 'center', + alignItems: 'center', + gap: '15px', + borderRadius: '12px', + border: '1.5px solid #FFC955', + fontFamily: 'Inter, sans-serif', + fontSize: '18px', + fontStyle: 'normal', + fontWeight: 500, + lineHeight: 'normal', + background: 'var(--OV-gradiant-1) border-box, transparent padding-box', + backgroundClip: 'text', + WebkitBackgroundClip: 'text', + WebkitTextFillColor: 'transparent', + cursor: 'pointer', +}); + +const CardsContainer = styled('div', { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + + [mediaQueries.mobile]: { + width: '100%', + maxWidth: '100%', + }, +}); + +const Hero: React.FC = () => { + const handleTradeNow = () => { + window.location.href = LINKS.trade; + }; + + return ( + + + + + + + + The Trade Everything Engine + The Exotic Perps Dex + + Trade Now + + + Trading cards + + + + ); +}; + +export default Hero; \ No newline at end of file diff --git a/src/sections/HowItWorksSection.tsx b/src/sections/HowItWorksSection.tsx new file mode 100644 index 0000000..9f77bed --- /dev/null +++ b/src/sections/HowItWorksSection.tsx @@ -0,0 +1,173 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { mediaQueries } from '../constants'; + +const SectionWrapper = styled('div', { + display: 'grid', + gridTemplateColumns: '350px 1px 1fr', + alignItems: 'stretch', + borderTop: '1px solid #FFF', + + [mediaQueries.tablet]: { + gridTemplateColumns: '1fr', + gridTemplateRows: 'auto 1px auto', + }, +}); + +const LeftColumn = styled('div', { + display: 'flex', + padding: '20px', + justifyContent: 'flex-end', + alignItems: 'flex-start', + borderBottom: '1px solid #FFF', + height: 'fit-content', + + [mediaQueries.tablet]: { + justifyContent: 'flex-start', + borderBottom: '1px solid #FFF', + }, +}); + +const LeftColumnText = styled('div', { + color: '#FFF', + textAlign: 'right', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '20px', + + [mediaQueries.tablet]: { + textAlign: 'left', + }, +}); + +const Divider = styled('div', { + width: '1px', + height: '100%', + background: 'linear-gradient(180deg, #FFF 0%, #22221F 100%)', + + [mediaQueries.tablet]: { + width: '100%', + height: '1px', + background: '#FFF', + }, +}); + +const RightColumn = styled('div', { + display: 'flex', + padding: '95px 160px 95px 95px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '48px', + + [mediaQueries.tablet]: { + padding: '40px 20px', + }, + + [mediaQueries.mobile]: { + padding: '30px 15px 80px 15px', + }, +}); + +const Frame = styled('div', { + display: 'flex', + alignItems: 'flex-start', + alignSelf: 'stretch', + gap: '20px', + + [mediaQueries.mobile]: { + gap: '16px', + }, +}); + +const IndexNumber = styled('div', { + width: '95px', + flexShrink: 0, + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '48px', + fontStyle: 'normal', + fontWeight: 200, + lineHeight: '48px', + opacity: 0.4, + + [mediaQueries.mobile]: { + fontSize: '32px', + lineHeight: '32px', + width: '55px', + }, +}); + +const TextContent = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '16px', + flex: '1 0 0', +}); + +const Title = styled('h3', { + alignSelf: 'stretch', + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '24px', + fontStyle: 'normal', + fontWeight: 600, + lineHeight: 'normal', + margin: '0', +}); + +const Description = styled('p', { + alignSelf: 'stretch', + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '18px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '25px', + opacity: 0.4, + margin: '0', +}); + +const HowItWorksSection: React.FC = () => { + return ( + + + How it works + + + + + 01. + + Connect and Choose a Market + + To start trading on Overlay Market, connect your cryptocurrency wallet. Once connected, choose a market to trade on, such as cryptocurrencies, stocks, or commodities. Overlay gives you access to a variety of assets, allowing for greater flexibility. + + + + + 02. + + Make a Prediction with OVL Tokens + + After selecting your market, you can use Overlay tokens (OVL) to predict if the price of the asset will go up (long) or down (short). OVL tokens act as your stake, and the system operates on an "up-only" perpetual system. You don't need collateral, making it easier to open positions. + + + + + 03. + + Manage and Close Your Trade + + Once your position is open, you can actively monitor its performance. Overlay allows you to adjust or close your position whenever you like, without relying on liquidations or margin calls. Your outcome is directly tied to the market's performance, and when you're satisfied, you can close the trade, receiving either profits or losses depending on the market's movement. + + + + + + ); +}; + +export default HowItWorksSection; \ No newline at end of file diff --git a/src/sections/OverlayLogoSection.tsx b/src/sections/OverlayLogoSection.tsx new file mode 100644 index 0000000..e74b46b --- /dev/null +++ b/src/sections/OverlayLogoSection.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import OverlayLogo from '../assets/OverlayLogo'; +import { mediaQueries } from '../constants'; +import DesktopButtonBar from './DesktopButtonBar'; + +const SectionWrapper = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + width: '100%', +}); + +const LogoSectionContainer = styled('div', { + display: 'flex', + padding: '120px 0px', + flexDirection: 'column', + alignItems: 'center', + gap: '24px', + alignSelf: 'stretch', + + [mediaQueries.tablet]: { + padding: '80px 0px', + }, + + [mediaQueries.mobile]: { + padding: '40px 0px', + }, +}); + +const StyledLogo = styled(OverlayLogo, { + display: 'flex', + width: '208px', + height: '30px', + padding: '0.677px 0.923px 0.677px 0.106px', + justifyContent: 'center', + alignItems: 'center', +}); + +const LogoText = styled('p', { + color: '#FFFFFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '18px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '25px', + opacity: 0.4, + alignSelf: 'stretch', +}); + +const OverlayLogoSection: React.FC = () => { + return ( + + + + + + Overlay is the first of its kind exotic perpetual dex - trade anything + + + + ); +}; + +export default OverlayLogoSection; \ No newline at end of file diff --git a/src/sections/TradeEverythingSection.tsx b/src/sections/TradeEverythingSection.tsx new file mode 100644 index 0000000..71dc75c --- /dev/null +++ b/src/sections/TradeEverythingSection.tsx @@ -0,0 +1,94 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { TradeButton } from './Hero'; +import { LINKS, mediaQueries } from '../constants'; + +const SectionWrapper = styled('div', { + '--OV-gradiant-1': 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + display: 'flex', + padding: '64px 160px', + alignItems: 'center', + gap: '32px', + alignSelf: 'stretch', + background: 'linear-gradient(90deg, rgba(255, 201, 85, 0.20) 0%, rgba(255, 124, 213, 0.20) 100%)', + position: 'relative', + overflow: 'hidden', + + [mediaQueries.tablet]: { + padding: '64px 40px', + }, + + [mediaQueries.mobile]: { + padding: '64px 20px', + flexDirection: 'column', + }, +}); + +const BackgroundSVG = styled('svg', { + width: '752px', + height: '352px', + position: 'absolute', + left: '111px', + bottom: '-112px', + opacity: 0.7, + filter: 'blur(150px)', +}); + +const TextContent = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '10px', + flex: '1 0 0', +}); + +const Title = styled('h2', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '24px', + fontStyle: 'normal', + fontWeight: 600, + lineHeight: 'normal', + margin: 0, +}); + +const Subtitle = styled('p', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '18px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '25px', + opacity: 0.4, + margin: 0, +}); + +const TradeEverythingSection: React.FC = () => { + return ( + + + + + + + + + + + + + + + + + + + Trade everything + Overlay is the first of its kind exotic perpetual dex - trade anything + + window.location.href = LINKS.trade}>Trade Now + + ); +}; + +export default TradeEverythingSection; \ No newline at end of file diff --git a/src/sections/TrendingSection.tsx b/src/sections/TrendingSection.tsx new file mode 100644 index 0000000..1c05161 --- /dev/null +++ b/src/sections/TrendingSection.tsx @@ -0,0 +1,76 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { mediaQueries, LINKS, BREAKPOINTS } from '../constants'; +import trendingImage from '../assets/trending.png'; +import trendingMobileImage from '../assets/trending-mobile.png'; +import { TradeButton } from './Hero'; + +const SectionWrapper = styled('div', { + '--OV-gradiant-1': 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + display: 'flex', + padding: '120px 40px', + flexDirection: 'column', + alignItems: 'center', + gap: '48px', + alignSelf: 'stretch', + borderTop: '1px solid #FFF', + + [mediaQueries.tablet]: { + padding: '80px 40px', + }, + + [mediaQueries.mobile]: { + padding: '80px 20px', + }, +}); + +const Title = styled('h2', { + color: '#FFF', + textAlign: 'center', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + alignSelf: 'stretch', +}); + +const ImageContainer = styled('div', { + display: 'flex', + width: '1690px', + justifyContent: 'center', + alignItems: 'flex-start', + alignContent: 'flex-start', + gap: '32px', + flexWrap: 'wrap', + + [mediaQueries.mobile]: { + width: '100%', + }, +}); + +const StyledImage = styled('img', { + maxWidth: '100%', + height: 'auto', +}); + +const TrendingSection: React.FC = () => { + const handleTradeNow = () => { + window.location.href = LINKS.trade; + }; + + return ( + + Trending Markets + + + + + + + Trade Now + + ); +}; + +export default TrendingSection; \ No newline at end of file diff --git a/src/sections/VcSection.tsx b/src/sections/VcSection.tsx new file mode 100644 index 0000000..f15d6c5 --- /dev/null +++ b/src/sections/VcSection.tsx @@ -0,0 +1,393 @@ +import React from "react"; +import { styled } from "@stitches/react"; +import { LINKS, mediaQueries } from "../constants"; +import OverlayLogo from '../assets/OverlayLogo'; +import { TradeButton } from './Hero'; +import PolychainLogo from '../assets/polychain-logo.png'; +import onekxLogo from '../assets/onekx-logo.png'; +import parafiLogo from '../assets/parafi-logo.png'; +// import ExternalLinkIcon from "../assets/external-link-icon.svg"; + +const vcLogoData = [ + { + logo: PolychainLogo, + url: 'https://jobs.polychain.capital/companies/overlay-2-10921965-ae1e-43be-b3b9-eb92ec801b56', + width: '176px', + }, + { + logo: onekxLogo, + url: 'https://careers.1kx.capital/companies/overlay-2-10921965-ae1e-43be-b3b9-eb92ec801b56', + width: '88px', + }, + { + logo: parafiLogo, + url: 'https://parafi.com/portfolio', + width: '138px', + }, + // Add more logos as needed +]; + +const vcTextData: { text: string, fontSize: string, url?: string}[] = [ + { + text: 'The LAO', + // url: 'https://example1.com', + fontSize: '24px', + }, + { + text: 'CitizenX', + fontSize: '22px', + }, + { + text: 'MetaCartel', + fontSize: '22px', + }, + { + text: 'FoundersHead', + fontSize: '22px', + }, + { + text: 'and others', + fontSize: '22px', + }, + // Add more text cards as needed +]; + +const SectionWrapper = styled("div", { + '--OV-gradiant-1': 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + display: "grid", + gridTemplateColumns: "2fr 1px 1fr", + alignItems: "stretch", + borderTop: "1px solid #FFF", + position: "relative", + + [mediaQueries.tablet]: { + gridTemplateColumns: "1fr", + gridTemplateRows: "auto 1px auto", + }, +}); + +const RightColumn = styled("div", { + display: "flex", + padding: "20px 80px", + justifyContent: "flex-start", + alignItems: "flex-start", + borderBottom: "1px solid #FFF", + height: "fit-content", + + [mediaQueries.mobile]: { + justifyContent: "flex-start", + padding: "20px 40px", + borderBottom: "1px solid #FFF", + }, +}); + +const RightColumnText = styled("div", { + color: "#FFF", + textAlign: "left", + fontFamily: "Inter, sans-serif", + fontSize: "16px", + fontStyle: "normal", + fontWeight: 400, + lineHeight: "20px", + maxWidth: "100%", + + [mediaQueries.mobile]: { + textAlign: "left", + }, +}); + +const Divider = styled("div", { + width: "1px", + height: "100%", + background: "linear-gradient(180deg, #FFF 0%, #22221F 100%)", + + [mediaQueries.tablet]: { + width: "100%", + height: "1px", + background: "#FFF", + }, +}); + +const LeftColumn = styled("div", { + display: "flex", + padding: "160px 115px 160px 160px", + flexDirection: "column", + alignItems: "center", + gap: "35px", + flexWrap: 'wrap', + alignContent: 'center', + position: "relative", + + [mediaQueries.tablet]: { + padding: "80px", + }, + + [mediaQueries.mobile]: { + maxWidth: "100%", + padding: "40px 15px 80px 15px", + }, +}); + +const CardBox = styled('div', { + display: 'flex', + maxWidth: '645px', + flexDirection: 'column', + alignItems: 'flex-start', + alignSelf: 'stretch', +}); + +const TopCard = styled('div', { + display: 'flex', + padding: '48px 32px', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'flex-start', + gap: '16px', + alignSelf: 'stretch', + borderRadius: '24px 24px 0px 0px', + border: '1px solid rgba(255, 255, 255, 0.10)', + background: 'linear-gradient(116deg, rgba(37, 37, 74, 0.30) 8.22%, rgba(89, 89, 200, 0.19) 54.99%, rgba(90, 90, 255, 0.09) 100.83%)', +}); + +const StyledLogo = styled(OverlayLogo, { + display: 'flex', + width: '208px', + height: '30px', + padding: '0.677px 0.923px 0.677px 0.106px', + justifyContent: 'center', + alignItems: 'center', + + [mediaQueries.mobile]: { + width: '156px', + height: '22.5px', + }, +}); + +const TopCardText = styled('div', { + fontFamily: 'Inter', + fontSize: '42px', + fontStyle: 'normal', + fontWeight: 500, + lineHeight: 'normal', + background: 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + backgroundClip: 'text', + WebkitBackgroundClip: 'text', + WebkitTextFillColor: 'transparent', +}); + +const BottomSection = styled('div', { + display: 'flex', + alignSelf: 'stretch', +}); + +const BottomLeftCard = styled('div', { + display: 'flex', + padding: '24px 32px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '20px', + flex: '1 0 0', + borderRadius: '0px 0px 0px 24px', + border: '1px solid rgba(255, 255, 255, 0.10)', + background: 'linear-gradient(116deg, rgba(37, 37, 74, 0.80) 8.22%, rgba(89, 89, 200, 0.52) 54.99%, rgba(90, 90, 255, 0.24) 100.83%)', +}); + +const BottomRightCard = styled('div', { + display: 'flex', + padding: '24px 32px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '20px', + flex: '1 0 0', + alignSelf: 'stretch', + borderRadius: '0px 0px 72px 0px', + border: '1px solid rgba(255, 255, 255, 0.10)', + background: 'linear-gradient(116deg, rgba(37, 37, 74, 0.30) 8.22%, rgba(89, 89, 200, 0.19) 54.99%, rgba(90, 90, 255, 0.09) 100.83%)', +}); + +const BottomCardText = styled('div', { + alignSelf: 'stretch', + maxWidth: '176px', + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '25.6px', +}); + +const HighlightedText = styled('span', { + background: 'linear-gradient(90deg, #FFC955 0%, #FF7CD5 100%)', + backgroundClip: 'text', + WebkitBackgroundClip: 'text', + WebkitTextFillColor: 'transparent', +}); + +const BoldLinkText = styled('a', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 700, + lineHeight: 'normal', + textDecoration: 'none', +}); + +const BackgroundSVG = styled('svg', { + width: '980px', + height: '469px', + position: 'absolute', + left: '-50px', + top: '0px', + zIndex: -1, + + [mediaQueries.tablet]: { + left: '-50px', + top: '0px', + }, + + [mediaQueries.mobile]: { + left: '0px', + top: '0px', + flexShrink: 0, + }, +}); + +const SectionContainer = styled('div', { + display: 'flex', + padding: '48px 160px 48px 80px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '21px', + alignSelf: 'stretch', + + [mediaQueries.tablet]: { + padding: '48px 80px', + alignItems: 'center', + } + +}); + +const LogoContainer = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '21px', + alignSelf: 'stretch', + + [mediaQueries.tablet]: { + flexDirection: 'row', + flexShrink: 0, + flexWrap: 'wrap', + justifyContent: 'center', + }, +}); + +const LogoLink = styled('a', { + display: 'flex', + width: '200px', + height: '70px', + padding: '20px 40px', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + gap: '10px', + borderRadius: '12px', + border: '1px solid rgba(255, 255, 255, 0.10)', + background: 'linear-gradient(116deg, rgba(57, 57, 57, 0.30) 8.22%, rgba(48, 48, 103, 0.19) 54.99%, rgba(57, 57, 57, 0.09) 100.83%)', +}); + +const TextLink = styled('a', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontStyle: 'normal', + fontWeight: 200, + lineHeight: 'normal', +}); + +const TextNoLink = styled('div', { + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontStyle: 'normal', + fontWeight: 200, + lineHeight: 'normal', +}); + +const VcSection: React.FC = () => { + const handleTradeNow = () => { + window.location.href = LINKS.trade; + }; + + return ( + + + + + + The Trade Everything Engine + + + + + The perpetuals DEX for exotic{" "} + assets. + + + Never before seen markets you can’t get anywhere else. + + + + + Only possible through Overlay’s novel token dynamics and risk + framework. + + + White Paper-> + + + + + Launch App + + + + + + + + + + + + + + +
+ + Backed by the best + + + + {vcLogoData.map((logoItem, index) => ( + + Logo + + ))} + + {vcTextData.map((textCard, index) => { + return textCard.url ? + + {textCard.text} + + : + + {textCard.text} + + })} + +
+
+ ); +}; + +export default VcSection; diff --git a/src/sections/WhitePaperSection.tsx b/src/sections/WhitePaperSection.tsx new file mode 100644 index 0000000..55ef0ca --- /dev/null +++ b/src/sections/WhitePaperSection.tsx @@ -0,0 +1,232 @@ +import React from 'react'; +import { styled } from '@stitches/react'; +import { LINKS, mediaQueries } from '../constants'; +import WhitePaperImage from '../assets/white-paper.png'; +import ExternalLinkIcon from '../assets/external-link-icon.svg'; + +const SectionWrapper = styled('div', { + display: 'grid', + gridTemplateColumns: '1fr 1px 3fr', + alignItems: 'stretch', + borderTop: '1px solid #FFF', + position: 'relative', + + [mediaQueries.mobile]: { + gridTemplateColumns: '1fr', + gridTemplateRows: 'auto 1px auto', + }, +}); + +const LeftColumn = styled('div', { + display: 'flex', + padding: '20px', + justifyContent: 'flex-end', + alignItems: 'flex-start', + borderBottom: '1px solid #FFF', + height: 'fit-content', + + [mediaQueries.mobile]: { + justifyContent: 'flex-start', + borderBottom: '1px solid #FFF', + }, +}); + +const LeftColumnText = styled('div', { + color: '#FFF', + textAlign: 'right', + fontFamily: 'Inter, sans-serif', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '20px', + maxWidth: '100%', + + [mediaQueries.mobile]: { + textAlign: 'left', + }, +}); + +const Divider = styled('div', { + width: '1px', + height: '100%', + background: 'linear-gradient(180deg, #FFF 0%, #22221F 100%)', + + [mediaQueries.mobile]: { + width: '100%', + height: '1px', + background: '#FFF', + }, +}); + +const RightColumn = styled('div', { + display: 'flex', + padding: '95px 160px 95px 95px', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '48px', + position: 'relative', + + [mediaQueries.tablet]: { + padding: '40px 20px', + }, + + [mediaQueries.mobile]: { + maxWidth: '100%', + padding: '30px 15px 80px 15px', + }, +}); + +const Frame = styled('div', { + display: 'flex', + alignItems: 'flex-start', + alignSelf: 'stretch', + gap: '48px', + + [mediaQueries.mobile]: { + gap: '16px', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const CardsContainer = styled('div', { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: '378px', + maxWidth: '40%', + height: 'auto', + + [mediaQueries.tablet]: { + maxWidth: '290px', + }, + + [mediaQueries.mobile]: { + width: '378px', + }, +}); + +const TextContent = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '19px', + flex: '1 0 0', + height: '100%', + justifyContent: 'space-between', +}); + +const Title = styled('h3', { + height: '50px', + alignSelf: 'stretch', + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '32px', + fontStyle: 'normal', + fontWeight: 300, + lineHeight: 'normal', + margin: '0', +}); + +const Description = styled('p', { + alignSelf: 'stretch', + color: '#FFF', + fontFamily: 'Inter, sans-serif', + fontSize: '18px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: '25px', + opacity: 0.4, + margin: '0', +}); + +const AuditLink = styled('a', { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + gap: '4px', + height: '22px', + flexShrink: 0, + color: '#12B4FF', + textAlign: 'center', + fontFamily: '"IBM Plex Mono", monospace', + fontSize: '16px', + fontStyle: 'normal', + fontWeight: 400, + lineHeight: 'normal', + textDecorationLine: 'underline', + cursor: 'pointer', +}); + +const LinkIcon = styled('img', { + width: '20px', + height: '20px', +}); + +const BackgroundSVG = styled('svg', { + width: '600px', + height: '400px', + position: 'absolute', + left: '110px', + bottom: '61px', + zIndex: -1, + + [mediaQueries.tablet]: { + position: 'absolute', + right: '1px', + top: '0px', + left: 'auto', + bottom: 'auto', + }, + + [mediaQueries.mobile]: { + flexShrink: 0, + }, +}); + +const WhitePaperSection: React.FC = () => { + return ( + + + White Paper + + + + + + white paper image + + + White Paper + + Overlay Market, the white paper would provide an in-depth explanation of how the platform operates, detailing its decentralized prediction market model, the role of OVL tokens, and the unique "up-only" perpetual trading mechanism. It typically includes technical details, economic models, and strategic goals to help users, investors, and developers understand the core features and long-term vision of the platform. + + + Read White Paper + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default WhitePaperSection; \ No newline at end of file