Index: frontend/package-lock.json
===================================================================
--- frontend/package-lock.json	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/package-lock.json	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -9,7 +9,12 @@
       "version": "0.0.0",
       "dependencies": {
+        "@emotion/react": "^11.14.0",
+        "@emotion/styled": "^11.14.0",
+        "@mui/icons-material": "^7.1.2",
+        "@mui/material": "^7.1.2",
         "@splinetool/react-spline": "^4.0.0",
         "@tailwindcss/vite": "^4.1.10",
         "axios": "^1.10.0",
+        "framer-motion": "^12.19.1",
         "lucide-react": "^0.515.0",
         "react": "^19.1.0",
@@ -54,5 +59,4 @@
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
       "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -110,5 +114,4 @@
       "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
       "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -144,5 +147,4 @@
       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
       "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -186,5 +188,4 @@
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
       "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -196,5 +197,4 @@
       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
       "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -230,5 +230,4 @@
       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
       "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -274,9 +273,17 @@
       }
     },
+    "node_modules/@babel/runtime": {
+      "version": "7.27.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
+      "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/template": {
       "version": "7.27.2",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
       "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -293,5 +300,4 @@
       "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
       "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -312,5 +318,4 @@
       "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
       "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -322,5 +327,4 @@
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
       "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -331,4 +335,156 @@
         "node": ">=6.9.0"
       }
+    },
+    "node_modules/@emotion/babel-plugin": {
+      "version": "11.13.5",
+      "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+      "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.16.7",
+        "@babel/runtime": "^7.18.3",
+        "@emotion/hash": "^0.9.2",
+        "@emotion/memoize": "^0.9.0",
+        "@emotion/serialize": "^1.3.3",
+        "babel-plugin-macros": "^3.1.0",
+        "convert-source-map": "^1.5.0",
+        "escape-string-regexp": "^4.0.0",
+        "find-root": "^1.1.0",
+        "source-map": "^0.5.7",
+        "stylis": "4.2.0"
+      }
+    },
+    "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/cache": {
+      "version": "11.14.0",
+      "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+      "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+      "license": "MIT",
+      "dependencies": {
+        "@emotion/memoize": "^0.9.0",
+        "@emotion/sheet": "^1.4.0",
+        "@emotion/utils": "^1.4.2",
+        "@emotion/weak-memoize": "^0.4.0",
+        "stylis": "4.2.0"
+      }
+    },
+    "node_modules/@emotion/hash": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+      "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/is-prop-valid": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
+      "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
+      "license": "MIT",
+      "dependencies": {
+        "@emotion/memoize": "^0.9.0"
+      }
+    },
+    "node_modules/@emotion/memoize": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+      "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/react": {
+      "version": "11.14.0",
+      "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
+      "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.18.3",
+        "@emotion/babel-plugin": "^11.13.5",
+        "@emotion/cache": "^11.14.0",
+        "@emotion/serialize": "^1.3.3",
+        "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+        "@emotion/utils": "^1.4.2",
+        "@emotion/weak-memoize": "^0.4.0",
+        "hoist-non-react-statics": "^3.3.1"
+      },
+      "peerDependencies": {
+        "react": ">=16.8.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@emotion/serialize": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+      "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+      "license": "MIT",
+      "dependencies": {
+        "@emotion/hash": "^0.9.2",
+        "@emotion/memoize": "^0.9.0",
+        "@emotion/unitless": "^0.10.0",
+        "@emotion/utils": "^1.4.2",
+        "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@emotion/sheet": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+      "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/styled": {
+      "version": "11.14.0",
+      "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
+      "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.18.3",
+        "@emotion/babel-plugin": "^11.13.5",
+        "@emotion/is-prop-valid": "^1.3.0",
+        "@emotion/serialize": "^1.3.3",
+        "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+        "@emotion/utils": "^1.4.2"
+      },
+      "peerDependencies": {
+        "@emotion/react": "^11.0.0-rc.0",
+        "react": ">=16.8.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@emotion/unitless": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
+      "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+      "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": ">=16.8.0"
+      }
+    },
+    "node_modules/@emotion/utils": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+      "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
+      "license": "MIT"
+    },
+    "node_modules/@emotion/weak-memoize": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+      "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+      "license": "MIT"
     },
     "node_modules/@esbuild/aix-ppc64": {
@@ -1009,4 +1165,237 @@
       }
     },
+    "node_modules/@mui/core-downloads-tracker": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.2.tgz",
+      "integrity": "sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      }
+    },
+    "node_modules/@mui/icons-material": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.2.tgz",
+      "integrity": "sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@mui/material": "^7.1.2",
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/material": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.1.2.tgz",
+      "integrity": "sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1",
+        "@mui/core-downloads-tracker": "^7.1.2",
+        "@mui/system": "^7.1.1",
+        "@mui/types": "^7.4.3",
+        "@mui/utils": "^7.1.1",
+        "@popperjs/core": "^2.11.8",
+        "@types/react-transition-group": "^4.4.12",
+        "clsx": "^2.1.1",
+        "csstype": "^3.1.3",
+        "prop-types": "^15.8.1",
+        "react-is": "^19.1.0",
+        "react-transition-group": "^4.4.5"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@emotion/react": "^11.5.0",
+        "@emotion/styled": "^11.3.0",
+        "@mui/material-pigment-css": "^7.1.1",
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@emotion/react": {
+          "optional": true
+        },
+        "@emotion/styled": {
+          "optional": true
+        },
+        "@mui/material-pigment-css": {
+          "optional": true
+        },
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/private-theming": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.1.tgz",
+      "integrity": "sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1",
+        "@mui/utils": "^7.1.1",
+        "prop-types": "^15.8.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/styled-engine": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.1.tgz",
+      "integrity": "sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1",
+        "@emotion/cache": "^11.13.5",
+        "@emotion/serialize": "^1.3.3",
+        "@emotion/sheet": "^1.4.0",
+        "csstype": "^3.1.3",
+        "prop-types": "^15.8.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@emotion/react": "^11.4.1",
+        "@emotion/styled": "^11.3.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@emotion/react": {
+          "optional": true
+        },
+        "@emotion/styled": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/system": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz",
+      "integrity": "sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1",
+        "@mui/private-theming": "^7.1.1",
+        "@mui/styled-engine": "^7.1.1",
+        "@mui/types": "^7.4.3",
+        "@mui/utils": "^7.1.1",
+        "clsx": "^2.1.1",
+        "csstype": "^3.1.3",
+        "prop-types": "^15.8.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@emotion/react": "^11.5.0",
+        "@emotion/styled": "^11.3.0",
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@emotion/react": {
+          "optional": true
+        },
+        "@emotion/styled": {
+          "optional": true
+        },
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/types": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.3.tgz",
+      "integrity": "sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1"
+      },
+      "peerDependencies": {
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/utils": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.1.1.tgz",
+      "integrity": "sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.27.1",
+        "@mui/types": "^7.4.3",
+        "@types/prop-types": "^15.7.14",
+        "clsx": "^2.1.1",
+        "prop-types": "^15.8.1",
+        "react-is": "^19.1.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mui-org"
+      },
+      "peerDependencies": {
+        "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
@@ -1045,4 +1434,14 @@
       "engines": {
         "node": ">= 8"
+      }
+    },
+    "node_modules/@popperjs/core": {
+      "version": "2.11.8",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
       }
     },
@@ -1654,9 +2053,20 @@
       "license": "MIT"
     },
+    "node_modules/@types/parse-json": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+      "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/prop-types": {
+      "version": "15.7.15",
+      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+      "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+      "license": "MIT"
+    },
     "node_modules/@types/react": {
       "version": "19.1.8",
       "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
       "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1681,4 +2091,13 @@
       "license": "MIT",
       "dependencies": {
+        "@types/react": "*"
+      }
+    },
+    "node_modules/@types/react-transition-group": {
+      "version": "4.4.12",
+      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+      "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+      "license": "MIT",
+      "peerDependencies": {
         "@types/react": "*"
       }
@@ -2093,4 +2512,19 @@
       }
     },
+    "node_modules/babel-plugin-macros": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+      "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.12.5",
+        "cosmiconfig": "^7.0.0",
+        "resolve": "^1.19.0"
+      },
+      "engines": {
+        "node": ">=10",
+        "npm": ">=6"
+      }
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
@@ -2180,5 +2614,4 @@
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -2239,4 +2672,13 @@
       "license": "MIT"
     },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
@@ -2294,4 +2736,29 @@
       }
     },
+    "node_modules/cosmiconfig": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.2.1",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.10.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/cosmiconfig/node_modules/yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.6",
@@ -2313,5 +2780,4 @@
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
       "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-      "dev": true,
       "license": "MIT"
     },
@@ -2320,5 +2786,4 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
       "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2359,4 +2824,14 @@
       }
     },
+    "node_modules/dom-helpers": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+      "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.8.7",
+        "csstype": "^3.0.2"
+      }
+    },
     "node_modules/dunder-proto": {
       "version": "1.0.1",
@@ -2398,4 +2873,13 @@
       "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==",
       "license": "MIT"
+    },
+    "node_modules/error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "license": "MIT",
+      "dependencies": {
+        "is-arrayish": "^0.2.1"
+      }
     },
     "node_modules/es-define-property": {
@@ -2514,5 +2998,4 @@
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
       "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -2788,4 +3271,10 @@
       }
     },
+    "node_modules/find-root": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+      "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+      "license": "MIT"
+    },
     "node_modules/find-up": {
       "version": "5.0.0",
@@ -2874,4 +3363,31 @@
         "type": "patreon",
         "url": "https://github.com/sponsors/rawify"
+      }
+    },
+    "node_modules/framer-motion": {
+      "version": "12.19.1",
+      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.19.1.tgz",
+      "integrity": "sha512-nq9hwWAEKf4gzprbOZzKugLV5OVKF7zrNDY6UOVu+4D3ZgIkg8L9Jy6AMrpBM06fhbKJ6LEG6UY5+t7Eq6wNlg==",
+      "license": "MIT",
+      "dependencies": {
+        "motion-dom": "^12.19.0",
+        "motion-utils": "^12.19.0",
+        "tslib": "^2.4.0"
+      },
+      "peerDependencies": {
+        "@emotion/is-prop-valid": "*",
+        "react": "^18.0.0 || ^19.0.0",
+        "react-dom": "^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@emotion/is-prop-valid": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        }
       }
     },
@@ -3046,4 +3562,19 @@
       }
     },
+    "node_modules/hoist-non-react-statics": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "react-is": "^16.7.0"
+      }
+    },
+    "node_modules/hoist-non-react-statics/node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+      "license": "MIT"
+    },
     "node_modules/ignore": {
       "version": "5.3.2",
@@ -3060,5 +3591,4 @@
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
       "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3083,4 +3613,25 @@
       }
     },
+    "node_modules/is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+      "license": "MIT"
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-extglob": {
       "version": "2.1.1",
@@ -3143,5 +3694,4 @@
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true,
       "license": "MIT"
     },
@@ -3163,5 +3713,4 @@
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
       "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
-      "dev": true,
       "license": "MIT",
       "bin": {
@@ -3177,4 +3726,10 @@
       "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
       "license": "MIT"
     },
@@ -3467,4 +4022,10 @@
       }
     },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "license": "MIT"
+    },
     "node_modules/locate-path": {
       "version": "6.0.0",
@@ -3495,4 +4056,16 @@
       "dev": true,
       "license": "MIT"
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
     },
     "node_modules/lru-cache": {
@@ -3627,9 +4200,23 @@
       }
     },
+    "node_modules/motion-dom": {
+      "version": "12.19.0",
+      "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.19.0.tgz",
+      "integrity": "sha512-m96uqq8VbwxFLU0mtmlsIVe8NGGSdpBvBSHbnnOJQxniPaabvVdGgxSamhuDwBsRhwX7xPxdICgVJlOpzn/5bw==",
+      "license": "MIT",
+      "dependencies": {
+        "motion-utils": "^12.19.0"
+      }
+    },
+    "node_modules/motion-utils": {
+      "version": "12.19.0",
+      "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.19.0.tgz",
+      "integrity": "sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==",
+      "license": "MIT"
+    },
     "node_modules/ms": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
       "license": "MIT"
     },
@@ -3676,4 +4263,13 @@
       }
     },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/on-change": {
       "version": "4.0.2",
@@ -3743,5 +4339,4 @@
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3750,4 +4345,22 @@
       "engines": {
         "node": ">=6"
+      }
+    },
+    "node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
@@ -3767,4 +4380,19 @@
       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
       "license": "MIT",
       "engines": {
@@ -3836,4 +4464,21 @@
       }
     },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/prop-types/node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+      "license": "MIT"
+    },
     "node_modules/proxy-from-env": {
       "version": "1.1.0",
@@ -3894,4 +4539,10 @@
       }
     },
+    "node_modules/react-is": {
+      "version": "19.1.0",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz",
+      "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==",
+      "license": "MIT"
+    },
     "node_modules/react-merge-refs": {
       "version": "2.1.1",
@@ -3969,4 +4620,20 @@
       }
     },
+    "node_modules/react-transition-group": {
+      "version": "4.4.5",
+      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+      "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@babel/runtime": "^7.5.5",
+        "dom-helpers": "^5.0.1",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.6.2"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0",
+        "react-dom": ">=16.6.0"
+      }
+    },
     "node_modules/resize-observer-polyfill": {
       "version": "1.5.1",
@@ -3975,9 +4642,28 @@
       "license": "MIT"
     },
+    "node_modules/resolve": {
+      "version": "1.22.10",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.16.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
       "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
       "license": "MIT",
       "engines": {
@@ -4139,4 +4825,13 @@
       }
     },
+    "node_modules/source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/source-map-js": {
       "version": "1.2.1",
@@ -4167,4 +4862,10 @@
       }
     },
+    "node_modules/stylis": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+      "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+      "license": "MIT"
+    },
     "node_modules/supports-color": {
       "version": "7.2.0",
@@ -4178,4 +4879,16 @@
       "engines": {
         "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
@@ -4294,4 +5007,10 @@
         "typescript": ">=4.8.4"
       }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
     },
     "node_modules/type-check": {
Index: frontend/package.json
===================================================================
--- frontend/package.json	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/package.json	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -11,7 +11,12 @@
   },
   "dependencies": {
+    "@emotion/react": "^11.14.0",
+    "@emotion/styled": "^11.14.0",
+    "@mui/icons-material": "^7.1.2",
+    "@mui/material": "^7.1.2",
     "@splinetool/react-spline": "^4.0.0",
     "@tailwindcss/vite": "^4.1.10",
     "axios": "^1.10.0",
+    "framer-motion": "^12.19.1",
     "lucide-react": "^0.515.0",
     "react": "^19.1.0",
Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/src/App.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -1,21 +1,33 @@
-import {BrowserRouter as Router, Route, Routes} from "react-router-dom";
+import { BrowserRouter as Router, Route, Routes, useLocation } from "react-router-dom";
 import Home from "./pages/Home.tsx";
 import Navbar from "./layout/Navbar.tsx";
 import Footer from "./layout/Footer.tsx";
+import Login from "./pages/Login.tsx";
+import Register from "./pages/Register.tsx";
+
+function LayoutWrapper() {
+    const location = useLocation();
+    const hideLayout = location.pathname === "/login" || location.pathname === "/register"; // You can add more paths like || location.pathname === "/signup"
+
+    return (
+        <>
+            {!hideLayout && <Navbar />}
+            <Routes>
+                <Route path="/" element={<Home />} />
+                <Route path="/login" element={<Login />} />
+                <Route path="/register" element={<Register />} />
+            </Routes>
+            {!hideLayout && <Footer />}
+        </>
+    );
+}
 
 function App() {
-
-  return (
-      <>
-          <Router>
-              <Navbar />
-              <Routes>
-                  <Route path="/" element={<Home />} />
-              </Routes>
-              <Footer />
-          </Router>
-      </>
-  )
+    return (
+        <Router>
+            <LayoutWrapper />
+        </Router>
+    );
 }
 
-export default App
+export default App;
Index: frontend/src/components/CollaborationSteps.tsx
===================================================================
--- frontend/src/components/CollaborationSteps.tsx	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/src/components/CollaborationSteps.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -29,5 +29,5 @@
 
     return (
-        <div className="bg-dark-blue text-white py-vertical-md px-horizontal flex flex-col gap-12 items-center">
+        <section className="bg-dark-blue text-white py-vertical-md px-horizontal flex flex-col gap-12 items-center">
             <h2 className="text-4xl font-regular">
                 How to Start Your Journey to <strong>Success</strong>
@@ -61,5 +61,7 @@
                         {/* Title and description */}
                         <div className="flex flex-col justify-start h-full gap-2">
-                            <h3 className="text-xl font-semibold text-center">{step.title}</h3>
+                            <div className="flex justify-center items-center min-h-[3.5rem]">
+                                <h3 className="text-xl font-semibold text-center line-clamp-2">{step.title}</h3>
+                            </div>
                             <p className="text-md text-white/70">{step.description}</p>
                         </div>
@@ -73,5 +75,5 @@
                 Start Now
             </button>
-        </div>
+        </section>
     );
 }
Index: frontend/src/components/CustomStepper.tsx
===================================================================
--- frontend/src/components/CustomStepper.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
+++ frontend/src/components/CustomStepper.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -0,0 +1,82 @@
+import {StepConnector, stepConnectorClasses, type StepIconProps, styled} from "@mui/material";
+import Check from "@mui/icons-material/Check";
+import React from "react";
+
+const CustomStepperConnector = styled(StepConnector)(({ theme }) => ({
+    [`&.${stepConnectorClasses.alternativeLabel}`]: {
+        top: 10,
+        left: 'calc(-50% + 16px)',
+        right: 'calc(50% + 16px)',
+    },
+    [`&.${stepConnectorClasses.completed}`]: {
+        [`& .${stepConnectorClasses.line}`]: {
+            borderColor: 'var(--color-shifter)',
+            opacity: 0.2
+        },
+    },
+    [`&.${stepConnectorClasses.active}`]: {
+        [`& .${stepConnectorClasses.line}`]: {
+            borderColor: 'var(--color-shifter)',
+            opacity: 0.2
+        },
+    },
+    [`& .${stepConnectorClasses.line}`]: {
+        borderColor: '#BBB',
+        borderWidth: 2,
+        borderRadius: 2,
+        transition: 'border-color 0.4s ease-in-out, opacity 0.4s ease-in-out',
+    },
+}));
+const CustomStepperStepIconRoot = styled('div')<{ ownerState: { active?: boolean; completed?: boolean } }>(
+    ({ ownerState }) => ({
+        color: '#eaeaf0',
+        display: 'flex',
+        position: 'relative',       // <-- needed for absolute positioning inside
+        height: 22,
+        alignItems: 'center',
+        transition: 'color 0.3s ease-in-out',
+
+        // CHECKMARK
+        '& .CustomStepperStepIcon-completedIcon': {
+            color: 'var(--color-shifter)',
+            zIndex: 2,                // on top
+            fontSize: 30,
+            position: 'absolute',     // overlay on circle
+            opacity: ownerState.completed ? 1 : 0,
+            pointerEvents: ownerState.completed ? 'auto' : 'none',  // ignore clicks when hidden
+            transition: 'opacity 0.5s ease-in-out',
+            left: '50%',
+            top: '50%',
+            transform: ownerState.completed
+                ? 'translate(-50%, -50%) scale(1)'
+                : 'translate(-50%, -50%) scale(0.8)',
+            transitionProperty: 'opacity, transform',
+        },
+
+        // CIRCLE
+        '& .CustomStepperStepIcon-circle': {
+            width: 16,
+            height: 16,
+            borderRadius: '50%',
+            backgroundColor: ownerState.active ? 'var(--color-shifter)' : '#BBB',
+            transition: 'background-color 0.4s ease-in-out, transform 0.4s ease-in-out, opacity 0.5s ease-in-out',
+            transform: ownerState.active ? 'scale(1.2)' : 'scale(1)',
+            opacity: ownerState.completed ? 0 : 1,
+            pointerEvents: ownerState.completed ? 'none' : 'auto',  // ignore clicks when hidden
+        },
+    }),
+);
+
+function CustomStepperStepIcon(props: StepIconProps) {
+    const { active, completed, className } = props;
+
+    return (
+        <CustomStepperStepIconRoot ownerState={{ active, completed }} className={className}>
+            <Check className="CustomStepperStepIcon-completedIcon" />
+            <div className="CustomStepperStepIcon-circle" />
+        </CustomStepperStepIconRoot>
+    );
+}
+
+
+export { CustomStepperConnector, CustomStepperStepIcon };
Index: frontend/src/components/Hero.tsx
===================================================================
--- frontend/src/components/Hero.tsx	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/src/components/Hero.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -4,5 +4,5 @@
 function Hero() {
     return (
-        <section className="bg-dark-blue w-full font-montserrat">
+        <section className="bg-dark-blue w-full px-4 font-montserrat">
             <div className="shadow-md shadow-black/80 flex flex-col gap-12
             items-center px-horizontal pt-30 w-full bg-white rounded-b-[60px]">
Index: frontend/src/global.css
===================================================================
--- frontend/src/global.css	(revision d797dce91fdb18630fa8863ded6bfcbea51b4789)
+++ frontend/src/global.css	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -93,2 +93,26 @@
     min-height: 100vh;
 }
+
+/* Customize scrollbar for Webkit browsers (Chrome, Safari, Edge) */
+.custom-scrollbar::-webkit-scrollbar {
+    width: .6rem;
+    height: .6rem;
+}
+
+.custom-scrollbar::-webkit-scrollbar-track {
+    background: #f0f0f0;
+    border-radius: 40px;
+}
+
+.custom-scrollbar::-webkit-scrollbar-thumb {
+    background-color: rgba(100, 100, 100, 0.5);
+    border-radius: 4px;
+    border: 2px solid transparent;
+    background-clip: content-box;
+}
+
+/* Firefox scrollbar */
+.custom-scrollbar {
+    scrollbar-width: thin;
+    scrollbar-color: rgba(100, 100, 100, 0.5) #f0f0f0;
+}
Index: frontend/src/pages/Login.tsx
===================================================================
--- frontend/src/pages/Login.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
+++ frontend/src/pages/Login.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -0,0 +1,123 @@
+import ShifterLogo from "../assets/Shifter-Logo-S2W-Transparent.png"
+import React from "react";
+import {Eye, EyeOff} from "lucide-react";
+import ShifterArrow from "../assets/Shifter-Arrow-White.png"
+import { Link } from "react-router-dom";
+
+
+function Login() {
+
+    return (
+        <section className="flex font-montserrat h-screen">
+
+            {/* LEFT HEADER AND BACKGROUND */}
+            <div className="relative bg-black w-[55%] overflow-hidden">
+                <div
+                    className="absolute w-full h-full bg-shifter/80 z-0 text-white px-20 flex flex-col gap-4 justify-center text-start">
+                    {/*Arrows*/}
+                    <img src={ShifterArrow} alt="Shifter Arrow"
+                         className="absolute -top-20 right-20 -rotate-130 w-auto h-100 opacity-70 z-2"/>
+                    <img src={ShifterArrow} alt="Shifter Arrow"
+                         className="absolute -bottom-20 left-20 rotate-50 w-auto h-100 opacity-70 z-2"/>
+
+                    <h1 className="text-7xl font-semibold z-2">Welcome Back!</h1>
+                    <p className="text-2xl font-light z-2">Let's unlock your next breakthrough in business!</p>
+                </div>
+
+            </div>
+
+            {/* RIGHT FORM CONTAINER */}
+            <div className="relative flex flex-col justify-center items-center flex-1 px-30 gap-4">
+                <img
+                    src={ShifterLogo}
+                    alt="Shifter Logo"
+                    className="absolute top-4 left-4 w-40 h-auto object-contain"/>
+
+                <Input
+                    placeholder={"name@email.com"}
+                    label={"Email address"}
+                    name={"email"}
+                    type={"email"}
+                    id={"login-email"}
+                />
+                <Input
+                    placeholder={"********"}
+                    label={"Password"}
+                    name={"password"}
+                    type={"password"}
+                    id={"login-password"}
+                />
+
+                {/*Buttons*/}
+                <div
+                    className="flex gap-2 justify-start text-md w-full text-lg mt-4">
+                    <button
+                        className="hover:shadow-md hover:shadow-shifter/60 transition-all duration-200 ease-in-out cursor-pointer
+                            rounded-md border-3 border-white/50 text-white w-1/3 py-1 bg-shifter font-medium
+                            whitespace-nowrap">
+                        Log In
+                    </button>
+                    <Link
+                        to={"/register"}
+                        className="hover:shadow-md hover:shadow-shifter/20 transition-all duration-200 ease-in-out cursor-pointer
+                            rounded-md text-shifter/80 w-1/3 py-1 bg-white border-3 border-shifter/20 font-medium
+                            whitespace-nowrap"
+
+                    >
+                        Register
+                    </Link>
+                </div>
+            </div>
+
+        </section>
+    )
+}
+
+function Input(inputProps: InputProps) {
+    const [showPassword, setShowPassword] = React.useState(false);
+
+    return (
+        <div
+            className="relative flex flex-col gap-1 px-6 py-1.5 border-2 border-shifter group focus-within:border-l-20 transition-all ease-in-out duration-300 items-start rounded-sm w-full">
+            <label
+                htmlFor={inputProps.id}
+                className="text-shifter text-light"
+            >
+                {inputProps.label}
+            </label>
+            <div className="flex gap-2 w-full">
+                <div className="w-full">
+                    <input
+                        id={inputProps.id}
+                        type={inputProps.name !== "password" ? "text" : showPassword ? "text" : "password"}
+                        name={inputProps.name}
+                        placeholder={inputProps.placeholder}
+                        className="w-full focus:outline-none text-lg"
+                    />
+                    <hr className="border-t-2 border-black/5 rounded-full w-full"/>
+                </div>
+                {
+                    inputProps.name === "password" &&
+                    <button
+                        type="button"
+                        onClick={() => setShowPassword?.((prev) => !prev)}
+                        className="text-black cursor-pointer hover:bg-black/5 rounded-full p-1"
+                        aria-label={showPassword ? "Hide password" : "Show password"}
+                    >
+                        {!showPassword ? <EyeOff size={20} opacity={0.6}/> : <Eye size={20} opacity={0.6}/>}
+                    </button>
+                }
+            </div>
+        </div>
+    )
+}
+
+interface InputProps {
+    placeholder: string;
+    label: string;
+    name: string;
+    type: string;
+    id: string;
+}
+
+export default Login;
Index: frontend/src/pages/Register.tsx
===================================================================
--- frontend/src/pages/Register.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
+++ frontend/src/pages/Register.tsx	(revision e13f128f19b817d19e3e9ba68a26b94d45cef00b)
@@ -0,0 +1,644 @@
+import React, {useEffect} from "react";
+import {Eye, EyeOff} from "lucide-react";
+import ShifterLogo from "../assets/Shifter-Logo-S2W-Transparent.png";
+import ShifterArrow from "../assets/Shifter-Arrow-White.png";
+import {
+    Stepper,
+    Step,
+    StepLabel,
+    Box,
+} from "@mui/material";
+import {CustomStepperConnector, CustomStepperStepIcon} from "../components/CustomStepper";
+import {Link} from "react-router-dom";
+import { motion, AnimatePresence } from "framer-motion";
+
+
+function StepOne({setUser, user, setCanContinue}: { setUser: React.Dispatch<React.SetStateAction<User>>, user: User, setCanContinue: React.Dispatch<React.SetStateAction<boolean>>}) {
+    const [showPassword, setShowPassword] = React.useState(false);
+    const [showError, setShowError] = React.useState(false);
+    const [error, setError] = React.useState("");
+
+    useEffect(() => {
+        function hasUppercase(str: string) {
+            return /[A-Z]/.test(str);
+        }
+        function hasDigit(str: string) {
+            return /\d/.test(str);
+        }
+        function hasSpecialChar(str: string) {
+            return /[^A-Za-z0-9]/.test(str);
+        }
+
+        console.log(user.password, user.passwordConfirmation);
+        if (!user.password || !user.passwordConfirmation) {
+
+        } else if (user.password && user.passwordConfirmation && user.password !== user.passwordConfirmation) {
+            setShowError(true);
+            setError("Passwords do not match");
+            setCanContinue(false);
+        } else if (!hasUppercase(user.password)) {
+            setShowError(true);
+            setError("Password must contain at least one uppercase letter");
+            setCanContinue(false);
+        } else if (!hasDigit(user.password)) {
+            setShowError(true);
+            setError("Password must contain at least one digit");
+            setCanContinue(false);
+        } else if (!hasSpecialChar(user.password)) {
+            setShowError(true);
+            setError("Password must contain at least one special character");
+            setCanContinue(false);
+        } else {
+            setError("");
+            setShowError(false);
+            setCanContinue(true);
+        }
+
+    }, [user.password, user.passwordConfirmation])
+
+    return (
+        <div className="flex flex-col gap-4 w-full items-center">
+            <Input
+                placeholder={"name@email.com"}
+                label={"Email address"}
+                name={"email"}
+                type={"email"}
+                id={"email"}
+                setUser={setUser}
+                user={user}
+            />
+            <Input
+                placeholder={"********"}
+                label={"Password"}
+                name={"password"}
+                type={"password"}
+                id={"password"}
+                showPassword={showPassword}
+                setShowPassword={setShowPassword}
+                setUser={setUser}
+                user={user}
+            />
+            <Input
+                placeholder={"********"}
+                label={"Confirm password"}
+                name={"passwordConfirmation"}
+                type={"password"}
+                id={"password-confirmation"}
+                showPassword={showPassword}
+                setShowPassword={setShowPassword}
+                setUser={setUser}
+                user={user}
+            />
+            {
+                showError && (
+                    <p className="text-red-500 font-semibold text-sm">
+                        {error}
+                    </p>
+                )
+            }
+        </div>
+    );
+}
+
+function StepTwo({setUser, user}: { setUser: React.Dispatch<React.SetStateAction<User>>, user: User }) {
+    return (
+        <div className="flex flex-col gap-4 w-full items-center">
+            <Input
+                placeholder={"John Doe"}
+                label={"Full Name"}
+                name={"fullName"}
+                type={"text"}
+                id={"full-name"}
+                setUser={setUser}
+                user={user}
+            />
+            <Input
+                placeholder={"Your Position"}
+                label={"Work Position"}
+                name={"workPosition"}
+                type={"text"}
+                id={"work-position"}
+                setUser={setUser}
+                user={user}
+            />
+            <SelectInput
+                label={"Company Type"}
+                name={"companyType"}
+                id={"company-type"}
+                options={["Freelance", "Startup", "SME", "Mid Market", "Enterprise", "Other"]}
+                setUser={setUser}
+                user={user}
+            />
+        </div>
+    );
+}
+
+function StepThree({setUser, user}: { setUser: React.Dispatch<React.SetStateAction<User>>, user: User }) {
+    const interests = [
+        "Sales Strategies",
+        "Marketing",
+        "Leadership",
+        "Management",
+        "Digital Transformation",
+        "Business Transformation",
+        "Entrepreneurship",
+        "Startup",
+        "Sales",
+        "Negotiation",
+        "Finance For Business"
+    ]
+
+    return (
+        <div className="flex flex-col gap-4 w-full items-center">
+            <SliderInput
+                label={"Select topics that inspire you"}
+                name={"interests"}
+                id={"interests"}
+                options={interests}
+                setUser={setUser}
+                user={user}
+            />
+        </div>
+    )
+}
+
+function StepFour({setUser, user}: { setUser: React.Dispatch<React.SetStateAction<User>>, user: User }) {
+    const skills = [
+        "Strategic Thinking",
+        "Strategic Planning",
+        "Business Development",
+        "Project Management",
+        "Operation Management",
+        "Logistics",
+        "Business Model Creation",
+        "Risk Management",
+        "Startup Methodologies",
+
+        "Marketing",
+        "Digital Marketing",
+        "Traditional Marketing",
+        "Branding",
+        "Sales",
+        "Sales Techniques",
+        "B2b Tactics",
+        "B2c Tactics",
+        "Seo",
+        "Google Analytics",
+        "Ecommerce Platforms",
+
+        "Leadership",
+        "People Management",
+        "Team Building",
+        "Delegation",
+        "Conflict Resolution",
+        "Decision Making",
+        "Performance Evaluation",
+        "Change Management",
+
+        "Communication",
+        "Emotional Intelligence",
+        "Time Management",
+        "Adaptability",
+        "Critical Thinking",
+        "Creativity",
+        "Problem Solving",
+
+        "Opportunity Identification",
+        "Fundraising Capital",
+        "Innovation Management",
+
+        "Ai Tools",
+
+        "Business Law",
+        "Business Ethics"
+    ];
+
+
+    return (
+        <div className="flex flex-col gap-4 w-full">
+            <SliderInput
+                label={"Identify your strengths"}
+                name={"skills"}
+                id={"skills"}
+                options={skills}
+                setUser={setUser}
+                user={user}
+            />
+        </div>
+    )
+}
+
+function StepFive({setUser, user}: { setUser: React.Dispatch<React.SetStateAction<User>>, user: User }) {
+    const skills = [
+        "Strategic Thinking",
+        "Strategic Planning",
+        "Business Development",
+        "Project Management",
+        "Operation Management",
+        "Logistics",
+        "Business Model Creation",
+        "Risk Management",
+        "Startup Methodologies",
+
+        "Marketing",
+        "Digital Marketing",
+        "Traditional Marketing",
+        "Branding",
+        "Sales",
+        "Sales Techniques",
+        "B2b Tactics",
+        "B2c Tactics",
+        "Seo",
+        "Google Analytics",
+        "Ecommerce Platforms",
+
+        "Leadership",
+        "People Management",
+        "Team Building",
+        "Delegation",
+        "Conflict Resolution",
+        "Decision Making",
+        "Performance Evaluation",
+        "Change Management",
+
+        "Communication",
+        "Emotional Intelligence",
+        "Time Management",
+        "Adaptability",
+        "Critical Thinking",
+        "Creativity",
+        "Problem Solving",
+
+        "Opportunity Identification",
+        "Fundraising Capital",
+        "Innovation Management",
+
+        "Ai Tools",
+
+        "Business Law",
+        "Business Ethics"
+    ];
+
+
+    return (
+        <div className="flex flex-col gap-4 w-full">
+            <SliderInput
+                label={"Select skills you want to develop"}
+                name={"skillsGap"}
+                id={"skills-gap"}
+                options={skills}
+                setUser={setUser}
+                user={user}
+            />
+        </div>
+    )
+}
+
+
+function Register() {
+    const [activeStep, setActiveStep] = React.useState(0);
+    const [canContinue, setCanContinue] = React.useState(true);
+    const [direction, setDirection] = React.useState(0); // 1 for next, -1 for back
+    const [user, setUser] = React.useState<User>({
+        email: "",
+        password: "",
+        passwordConfirmation: "",
+        fullName: "",
+        workPosition: "",
+        companyType: "",
+        interests: [],
+        skills: [],
+        skillsGap: [],
+    });
+
+
+    const stepsContent = [<StepOne setUser={setUser} user={user} setCanContinue={setCanContinue}/>, <StepTwo setUser={setUser} user={user}/>,
+        <StepThree setUser={setUser} user={user}/>, <StepFour setUser={setUser} user={user}/>,
+        <StepFive setUser={setUser} user={user}/> ];
+
+    const handleNext = () => {
+        setDirection(1);
+        setActiveStep((prev) => prev + 1);
+    };
+    const handleBack = () => {
+        setDirection(-1);
+        setActiveStep((prev) => prev - 1);
+    };
+    const handleReset = () => {
+        setDirection(0);
+        setActiveStep(0);
+    }
+    const variants = {
+        enter: (dir: number) => ({
+            x: dir > 0 ? 100 : -100,
+            opacity: 0,
+        }),
+        center: {
+            x: 0,
+            opacity: 1,
+        },
+        exit: (dir: number) => ({
+            x: dir > 0 ? -100 : 100,
+            opacity: 0,
+        }),
+    };
+
+
+    return (
+        <section className="flex font-montserrat h-screen">
+
+            {/* LEFT HEADER AND BACKGROUND */}
+            <div className="relative bg-black w-[55%] overflow-hidden">
+                <div
+                    className="absolute w-full h-full bg-shifter/80 z-0 text-white px-16 flex flex-col gap-4 justify-center text-start">
+                    {/*Arrows*/}
+                    <img src={ShifterArrow} alt="Shifter Arrow"
+                         className="absolute -top-20 right-20 -rotate-130 w-auto h-100 opacity-70 z-2"/>
+                    <img src={ShifterArrow} alt="Shifter Arrow"
+                         className="absolute -bottom-20 left-20 rotate-50 w-auto h-100 opacity-70 z-2"/>
+                    <h1 className="text-7xl font-semibold z-2 whitespace-nowrap">Shift into Success</h1>
+                    <p className="text-2xl font-light z-2">Start your journey toward smarter, scalable business
+                        growth.</p>
+                </div>
+            </div>
+
+            {/* RIGHT FORM CONTAINER */}
+            <div className="relative flex flex-col justify-center items-center flex-1 px-20 gap-6">
+                <img
+                    src={ShifterLogo}
+                    alt="Shifter Logo"
+                    className="absolute top-4 left-4 w-40 h-auto object-contain"
+                />
+
+                {/* STEPPER */}
+                <Box className="w-full flex flex-col">
+                    <Stepper
+                        activeStep={activeStep}
+                        alternativeLabel
+                        connector={<CustomStepperConnector/>}
+                    >
+                        {stepsContent.map((_, index) => (
+                            <Step key={index}>
+                                <StepLabel StepIconComponent={CustomStepperStepIcon}
+                                           className="text-shifter font-semibold"
+                                />
+                            </Step>
+                        ))}
+                    </Stepper>
+
+                    <Box className="flex flex-col overflow-hidden">
+
+                        {/*STEPPER CONTENT*/}
+                        <AnimatePresence mode="wait" initial={false} custom={direction}>
+                            <motion.div
+                                key={activeStep}
+                                custom={direction}
+                                variants={variants}
+                                initial="enter"
+                                animate="center"
+                                exit="exit"
+                                transition={{
+                                    x: { type: "spring", stiffness: 500, damping: 40 },
+                                    opacity: { duration: 0.2 },
+                                }}
+                                className="h-80 flex flex-col justify-center"
+                            >
+                                {stepsContent[activeStep]}
+                            </motion.div>
+                        </AnimatePresence>
+
+
+
+                        {/*STEPPER BUTTONS*/}
+                        <Box className="flex flex-col justify-center items-center gap-2">
+                            <div className="flex justify-center gap-4 ">
+                                <button
+                                    disabled={activeStep === 0}
+                                    onClick={handleBack}
+                                    className="hover:shadow-sm hover:shadow-black/20 transition-all duration-200 ease-in-out
+                                border-3 border-white/50 px-10 py-2 bg-black/10 text-black/60 cursor-pointer rounded-sm "
+                                >
+                                    Back
+                                </button>
+                                {activeStep === stepsContent.length - 1 ? (
+                                    <button
+                                        onClick={handleReset}
+                                        className="hover:shadow-md hover:shadow-shifter/60 transition-all duration-200 ease-in-out
+                                    px-20 border-3 border-white/50 bg-shifter text-white cursor-pointer rounded-md"
+                                    >
+                                        Start Your Journey
+                                    </button>
+                                ) : (
+                                    <button
+                                        onClick={() => {
+                                            if (canContinue) {
+                                                handleNext();
+                                            }
+                                        }}
+                                        className="hover:shadow-md hover:shadow-shifter/60 transition-all duration-200 ease-in-out
+                                    px-20 border-3 border-white/50 bg-shifter text-white cursor-pointer rounded-md"
+                                    >
+                                        Next
+                                    </button>
+                                )}
+                            </div>
+                            <p
+                                className="text-black/40"
+                            >
+                                Already have an account?
+                                <Link to={"/login"}
+                                    className="relative text-shifter font-medium w-fit hover:font-semibold"
+                                >
+                                    {" "}Log In
+                                </Link>
+                            </p>
+                        </Box>
+                    </Box>
+                </Box>
+            </div>
+        </section>
+    );
+}
+
+function Input(inputProps: InputProps) {
+
+    return (
+        <div
+            className="w-8/10 relative flex flex-col items- gap-1 px-6 py-1 border-2 border-shifter group focus-within:border-l-20 transition-all ease-in-out duration-300 items-start rounded-sm">
+            <label
+                htmlFor={inputProps.id}
+                className="text-shifter font-medium"
+            >
+                {inputProps.label}
+            </label>
+            <div className="flex gap-2 w-full">
+                <div className="w-full">
+                    <input
+                        id={inputProps.id}
+                        type={!inputProps.name.includes("password") ? "text" : inputProps.showPassword ? "text" : "password"}
+                        name={inputProps.name}
+                        placeholder={inputProps.placeholder}
+                        className="w-full focus:outline-none text-lg"
+                        value={inputProps.user[inputProps.name] || ""}
+                        onChange={e =>
+                            inputProps.setUser((prev: User) => ({
+                                ...prev,
+                                [inputProps.name]: e.target.value
+                            }))
+                        }
+                    />
+                    <hr className="border-t-2 border-black/5 rounded-full w-full"/>
+                </div>
+                {inputProps.name.includes("password") && (
+                    <button
+                        type="button"
+                        onClick={() => inputProps.setShowPassword?.((prev: boolean) => !prev)}
+                        className="text-black cursor-pointer hover:bg-black/5 rounded-full p-1"
+                        aria-label={inputProps.showPassword ? "Hide password" : "Show password"}
+                    >
+                        {!inputProps.showPassword ? (
+                            <EyeOff size={20} opacity={0.6}/>
+                        ) : (
+                            <Eye size={20} opacity={0.6}/>
+                        )}
+                    </button>
+                )}
+            </div>
+        </div>
+    );
+}
+
+function SelectInput(selectProps: SelectProps) {
+
+    return (
+        <div
+            className="w-8/10 relative flex flex-col gap-1 px-6 py-1 border-2 border-shifter group transition-all ease-in-out duration-300 items-start rounded-sm">
+            <label
+                htmlFor={selectProps.id}
+                className="text-shifter font-medium"
+            >
+                {selectProps.label}
+            </label>
+            <div className="w-full">
+                <select
+                    id={selectProps.id}
+                    name={selectProps.name}
+                    className="w-full focus:outline-none text-lg cursor-pointer"
+                    onChange={e =>
+                        selectProps.setUser((prev: User) => ({
+                            ...prev,
+                            [selectProps.name]: e.target.value
+                        }))
+                    }
+                >
+                    {
+                        selectProps.options?.map((option, index) => (
+                            <option key={index} value={option}>
+                                {option}
+                            </option>
+                        ))
+                    }
+                </select>
+                <hr className="border-t-2 border-black/5 rounded-full w-full"/>
+            </div>
+        </div>
+    );
+}
+
+function SliderInput(sliderProps: SliderProps) {
+
+    return (
+        <div
+            className="flex flex-col justify-center gap-4 px-6 py-1 items-start w-full">
+            <label
+                htmlFor={sliderProps.id}
+                className="text-shifter font-medium text-xl"
+            >
+                {sliderProps.label}
+            </label>
+            <div className="custom-scrollbar flex gap-2 flex-wrap w-full max-h-[30vh] items-center  overflow-y-auto">
+                {
+                    sliderProps.options?.map((option, index) => {
+                        const isSelected = sliderProps.user[sliderProps.name]?.includes(option) || false;
+
+                        return (
+                            <button
+                                key={index}
+                                name={sliderProps.name}
+                                id={`${sliderProps.id}-${index}`}
+                                className={`${isSelected ? "bg-shifter text-white" : "bg-black/10 text-black"} px-4 py-1 rounded-md 
+                                transition-all duration-200 ease-in-out hover:shadow-md ${isSelected ? "shadow-black/20" : "shadow-shifter/20"}
+                                focus:outline-none cursor-pointer whitespace-nowrap`}
+                                onClick={() => {
+                                    sliderProps.setUser((prev: User) => {
+                                        const arr = prev[sliderProps.name] as string[] || [];
+
+                                        const newArr = arr.includes(option)
+                                            ? arr.filter(item => item !== option)
+                                            : [...arr, option];
+
+                                        return {
+                                            ...prev,
+                                            [sliderProps.name]: newArr,
+                                        };
+                                    });
+                                }}
+
+                            >
+                                {option}
+                            </button>
+                        )
+                    })
+                }
+            </div>
+
+        </div>
+    );
+}
+
+interface User {
+    email: string;
+    password: string;
+    passwordConfirmation: string;
+    fullName: string;
+    workPosition: string;
+    companyType: string;
+    interests: string[];
+    skills: string[];
+    skillsGap: string[];
+}
+
+type UserStrFields = 'email' | 'password' | 'passwordConfirmation' | 'fullName' | 'workPosition' | 'companyType';
+interface InputProps {
+    placeholder: string;
+    label: string;
+    name: UserStrFields;
+    type: string;
+    id: string;
+    showPassword?: boolean;
+    setShowPassword?: React.Dispatch<React.SetStateAction<boolean>>;
+    setUser: React.Dispatch<React.SetStateAction<User>>;
+    user: User;
+}
+
+interface SelectProps {
+    label: string;
+    name: string;
+    id: string;
+    options?: string[];
+    setUser: React.Dispatch<React.SetStateAction<User>>;
+    user: User;
+}
+
+type UserArrayFields = 'interests' | 'skills' | 'skillsGap';
+
+interface SliderProps {
+    label: string;
+    name: UserArrayFields;
+    id: string;
+    options?: string[];
+    setUser: React.Dispatch<React.SetStateAction<User>>;
+    user: User;
+}
+
+export default Register;
