diff --git a/.idea/webResources.xml b/.idea/webResources.xml
new file mode 100644
index 0000000..3432ba4
--- /dev/null
+++ b/.idea/webResources.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/next.config.ts b/next.config.ts
index d5ec5e4..1f7ea33 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,8 +1,17 @@
import type { NextConfig } from 'next';
+import path from 'path';
const nextConfig: NextConfig = {
/* config options here */
output: 'standalone',
+ sassOptions: {
+ includePaths: [path.resolve('./src/core/styles')],
+ prependData: `@import "index.scss";`,
+ },
+ compiler: {
+ removeConsole:
+ process.env.NODE_ENV === 'production' ? { exclude: ['error'] } : false,
+ },
};
export default nextConfig;
diff --git a/package-lock.json b/package-lock.json
index dce7a20..fb3554a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,7 +23,7 @@
"husky": "^9.1.7",
"lint-staged": "^16.1.0",
"prettier": "3.5.3",
- "sass": "^1.89.0",
+ "sass": "1.77.8",
"typescript": "^5"
}
},
@@ -868,330 +868,6 @@
"node": ">=12.4.0"
}
},
- "node_modules/@parcel/watcher": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
- "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.1",
- "@parcel/watcher-darwin-arm64": "2.5.1",
- "@parcel/watcher-darwin-x64": "2.5.1",
- "@parcel/watcher-freebsd-x64": "2.5.1",
- "@parcel/watcher-linux-arm-glibc": "2.5.1",
- "@parcel/watcher-linux-arm-musl": "2.5.1",
- "@parcel/watcher-linux-arm64-glibc": "2.5.1",
- "@parcel/watcher-linux-arm64-musl": "2.5.1",
- "@parcel/watcher-linux-x64-glibc": "2.5.1",
- "@parcel/watcher-linux-x64-musl": "2.5.1",
- "@parcel/watcher-win32-arm64": "2.5.1",
- "@parcel/watcher-win32-ia32": "2.5.1",
- "@parcel/watcher-win32-x64": "2.5.1"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
- "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
- "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
- "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
- "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
- "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
- "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
- "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
- "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
- "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
- "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
- "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
- "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
- "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher/node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1855,6 +1531,20 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -2090,6 +1780,19 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2105,7 +1808,7 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
@@ -2223,19 +1926,41 @@
}
},
"node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
- "readdirp": "^4.0.1"
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
},
"engines": {
- "node": ">= 14.16.0"
+ "node": ">= 8.10.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
"node_modules/cli-cursor": {
@@ -3256,7 +2981,7 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -3319,6 +3044,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -3627,9 +3367,9 @@
}
},
"node_modules/immutable": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz",
- "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
"devOptional": true,
"license": "MIT"
},
@@ -3736,6 +3476,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
@@ -3831,7 +3584,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -3889,7 +3642,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@@ -3915,7 +3668,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -4588,13 +4341,15 @@
}
}
},
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "dev": true,
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "devOptional": true,
"license": "MIT",
- "optional": true
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/object-assign": {
"version": "4.1.1",
@@ -4853,7 +4608,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -5011,17 +4766,16 @@
"license": "MIT"
},
"node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"devOptional": true,
"license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
+ "dependencies": {
+ "picomatch": "^2.2.1"
},
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
+ "engines": {
+ "node": ">=8.10.0"
}
},
"node_modules/reflect.getprototypeof": {
@@ -5224,14 +4978,14 @@
}
},
"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.77.8",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz",
+ "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
- "chokidar": "^4.0.0",
- "immutable": "^5.0.2",
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
@@ -5239,9 +4993,6 @@
},
"engines": {
"node": ">=14.0.0"
- },
- "optionalDependencies": {
- "@parcel/watcher": "^2.4.1"
}
},
"node_modules/scheduler": {
@@ -5815,7 +5566,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
diff --git a/package.json b/package.json
index 79b106d..5e15dfb 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
"husky": "^9.1.7",
"lint-staged": "^16.1.0",
"prettier": "3.5.3",
- "sass": "^1.89.0",
+ "sass": "1.77.8",
"typescript": "^5"
},
"lint-staged": {
diff --git a/public/file.svg b/public/file.svg
deleted file mode 100644
index 004145c..0000000
--- a/public/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/globe.svg b/public/globe.svg
deleted file mode 100644
index 567f17b..0000000
--- a/public/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/images/bg-start-desktop.jpg b/public/images/bg-start-desktop.jpg
new file mode 100644
index 0000000..dae1c98
Binary files /dev/null and b/public/images/bg-start-desktop.jpg differ
diff --git a/public/next.svg b/public/next.svg
deleted file mode 100644
index 5174b28..0000000
--- a/public/next.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/svg/phone-calling.svg b/public/svg/phone-calling.svg
new file mode 100644
index 0000000..0d89577
--- /dev/null
+++ b/public/svg/phone-calling.svg
@@ -0,0 +1,5 @@
+
diff --git a/public/svg/telegram.svg b/public/svg/telegram.svg
new file mode 100644
index 0000000..5155ff9
--- /dev/null
+++ b/public/svg/telegram.svg
@@ -0,0 +1,11 @@
+
diff --git a/public/svg/whatsapp.svg b/public/svg/whatsapp.svg
new file mode 100644
index 0000000..cebd190
--- /dev/null
+++ b/public/svg/whatsapp.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/vercel.svg b/public/vercel.svg
deleted file mode 100644
index 7705396..0000000
--- a/public/vercel.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/window.svg b/public/window.svg
deleted file mode 100644
index b2b2a44..0000000
--- a/public/window.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 60f458f..def1610 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,32 +1,38 @@
import type { Metadata } from 'next';
-import { Geist, Geist_Mono } from 'next/font/google';
-import './globals.css';
+import { Open_Sans } from 'next/font/google';
+import '@core/styles/reset.scss';
+import '@core/styles/globals.scss';
-const geistSans = Geist({
- variable: '--font-geist-sans',
- subsets: ['latin'],
-});
-
-const geistMono = Geist_Mono({
- variable: '--font-geist-mono',
- subsets: ['latin'],
+const openSans = Open_Sans({
+ subsets: ['latin', 'cyrillic'],
+ weight: ['300', '400', '500', '600', '700'],
+ variable: '--open-sans',
});
export const metadata: Metadata = {
- title: 'Пожарная экспертиза',
- description: 'Пожарная экспертиза',
+ title: 'Обследование на соответствие пожарной безопасности',
+ description:
+ 'Полное обследование объекта на соответствие требованиям пожарной безопасности',
+ openGraph: {
+ title: 'Обследование на соответствие пожарной безопасности',
+ description:
+ 'Полное обследование объекта на соответствие требованиям пожарной безопасности',
+ siteName: 'Обследование на соответствие пожарной безопасности',
+ // images: [
+ // {
+ // url: `MetaSR.png`,
+ // alt: 'icon',
+ // },
+ // ],
+ },
};
export default function RootLayout({
children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
+}: Readonly<{ children: React.ReactNode }>) {
return (
-
- {children}
-
+ {children}
);
}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index a861409..c1a248a 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,4 +1,4 @@
-import HomePage from '@pages/home';
+import { HomePage } from '@pages/home';
export default function Home() {
return (
diff --git a/src/shared/.gitkeep b/src/core/constants/.gitkeep
similarity index 100%
rename from src/shared/.gitkeep
rename to src/core/constants/.gitkeep
diff --git a/src/core/styles/functions.scss b/src/core/styles/functions.scss
new file mode 100644
index 0000000..26695ad
--- /dev/null
+++ b/src/core/styles/functions.scss
@@ -0,0 +1,6 @@
+@use 'sass:math';
+
+@function rem($size) {
+ $remSize: math.div($size, $base-font-size);
+ @return $remSize * 1rem;
+}
\ No newline at end of file
diff --git a/src/app/globals.css b/src/core/styles/globals.scss
similarity index 65%
rename from src/app/globals.css
rename to src/core/styles/globals.scss
index e3734be..a252305 100644
--- a/src/app/globals.css
+++ b/src/core/styles/globals.scss
@@ -1,13 +1,6 @@
:root {
--background: #ffffff;
- --foreground: #171717;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
- }
+ --foreground: #333333;
}
html,
@@ -34,9 +27,3 @@ a {
color: inherit;
text-decoration: none;
}
-
-@media (prefers-color-scheme: dark) {
- html {
- color-scheme: dark;
- }
-}
diff --git a/src/core/styles/index.scss b/src/core/styles/index.scss
new file mode 100644
index 0000000..e682ecd
--- /dev/null
+++ b/src/core/styles/index.scss
@@ -0,0 +1,2 @@
+@import './variables.scss';
+@import './mixins.scss';
\ No newline at end of file
diff --git a/src/core/styles/mixins.scss b/src/core/styles/mixins.scss
new file mode 100644
index 0000000..ebe01bb
--- /dev/null
+++ b/src/core/styles/mixins.scss
@@ -0,0 +1,23 @@
+@mixin onlymobile {
+ @media (min-width: 0px) and (max-width: calc($tablet - 1px)) {
+ @content;
+ }
+}
+
+@mixin iftablet {
+ @media (min-width: $tablet) {
+ @content;
+ }
+}
+
+@mixin iflaptop {
+ @media (min-width: $laptop) {
+ @content;
+ }
+}
+
+@mixin ifdesktop {
+ @media (min-width: $desktop) {
+ @content;
+ }
+}
diff --git a/src/core/styles/reset.scss b/src/core/styles/reset.scss
new file mode 100644
index 0000000..0fa9db3
--- /dev/null
+++ b/src/core/styles/reset.scss
@@ -0,0 +1,106 @@
+/* Reset and base styles */
+* {
+ padding: 0;
+ margin: 0;
+ border: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // stop highlights element blue when tapping
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+/* Links */
+
+a,
+a:link,
+a:visited {
+ text-decoration: none;
+ color: unset;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+/* Components */
+
+aside,
+nav,
+footer,
+header,
+section,
+main {
+ display: block;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p {
+ font-size: inherit;
+ font-weight: inherit;
+ margin: 0;
+ padding: 0;
+ //margin-block-start: 0;
+ //margin-block-end: 0;
+}
+
+ul[role='list'], ol[role='list'] {
+ list-style: none;
+}
+
+ul,
+ul li {
+ list-style: none;
+}
+
+/* Form */
+
+input,
+textarea,
+button,
+select {
+ font-family: inherit;
+ font-size: inherit;
+ color: inherit;
+ background-color: transparent;
+}
+
+input::-ms-clear {
+ display: none;
+}
+
+button,
+input[type='submit'] {
+ display: inline-block;
+ box-shadow: none;
+ background-color: transparent;
+ background: none;
+}
+
+input:focus,
+input:active,
+button:focus,
+button:active {
+ outline: none;
+}
+
+button::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+}
+
+img, picture, svg, video, canvas {
+ background-repeat: no-repeat;
+ background-size: cover;
+}
diff --git a/src/core/styles/variables.scss b/src/core/styles/variables.scss
new file mode 100644
index 0000000..c583629
--- /dev/null
+++ b/src/core/styles/variables.scss
@@ -0,0 +1,21 @@
+
+//frontend breakpoint
+$mobile: 360px;
+$tablet: 768px;
+$laptop: 1024px;
+$desktop: 1440px;
+
+//fonts
+$font-open-sans: var(--open-sans), sans-serif;
+
+$font-regular: 500;
+$font-semi-bold: 600;
+
+// colors
+$color-white: #FFFFFF;
+$color-black: #000000;
+$color-orange: #E96526;
+$color-lightgray: #E4E1E1;
+$color-text: #333333;
+$color-text-light: #222222;
+$color-mark: #E96526;
\ No newline at end of file
diff --git a/src/pages/home/home.module.scss b/src/pages/home/home.module.scss
new file mode 100644
index 0000000..c07779c
--- /dev/null
+++ b/src/pages/home/home.module.scss
@@ -0,0 +1,106 @@
+.Start {
+ padding: 0px 160px 0px;
+
+ &_BgWrapper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 900px;
+ z-index: -1;
+
+ & img {
+ object-fit: cover;
+ filter: brightness(0.5);
+ }
+ }
+}
+
+.Header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1px solid $color-white;
+ height: 80px;
+
+ .Logo {
+ color: $color-white;
+ }
+
+ .Buttons {
+ color: $color-white;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: 30px;
+
+ .Icon {
+ width: 60px;
+ height: 60px;
+ cursor: pointer;
+ }
+
+ .Button {
+ display: flex;
+ flex-direction: row;
+ gap: 16px;
+ height: 48px;
+ padding: 24px;
+ }
+ }
+}
+
+.Info {
+ display: flex;
+ flex-direction: row;
+ padding: 160px 0 200px;
+
+ .Content {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ gap: 60px;
+
+ .Title {
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: 60px;
+ line-height: 1;
+ color: $color-white;
+ max-width: 960px;
+ }
+
+ .List {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ gap: 16px;
+ }
+
+ .ListItem {
+ font-family: $font-open-sans;
+ font-weight: $font-semi-bold;
+ font-size: 26px;
+ line-height: 1;
+ color: $color-white;
+ }
+ }
+
+ .Phone {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ flex-basis: 40%;
+ gap: 40px;
+
+ .Title {
+ font-family: $font-open-sans;
+ font-weight: $font-semi-bold;
+ font-size: 60px;
+ line-height: 1;
+ color: $color-white;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/home/home.tsx b/src/pages/home/home.tsx
new file mode 100644
index 0000000..19a513c
--- /dev/null
+++ b/src/pages/home/home.tsx
@@ -0,0 +1,57 @@
+import s from './home.module.scss';
+import { Button } from '@shared/ui';
+import waIcon from '@public/svg/whatsapp.svg';
+import tgIcon from '@public/svg/telegram.svg';
+import callBtn from '@public/svg/phone-calling.svg';
+import bgStart from '@public/images/bg-start-desktop.jpg';
+import Image from 'next/image';
+
+export default function Home() {
+ return (
+
+
+
+
+
+
Пожарная экспертиза
+
+
+
+
+
+
+
+
+
+ Полное обследование объекта на соответствие требованиям пожарной
+ безопасности
+
+
+ -
+ Пожарно-техническое обследование (пожарный аудит)
+
+ - Расчёт пожарного риска
+ -
+ Сокращение затрат на модернизацию пожарных систем
+
+
+
+
+
+7 999 123 45 67
+
+
+
+
+ );
+}
diff --git a/src/pages/home/index.tsx b/src/pages/home/index.tsx
index a293211..77ef521 100644
--- a/src/pages/home/index.tsx
+++ b/src/pages/home/index.tsx
@@ -1 +1 @@
-export { default } from './ui/Home';
+export { default as HomePage } from './home';
diff --git a/src/pages/home/ui/Home.module.scss b/src/pages/home/ui/Home.module.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/home/ui/Home.tsx b/src/pages/home/ui/Home.tsx
deleted file mode 100644
index 6164505..0000000
--- a/src/pages/home/ui/Home.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-function Home() {
- return Home;
-}
-
-export default Home;
diff --git a/src/shared/ui/button/button.module.scss b/src/shared/ui/button/button.module.scss
new file mode 100644
index 0000000..18fb351
--- /dev/null
+++ b/src/shared/ui/button/button.module.scss
@@ -0,0 +1,46 @@
+.Button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 13px 33px;
+ border-radius: 28px;
+
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: 24px;
+ line-height: 1;
+
+ transition: all 0.15s linear;
+ white-space: nowrap;
+
+
+ svg {
+ width: 18px;
+ height: 18px;
+ //fill: var(--text-primary);
+
+ margin-right: 18px;
+ }
+
+ &:hover {
+ cursor: pointer;
+ }
+
+ &:hover svg {
+ fill: var(--white);
+ }
+
+ &_default {
+ background: $color-lightgray;
+ color: $color-text;
+ }
+
+ &_orange {
+ background: $color-orange;
+ color: $color-white;
+ }
+
+ &_disabled {
+ cursor: not-allowed;
+ }
+}
\ No newline at end of file
diff --git a/src/shared/ui/button/button.tsx b/src/shared/ui/button/button.tsx
new file mode 100644
index 0000000..7e58bce
--- /dev/null
+++ b/src/shared/ui/button/button.tsx
@@ -0,0 +1,39 @@
+import s from './button.module.scss';
+import { FunctionComponent, HTMLAttributes, ReactNode, SVGProps } from 'react';
+import { clsx } from 'clsx';
+
+type ButtonProps = {
+ className?: string;
+ children?: ReactNode;
+ disabled?: boolean;
+ Icon?: FunctionComponent>;
+ onClick?: () => void;
+ variant?: 'default' | 'orange' | 'ghost';
+} & HTMLAttributes;
+
+export default function Button({
+ className,
+ children,
+ onClick,
+ Icon,
+ disabled,
+ variant = 'default',
+ ...props
+}: ButtonProps) {
+ return (
+
+ );
+}
diff --git a/src/shared/ui/button/index.ts b/src/shared/ui/button/index.ts
new file mode 100644
index 0000000..31d66cb
--- /dev/null
+++ b/src/shared/ui/button/index.ts
@@ -0,0 +1 @@
+export { default as Button } from './button';
diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts
new file mode 100644
index 0000000..a039b75
--- /dev/null
+++ b/src/shared/ui/index.ts
@@ -0,0 +1 @@
+export { Button } from './button';
diff --git a/tsconfig.json b/tsconfig.json
index 841a965..aed8a19 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -23,7 +23,8 @@
"@core/*": ["./src/core/*"],
"@pages/*": ["./src/pages/*"],
"@widgets/*": ["./src/widgets/*"],
- "@shared/*": ["./src/shared/*"]
+ "@shared/*": ["./src/shared/*"],
+ "@public/*": ["./public/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],