diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..5f0889c
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+ - package-ecosystem: "npm" # See documentation for possible values
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "weekly"
diff --git a/package-lock.json b/package-lock.json
index b746828..5ec8589 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,17 +11,17 @@
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
- "@mui/icons-material": "^7.1.0",
+ "@mui/icons-material": "^7.1.2",
"@mui/material": "^7.1.0",
- "@mui/system": "^7.1.0",
+ "@mui/system": "^7.1.1",
"@tsparticles/engine": "^3.8.1",
"@tsparticles/react": "^3.0.0",
"ajv": "^8.17.1",
"ajv-keywords": "^5.1.0",
- "canvas": "^3.1.0",
+ "canvas": "^3.1.1",
"cra-template": "^1.3.0",
"date-fns": "^4.1.0",
- "framer-motion": "^12.15.0",
+ "framer-motion": "^12.19.1",
"fs": "^0.0.1-security",
"i18next": "^25.2.1",
"i18next-browser-languagedetector": "^8.1.0",
@@ -33,19 +33,19 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-helmet": "^6.1.0",
- "react-i18next": "^15.5.2",
+ "react-i18next": "^15.5.3",
"react-tsparticles": "^2.12.2",
- "sass": "^1.89.0",
+ "sass": "^1.89.2",
"tsparticles": "^3.8.1",
"url": "^0.11.4"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
- "@types/node": "^22.15.27",
+ "@types/node": "^24.0.3",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
- "eslint-config-next": "15.3.3",
+ "eslint-config-next": "15.3.4",
"ts-node": "^10.9.2",
"typescript": "^5"
}
@@ -127,9 +127,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.3.tgz",
- "integrity": "sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==",
+ "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"
@@ -409,9 +409,9 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
- "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+ "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -423,10 +423,20 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
+ "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@eslint/core": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
- "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+ "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -437,9 +447,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
- "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -498,13 +508,16 @@
"license": "MIT"
},
"node_modules/@eslint/js": {
- "version": "9.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
- "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
+ "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
@@ -518,13 +531,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
- "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
+ "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.12.0",
+ "@eslint/core": "^0.15.1",
"levn": "^0.4.1"
},
"engines": {
@@ -1023,9 +1036,9 @@
}
},
"node_modules/@mui/core-downloads-tracker": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.0.tgz",
- "integrity": "sha512-E0OqhZv548Qdc0PwWhLVA2zmjJZSTvaL4ZhoswmI8NJEC1tpW2js6LLP827jrW9MEiXYdz3QS6+hask83w74yQ==",
+ "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",
@@ -1033,9 +1046,9 @@
}
},
"node_modules/@mui/icons-material": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.0.tgz",
- "integrity": "sha512-1mUPMAZ+Qk3jfgL5ftRR06ATH/Esi0izHl1z56H+df6cwIlCWG66RXciUqeJCttbOXOQ5y2DCjLZI/4t3Yg3LA==",
+ "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"
@@ -1048,7 +1061,7 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@mui/material": "^7.1.0",
+ "@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"
},
@@ -1059,16 +1072,16 @@
}
},
"node_modules/@mui/material": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.1.0.tgz",
- "integrity": "sha512-ahUJdrhEv+mCp4XHW+tHIEYzZMSRLg8z4AjUOsj44QpD1ZaMxQoVOG2xiHvLFdcsIPbgSRx1bg1eQSheHBgvtg==",
+ "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.0",
- "@mui/system": "^7.1.0",
- "@mui/types": "^7.4.2",
- "@mui/utils": "^7.1.0",
+ "@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",
@@ -1087,7 +1100,7 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material-pigment-css": "^7.1.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"
@@ -1108,13 +1121,13 @@
}
},
"node_modules/@mui/private-theming": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.0.tgz",
- "integrity": "sha512-4Kck4jxhqF6YxNwJdSae1WgDfXVg0lIH6JVJ7gtuFfuKcQCgomJxPvUEOySTFRPz1IZzwz5OAcToskRdffElDA==",
+ "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.0",
+ "@mui/utils": "^7.1.1",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1135,9 +1148,9 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.0.tgz",
- "integrity": "sha512-m0mJ0c6iRC+f9hMeRe0W7zZX1wme3oUX0+XTVHjPG7DJz6OdQ6K/ggEOq7ZdwilcpdsDUwwMfOmvO71qDkYd2w==",
+ "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",
@@ -1169,16 +1182,16 @@
}
},
"node_modules/@mui/system": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.1.0.tgz",
- "integrity": "sha512-iedAWgRJMCxeMHvkEhsDlbvkK+qKf9me6ofsf7twk/jfT4P1ImVf7Rwb5VubEA0sikrVL+1SkoZM41M4+LNAVA==",
+ "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.0",
- "@mui/styled-engine": "^7.1.0",
- "@mui/types": "^7.4.2",
- "@mui/utils": "^7.1.0",
+ "@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"
@@ -1209,9 +1222,9 @@
}
},
"node_modules/@mui/types": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.2.tgz",
- "integrity": "sha512-edRc5JcLPsrlNFYyTPxds+d5oUovuUxnnDtpJUbP6WMeV4+6eaX/mqai1ZIWT62lCOe0nlrON0s9HDiv5en5bA==",
+ "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"
@@ -1226,13 +1239,13 @@
}
},
"node_modules/@mui/utils": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.1.0.tgz",
- "integrity": "sha512-/OM3S8kSHHmWNOP+NH9xEtpYSG10upXeQ0wLZnfDgmgadTAk5F4MQfFLyZ5FCRJENB3eRzltMmaNl6UtDnPovw==",
+ "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.2",
+ "@mui/types": "^7.4.3",
"@types/prop-types": "^15.7.14",
"clsx": "^2.1.1",
"prop-types": "^15.8.1",
@@ -1262,9 +1275,9 @@
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
- "version": "15.3.3",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz",
- "integrity": "sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==",
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz",
+ "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2445,13 +2458,13 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.15.27",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.27.tgz",
- "integrity": "sha512-5fF+eu5mwihV2BeVtX5vijhdaZOfkQTATrePEaXTcKqI16LhJ7gi2/Vhd9OZM0UojcdmiOCVg5rrax+i1MdoQQ==",
+ "version": "24.0.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz",
+ "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~6.21.0"
+ "undici-types": "~7.8.0"
}
},
"node_modules/@types/parse-json": {
@@ -2467,9 +2480,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "19.0.10",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz",
- "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==",
+ "version": "19.1.8",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
+ "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
"license": "MIT",
"dependencies": {
"csstype": "^3.0.2"
@@ -2731,9 +2744,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -3233,14 +3246,14 @@
"license": "CC-BY-4.0"
},
"node_modules/canvas": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.1.0.tgz",
- "integrity": "sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.1.1.tgz",
+ "integrity": "sha512-o8JptL14zrYFYSh5r7ClVzuwG77tvjRBgSJECyIF6AAHpL4MgORhlI+rru3/ZPKtdC7uopl+biESZWz1l/NpFA==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"node-addon-api": "^7.0.0",
- "prebuild-install": "^7.1.1"
+ "prebuild-install": "^7.1.3"
},
"engines": {
"node": "^18.12.0 || >= 20.9.0"
@@ -3864,19 +3877,20 @@
}
},
"node_modules/eslint": {
- "version": "9.21.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz",
- "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
+ "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.19.2",
- "@eslint/core": "^0.12.0",
- "@eslint/eslintrc": "^3.3.0",
- "@eslint/js": "9.21.0",
- "@eslint/plugin-kit": "^0.2.7",
+ "@eslint/config-array": "^0.21.0",
+ "@eslint/config-helpers": "^0.3.0",
+ "@eslint/core": "^0.15.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.32.0",
+ "@eslint/plugin-kit": "^0.3.4",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -3887,9 +3901,9 @@
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.2.0",
- "eslint-visitor-keys": "^4.2.0",
- "espree": "^10.3.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -3924,13 +3938,13 @@
}
},
"node_modules/eslint-config-next": {
- "version": "15.3.3",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.3.tgz",
- "integrity": "sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==",
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.4.tgz",
+ "integrity": "sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@next/eslint-plugin-next": "15.3.3",
+ "@next/eslint-plugin-next": "15.3.4",
"@rushstack/eslint-patch": "^1.10.3",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
@@ -4195,9 +4209,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
- "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -4212,9 +4226,9 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -4249,15 +4263,15 @@
"license": "MIT"
},
"node_modules/espree": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.0"
+ "eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4480,13 +4494,13 @@
}
},
"node_modules/framer-motion": {
- "version": "12.15.0",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.15.0.tgz",
- "integrity": "sha512-XKg/LnKExdLGugZrDILV7jZjI599785lDIJZLxMiiIFidCsy0a4R2ZEf+Izm67zyOuJgQYTHOmodi7igQsw3vg==",
+ "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.15.0",
- "motion-utils": "^12.12.1",
+ "motion-dom": "^12.19.0",
+ "motion-utils": "^12.19.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -5629,18 +5643,18 @@
"license": "MIT"
},
"node_modules/motion-dom": {
- "version": "12.15.0",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.15.0.tgz",
- "integrity": "sha512-D2ldJgor+2vdcrDtKJw48k3OddXiZN1dDLLWrS8kiHzQdYVruh0IoTwbJBslrnTXIPgFED7PBN2Zbwl7rNqnhA==",
+ "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.12.1"
+ "motion-utils": "^12.19.0"
}
},
"node_modules/motion-utils": {
- "version": "12.12.1",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz",
- "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==",
+ "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": {
@@ -6358,12 +6372,12 @@
}
},
"node_modules/react-i18next": {
- "version": "15.5.2",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.5.2.tgz",
- "integrity": "sha512-ePODyXgmZQAOYTbZXQn5rRsSBu3Gszo69jxW6aKmlSgxKAI1fOhDwSu6bT4EKHciWPKQ7v7lPrjeiadR6Gi+1A==",
+ "version": "15.5.3",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.5.3.tgz",
+ "integrity": "sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.25.0",
+ "@babel/runtime": "^7.27.6",
"html-parse-stringify": "^3.0.1"
},
"peerDependencies": {
@@ -6661,9 +6675,9 @@
}
},
"node_modules/sass": {
- "version": "1.89.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz",
- "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==",
+ "version": "1.89.2",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz",
+ "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==",
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
@@ -7188,9 +7202,9 @@
}
},
"node_modules/tar-fs": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz",
- "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
+ "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==",
"license": "MIT",
"dependencies": {
"chownr": "^1.1.1",
@@ -7548,9 +7562,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
+ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
"dev": true,
"license": "MIT"
},
diff --git a/package.json b/package.json
index 222cc20..02f6d8e 100644
--- a/package.json
+++ b/package.json
@@ -14,17 +14,17 @@
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
- "@mui/icons-material": "^7.1.0",
+ "@mui/icons-material": "^7.1.2",
"@mui/material": "^7.1.0",
- "@mui/system": "^7.1.0",
+ "@mui/system": "^7.1.1",
"@tsparticles/engine": "^3.8.1",
"@tsparticles/react": "^3.0.0",
"ajv": "^8.17.1",
"ajv-keywords": "^5.1.0",
- "canvas": "^3.1.0",
+ "canvas": "^3.1.1",
"cra-template": "^1.3.0",
"date-fns": "^4.1.0",
- "framer-motion": "^12.15.0",
+ "framer-motion": "^12.19.1",
"fs": "^0.0.1-security",
"i18next": "^25.2.1",
"i18next-browser-languagedetector": "^8.1.0",
@@ -36,19 +36,19 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-helmet": "^6.1.0",
- "react-i18next": "^15.5.2",
+ "react-i18next": "^15.5.3",
"react-tsparticles": "^2.12.2",
- "sass": "^1.89.0",
+ "sass": "^1.89.2",
"tsparticles": "^3.8.1",
"url": "^0.11.4"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
- "@types/node": "^22.15.27",
+ "@types/node": "^24.0.3",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
- "eslint-config-next": "15.3.3",
+ "eslint-config-next": "15.3.4",
"ts-node": "^10.9.2",
"typescript": "^5"
}
diff --git a/public/cv/en.pdf b/public/cv/en.pdf
index 86e2e29..83edd15 100644
Binary files a/public/cv/en.pdf and b/public/cv/en.pdf differ
diff --git a/public/cv/tr.pdf b/public/cv/tr.pdf
index 7777271..15acfa7 100644
Binary files a/public/cv/tr.pdf and b/public/cv/tr.pdf differ
diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json
index 16520a6..1b5d47e 100644
--- a/public/locales/en/translation.json
+++ b/public/locales/en/translation.json
@@ -5,7 +5,7 @@
},
"hero": {
"title": "Welcome to my Portfolio",
- "subtitle": "Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne, Sora, Rika",
+ "subtitle": "Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne",
"button": "Learn More",
"projects":"Projects",
"about":"About Me"
@@ -30,7 +30,7 @@
"home":"Home",
"projectsnav":"Projects",
"aboutnav":"About",
- "description": "Tayfur Furkan Hayat a.k.a Espe, EspeeeBne, Sora, Rika",
+ "description": "Tayfur Furkan Hayat a.k.a Espe, EspeeeBne",
"contact": "Get in Touch",
"aboutTitle": "About Me",
"projectsTitle": "My Projects",
diff --git a/public/locales/tr/translation.json b/public/locales/tr/translation.json
index 6da023c..2c6bbba 100644
--- a/public/locales/tr/translation.json
+++ b/public/locales/tr/translation.json
@@ -5,7 +5,7 @@
},
"hero": {
"title": "Portfolyoma Hoş geldiniz",
- "subtitle": "Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne, Sora, Rika",
+ "subtitle": "Tayfur Furkan Hayat a.k.a. Espe, EspeeeBne",
"button": "Detaylı Bilgi",
"projects":"Projeler",
"about":"Hakkımda"
@@ -31,7 +31,7 @@
"projectsnav":"Projeler",
"home":"Ana sayfa",
"aboutnav":"Hakkımda",
- "description": "Tayfur Furkan Hayat a.k.a Espe, EspeeeBne, Sora, Rika",
+ "description": "Tayfur Furkan Hayat a.k.a Espe, EspeeeBne",
"contact": "İletişime Geç",
"aboutTitle": "Hakkımda",
"projectsTitle": "Projelerim",
diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx
index 58fa3a7..eac7199 100644
--- a/src/components/Header/Header.tsx
+++ b/src/components/Header/Header.tsx
@@ -2,7 +2,7 @@ import React, { FC, useContext, useState } from 'react';
import NextLink from 'next/link';
import {
Box,
-Drawer,
+SwipeableDrawer,
ListItem,
ListItemText,
Modal,
@@ -14,8 +14,8 @@ MenuItem,
Typography,
} from '@mui/material';
import MenuIcon from '@mui/icons-material/Menu';
-import WbSunnyIcon from '@mui/icons-material/WbSunny';
-import NightlightIcon from '@mui/icons-material/Nightlight';
+import DarkModeIcon from '@mui/icons-material/DarkMode';
+import LightModeIcon from '@mui/icons-material/LightMode';
import TranslateIcon from '@mui/icons-material/Translate';
import CloseIcon from '@mui/icons-material/Close';
import { useTheme } from '@mui/material/styles';
@@ -46,6 +46,10 @@ const isDark = settings.theme === 'dark';
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
const [languageModalOpen, setLanguageModalOpen] = useState(false);
+const iOS =
+ typeof navigator !== 'undefined' &&
+ /iPad|iPhone|iPod/.test(navigator.userAgent);
+
const toggleDrawer = () => setIsDrawerOpen(prev => !prev);
const openLanguageModal = () => setLanguageModalOpen(true);
const closeLanguageModal = () => setLanguageModalOpen(false);
@@ -62,7 +66,7 @@ const changeLanguage = async (lang: string) => {
}
};
-const ThemeIcon = darkMode ? WbSunnyIcon : NightlightIcon;
+const ThemeIcon = darkMode ? LightModeIcon : DarkModeIcon;
const modalVariants = {
hidden: { opacity: 0, scale: 0.8 },
@@ -71,8 +75,8 @@ const modalVariants = {
};
const sidebarVariants = {
- open: { x: 0, transition: { type: 'spring', stiffness: 300, damping: 30 } },
- closed: { x: '-100%', transition: { type: 'spring', stiffness: 300, damping: 30 } },
+ open: { x: 0, transition: { type: "spring" as const, stiffness: 300, damping: 30 } },
+ closed: { x: '-100%', transition: { type: "spring" as const, stiffness: 300, damping: 30 } },
};
const listItemVariants = {
@@ -142,7 +146,14 @@ return (
-