diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..66f8b2b Binary files /dev/null and b/.DS_Store differ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7d02ccf --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "idf.pythonInstallPath": "/Applications/miniconda3/bin/python" +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8747357..cc97301 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,13 @@ "name": "ai-company-website", "version": "0.1.0", "dependencies": { + "@react-three/drei": "9.88", + "@react-three/fiber": "8.15", "framer-motion": "^10.16.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "three": "^0.158.0" } }, "node_modules/@alloc/quick-lru": { @@ -2356,6 +2359,13 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@dimforge/rapier3d-compat": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz", + "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmmirror.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -2955,6 +2965,12 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, + "node_modules/@mediapipe/tasks-vision": { + "version": "0.10.8", + "resolved": "https://registry.npmmirror.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.8.tgz", + "integrity": "sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q==", + "license": "Apache-2.0" + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -3079,6 +3095,194 @@ } } }, + "node_modules/@react-spring/animated": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/animated/-/animated-9.6.1.tgz", + "integrity": "sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==", + "license": "MIT", + "dependencies": { + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/core/-/core-9.6.1.tgz", + "integrity": "sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.6.1", + "@react-spring/rafz": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/rafz/-/rafz-9.6.1.tgz", + "integrity": "sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/shared/-/shared-9.6.1.tgz", + "integrity": "sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/three": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/three/-/three-9.6.1.tgz", + "integrity": "sha512-Tyw2YhZPKJAX3t2FcqvpLRb71CyTe1GvT3V+i+xJzfALgpk10uPGdGaQQ5Xrzmok1340DAeg2pR/MCfaW7b8AA==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.6.1", + "@react-spring/core": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "three": ">=0.126" + } + }, + "node_modules/@react-spring/types": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@react-spring/types/-/types-9.6.1.tgz", + "integrity": "sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==", + "license": "MIT" + }, + "node_modules/@react-three/drei": { + "version": "9.88.17", + "resolved": "https://registry.npmmirror.com/@react-three/drei/-/drei-9.88.17.tgz", + "integrity": "sha512-WEYAkikzw0juG3F1aMy1AEeuRmsGmKytb8ETZARd4E6Q61Z1ceoL7fRvrnrXE/A2MHKgSzJgkckMEhKlbbJlyw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@mediapipe/tasks-vision": "0.10.8", + "@react-spring/three": "~9.6.1", + "@use-gesture/react": "^10.2.24", + "camera-controls": "^2.4.2", + "cross-env": "^7.0.3", + "detect-gpu": "^5.0.28", + "glsl-noise": "^0.0.0", + "lodash.clamp": "^4.0.3", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "maath": "^0.9.0", + "meshline": "^3.1.6", + "react-composer": "^5.0.3", + "react-merge-refs": "^1.1.0", + "stats-gl": "^1.0.4", + "stats.js": "^0.17.0", + "suspend-react": "^0.1.3", + "three-mesh-bvh": "^0.6.7", + "three-stdlib": "^2.28.0", + "troika-three-text": "^0.47.2", + "utility-types": "^3.10.0", + "uuid": "^9.0.1", + "zustand": "^3.5.13" + }, + "peerDependencies": { + "@react-three/fiber": ">=8.0", + "react": ">=18.0", + "react-dom": ">=18.0", + "three": ">=0.137" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/@react-three/drei/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@react-three/fiber": { + "version": "8.15.19", + "resolved": "https://registry.npmmirror.com/@react-three/fiber/-/fiber-8.15.19.tgz", + "integrity": "sha512-WbFU7T6485v8Onnp+JJnrzKFvvGP7OFyJmHlqXiXc2RcXl9Sax+ykJxiNwEXWjGjcgF9/KTfv0+pAVkP0vZlKg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/react-reconciler": "^0.26.7", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^1.0.6", + "react-reconciler": "^0.27.0", + "react-use-measure": "^2.1.1", + "scheduler": "^0.21.0", + "suspend-react": "^0.1.3", + "zustand": "^3.7.1" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=18.0", + "react-dom": ">=18.0", + "react-native": ">=0.64", + "three": ">=0.133" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@react-three/fiber/node_modules/scheduler": { + "version": "0.21.0", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.21.0.tgz", + "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3445,6 +3649,13 @@ "node": ">=10.13.0" } }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3524,6 +3735,12 @@ "@types/node": "*" } }, + "node_modules/@types/draco3d": { + "version": "1.4.10", + "resolved": "https://registry.npmmirror.com/@types/draco3d/-/draco3d-1.4.10.tgz", + "integrity": "sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==", + "license": "MIT" + }, "node_modules/@types/eslint": { "version": "8.56.12", "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.12.tgz", @@ -3676,6 +3893,12 @@ "@types/node": "*" } }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmmirror.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -3706,6 +3929,24 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, + "node_modules/@types/react": { + "version": "19.1.13", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-19.1.13.tgz", + "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-reconciler": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", + "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz", @@ -3772,12 +4013,41 @@ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "license": "MIT" }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmmirror.com/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/three": { + "version": "0.180.0", + "resolved": "https://registry.npmmirror.com/@types/three/-/three-0.180.0.tgz", + "integrity": "sha512-ykFtgCqNnY0IPvDro7h+9ZeLY+qjgUWv+qEvUt84grhenO60Hqd4hScHE7VTB9nOQ/3QM8lkbNE+4vKjEpUxKg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@dimforge/rapier3d-compat": "~0.12.0", + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": "*", + "@webgpu/types": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.22.0" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT" }, + "node_modules/@types/webxr": { + "version": "0.5.23", + "resolved": "https://registry.npmmirror.com/@types/webxr/-/webxr-0.5.23.tgz", + "integrity": "sha512-GPe4AsfOSpqWd3xA/0gwoKod13ChcfV67trvxaW2krUbgb9gxQjnCx8zGshzMl8LSHZlNH5gQ8LNScsDuc7nGQ==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz", @@ -4037,6 +4307,24 @@ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, + "node_modules/@use-gesture/core": { + "version": "10.3.1", + "resolved": "https://registry.npmmirror.com/@use-gesture/core/-/core-10.3.1.tgz", + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", + "license": "MIT" + }, + "node_modules/@use-gesture/react": { + "version": "10.3.1", + "resolved": "https://registry.npmmirror.com/@use-gesture/react/-/react-10.3.1.tgz", + "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "license": "MIT", + "dependencies": { + "@use-gesture/core": "10.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -4183,6 +4471,13 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webgpu/types": { + "version": "0.1.65", + "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.65.tgz", + "integrity": "sha512-cYrHab4d6wuVvDW5tdsfI6/o6vcLMDe6w2Citd1oS51Xxu2ycLCnVo4fqwujfKWijrZMInTJIKcXxteoy21nVA==", + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -5065,6 +5360,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/baseline-browser-mapping": { "version": "2.8.3", "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.3.tgz", @@ -5096,6 +5411,15 @@ "node": ">= 8.0.0" } }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", @@ -5260,6 +5584,30 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5374,6 +5722,15 @@ "node": ">= 6" } }, + "node_modules/camera-controls": { + "version": "2.10.1", + "resolved": "https://registry.npmmirror.com/camera-controls/-/camera-controls-2.10.1.tgz", + "integrity": "sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.126.1" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -5876,6 +6233,24 @@ "node": ">=10" } }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -6268,6 +6643,12 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "license": "MIT" }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6466,6 +6847,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-gpu": { + "version": "5.0.70", + "resolved": "https://registry.npmmirror.com/detect-gpu/-/detect-gpu-5.0.70.tgz", + "integrity": "sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==", + "license": "MIT", + "dependencies": { + "webgl-constants": "^1.1.1" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz", @@ -6681,6 +7071,12 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "license": "BSD-2-Clause" }, + "node_modules/draco3d": { + "version": "1.5.7", + "resolved": "https://registry.npmmirror.com/draco3d/-/draco3d-1.5.7.tgz", + "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", + "license": "Apache-2.0" + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -7872,6 +8268,13 @@ "bser": "2.1.1" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT", + "peer": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8592,6 +8995,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glsl-noise": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/glsl-noise/-/glsl-noise-0.0.0.tgz", + "integrity": "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==", + "license": "MIT" + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", @@ -9046,6 +9455,26 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", @@ -9799,6 +10228,27 @@ "node": ">= 0.4" } }, + "node_modules/its-fine": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/its-fine/-/its-fine-1.2.5.tgz", + "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", + "license": "MIT", + "dependencies": { + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" + } + }, + "node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmmirror.com/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", @@ -11057,6 +11507,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/lodash.clamp": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/lodash.clamp/-/lodash.clamp-4.0.3.tgz", + "integrity": "sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg==", + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -11075,6 +11531,20 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", + "deprecated": "This package is deprecated. Use destructuring assignment syntax instead.", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "deprecated": "This package is deprecated. Use destructuring assignment syntax instead.", + "license": "MIT" + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -11117,6 +11587,16 @@ "yallist": "^3.0.2" } }, + "node_modules/maath": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/maath/-/maath-0.9.0.tgz", + "integrity": "sha512-aAR8hoUqPxlsU8VOxkS9y37jhUzdUxM017NpCuxFU1Gk+nMaZASZxymZrV8LRSHzRk/watlbfyNKu6XPUhCFrQ==", + "license": "MIT", + "peerDependencies": { + "@types/three": ">=0.144.0", + "three": ">=0.144.0" + } + }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", @@ -11219,6 +11699,22 @@ "node": ">= 8" } }, + "node_modules/meshline": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/meshline/-/meshline-3.3.1.tgz", + "integrity": "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.137" + } + }, + "node_modules/meshoptimizer": { + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/meshoptimizer/-/meshoptimizer-0.22.0.tgz", + "integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==", + "license": "MIT", + "peer": true + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", @@ -13384,6 +13880,12 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13664,6 +14166,18 @@ "node": ">=14" } }, + "node_modules/react-composer": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/react-composer/-/react-composer-5.0.3.tgz", + "integrity": "sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmmirror.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -13794,6 +14308,41 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "license": "MIT" }, + "node_modules/react-merge-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz", + "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-reconciler": { + "version": "0.27.0", + "resolved": "https://registry.npmmirror.com/react-reconciler/-/react-reconciler-0.27.0.tgz", + "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.21.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/react-reconciler/node_modules/scheduler": { + "version": "0.21.0", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.21.0.tgz", + "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.11.0.tgz", @@ -13876,6 +14425,21 @@ } } }, + "node_modules/react-use-measure": { + "version": "2.1.7", + "resolved": "https://registry.npmmirror.com/react-use-measure/-/react-use-measure-2.1.7.tgz", + "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz", @@ -15129,6 +15693,18 @@ "node": ">= 0.8.0" } }, + "node_modules/stats-gl": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/stats-gl/-/stats-gl-1.0.7.tgz", + "integrity": "sha512-vZI82CjefSxLC1bjw36z28v0+QE9rJKymGlXtfWu+ipW70ZEAwa4EbO4LxluAfLfpqiaAS04NzpYBRLDeAwYWQ==", + "license": "MIT" + }, + "node_modules/stats.js": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/stats.js/-/stats.js-0.17.0.tgz", + "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==", + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", @@ -15549,6 +16125,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=17.0" + } + }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz", @@ -15935,6 +16520,44 @@ "node": ">=0.8" } }, + "node_modules/three": { + "version": "0.158.0", + "resolved": "https://registry.npmmirror.com/three/-/three-0.158.0.tgz", + "integrity": "sha512-TALj4EOpdDPF1henk2Q+s17K61uEAAWQ7TJB68nr7FKxqwyDr3msOt5IWdbGm4TaWKjrtWS8DJJWe9JnvsWOhQ==", + "license": "MIT" + }, + "node_modules/three-mesh-bvh": { + "version": "0.6.8", + "resolved": "https://registry.npmmirror.com/three-mesh-bvh/-/three-mesh-bvh-0.6.8.tgz", + "integrity": "sha512-EGebF9DZx1S8+7OZYNNTT80GXJZVf+UYXD/HyTg/e2kR/ApofIFfUS4ZzIHNnUVIadpnLSzM4n96wX+l7GMbnQ==", + "license": "MIT", + "peerDependencies": { + "three": ">= 0.151.0" + } + }, + "node_modules/three-stdlib": { + "version": "2.36.0", + "resolved": "https://registry.npmmirror.com/three-stdlib/-/three-stdlib-2.36.0.tgz", + "integrity": "sha512-kv0Byb++AXztEGsULgMAs8U2jgUdz6HPpAB/wDJnLiLlaWQX2APHhiTJIN7rqW+Of0eRgcp7jn05U1BsCP3xBA==", + "license": "MIT", + "dependencies": { + "@types/draco3d": "^1.4.0", + "@types/offscreencanvas": "^2019.6.4", + "@types/webxr": "^0.5.2", + "draco3d": "^1.4.1", + "fflate": "^0.6.9", + "potpack": "^1.0.1" + }, + "peerDependencies": { + "three": ">=0.128.0" + } + }, + "node_modules/three-stdlib/node_modules/fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "license": "MIT" + }, "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmmirror.com/throat/-/throat-6.0.2.tgz", @@ -16010,6 +16633,36 @@ "node": ">=8" } }, + "node_modules/troika-three-text": { + "version": "0.47.2", + "resolved": "https://registry.npmmirror.com/troika-three-text/-/troika-three-text-0.47.2.tgz", + "integrity": "sha512-qylT0F+U7xGs+/PEf3ujBdJMYWbn0Qci0kLqI5BJG2kW1wdg4T1XSxneypnF05DxFqJhEzuaOR9S2SjiyknMng==", + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.47.2", + "troika-worker-utils": "^0.47.2", + "webgl-sdf-generator": "1.1.1" + }, + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-three-utils": { + "version": "0.47.2", + "resolved": "https://registry.npmmirror.com/troika-three-utils/-/troika-three-utils-0.47.2.tgz", + "integrity": "sha512-/28plhCxfKtH7MSxEGx8e3b/OXU5A0xlwl+Sbdp0H8FXUHKZDoksduEKmjQayXYtxAyuUiCRunYIv/8Vi7aiyg==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-worker-utils": { + "version": "0.47.2", + "resolved": "https://registry.npmmirror.com/troika-worker-utils/-/troika-worker-utils-0.47.2.tgz", + "integrity": "sha512-mzss4MeyzUkYBppn4x5cdAqrhBHFEuVmMMgLMTyFV23x6GvQMyo+/R5E5Lsbrt7WSt5RfvewjcwD1DChRTA9lA==", + "license": "MIT" + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", @@ -16212,9 +16865,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "4.9.5", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "license": "Apache-2.0", "peer": true, "bin": { @@ -16222,7 +16875,7 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=14.17" + "node": ">=4.2.0" } }, "node_modules/unbox-primitive": { @@ -16417,6 +17070,15 @@ "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "license": "MIT" }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmmirror.com/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", @@ -16517,6 +17179,17 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/webgl-constants": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/webgl-constants/-/webgl-constants-1.1.1.tgz", + "integrity": "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==" + }, + "node_modules/webgl-sdf-generator": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", + "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==", + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -17397,6 +18070,23 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/zustand/-/zustand-3.7.2.tgz", + "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "license": "MIT", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 49c779c..4b977ea 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,13 @@ "version": "0.1.0", "private": true, "dependencies": { + "@react-three/drei": "9.88", + "@react-three/fiber": "8.15", + "framer-motion": "^10.16.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "framer-motion": "^10.16.4", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "three": "^0.158.0" }, "scripts": { "start": "react-scripts start", diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 0000000..bc4ef83 Binary files /dev/null and b/public/.DS_Store differ diff --git a/public/3dV2/.DS_Store b/public/3dV2/.DS_Store new file mode 100644 index 0000000..3f5eaa1 Binary files /dev/null and b/public/3dV2/.DS_Store differ diff --git a/public/3dmodo/.DS_Store b/public/3dmodo/.DS_Store new file mode 100644 index 0000000..43a0487 Binary files /dev/null and b/public/3dmodo/.DS_Store differ diff --git a/public/AItime.svg b/public/AItime.svg new file mode 100644 index 0000000..c8e8660 --- /dev/null +++ b/public/AItime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css index c066b18..80c0067 100644 --- a/src/App.css +++ b/src/App.css @@ -1,3 +1,28 @@ +/* 字体导入 */ +@font-face { + font-family: 'ZiHunXingHei'; + src: url('./asset/font/ZiHunXingHei(ShangYongXuShouQuan)-2.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'TianYingZhangKaiShu'; + src: url('./asset/font/方正字迹-佩安硬笔简体.TTF') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'meiheijian'; + src: url('./asset/font/腾祥魅黑简.TTF') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + /* 极简设计变量 */ :root { --primary-color: #00f5d4; @@ -31,6 +56,14 @@ body, html { line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + /* 移动端优化 */ + -webkit-tap-highlight-color: transparent; + touch-action: manipulation; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } /* 主应用容器 */ @@ -176,7 +209,15 @@ body, html { transform: scale(1.05); } +.logo-image { + width: 80%; + height: 100%; + object-fit: contain; + border-radius: 6px; +} + .logo-text { + font-family: 'ZiHunXingHei', var(--font-sans); font-size: 1.3rem; font-weight: 600; color: var(--text-primary); @@ -335,57 +376,87 @@ body, html { left: 0; width: 100%; height: 100vh; - background: rgba(10, 15, 28, 0.95); - backdrop-filter: blur(20px) saturate(180%); - -webkit-backdrop-filter: blur(20px) saturate(180%); + background: rgba(10, 15, 28, 0.98); + backdrop-filter: blur(25px) saturate(180%); + -webkit-backdrop-filter: blur(25px) saturate(180%); z-index: 999; - padding-top: 6rem; + padding-top: 5rem; + overflow-y: auto; } .mobile-menu-content { max-width: 400px; margin: 0 auto; - padding: 2rem; + padding: 1.5rem; + min-height: calc(100vh - 5rem); + display: flex; + flex-direction: column; + justify-content: flex-start; } .mobile-nav-item { display: flex; flex-direction: column; align-items: flex-start; - padding: 1.5rem 2rem; + padding: 1.5rem 1.8rem; margin-bottom: 1rem; background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 16px; + border-radius: 20px; cursor: pointer; - transition: var(--transition-smooth); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; +} + +.mobile-nav-item::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(0, 245, 212, 0.1), transparent); + transition: left 0.6s ease; +} + +.mobile-nav-item:hover::before { + left: 100%; } .mobile-nav-item:hover { background: rgba(255, 255, 255, 0.1); - border-color: rgba(0, 245, 212, 0.3); - transform: translateX(10px); + border-color: rgba(0, 245, 212, 0.4); + transform: translateX(15px) scale(1.02); + box-shadow: 0 8px 25px rgba(0, 245, 212, 0.15); } .mobile-nav-item.active { - background: rgba(0, 245, 212, 0.1); - border-color: rgba(0, 245, 212, 0.4); + background: rgba(0, 245, 212, 0.12); + border-color: rgba(0, 245, 212, 0.5); + box-shadow: 0 8px 30px rgba(0, 245, 212, 0.2); } .mobile-nav-main { - font-size: 1.4rem; + font-size: 1.3rem; font-weight: 600; color: var(--text-primary); - margin-bottom: 0.3rem; + margin-bottom: 0.4rem; + position: relative; + z-index: 2; + transition: var(--transition-fast); } .mobile-nav-sub { - font-size: 0.9rem; + font-size: 0.85rem; font-weight: 300; color: var(--text-secondary); text-transform: uppercase; - letter-spacing: 0.1em; + letter-spacing: 0.12em; + position: relative; + z-index: 2; + transition: var(--transition-fast); } .mobile-nav-item:hover .mobile-nav-main, @@ -415,6 +486,7 @@ body, html { } .hero-main-title { + font-family: 'TianYingZhangKaiShu', var(--font-sans); font-size: 4.5rem; font-weight: 300; color: var(--text-primary); @@ -466,33 +538,50 @@ body, html { justify-content: center; height: 100%; perspective: 1000px; + position: relative; +} + +.hero-background-video { + position: absolute; + top: 0; + left: -0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: 0; + opacity: 0.7; + border-radius: 20px; + pointer-events: none; } .geometric-container { position: relative; - width: 400px; - height: 400px; + width: 500px; + height: 500px; display: flex; align-items: center; justify-content: center; + z-index: 10; } -.cube-main { - width: 200px; - height: 200px; +/* .cube-main { + width: 180px; + height: 180px; position: relative; transform-style: preserve-3d; - transform: rotateX(-15deg) rotateY(15deg); -} + transform: rotateX(-20deg) rotateY(25deg); + margin-left: -1800px; + margin-top: -30px; +} */ .cube-small { - width: 80px; - height: 80px; + width: 60px; + height: 60px; position: absolute; - top: -40px; - right: -40px; + top: -80px; + right: -160px; transform-style: preserve-3d; - transform: rotateX(25deg) rotateY(-25deg); + transform: rotateX(35deg) rotateY(-35deg); } .cube-face { @@ -505,54 +594,92 @@ body, html { } .cube-main .cube-face.front { - transform: translateZ(100px); + transform: translateZ(100%); background: rgba(0, 245, 212, 0.15); } .cube-main .cube-face.back { - transform: rotateY(180deg) translateZ(100px); + transform: rotateY(180deg) translateZ(90px); } .cube-main .cube-face.right { - transform: rotateY(90deg) translateZ(100px); + transform: rotateY(90deg) translateZ(90px); background: rgba(0, 245, 212, 0.08); } .cube-main .cube-face.left { - transform: rotateY(-90deg) translateZ(100px); + transform: rotateY(-90deg) translateZ(90px); } .cube-main .cube-face.top { - transform: rotateX(90deg) translateZ(100px); + transform: rotateX(90deg) translateZ(90px); background: rgba(0, 245, 212, 0.12); } .cube-main .cube-face.bottom { - transform: rotateX(-90deg) translateZ(100px); + transform: rotateX(-90deg) translateZ(90px); } .cube-small .cube-face.front { - transform: translateZ(40px); + transform: translateZ(30px); } .cube-small .cube-face.back { - transform: rotateY(180deg) translateZ(40px); + transform: rotateY(180deg) translateZ(30px); } .cube-small .cube-face.right { - transform: rotateY(90deg) translateZ(40px); + transform: rotateY(90deg) translateZ(30px); } .cube-small .cube-face.left { - transform: rotateY(-90deg) translateZ(40px); + transform: rotateY(-90deg) translateZ(30px); } .cube-small .cube-face.top { - transform: rotateX(90deg) translateZ(40px); + transform: rotateX(90deg) translateZ(30px); } .cube-small .cube-face.bottom { - transform: rotateX(-90deg) translateZ(40px); + transform: rotateX(-90deg) translateZ(30px); +} + +/* 浮动圆环 */ +.floating-ring { + position: absolute; + top: -100px; + left: -350px; + width: 120px; + height: 120px; + border: 3px solid rgba(0, 245, 212, 0.4); + border-radius: 50%; + border-top-color: transparent; + border-left-color: transparent; + z-index: 5; +} + +/* 浮动粒子 */ +.floating-particle { + position: absolute; + width: 8px; + height: 8px; + background: var(--primary-color); + border-radius: 50%; + box-shadow: 0 0 20px rgba(0, 245, 212, 0.6); + z-index: 8; +} + +.particle-1 { + top: 50px; + left: -80px; +} + +.particle-2 { + bottom: 60px; + right: -90px; + width: 6px; + height: 6px; + background: rgba(0, 245, 212, 0.7); } .hero-progress { @@ -612,6 +739,7 @@ body, html { } .product-main-title { + font-family: 'meiheijian', var(--font-sans); font-size: 4.5rem; font-weight: 300; color: var(--text-primary); @@ -620,6 +748,28 @@ body, html { margin: 0; } +/* AItime.svg 标题图(桌面&移动端) */ +.title-svg { + width: 520px; + max-width: 100%; + height: auto; + display: block; +} + +@media (max-width: 768px) { + .title-svg { + width: 200px; + margin: 0 auto; + } +} + +@media (max-width: 480px) { + .title-svg { + width: 120px; + + } +} + .product-quote { display: flex; gap: 1rem; @@ -637,8 +787,8 @@ body, html { .visual-container { position: relative; - width: 400px; - height: 400px; + width: 800px; + height: 800px; display: flex; align-items: center; justify-content: center; @@ -797,6 +947,91 @@ body, html { } /* 团队页面 */ +.team-section-minimal { + position: relative; + width: 100%; + height: 100vh; + display: grid; + grid-template-columns: 1fr 1fr; + align-items: center; + padding: 0 5rem; + gap: 4rem; +} + +.team-content { + display: flex; + flex-direction: column; + gap: 2rem; + max-width: 600px; +} + +.team-main-title { + font-family: 'meiheijian', var(--font-sans); + font-size: 4.5rem; + font-weight: 300; + color: var(--text-primary); + line-height: 1.1; + letter-spacing: -0.02em; + margin: 0; +} + +.team-quote { + display: flex; + gap: 1rem; + align-items: flex-start; + margin-top: 1rem; +} + +.team-visual { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + perspective: 1000px; +} + +.team-visual-container { + position: relative; + width: 400px; + height: 400px; + display: flex; + align-items: center; + justify-content: center; +} + +.team-visual-element-1 { + width: 180px; + height: 180px; + background: rgba(0, 245, 212, 0.1); + border: 1px solid rgba(0, 245, 212, 0.3); + border-radius: 50%; + backdrop-filter: blur(10px); + position: absolute; + transform-style: preserve-3d; +} + +.team-visual-element-2 { + width: 120px; + height: 120px; + background: rgba(0, 245, 212, 0.15); + border: 1px solid rgba(0, 245, 212, 0.4); + border-radius: 8px; + backdrop-filter: blur(10px); + position: absolute; + top: -60px; + right: -60px; + transform-style: preserve-3d; +} + +.team-progress { + position: absolute; + bottom: 3rem; + left: 5rem; + display: flex; + align-items: center; + gap: 1rem; +} + .team-section { width: 100%; max-width: 1400px; @@ -1301,6 +1536,16 @@ body, html { padding: 1rem 0.5rem; } +/* 移动端页面指示器优化 */ +@media (max-width: 768px) { + .section-indicators { + right: 1rem; + padding: 0.8rem 0.4rem; + gap: 0.8rem; + border-radius: 15px; + } +} + .indicator { width: 12px; height: 12px; @@ -1348,6 +1593,147 @@ body, html { transform: scale(1.3); } +/* 极简科技风"了解更多"按钮 */ +.learn-more-btn { + position: relative; + display: inline-flex; + align-items: center; + gap: 1rem; + padding: 1rem 2.5rem; + background: transparent; + border: 2px solid rgba(0, 245, 212, 0.3); + border-radius: 50px; + color: var(--text-primary); + font-family: var(--font-sans); + font-size: 0.95rem; + font-weight: 500; + letter-spacing: 0.02em; + cursor: pointer; + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + overflow: hidden; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + margin-top: 1.5rem; + transform-style: preserve-3d; +} + +.learn-more-btn::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(0, 245, 212, 0.1), transparent); + transition: left 0.6s ease; + z-index: 1; +} + +.learn-more-btn:hover::before { + left: 100%; +} + +.learn-more-btn:hover { + border-color: rgba(0, 245, 212, 0.6); + background: rgba(0, 245, 212, 0.05); + color: var(--primary-color); + transform: translateY(-3px) scale(1.02); +} + +.learn-more-btn:active { + transform: translateY(-1px) scale(0.98); +} + +.btn-text { + position: relative; + z-index: 2; + transition: all 0.3s ease; +} + +.btn-glow { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 100%; + height: 100%; + background: radial-gradient(circle, rgba(0, 245, 212, 0.1) 0%, transparent 70%); + border-radius: 50px; + opacity: 0; + transition: opacity 0.4s ease; + z-index: 0; +} + +.learn-more-btn:hover .btn-glow { + opacity: 1; +} + +.btn-arrow { + position: relative; + z-index: 2; + font-size: 1.1rem; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transform: translateX(0); +} + +.learn-more-btn:hover .btn-arrow { + transform: translateX(5px); + color: var(--primary-color); +} + +/* 特殊发光效果 */ +.learn-more-btn::after { + content: ''; + position: absolute; + top: -2px; + left: -2px; + right: -2px; + bottom: -2px; + background: linear-gradient(45deg, + rgba(0, 245, 212, 0.1) 0%, + rgba(0, 212, 170, 0.05) 25%, + rgba(0, 245, 212, 0.1) 50%, + rgba(0, 212, 170, 0.05) 75%, + rgba(0, 245, 212, 0.1) 100%); + border-radius: 50px; + opacity: 0; + transition: opacity 0.4s ease; + z-index: -1; +} + +.learn-more-btn:hover::after { + opacity: 1; + animation: glow-pulse 2s ease-in-out infinite; +} + +@keyframes glow-pulse { + 0%, 100% { + opacity: 0.3; + transform: scale(1); + } + 50% { + opacity: 0.6; + transform: scale(1.02); + } +} + +/* 响应式按钮调整 */ +@media (max-width: 768px) { + .learn-more-btn { + padding: 0.9rem 2rem; + font-size: 0.9rem; + margin-top: 1.2rem; + } + + .btn-arrow { + font-size: 1rem; + } + + .learn-more-btn:hover .btn-arrow { + transform: translateX(3px); + } +} + /* 响应式设计 */ @media (max-width: 1200px) { .products-grid, @@ -1365,6 +1751,112 @@ body, html { grid-template-columns: 1fr; gap: 2rem; } + + .case-section { + margin-top: 5rem; + padding: 0 1.5rem; + } + + .case-header h2 { + font-size: 2rem; + } + + .case-navigation { + margin-bottom: 2rem; + } + + .case-nav-item { + padding: 1.2rem 1.5rem; + margin-bottom: 0.8rem; + border-radius: 12px; + } + + .nav-icon { + font-size: 1.5rem; + } + + .nav-content h4 { + font-size: 1rem; + } + + .nav-category { + font-size: 0.8rem; + } + + .case-details { + padding: 2rem 1.5rem; + } + + .case-title { + font-size: 1.5rem; + } + + .case-description { + font-size: 1rem; + } + + .contact-section { + margin-top: 5rem; + padding: 0 1.5rem; + } + + .contact-header h2 { + font-size: 2rem; + } + + .contact-methods { + gap: 1rem; + margin-bottom: 2rem; + } + + .contact-method { + padding: 1.5rem; + flex-direction: column; + text-align: center; + gap: 1rem; + } + + .method-icon { + font-size: 2rem; + } + + .method-content h4 { + font-size: 1.1rem; + } + + .method-value { + font-size: 1rem; + } + + .method-description { + font-size: 0.85rem; + } + + .contact-form { + padding: 2rem 1.5rem; + } + + .form-group input, + .form-group select, + .form-group textarea { + padding: 0.9rem; + font-size: 1rem; + } + + .form-submit { + padding: 1rem; + font-size: 1rem; + } + + .social-links { + justify-content: center; + } + + .social-link { + padding: 0.7rem 1rem; + font-size: 0.9rem; + min-width: 70px; + } .navigation-glass { padding: 1.2rem 2rem; @@ -1390,6 +1882,22 @@ body, html { @media (max-width: 768px) { .navigation-glass { padding: 1rem 1.5rem; + backdrop-filter: blur(15px) saturate(180%); + -webkit-backdrop-filter: blur(15px) saturate(180%); + } + + .logo-glass { + gap: 0.5rem; + } + + .logo-icon-glass { + width: 32px; + height: 32px; + font-size: 1.1rem; + } + + .logo-text { + font-size: 1.1rem; } .nav-menu-glass { @@ -1398,6 +1906,11 @@ body, html { .hamburger-glass { display: flex; + padding: 10px; + } + + .hamburger-line { + width: 18px; } .section-title h1 { @@ -1421,48 +1934,259 @@ body, html { } .hero-section-minimal, - .product-section-minimal { + .product-section-minimal, + .team-section-minimal { grid-template-columns: 1fr; - padding: 0 2rem; - gap: 2rem; + padding: 5rem 1.5rem 3rem 1.5rem; + gap: 3rem; + text-align: center; + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .hero-left, + .product-content, + .team-content { + max-width: 100%; + order: 1; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 1.5rem; + } + + .hero-right, + .product-visual, + .team-visual { + order: 2; + margin-top: 2rem; } .hero-main-title, - .product-main-title { - font-size: 3rem; + .product-main-title, + .team-main-title { + font-size: 2.5rem; + line-height: 1.2; + text-align: center; + margin-bottom: 1rem; + } + + /* 移动端下移主标题 */ + .hero-main-title { + margin-top: 1.5rem; } .hero-subtitle { - font-size: 1.8rem; + font-size: 1.5rem; + line-height: 1.3; + text-align: center; + margin-bottom: 1rem; + } + + .hero-quote, + .product-quote, + .team-quote { + max-width: 100%; + text-align: center; + gap: 0; + align-items: center; + margin-top: 1.5rem; + } + + .quote-line { + display: none; + } + + .hero-quote p, + .product-quote p, + .team-quote p { + font-size: 0.95rem; + line-height: 1.6; + text-align: center; + margin: 0; + max-width: 100%; } .geometric-container, - .visual-container { + .visual-container, + .team-visual-container { + width: 340px; + height: 340px; + margin: 0 auto; + } + + .cube-main { + width: 120px; + height: 120px; + } + + .cube-small { + width: 50px; + height: 50px; + top: -25px; + right: -25px; + } + + .visual-element-1, + .team-visual-element-1 { + width: 120px; + height: 120px; + } + + .visual-element-2, + .team-visual-element-2 { + width: 80px; + height: 80px; + top: -40px; + right: -40px; + } + + .hero-progress, + .product-progress, + .team-progress { + position: relative; + bottom: auto; + left: auto; + margin-top: 2rem; + width: 100%; + max-width: 280px; + order: 3; + } + + .progress-bar { + width: 100%; + } + + .progress-info { + justify-content: center; + margin-top: 0.5rem; + } +} + +/* 小屏幕设备额外优化 */ +@media (max-width: 480px) { + .navigation-glass { + padding: 0.8rem 1rem; + } + + .logo-text { + font-size: 1rem; + display: none; /* 超小屏幕隐藏logo文字,只保留图标 */ + } + + .logo-icon-glass { + width: 28px; + height: 28px; + } + + .section-title h1 { + font-size: 2rem; + } + + .hero-main-title, + .product-main-title, + .team-main-title { + font-size: 2rem; + line-height: 1.1; + } + + /* 超小屏进一步下移主标题 */ + .hero-main-title { + margin-top: 2rem; + } + + .hero-subtitle { + font-size: 1.3rem; + } + + .hero-section-minimal, + .product-section-minimal, + .team-section-minimal { + padding: 4rem 1rem 2rem 1rem; + gap: 2rem; + } + + .geometric-container, + .visual-container, + .team-visual-container { width: 300px; height: 300px; } +.section-title .subtitle { + opacity: 0.5; + margin-top: 0.2rem; +} + + +.hero-main-title { + margin-top: 4rem; + } + .cube-main { - width: 150px; - height: 150px; + width: 100px; + height: 100px; } - + .cube-small { - width: 60px; - height: 60px; - top: -30px; - right: -30px; + width: 40px; + height: 40px; + top: -20px; + right: -20px; } - - .visual-element-1 { - width: 140px; - height: 140px; + + .visual-element-1, + .team-visual-element-1 { + width: 100px; + height: 100px; } - - .visual-element-2 { - width: 90px; - height: 90px; - top: -45px; - right: -45px; + + .visual-element-2, + .team-visual-element-2 { + width: 65px; + height: 65px; + top: -32px; + right: -32px; + } + + .mobile-menu-content { + padding: 1rem; + } + + .mobile-nav-item { + padding: 1.2rem 1.5rem; + } + + .mobile-nav-main { + font-size: 1.2rem; + } + + .case-section, + .contact-section { + padding: 0 1rem; + } + + .case-details, + .contact-form { + padding: 1.5rem 1rem; + } + + .contact-method { + padding: 1.2rem; + } + + .section-indicators { + right: 0.5rem; + padding: 0.6rem 0.3rem; + gap: 0.6rem; + } + + .indicator { + width: 10px; + height: 10px; } } diff --git a/src/App.js b/src/App.js index 8f53afa..1151bbb 100644 --- a/src/App.js +++ b/src/App.js @@ -22,7 +22,7 @@ const App = () => { const sections = [ { id: 'hero', component: HeroSection, title: '发现新视界', subtitle: 'Discover New Horizons' }, - { id: 'product', component: ProductSection, title: 'AI产品', subtitle: 'Innovative Solutions' }, + { id: 'product', component: ProductSection, title: 'AI产品', subtitle: 'AI hardware, AI solution' }, { id: 'team', component: TeamSection, title: '专业团队', subtitle: 'Expert Team' }, { id: 'cases', component: CaseSection, title: '成功案例', subtitle: 'Success Stories' }, { id: 'contact', component: ContactSection, title: '联系我们', subtitle: 'Get In Touch' } @@ -36,6 +36,8 @@ const App = () => { useEffect(() => { let timeout; + let touchStartY = 0; + let touchEndY = 0; const handleWheel = (e) => { e.preventDefault(); @@ -74,14 +76,66 @@ const App = () => { }, 1200); // 增加到1.2秒,与动画时间匹配 }; + // 触摸事件处理 + const handleTouchStart = (e) => { + touchStartY = e.touches[0].clientY; + }; + + const handleTouchMove = (e) => { + e.preventDefault(); + }; + + const handleTouchEnd = (e) => { + if (isScrollingRef.current) { + return; + } + + touchEndY = e.changedTouches[0].clientY; + const deltaY = touchStartY - touchEndY; + const minSwipeDistance = 50; // 最小滑动距离 + + if (Math.abs(deltaY) > minSwipeDistance) { + isScrollingRef.current = true; + setIsScrolling(true); + + let newSection = currentSectionRef.current; + if (deltaY > 0 && currentSectionRef.current < sections.length - 1) { + // 向上滑动,下一页 + newSection = currentSectionRef.current + 1; + } else if (deltaY < 0 && currentSectionRef.current > 0) { + // 向下滑动,上一页 + newSection = currentSectionRef.current - 1; + } + + if (newSection !== currentSectionRef.current) { + setCurrentSection(newSection); + } + + if (timeout) { + clearTimeout(timeout); + } + + timeout = setTimeout(() => { + isScrollingRef.current = false; + setIsScrolling(false); + }, 1200); + } + }; + const container = containerRef.current; if (container) { container.addEventListener('wheel', handleWheel, { passive: false }); + container.addEventListener('touchstart', handleTouchStart, { passive: true }); + container.addEventListener('touchmove', handleTouchMove, { passive: false }); + container.addEventListener('touchend', handleTouchEnd, { passive: true }); } return () => { if (container) { container.removeEventListener('wheel', handleWheel); + container.removeEventListener('touchstart', handleTouchStart); + container.removeEventListener('touchmove', handleTouchMove); + container.removeEventListener('touchend', handleTouchEnd); } if (timeout) { clearTimeout(timeout); diff --git a/src/asset/logo-bai.png b/src/asset/logo-bai.png new file mode 100644 index 0000000..c2396e0 Binary files /dev/null and b/src/asset/logo-bai.png differ diff --git a/src/asset/logo-bai1.png b/src/asset/logo-bai1.png new file mode 100644 index 0000000..64dd20e Binary files /dev/null and b/src/asset/logo-bai1.png differ diff --git a/src/components/HeroSection.js b/src/components/HeroSection.js index 193c55f..3907f41 100644 --- a/src/components/HeroSection.js +++ b/src/components/HeroSection.js @@ -17,7 +17,7 @@ const HeroSection = ({ isActive }) => { animate={isActive ? { opacity: 1, y: 0 } : {}} transition={{ duration: 0.8, delay: 0.6 }} > - 推动变革 + 推动线下AI变革 { animate={isActive ? { opacity: 1, y: 0 } : {}} transition={{ duration: 0.8, delay: 0.8 }} > - 通过 创新的 + 通过 线下硬件
- 人工智能技术 + 普及人工智能技术
{ >

- 通过利用战略洞察和行业网络, + 通过软硬件一体的整体解决方案,
- Radiant 作为增长催化剂,为我们的 + 量迹AI用普惠的解决方案,
- 投资组合公司和投资者创造卓越价值。 + 让人类进入AI时代

+ + + 了解更多 +
+
+
{/* 右侧几何形状 */} @@ -55,45 +72,91 @@ const HeroSection = ({ isActive }) => { animate={isActive ? { opacity: 1, scale: 1 } : {}} transition={{ duration: 1.5, delay: 0.5 }} > + {/* 背景视频 */} +