final product
|
|
@ -0,0 +1,33 @@
|
||||||
|
# dependencies (bun install)
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# output
|
||||||
|
out
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# code coverage
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# logs
|
||||||
|
logs
|
||||||
|
_.log
|
||||||
|
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||||
|
|
||||||
|
# dotenv environment variable files
|
||||||
|
.env
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
.env.local
|
||||||
|
|
||||||
|
# caches
|
||||||
|
.eslintcache
|
||||||
|
.cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# IntelliJ based IDEs
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Finder (MacOS) folder config
|
||||||
|
.DS_Store
|
||||||
|
|
@ -0,0 +1,177 @@
|
||||||
|
{
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"workspaces": {
|
||||||
|
"": {
|
||||||
|
"name": "netijeli-binyat",
|
||||||
|
"dependencies": {
|
||||||
|
"@fontsource-variable/manrope": "^5.2.8",
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/bun": "latest",
|
||||||
|
"tailwindcss": "^3.4",
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^5",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
|
||||||
|
|
||||||
|
"@fontsource-variable/manrope": ["@fontsource-variable/manrope@5.2.8", "", {}, "sha512-nc9lOuCRz73UHnovDE2bwXUdghE2SEOc7Aii0qGe3CLyE03W1a7VnY5Z6euRiapiKbCkGS+eXbY3s/kvWeGeSw=="],
|
||||||
|
|
||||||
|
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
|
||||||
|
|
||||||
|
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
|
||||||
|
|
||||||
|
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
|
||||||
|
|
||||||
|
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
|
||||||
|
|
||||||
|
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
|
||||||
|
|
||||||
|
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
|
||||||
|
|
||||||
|
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
|
||||||
|
|
||||||
|
"@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="],
|
||||||
|
|
||||||
|
"@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="],
|
||||||
|
|
||||||
|
"any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="],
|
||||||
|
|
||||||
|
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
|
||||||
|
|
||||||
|
"arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="],
|
||||||
|
|
||||||
|
"binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
|
||||||
|
|
||||||
|
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
||||||
|
|
||||||
|
"bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="],
|
||||||
|
|
||||||
|
"camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="],
|
||||||
|
|
||||||
|
"chokidar": ["chokidar@3.6.0", "", { "dependencies": { "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" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
|
||||||
|
|
||||||
|
"commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="],
|
||||||
|
|
||||||
|
"cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
|
||||||
|
|
||||||
|
"didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="],
|
||||||
|
|
||||||
|
"dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="],
|
||||||
|
|
||||||
|
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
|
||||||
|
|
||||||
|
"fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
|
||||||
|
|
||||||
|
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
|
||||||
|
|
||||||
|
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
||||||
|
|
||||||
|
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
||||||
|
|
||||||
|
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
|
||||||
|
|
||||||
|
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
|
||||||
|
|
||||||
|
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
|
||||||
|
|
||||||
|
"is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
|
||||||
|
|
||||||
|
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
|
||||||
|
|
||||||
|
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
||||||
|
|
||||||
|
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
|
||||||
|
|
||||||
|
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
||||||
|
|
||||||
|
"jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="],
|
||||||
|
|
||||||
|
"lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="],
|
||||||
|
|
||||||
|
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
|
||||||
|
|
||||||
|
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
|
||||||
|
|
||||||
|
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
||||||
|
|
||||||
|
"mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="],
|
||||||
|
|
||||||
|
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
|
||||||
|
|
||||||
|
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||||
|
|
||||||
|
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
||||||
|
|
||||||
|
"object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="],
|
||||||
|
|
||||||
|
"path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
|
||||||
|
|
||||||
|
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
||||||
|
|
||||||
|
"picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
|
||||||
|
|
||||||
|
"pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="],
|
||||||
|
|
||||||
|
"pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="],
|
||||||
|
|
||||||
|
"postcss": ["postcss@8.5.9", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw=="],
|
||||||
|
|
||||||
|
"postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="],
|
||||||
|
|
||||||
|
"postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="],
|
||||||
|
|
||||||
|
"postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="],
|
||||||
|
|
||||||
|
"postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="],
|
||||||
|
|
||||||
|
"postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="],
|
||||||
|
|
||||||
|
"postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
|
||||||
|
|
||||||
|
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
|
||||||
|
|
||||||
|
"read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="],
|
||||||
|
|
||||||
|
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
|
||||||
|
|
||||||
|
"resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
||||||
|
|
||||||
|
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
|
||||||
|
|
||||||
|
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
|
||||||
|
|
||||||
|
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
||||||
|
|
||||||
|
"sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="],
|
||||||
|
|
||||||
|
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
|
||||||
|
|
||||||
|
"tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="],
|
||||||
|
|
||||||
|
"thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="],
|
||||||
|
|
||||||
|
"thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="],
|
||||||
|
|
||||||
|
"tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
|
||||||
|
|
||||||
|
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
||||||
|
|
||||||
|
"ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
|
||||||
|
|
||||||
|
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
||||||
|
|
||||||
|
"undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
|
||||||
|
|
||||||
|
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
|
||||||
|
|
||||||
|
"chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
||||||
|
|
||||||
|
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
||||||
|
|
||||||
|
"tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,439 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html lang="ru" class="scroll-smooth">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<link rel="icon" type="image/png" href="public/favicon.png">
|
||||||
|
<link rel="apple-touch-icon" href="public/apple-touch-icon.png">
|
||||||
|
<link rel="preload" as="image" href="public/logo.png" fetchpriority="high">
|
||||||
|
<link rel="preload" as="image" href="public/logo-hero.png" fetchpriority="high">
|
||||||
|
<link rel="preload" as="image" href="public/hero-back-poster.jpg">
|
||||||
|
<link rel="preload" as="font" type="font/woff2" href="public/fonts/inter/InterVariable.woff2" crossorigin>
|
||||||
|
<link rel="stylesheet" href="dist/styles.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="text-on-surface">
|
||||||
|
<!-- TopNavBar -->
|
||||||
|
<nav
|
||||||
|
class="bg-[#f7f9fb]/80 backdrop-blur-xl docked full-width top-0 sticky z-50 transition-all border-b border-outline-variant/10">
|
||||||
|
<div class="flex justify-between items-center px-4 md:px-8 lg:px-12 py-4 md:py-6 w-full max-w-screen-2xl mx-auto">
|
||||||
|
<a href="#">
|
||||||
|
<img src="public/logo.png" alt="Netijeli Binyat" class="h-8 md:h-10" fetchpriority="high">
|
||||||
|
</a>
|
||||||
|
<div class="hidden lg:flex space-x-10 items-center font-['Manrope'] font-bold tracking-tight">
|
||||||
|
<a class="text-[#2a3439]/70 hover:text-[#3a5f94] transition-colors duration-300" href="#about" data-i18n="nav_about">О нас</a>
|
||||||
|
<a class="text-[#2a3439]/70 hover:text-[#3a5f94] transition-colors duration-300"
|
||||||
|
href="#services" data-i18n="nav_services">Услуги</a>
|
||||||
|
<a class="text-[#2a3439]/70 hover:text-[#3a5f94] transition-colors duration-300"
|
||||||
|
href="#projects" data-i18n="nav_projects">Проекты</a>
|
||||||
|
<a class="text-[#2a3439]/70 hover:text-[#3a5f94] transition-colors duration-300"
|
||||||
|
href="#current-works" data-i18n="nav_current_works">Текущие работы</a>
|
||||||
|
<a class="text-[#2a3439]/70 hover:text-[#3a5f94] transition-colors duration-300"
|
||||||
|
href="#contacts" data-i18n="nav_contacts">Контакты</a>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center space-x-4 md:space-x-6">
|
||||||
|
<div class="hidden md:flex items-center gap-1" id="lang-switcher">
|
||||||
|
<button onclick="setLang('ru')" class="lang-btn text-sm font-bold px-2 py-1 rounded-sm transition-all" data-lang="ru">RU</button>
|
||||||
|
<span class="text-[#2a3439]/30 text-sm">/</span>
|
||||||
|
<button onclick="setLang('en')" class="lang-btn text-sm font-bold px-2 py-1 rounded-sm transition-all" data-lang="en">EN</button>
|
||||||
|
<!-- <span class="text-[#2a3439]/30 text-sm">/</span>
|
||||||
|
<button onclick="setLang('tk')" class="lang-btn text-sm font-bold px-2 py-1 rounded-sm transition-all" data-lang="tk">TK</button> -->
|
||||||
|
</div>
|
||||||
|
<a href="#contacts"
|
||||||
|
class="bg-primary text-on-primary px-4 py-2 md:px-6 text-sm font-bold rounded-sm hover:bg-primary-dim transition-all active:opacity-80" data-i18n="nav_contact_btn">
|
||||||
|
Связаться
|
||||||
|
</a>
|
||||||
|
<button id="hamburger-btn" class="lg:hidden flex items-center justify-center w-10 h-10 text-on-surface" aria-label="Menu">
|
||||||
|
<span class="material-symbols-outlined text-2xl">menu</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!-- Mobile Drawer -->
|
||||||
|
<div id="drawer-backdrop" class="drawer-backdrop fixed inset-0 bg-black/40 z-[60]"></div>
|
||||||
|
<aside id="mobile-drawer" class="mobile-drawer fixed top-0 right-0 h-full w-72 bg-[#f7f9fb] z-[70] shadow-2xl flex flex-col">
|
||||||
|
<div class="flex justify-between items-center px-6 py-5 border-b border-outline-variant/20">
|
||||||
|
<span class="font-bold text-primary font-['Manrope']">Netijeli binyat</span>
|
||||||
|
<button id="drawer-close" class="w-10 h-10 flex items-center justify-center text-on-surface">
|
||||||
|
<span class="material-symbols-outlined">close</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col py-4 flex-grow font-['Manrope'] font-bold">
|
||||||
|
<a class="px-6 py-4 text-[#2a3439]/70 hover:bg-surface-container transition-colors" href="#about" data-i18n="nav_about" onclick="closeDrawer()">О нас</a>
|
||||||
|
<a class="px-6 py-4 text-[#2a3439]/70 hover:bg-surface-container transition-colors" href="#services" data-i18n="nav_services" onclick="closeDrawer()">Услуги</a>
|
||||||
|
<a class="px-6 py-4 text-[#2a3439]/70 hover:bg-surface-container transition-colors" href="#projects" data-i18n="nav_projects" onclick="closeDrawer()">Проекты</a>
|
||||||
|
<a class="px-6 py-4 text-[#2a3439]/70 hover:bg-surface-container transition-colors" href="#current-works" data-i18n="nav_current_works" onclick="closeDrawer()">Текущие работы</a>
|
||||||
|
<a class="px-6 py-4 text-[#2a3439]/70 hover:bg-surface-container transition-colors" href="#contacts" data-i18n="nav_contacts" onclick="closeDrawer()">Контакты</a>
|
||||||
|
</div>
|
||||||
|
<div class="px-6 py-6 border-t border-outline-variant/20">
|
||||||
|
<div class="flex items-center gap-2" id="lang-switcher-mobile">
|
||||||
|
<button onclick="setLang('ru')" class="lang-btn text-sm font-bold px-2 py-1 rounded-sm transition-all" data-lang="ru">RU</button>
|
||||||
|
<span class="text-[#2a3439]/30 text-sm">/</span>
|
||||||
|
<button onclick="setLang('en')" class="lang-btn text-sm font-bold px-2 py-1 rounded-sm transition-all" data-lang="en">EN</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<section class="relative h-[80vh] md:h-screen flex items-center overflow-hidden bg-background">
|
||||||
|
<div class="absolute inset-0 z-0">
|
||||||
|
<div class="absolute inset-0 bg-gradient-to-r from-background via-background/80 to-transparent z-10"></div>
|
||||||
|
<img class="w-full h-full object-cover md:hidden" src="public/hero-back-poster.jpg" alt="Hero background" />
|
||||||
|
<video class="w-full h-full object-cover hidden md:block" autoplay muted loop playsinline preload="metadata" poster="public/hero-back-poster.jpg">
|
||||||
|
<source src="public/hero-back-video.webm" type="video/webm">
|
||||||
|
<source src="public/hero-back-video.mp4" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
</div>
|
||||||
|
<div class="relative z-20 max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12 w-full grid grid-cols-1 lg:grid-cols-2 gap-12">
|
||||||
|
<div class="flex flex-col justify-center">
|
||||||
|
<img src="public/logo-hero.png" alt="Netijeli Binyat" class="h-20 md:h-28 lg:h-36 w-auto object-contain mb-4 md:mb-6 self-start" fetchpriority="high">
|
||||||
|
<p class="text-lg md:text-xl lg:text-2xl font-medium text-on-surface mb-3 md:mb-4" data-i18n="hero_subtitle">Надёжное строительство и инженерные решения</p>
|
||||||
|
<p class="text-sm md:text-base text-on-surface-variant max-w-md mb-6 md:mb-10 leading-relaxed font-body" data-i18n="hero_desc">
|
||||||
|
Профессиональный подход к реализации сложных инфраструктурных задач. Мы строим будущее, опираясь на опыт и точность.
|
||||||
|
</p>
|
||||||
|
<div class="flex flex-col sm:flex-row gap-3 sm:gap-4">
|
||||||
|
<a href="#contacts"
|
||||||
|
class="bg-primary text-on-primary px-6 py-3 md:px-8 md:py-4 font-bold rounded-sm flex items-center justify-center gap-2 hover:bg-primary-dim transition-all" data-i18n-html="hero_contact_btn">
|
||||||
|
Связаться
|
||||||
|
<span class="material-symbols-outlined text-sm">arrow_forward</span>
|
||||||
|
</a>
|
||||||
|
<a href="#services"
|
||||||
|
class="bg-surface-container-high text-on-surface px-6 py-3 md:px-8 md:py-4 font-bold rounded-sm hover:bg-surface-container-highest transition-all text-center" data-i18n="hero_services_btn">
|
||||||
|
Наши услуги
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- About Section: Architectural Grid -->
|
||||||
|
<section class="py-16 md:py-24 lg:py-32 bg-surface-container-low" id="about">
|
||||||
|
<div class="max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12 grid grid-cols-1 md:grid-cols-12 gap-8 md:gap-12 items-center">
|
||||||
|
<div class="md:col-span-5 relative">
|
||||||
|
<div class="aspect-[3/4] bg-surface-container overflow-hidden flex items-center justify-center p-8 md:p-12">
|
||||||
|
<img class="w-full h-auto object-contain" src="public/logo-hero.png" alt="Netijeli Binyat" loading="lazy" decoding="async" />
|
||||||
|
</div>
|
||||||
|
<div class="absolute -bottom-8 -right-8 bg-primary p-12 text-on-primary hidden lg:block shadow-2xl">
|
||||||
|
<div class="text-5xl font-black">2021</div>
|
||||||
|
<div class="text-xs uppercase tracking-[0.2em] opacity-80" data-i18n="year_established">Год основания</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="md:col-span-7 md:pl-16">
|
||||||
|
<span class="text-primary text-sm font-bold tracking-widest uppercase mb-4 block" data-i18n="about_label">О компании</span>
|
||||||
|
<h2 class="text-3xl md:text-4xl lg:text-5xl font-extrabold text-on-surface mb-6 md:mb-8 tracking-tight" data-i18n="about_title">Лицензированная деятельность и
|
||||||
|
гарантия качества</h2>
|
||||||
|
<p class="text-base md:text-lg text-on-surface-variant mb-8 md:mb-12 leading-relaxed" data-i18n="about_desc">
|
||||||
|
С 2021 года «Netijeli binyat» осуществляет профессиональную деятельность в строительном секторе. Мы
|
||||||
|
объединяем глубокую техническую экспертизу с современными технологиями управления проектами.
|
||||||
|
</p>
|
||||||
|
<div class="grid grid-cols-1 sm:grid-cols-3 gap-6 md:gap-8">
|
||||||
|
<div>
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl mb-4">architecture</span>
|
||||||
|
<h4 class="font-bold text-on-surface mb-2" data-i18n="experience">Опыт</h4>
|
||||||
|
<p class="text-sm text-on-surface-variant" data-i18n="experience_desc">Команда экспертов с многолетним стажем работы.</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl mb-4">verified</span>
|
||||||
|
<h4 class="font-bold text-on-surface mb-2" data-i18n="quality">Качество</h4>
|
||||||
|
<p class="text-sm text-on-surface-variant" data-i18n="quality_desc">Строгое соответствие международным стандартам.</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl mb-4">account_tree</span>
|
||||||
|
<h4 class="font-bold text-on-surface mb-2" data-i18n="comprehensive">Комплекс</h4>
|
||||||
|
<p class="text-sm text-on-surface-variant" data-i18n="comprehensive_desc">Реализация проектов от котлована до ввода.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Updated Services Section -->
|
||||||
|
<section class="py-16 md:py-24 lg:py-32 bg-white" id="services">
|
||||||
|
<div class="max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12">
|
||||||
|
<div class="mb-10 md:mb-16 lg:mb-20 text-center md:text-left">
|
||||||
|
<h2 class="text-3xl md:text-5xl lg:text-6xl font-black text-on-surface tracking-tighter uppercase leading-none mb-4 md:mb-6" data-i18n="services_title">Услуги</h2>
|
||||||
|
<div class="w-20 h-2 bg-primary mb-8 hidden md:block"></div>
|
||||||
|
<p class="text-base md:text-lg lg:text-xl text-on-surface-variant max-w-2xl" data-i18n="services_desc">Мы предоставляем полный спектр строительных и
|
||||||
|
инженерных работ любой сложности с соблюдением высших стандартов индустрии.</p>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-px bg-outline-variant/20 border border-outline-variant/20">
|
||||||
|
<!-- Construction -->
|
||||||
|
<div class="bg-white p-6 md:p-8 lg:p-12 hover:bg-primary transition-all duration-500 group flex flex-col h-full">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-5xl text-primary group-hover:text-on-primary mb-8 transition-colors">home_work</span>
|
||||||
|
<h3
|
||||||
|
class="text-2xl font-black text-on-surface group-hover:text-on-primary mb-4 uppercase tracking-tight transition-colors" data-i18n="construction">
|
||||||
|
Строительство</h3>
|
||||||
|
<p class="text-on-surface-variant group-hover:text-on-primary/80 mb-8 flex-grow transition-colors" data-i18n="construction_desc">
|
||||||
|
Возведение современных жилых и коммерческих зданий с использованием передовых технологий и
|
||||||
|
экологичных материалов.</p>
|
||||||
|
</div>
|
||||||
|
<!-- Reconstruction -->
|
||||||
|
<div class="bg-white p-6 md:p-8 lg:p-12 hover:bg-primary transition-all duration-500 group flex flex-col h-full">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-5xl text-primary group-hover:text-on-primary mb-8 transition-colors">handyman</span>
|
||||||
|
<h3
|
||||||
|
class="text-2xl font-black text-on-surface group-hover:text-on-primary mb-4 uppercase tracking-tight transition-colors" data-i18n="reconstruction">
|
||||||
|
Реконструкция</h3>
|
||||||
|
<p class="text-on-surface-variant group-hover:text-on-primary/80 mb-8 flex-grow transition-colors" data-i18n="reconstruction_desc">
|
||||||
|
Профессиональное восстановление, усиление конструкций и капитальный ремонт объектов любой
|
||||||
|
сложности.</p>
|
||||||
|
</div>
|
||||||
|
<!-- Engineering -->
|
||||||
|
<div class="bg-white p-6 md:p-8 lg:p-12 hover:bg-primary transition-all duration-500 group flex flex-col h-full">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-5xl text-primary group-hover:text-on-primary mb-8 transition-colors">settings_input_component</span>
|
||||||
|
<h3
|
||||||
|
class="text-2xl font-black text-on-surface group-hover:text-on-primary mb-4 uppercase tracking-tight transition-colors" data-i18n="engineering">
|
||||||
|
Инженерные системы</h3>
|
||||||
|
<p class="text-on-surface-variant group-hover:text-on-primary/80 mb-8 flex-grow transition-colors" data-i18n="engineering_desc">
|
||||||
|
Монтаж и обслуживание систем водоснабжения, канализации, отопления и вентиляции по мировым
|
||||||
|
стандартам.</p>
|
||||||
|
</div>
|
||||||
|
<!-- Electrical -->
|
||||||
|
<div class="bg-white p-6 md:p-8 lg:p-12 hover:bg-primary transition-all duration-500 group flex flex-col h-full">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-5xl text-primary group-hover:text-on-primary mb-8 transition-colors">bolt</span>
|
||||||
|
<h3
|
||||||
|
class="text-2xl font-black text-on-surface group-hover:text-on-primary mb-4 uppercase tracking-tight transition-colors" data-i18n="electrical">
|
||||||
|
Электромонтаж</h3>
|
||||||
|
<p class="text-on-surface-variant group-hover:text-on-primary/80 mb-8 flex-grow transition-colors" data-i18n="electrical_desc">
|
||||||
|
Полный комплекс электромонтажных работ: от проектирования сетей до установки сложного
|
||||||
|
промышленного оборудования.</p>
|
||||||
|
</div>
|
||||||
|
<!-- Landscaping -->
|
||||||
|
<div class="bg-white p-6 md:p-8 lg:p-12 hover:bg-primary transition-all duration-500 group flex flex-col h-full">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-5xl text-primary group-hover:text-on-primary mb-8 transition-colors">forest</span>
|
||||||
|
<h3
|
||||||
|
class="text-2xl font-black text-on-surface group-hover:text-on-primary mb-4 uppercase tracking-tight transition-colors" data-i18n="landscaping">
|
||||||
|
Благоустройство</h3>
|
||||||
|
<p class="text-on-surface-variant group-hover:text-on-primary/80 mb-8 flex-grow transition-colors" data-i18n="landscaping_desc">
|
||||||
|
Профессиональное озеленение, создание парковых зон и ландшафтный дизайн для частных и
|
||||||
|
общественных территорий.</p>
|
||||||
|
</div>
|
||||||
|
<!-- Consulting / More -->
|
||||||
|
<div class="bg-surface-container-low p-6 md:p-8 lg:p-12 flex flex-col justify-center items-center text-center">
|
||||||
|
<p class="text-on-surface-variant font-medium mb-6" data-i18n="consultation_text">Нужна консультация по специальному проекту?</p>
|
||||||
|
<a href="#contacts"
|
||||||
|
class="bg-primary text-on-primary px-8 py-3 font-bold text-sm uppercase tracking-widest hover:bg-primary-dim transition-all shadow-lg shadow-primary/20" data-i18n="nav_contact_btn">
|
||||||
|
Связаться
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Projects Section -->
|
||||||
|
<section class="py-16 md:py-24 lg:py-32 bg-surface-container-low" id="projects">
|
||||||
|
<div class="max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12">
|
||||||
|
<h2 class="text-3xl md:text-4xl lg:text-5xl font-black text-on-surface mb-8 md:mb-12 lg:mb-16 tracking-tight" data-i18n="completed_projects">Реализованные проекты</h2>
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-px bg-outline-variant overflow-hidden">
|
||||||
|
<!-- Project 1: Water Treatment Plant -->
|
||||||
|
<div class="group relative bg-background overflow-hidden aspect-video lg:aspect-square">
|
||||||
|
<div class="carousel absolute inset-0" data-autoplay="4000">
|
||||||
|
<img class="carousel-slide active w-full h-full object-cover" loading="lazy" decoding="async" src="public/Tejen-SAD_1.webp" alt="Water treatment plant aerial view" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Tejen-SAD_2.webp" alt="Water treatment plant wide view" />
|
||||||
|
<button class="carousel-prev" aria-label="Previous">‹</button>
|
||||||
|
<button class="carousel-next" aria-label="Next">›</button>
|
||||||
|
<div class="carousel-dots"></div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-primary/80 opacity-0 group-hover:opacity-100 transition-opacity duration-500 p-4 md:p-8 lg:p-12 flex flex-col justify-end text-on-primary z-20">
|
||||||
|
<h4 class="text-xl md:text-2xl lg:text-3xl font-bold mb-2" data-i18n="project1_title">Водоочистная станция в г. Теджен</h4>
|
||||||
|
<p class="text-sm opacity-90" data-i18n="project1_desc">Строительство водоочистной станции мощностью 30 000 м³ в сутки в городе Теджен Ахалского велаята — завершён 2024 г.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Project 2: Power Supply System -->
|
||||||
|
<div class="group relative bg-background overflow-hidden aspect-video lg:aspect-square">
|
||||||
|
<div class="carousel absolute inset-0" data-autoplay="4000">
|
||||||
|
<img class="carousel-slide active w-full h-full object-cover" loading="lazy" decoding="async" src="public/Elektrika_4.webp" alt="Power lines near facility" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Elektrika_1.webp" alt="Power lines in green field" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Elektrika_2.webp" alt="Power line infrastructure" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Elektrika_3.webp" alt="Power lines in desert" />
|
||||||
|
<button class="carousel-prev" aria-label="Previous">‹</button>
|
||||||
|
<button class="carousel-next" aria-label="Next">›</button>
|
||||||
|
<div class="carousel-dots"></div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-primary/80 opacity-0 group-hover:opacity-100 transition-opacity duration-500 p-4 md:p-8 lg:p-12 flex flex-col justify-end text-on-primary z-20">
|
||||||
|
<h4 class="text-xl md:text-2xl lg:text-3xl font-bold mb-2" data-i18n="project2_title">Электроснабжение водоочистной станции</h4>
|
||||||
|
<p class="text-sm opacity-90" data-i18n="project2_desc">Строительно-монтажные работы по внешней системе электроснабжения водоочистной станции мощностью 30 000 м³ в сутки в г. Теджен — завершён 2026 г.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Current Projects: Tonal Layout -->
|
||||||
|
<section class="py-16 md:py-24 lg:py-32 bg-primary text-on-primary" id="current-works">
|
||||||
|
<div class="max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12">
|
||||||
|
<h2 class="text-3xl md:text-4xl lg:text-5xl font-black mb-4 md:mb-6 tracking-tight uppercase leading-none" data-i18n-html="current_projects_title">Текущие <br /> проекты</h2>
|
||||||
|
<p class="text-base md:text-lg lg:text-xl text-primary-fixed mb-10 md:mb-16 lg:mb-20 max-w-2xl leading-relaxed" data-i18n="current_projects_desc">
|
||||||
|
В настоящее время частное предприятие «Netijeli binyat» осуществляет следующие строительно-монтажные работы:
|
||||||
|
</p>
|
||||||
|
<!-- Current Project 1: text left, carousel right -->
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 md:gap-12 items-center mb-12 md:mb-24">
|
||||||
|
<div>
|
||||||
|
<span class="text-xs uppercase font-bold tracking-widest text-primary-fixed/60" data-i18n="current1_status">Статус: В процессе</span>
|
||||||
|
<h3 class="text-xl md:text-2xl lg:text-3xl font-black mt-2 mb-4 uppercase tracking-tight" data-i18n="current1_title">Водоочистная станция в Бабадайханском районе</h3>
|
||||||
|
<p class="text-primary-fixed leading-relaxed" data-i18n="current1_desc">Строительство водоочистной станции мощностью 20 000 м³ в сутки в Бабадайханском районе Ахалского велаята (Туркменистан).</p>
|
||||||
|
</div>
|
||||||
|
<div class="relative aspect-video overflow-hidden">
|
||||||
|
<div class="carousel absolute inset-0" data-autoplay="4000">
|
||||||
|
<img class="carousel-slide active w-full h-full object-cover" loading="lazy" decoding="async" src="public/babadayhan_1.webp" alt="Babadayhan water treatment 1" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/babadayhan_2.webp" alt="Babadayhan water treatment 2" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/babadayhan_3.webp" alt="Babadayhan water treatment 3" />
|
||||||
|
<button class="carousel-prev" aria-label="Previous">‹</button>
|
||||||
|
<button class="carousel-next" aria-label="Next">›</button>
|
||||||
|
<div class="carousel-dots"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Current Project 2: carousel left, text right -->
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 md:gap-12 items-center">
|
||||||
|
<div class="relative aspect-video overflow-hidden order-2 lg:order-1">
|
||||||
|
<div class="carousel absolute inset-0" data-autoplay="4000">
|
||||||
|
<img class="carousel-slide active w-full h-full object-cover" loading="lazy" decoding="async" src="public/Garashsyzlyk_1.webp" alt="Garashsyzlyk water supply 1" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Garashsyzlyk_2.webp" alt="Garashsyzlyk water supply 2" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Garashsyzlyk_3.webp" alt="Garashsyzlyk water supply 3" />
|
||||||
|
<img class="carousel-slide w-full h-full object-cover" loading="lazy" decoding="async" src="public/Garashsyzlyk_4.webp" alt="Garashsyzlyk water supply 4" />
|
||||||
|
<button class="carousel-prev" aria-label="Previous">‹</button>
|
||||||
|
<button class="carousel-next" aria-label="Next">›</button>
|
||||||
|
<div class="carousel-dots"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="order-1 lg:order-2">
|
||||||
|
<span class="text-xs uppercase font-bold tracking-widest text-primary-fixed/60" data-i18n="current2_status">Статус: В процессе</span>
|
||||||
|
<h3 class="text-xl md:text-2xl lg:text-3xl font-black mt-2 mb-4 uppercase tracking-tight" data-i18n="current2_title">Водоснабжение генгешлика Гарашызлык</h3>
|
||||||
|
<p class="text-primary-fixed leading-relaxed" data-i18n="current2_desc">Строительство системы водоснабжения генгешлика Гарашызлык в Теженском районе Ахалского велаята (Туркменистан).</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Contact & Feedback Form -->
|
||||||
|
<section class="py-16 md:py-24 lg:py-32 bg-background" id="contacts">
|
||||||
|
<div class="max-w-screen-2xl mx-auto px-4 md:px-8 lg:px-12">
|
||||||
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-32">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-3xl md:text-4xl lg:text-5xl font-black text-on-surface mb-8 md:mb-12 tracking-tight" data-i18n="contacts_title">Контакты</h2>
|
||||||
|
<div class="space-y-12">
|
||||||
|
<div class="flex gap-6">
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl">location_on</span>
|
||||||
|
<div>
|
||||||
|
<h5 class="font-bold text-on-surface uppercase text-xs tracking-widest mb-2" data-i18n="address_label">Юридический адрес</h5>
|
||||||
|
<p class="text-sm md:text-lg text-on-surface-variant" data-i18n-html="address_text">Туркменистан, Ашхабад, Беркарарлыкский район,<br />улица Г. Гулиева (2127), дом 64
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-6">
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl">call</span>
|
||||||
|
<div>
|
||||||
|
<h5 class="font-bold text-on-surface uppercase text-xs tracking-widest mb-2" data-i18n="phones_label">Телефоны
|
||||||
|
</h5>
|
||||||
|
<p class="text-sm md:text-lg text-on-surface-variant" data-i18n-html="phones_text">75 35 06<br />+993 65 725570 - Директор<br />+993 65 705509 - Заместитель директора
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-6">
|
||||||
|
<span class="material-symbols-outlined text-primary text-3xl">mail</span>
|
||||||
|
<div>
|
||||||
|
<h5 class="font-bold text-on-surface uppercase text-xs tracking-widest mb-2">Email</h5>
|
||||||
|
<p class="text-sm md:text-lg text-on-surface-variant break-all md:break-normal" data-i18n-html="email_text">sukrulbinyat@gmail.com - Директор<br />charievmuratberdi@gmail.com - Заместитель директора</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-10 md:mt-16 h-64 rounded-sm overflow-hidden">
|
||||||
|
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d4292.169908939408!2d58.40571007685183!3d37.96763107193738!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3f6ffe5d0683f49f%3A0x7d1f88253a775209!2zMjEyNyBrw7bDp2VzaSA2NCwgQcWfZ2FiYXQsINCi0YPRgNC60LzQtdC90LjRgdGC0LDQvQ!5e1!3m2!1sru!2s!4v1775706346815!5m2!1sru!2s" class="w-full h-full" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-surface-container-low p-6 md:p-8 lg:p-12">
|
||||||
|
<h3 class="text-2xl md:text-3xl font-bold text-on-surface mb-6 md:mb-10" data-i18n="write_us">Напишите нам</h3>
|
||||||
|
<form class="space-y-8">
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
class="block text-xs font-bold uppercase tracking-widest text-on-surface-variant mb-3" data-i18n="your_name_label">Ваше
|
||||||
|
имя</label>
|
||||||
|
<input
|
||||||
|
class="w-full bg-surface-container border-none focus:bg-surface-container-lowest focus:ring-0 transition-all py-4 px-6 font-medium text-on-surface"
|
||||||
|
data-i18n-placeholder="name_placeholder" placeholder="Александр Петров" type="text" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
class="block text-xs font-bold uppercase tracking-widest text-on-surface-variant mb-3" data-i18n="phone_label">Телефон</label>
|
||||||
|
<input
|
||||||
|
class="w-full bg-surface-container border-none focus:bg-surface-container-lowest focus:ring-0 transition-all py-4 px-6 font-medium text-on-surface"
|
||||||
|
placeholder="+993 (__) __-__-__" type="tel" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
class="block text-xs font-bold uppercase tracking-widest text-on-surface-variant mb-3" data-i18n="message_label">Сообщение</label>
|
||||||
|
<textarea
|
||||||
|
class="w-full bg-surface-container border-none focus:bg-surface-container-lowest focus:ring-0 transition-all py-4 px-6 font-medium text-on-surface"
|
||||||
|
data-i18n-placeholder="message_placeholder" placeholder="Расскажите о вашем проекте..." rows="4"></textarea>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
class="w-full bg-primary text-on-primary py-5 font-bold uppercase tracking-[0.2em] rounded-sm hover:bg-primary-dim transition-all shadow-lg shadow-primary/20"
|
||||||
|
type="submit" data-i18n="submit_btn">
|
||||||
|
Отправить запрос
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="bg-surface-container-low py-12 md:py-16 lg:py-20 px-4 md:px-8 lg:px-12">
|
||||||
|
<div class="max-w-screen-2xl mx-auto grid grid-cols-1 md:grid-cols-3 gap-8 md:gap-12">
|
||||||
|
<div>
|
||||||
|
<div class="text-xl font-black text-[#3a5f94] mb-6">Netijeli binyat</div>
|
||||||
|
<p class="font-['Inter'] text-sm tracking-wide text-[#2a3439]/60 leading-relaxed" data-i18n="footer_desc">
|
||||||
|
Строительная компания полного цикла. Качество, проверенное временем и проектами.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h5 class="text-primary font-bold mb-6 uppercase text-xs tracking-widest" data-i18n="footer_nav">Навигация</h5>
|
||||||
|
<ul class="space-y-4 font-['Inter'] text-sm tracking-wide">
|
||||||
|
<li><a class="text-[#2a3439]/60 hover:underline transition-all" href="#about" data-i18n="nav_about">О нас</a></li>
|
||||||
|
<li><a class="text-[#2a3439]/60 hover:underline transition-all" href="#services" data-i18n="nav_services">Услуги</a></li>
|
||||||
|
<li><a class="text-[#2a3439]/60 hover:underline transition-all" href="#projects" data-i18n="nav_projects">Проекты</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h5 class="text-primary font-bold mb-6 uppercase text-xs tracking-widest" data-i18n="footer_contact">Контакты</h5>
|
||||||
|
<p class="text-sm text-[#2a3439]/60 font-['Inter'] tracking-wide" data-i18n-html="footer_contact_info">
|
||||||
|
Ашхабад, Туркменистан<br />
|
||||||
|
sukrulbinyat@gmail.com<br />
|
||||||
|
+993 65 725570
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="max-w-screen-2xl mx-auto mt-10 md:mt-16 lg:mt-20 pt-8 md:pt-10 border-t border-outline-variant/20 flex flex-col md:flex-row justify-between items-center gap-4">
|
||||||
|
<p class="font-['Inter'] text-sm tracking-wide text-[#2a3439]/60" data-i18n="footer_copyright">© 2021 Netijeli binyat. Все права
|
||||||
|
защищены.</p>
|
||||||
|
<div class="flex gap-6">
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-primary cursor-pointer hover:opacity-70 transition-opacity">language</span>
|
||||||
|
<span
|
||||||
|
class="material-symbols-outlined text-primary cursor-pointer hover:opacity-70 transition-opacity">share</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="js/i18n.js"></script>
|
||||||
|
<script src="js/carousel.js"></script>
|
||||||
|
<script>
|
||||||
|
const drawer = document.getElementById('mobile-drawer');
|
||||||
|
const backdrop = document.getElementById('drawer-backdrop');
|
||||||
|
const hamburger = document.getElementById('hamburger-btn');
|
||||||
|
const closeBtn = document.getElementById('drawer-close');
|
||||||
|
|
||||||
|
function openDrawer() { drawer.classList.add('open'); backdrop.classList.add('open'); document.body.style.overflow = 'hidden'; }
|
||||||
|
function closeDrawer() { drawer.classList.remove('open'); backdrop.classList.remove('open'); document.body.style.overflow = ''; }
|
||||||
|
|
||||||
|
hamburger.addEventListener('click', openDrawer);
|
||||||
|
closeBtn.addEventListener('click', closeDrawer);
|
||||||
|
backdrop.addEventListener('click', closeDrawer);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
document.querySelectorAll('.carousel').forEach(carousel => {
|
||||||
|
const slides = carousel.querySelectorAll('.carousel-slide');
|
||||||
|
const dotsContainer = carousel.querySelector('.carousel-dots');
|
||||||
|
const prevBtn = carousel.querySelector('.carousel-prev');
|
||||||
|
const nextBtn = carousel.querySelector('.carousel-next');
|
||||||
|
const autoplayDelay = parseInt(carousel.dataset.autoplay) || 4000;
|
||||||
|
let current = 0;
|
||||||
|
let interval;
|
||||||
|
|
||||||
|
slides.forEach((_, i) => {
|
||||||
|
const dot = document.createElement('button');
|
||||||
|
dot.className = 'carousel-dot' + (i === 0 ? ' active' : '');
|
||||||
|
dot.addEventListener('click', () => goTo(i));
|
||||||
|
dotsContainer.appendChild(dot);
|
||||||
|
});
|
||||||
|
|
||||||
|
function goTo(index) {
|
||||||
|
slides[current].classList.remove('active');
|
||||||
|
dotsContainer.children[current].classList.remove('active');
|
||||||
|
current = (index + slides.length) % slides.length;
|
||||||
|
slides[current].classList.add('active');
|
||||||
|
dotsContainer.children[current].classList.add('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
prevBtn.addEventListener('click', e => { e.stopPropagation(); goTo(current - 1); resetAutoplay(); });
|
||||||
|
nextBtn.addEventListener('click', e => { e.stopPropagation(); goTo(current + 1); resetAutoplay(); });
|
||||||
|
|
||||||
|
function startAutoplay() { interval = setInterval(() => goTo(current + 1), autoplayDelay); }
|
||||||
|
function resetAutoplay() { clearInterval(interval); startAutoplay(); }
|
||||||
|
|
||||||
|
const hoverTarget = carousel.closest('.group') || carousel.parentElement;
|
||||||
|
hoverTarget.addEventListener('mouseenter', () => clearInterval(interval));
|
||||||
|
hoverTarget.addEventListener('mouseleave', () => startAutoplay());
|
||||||
|
|
||||||
|
startAutoplay();
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,196 @@
|
||||||
|
const translations = {
|
||||||
|
ru: {
|
||||||
|
nav_about: "О нас", nav_services: "Услуги", nav_projects: "Проекты",
|
||||||
|
nav_current_works: "Текущие работы", nav_contacts: "Контакты", nav_contact_btn: "Связаться",
|
||||||
|
hero_subtitle: "Надёжное строительство и инженерные решения",
|
||||||
|
hero_desc: "Профессиональный подход к реализации сложных инфраструктурных задач. Мы строим будущее, опираясь на опыт и точность.",
|
||||||
|
hero_contact_btn: 'Связаться <span class="material-symbols-outlined text-sm">arrow_forward</span>',
|
||||||
|
hero_services_btn: "Наши услуги",
|
||||||
|
year_established: "Год основания", about_label: "О компании",
|
||||||
|
about_title: "Лицензированная деятельность и гарантия качества",
|
||||||
|
about_desc: "С 2021 года «Netijeli binyat» осуществляет профессиональную деятельность в строительном секторе. Мы объединяем глубокую техническую экспертизу с современными технологиями управления проектами.",
|
||||||
|
experience: "Опыт", experience_desc: "Команда экспертов с многолетним стажем работы.",
|
||||||
|
quality: "Качество", quality_desc: "Строгое соответствие международным стандартам.",
|
||||||
|
comprehensive: "Комплекс", comprehensive_desc: "Реализация проектов от котлована до ввода.",
|
||||||
|
expertise_label: "Экспертиза", services_title: "Услуги",
|
||||||
|
services_desc: "Частное предприятие «Netijeli binýat» в соответствии со своим уставом и Лицензиями, выданными уполномоченными группами, включает следующие виды деятельности качественно и гарантировано:",
|
||||||
|
construction: "Строительство",
|
||||||
|
construction_desc: "Возведение современных жилых и коммерческих зданий с использованием передовых технологий и экологичных материалов.",
|
||||||
|
reconstruction: "Реконструкция",
|
||||||
|
reconstruction_desc: "Профессиональное восстановление, усиление конструкций и капитальный ремонт объектов любой сложности.",
|
||||||
|
engineering: "Инженерные системы",
|
||||||
|
engineering_desc: "Монтаж и обслуживание систем водоснабжения, канализации, отопления и вентиляции по мировым стандартам.",
|
||||||
|
electrical: "Электромонтаж",
|
||||||
|
electrical_desc: "Полный комплекс электромонтажных работ: от проектирования сетей до установки сложного промышленного оборудования.",
|
||||||
|
landscaping: "Благоустройство",
|
||||||
|
landscaping_desc: "Профессиональное озеленение, создание парковых зон и ландшафтный дизайн для частных и общественных территорий.",
|
||||||
|
learn_more: "Подробнее",
|
||||||
|
consultation_text: "Нужна консультация по специальному проекту?", request_quote: "Запросить КП",
|
||||||
|
completed_projects: "Реализованные проекты",
|
||||||
|
project1_title: "Водоочистная станция в г. Теджен",
|
||||||
|
project1_desc: "Строительство водоочистной станции мощностью 30 000 м\u00b3 в сутки в городе Теджен Ахалского велаята — завершён 2024 г.",
|
||||||
|
project2_title: "Электроснабжение водоочистной станции",
|
||||||
|
project2_desc: "Строительно-монтажные работы по внешней системе электроснабжения водоочистной станции мощностью 30 000 м\u00b3 в сутки в г. Теджен — завершён 2026 г.",
|
||||||
|
current_projects_title: "Текущие <br /> проекты",
|
||||||
|
current_projects_desc: "В настоящее время частное предприятие \u00abNetijeli binyat\u00bb осуществляет следующие строительно-монтажные работы:",
|
||||||
|
current1_status: "Статус: В процессе", current1_title: "Водоочистная станция в Бабадайханском районе",
|
||||||
|
current1_desc: "Строительство водоочистной станции мощностью 20 000 м\u00b3 в сутки в Бабадайханском районе Ахалского велаята (Туркменистан).",
|
||||||
|
current2_status: "Статус: В процессе", current2_title: "Водоснабжение генгешлика Гарашызлык",
|
||||||
|
current2_desc: "Строительство системы водоснабжения генгешлика Гарашызлык в Теженском районе Ахалского велаята (Туркменистан).",
|
||||||
|
contacts_title: "Контакты", address_label: "Юридический адрес",
|
||||||
|
address_text: "Туркменистан, Ашхабад, Беркарарлыкский район,<br />улица Г. Гулиева (2127), дом 64",
|
||||||
|
phones_label: "Телефоны",
|
||||||
|
phones_text: "75 35 06<br />+993 65 725570 - Директор<br />+993 65 705509 - Заместитель директора",
|
||||||
|
email_text: "sukrulbinyat@gmail.com - Директор<br />charievmuratberdi@gmail.com - Заместитель директора",
|
||||||
|
write_us: "Напишите нам",
|
||||||
|
your_name_label: "Ваше имя", name_placeholder: "Александр Петров",
|
||||||
|
phone_label: "Телефон", message_label: "Сообщение",
|
||||||
|
message_placeholder: "Расскажите о вашем проекте...", submit_btn: "Отправить запрос",
|
||||||
|
map_placeholder: "Интерактивная карта", map_location: "Ашхабад, ТМ",
|
||||||
|
footer_desc: "Строительная компания полного цикла. Качество, проверенное временем и проектами.",
|
||||||
|
footer_nav: "Навигация", footer_legal: "Правовая информация", footer_contact: "Контакты",
|
||||||
|
privacy_policy: "Политика конфиденциальности",
|
||||||
|
footer_contact_info: "Ашхабад, Туркменистан<br />sukrulbinyat@gmail.com<br />+993 65 725570",
|
||||||
|
footer_copyright: "© 2021 Netijeli binyat. Все права защищены."
|
||||||
|
},
|
||||||
|
en: {
|
||||||
|
nav_about: "About", nav_services: "Services", nav_projects: "Projects",
|
||||||
|
nav_current_works: "Current Works", nav_contacts: "Contacts", nav_contact_btn: "Contact Us",
|
||||||
|
hero_subtitle: "Reliable Construction and Engineering Solutions",
|
||||||
|
hero_desc: "A professional approach to complex infrastructure projects. We build the future with experience and precision.",
|
||||||
|
hero_contact_btn: 'Contact us <span class="material-symbols-outlined text-sm">arrow_forward</span>',
|
||||||
|
hero_services_btn: "Our Services",
|
||||||
|
year_established: "Year Established", about_label: "About the Company",
|
||||||
|
about_title: "Licensed Operations and Quality Guarantee",
|
||||||
|
about_desc: "Since 2021, Netijeli Binýat has been professionally operating in the construction sector. We combine in-depth technical expertise with modern project management technologies.",
|
||||||
|
experience: "Experience", experience_desc: "A team of experts with years of professional experience.",
|
||||||
|
quality: "Quality", quality_desc: "Strict compliance with international standards.",
|
||||||
|
comprehensive: "Comprehensive services", comprehensive_desc: "Project implementation from excavation to commissioning.",
|
||||||
|
expertise_label: "Expertise", services_title: "Services",
|
||||||
|
services_desc: "In accordance with its charter and licenses issued by authorized groups, the private enterprise 'Netijeli Binýat' provides the following high-quality and guaranteed services:",
|
||||||
|
construction: "Construction",
|
||||||
|
construction_desc: "Construction of modern residential and commercial buildings using advanced technologies and eco-friendly materials.",
|
||||||
|
reconstruction: "Reconstruction",
|
||||||
|
reconstruction_desc: "Professional restoration, structural reinforcement, and major renovation of facilities of any complexity.",
|
||||||
|
engineering: "Engineering Systems",
|
||||||
|
engineering_desc: "Installation and maintenance of water supply, sewage, heating, and ventilation systems to world standards.",
|
||||||
|
electrical: "Electrical Installation",
|
||||||
|
electrical_desc: "Full range of electrical works: from network design to installation of complex industrial equipment.",
|
||||||
|
landscaping: "Landscaping",
|
||||||
|
landscaping_desc: "Professional greening, park zone creation, and landscape design for private and public areas.",
|
||||||
|
learn_more: "Learn More",
|
||||||
|
consultation_text: "Need a consultation for a special project?", request_quote: "Request Quote",
|
||||||
|
completed_projects: "Completed Projects",
|
||||||
|
project1_title: "Water Treatment Plant in Tejen",
|
||||||
|
project1_desc: "Construction of a water treatment plant with a capacity of 30,000 m\u00b3 per day in Tejen, Ahal Velayat \u2014 completed in 2024.",
|
||||||
|
project2_title: "Power Supply for Water Treatment Plant",
|
||||||
|
project2_desc: "Construction and installation work on the external power supply system for a water treatment plant with a capacity of 30,000 m\u00b3 per day in Tejen, Ahal Velayat \u2014 completed in 2026.",
|
||||||
|
current_projects_title: "Current <br /> Projects",
|
||||||
|
current_projects_desc: "Currently, the private enterprise \u00abNetijeli binyat\u00bb is carrying out the following construction and installation work:",
|
||||||
|
current1_status: "Status: In Progress", current1_title: "Water Treatment Plant in Babadayhan District",
|
||||||
|
current1_desc: "Construction of a water treatment plant with a capacity of 20,000 m\u00b3 per day in Babadayhan district, Ahal Velayat (Turkmenistan).",
|
||||||
|
current2_status: "Status: In Progress", current2_title: "Water Supply for Garashsyzlyk Gengeshlyk",
|
||||||
|
current2_desc: "Construction of the water supply system for Garashsyzlyk gengeshlyk in Tejen district, Ahal Velayat (Turkmenistan).",
|
||||||
|
contacts_title: "Contacts", address_label: "Legal address",
|
||||||
|
address_text: "Turkmenistan, Ashgabat, Berkararlyk district,<br />G. Guliyev street (2127), building 64",
|
||||||
|
phones_label: "Phones",
|
||||||
|
phones_text: "75 35 06<br />+993 65 725570 - Director<br />+993 65 705509 - Deputy Director",
|
||||||
|
email_text: "sukrulbinyat@gmail.com - Director<br />charievmuratberdi@gmail.com - Deputy Director",
|
||||||
|
write_us: "Write to Us",
|
||||||
|
your_name_label: "Your Name", name_placeholder: "John Smith",
|
||||||
|
phone_label: "Phone", message_label: "Message",
|
||||||
|
message_placeholder: "Tell us about your project...", submit_btn: "Submit Request",
|
||||||
|
map_placeholder: "Interactive Map", map_location: "Ashgabat, TM",
|
||||||
|
footer_desc: "Full-cycle construction company. Quality proven by time and projects.",
|
||||||
|
footer_nav: "Navigation", footer_legal: "Legal", footer_contact: "Contact",
|
||||||
|
privacy_policy: "Privacy Policy",
|
||||||
|
footer_contact_info: "Ashgabat, Turkmenistan<br />sukrulbinyat@gmail.com<br />+993 65 725570",
|
||||||
|
footer_copyright: "\u00A9 2021 Netijeli binyat. All rights reserved."
|
||||||
|
},
|
||||||
|
tk: {
|
||||||
|
nav_about: "Biz barada", nav_services: "Hyzmatlar", nav_projects: "Taslamalar",
|
||||||
|
nav_current_works: "H\u00e4zirki i\u015fler", nav_contacts: "Habarla\u015fmak", nav_contact_btn: "Habarla\u015fy\u0148",
|
||||||
|
hero_subtitle: "Ygtybarly gurlu\u015fyk we in\u017eener\u00e7ilik \u00e7\u00f6zg\u00fctleri",
|
||||||
|
hero_desc: "\u00c7yl\u015fyrymly infrastruktura taslamalaryna professional \u00e7emele\u015fme. Biz tejrib\u00e4 we takyklyk esasynda gelj\u0259gi gur\u00fd\u0101rys.",
|
||||||
|
hero_contact_btn: 'Habarla\u015fy\u0148 <span class="material-symbols-outlined text-sm">arrow_forward</span>',
|
||||||
|
hero_services_btn: "Bizi\u0148 hyzmatlarymyz",
|
||||||
|
year_established: "Esaslandyrylan \u00fd\u0131l", about_label: "Kompani\u00fda hakynda",
|
||||||
|
about_title: "Ygtyyarnamaly i\u015fler we hil kepilligi",
|
||||||
|
about_desc: "2021-nji \u00fd\u0131ldan b\u00e4ri \u00abNetijeli binyat\u00bb gurlu\u015fyk pudagynda professional i\u015fleri alyp bar\u00fd\u0101r. Biz \u00e7u\u0148\u0148ur tehniki tejrib\u00e4ni h\u00e4zirki zaman taslama dolandyry\u015f tehnologi\u00fdalary bilen birle\u015fdir\u00fd\u00e4ris.",
|
||||||
|
experience: "Tejribe", experience_desc: "K\u00f6p \u00fd\u0131llyk i\u015f tejribesi bolan h\u00fcn\u00e4rmenler topary.",
|
||||||
|
quality: "Hil", quality_desc: "Halkara standartlaryna berk la\u00fd\u0131klyk.",
|
||||||
|
comprehensive: "Toplumla\u00fd\u0131n", comprehensive_desc: "Taslamalary gazuw i\u015flerinden ulanmaga bermeklige \u00e7enli amala a\u015fyrmak.",
|
||||||
|
expertise_label: "Tejribe", services_title: "Hyzmatlar",
|
||||||
|
services_desc: "Biz pudagy\u0148 i\u0148 \u00fdokary standartlaryna la\u00fd\u0131klykda islendik \u00e7yl\u015fyrymlylykdaky gurlu\u015fyk we in\u017eener\u00e7ilik hyzmatlarynyng doly toplumyny h\u00f6d\u00fcrle\u00fd\u00e4ris.",
|
||||||
|
construction: "Gurlu\u015fyk",
|
||||||
|
construction_desc: "\u00d6\u0148debaryjy tehnologi\u00fdalary we ekologi\u00fda ta\u00fddan arassa materiallary ulanyp, h\u00e4zirki zaman \u00fda\u015fa\u00fd\u0131\u015f we s\u00f6wda binalaryny gurmak.",
|
||||||
|
reconstruction: "Durkuny t\u00e4zelemek",
|
||||||
|
reconstruction_desc: "Islendik \u00e7yl\u015fyrymlylykdaky desgalary professional dikeltmek, gurlu\u015flary berkitmek we d\u00fc\u00fdpli abatlamak.",
|
||||||
|
engineering: "In\u017eener\u00e7ilik ulgamlary",
|
||||||
|
engineering_desc: "D\u00fcn\u00fd\u00e4 standartlaryna la\u00fd\u0131klykda suw \u00fcpj\u00fcn\u00e7iligi, lagym, \u00fd\u0131lady\u015f we wentil\u00fdasiya ulgamlaryny gurnamak we hyzmat etmek.",
|
||||||
|
electrical: "Elektrik gurnamasy",
|
||||||
|
electrical_desc: "Elektrik gurna\u00fd\u0131\u015f i\u015flerini\u0148 doly toplumy: tor taslamasyndan \u00e7yl\u015fyrymly senagat enjamlaryny gurnamaklyga \u00e7enli.",
|
||||||
|
landscaping: "Abadanla\u015fdyry\u015f",
|
||||||
|
landscaping_desc: "Hususy we jemgy\u00fdet\u00e7ilik \u00fderleri \u00fc\u00e7in professional \u00fda\u015fulla\u015fdyrma, se\u00fdilg\u00e4h zolagyny d\u00f6retmek we land\u015faft diza\u00fdny.",
|
||||||
|
learn_more: "Gi\u0148i\u015fle\u00fdin",
|
||||||
|
consultation_text: "\u00dd\u00f6rite taslama bo\u00fdun\u00e7a maslahat gerekmi?", request_quote: "Teklip soramak",
|
||||||
|
completed_projects: "Tamamlanan taslamalar",
|
||||||
|
project1_title: "Tejen \u015f\u00e4herinde suw arassala\u00fd\u0131jy stansi\u00fda",
|
||||||
|
project1_desc: "Ahal wela\u00fdatynyng Tejen \u015f\u00e4herinde g\u00fcnde 30 000 m\u00b3 kuwwatly suw arassala\u00fd\u0131jy stansi\u00fdany gurmak \u2014 2024-nji \u00fd\u0131lda tamamlandy.",
|
||||||
|
project2_title: "Suw arassala\u00fd\u0131jy stansi\u00fdanyng elektrik \u00fcpj\u00fcn\u00e7iligi",
|
||||||
|
project2_desc: "Ahal wela\u00fdatynyng Tejen \u015f\u00e4herinde g\u00fcnde 30 000 m\u00b3 kuwwatly suw arassala\u00fd\u0131jy stansi\u00fdanyng da\u015fky elektrik \u00fcpj\u00fcn\u00e7ilik ulgamyny gurnamak \u2014 2026-njy \u00fd\u0131lda tamamlandy.",
|
||||||
|
current_projects_title: "H\u00e4zirki <br /> taslamalar",
|
||||||
|
current_projects_desc: "H\u00e4zirki wagtda \u00abNetijeli binyat\u00bb hususy k\u00e4rhanasy a\u015fakdaky gurlu\u015fyk-gurna\u00fd\u0131\u015f i\u015flerini amala a\u015fyr\u00fd\u0101r:",
|
||||||
|
current1_status: "\u00ddagda\u00fd: Dowam ed\u00fd\u00e4r", current1_title: "Babada\u00fdhan etrabynda suw arassala\u00fd\u0131jy stansi\u00fda",
|
||||||
|
current1_desc: "T\u00fcrkmenistanyng Ahal wela\u00fdatynyng Babada\u00fdhan etrabynda g\u00fcnde 20 000 m\u00b3 kuwwatly suw arassala\u00fd\u0131jy stansi\u00fdany gurmak.",
|
||||||
|
current2_status: "\u00ddagda\u00fd: Dowam ed\u00fd\u00e4r", current2_title: "Gara\u015fsyzlyk gen\u011fe\u015fligini\u0148 suw \u00fcpj\u00fcn\u00e7iligi",
|
||||||
|
current2_desc: "T\u00fcrkmenistanyng Ahal wela\u00fdatynyng Tejen etrabynda Gara\u015fsyzlyk gen\u011fe\u015fligini\u0148 suw \u00fcpj\u00fcn\u00e7ilik ulgamyny gurmak.",
|
||||||
|
contacts_title: "Habarla\u015fmak", address_label: "\u00dduridiki salgysy",
|
||||||
|
address_text: "T\u00fcrkmenistan, A\u015fgabat, Berkararlyk etraby,<br />G. Guly\u00fdew k\u00f6\u00e7esi (2127), 64-nji ja\u00fd",
|
||||||
|
phones_label: "Telefonlar",
|
||||||
|
phones_text: "75 35 06<br />+993 65 725570 - Direktor<br />+993 65 705509 - Direktoryn orunbasary",
|
||||||
|
email_text: "sukrulbinyat@gmail.com - Direktor<br />charievmuratberdi@gmail.com - Direktoryn orunbasary",
|
||||||
|
write_us: "Bize \u00fdazy\u0148",
|
||||||
|
your_name_label: "Ady\u0148yz", name_placeholder: "Myrat \u00d6wezow",
|
||||||
|
phone_label: "Telefon", message_label: "Hat",
|
||||||
|
message_placeholder: "Taslama\u0148yz barada a\u00fddyp beri\u0148...", submit_btn: "Ibermek",
|
||||||
|
map_placeholder: "Interaktiw karta", map_location: "A\u015fgabat, TM",
|
||||||
|
footer_desc: "Doly siklly gurlu\u015fyk kompani\u00fdasy. Wagt we taslamalar bilen subut edilen hil.",
|
||||||
|
footer_nav: "Nawigasi\u00fda", footer_legal: "Hukuk maglumatlary", footer_contact: "Habarla\u015fmak",
|
||||||
|
privacy_policy: "Gizlinlik sy\u00fdasaty",
|
||||||
|
footer_contact_info: "A\u015fgabat, T\u00fcrkmenistan<br />sukrulbinyat@gmail.com<br />+993 65 725570",
|
||||||
|
footer_copyright: "\u00a9 2021 Netijeli binyat. \u00c4hli hukuklar goralan."
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function setLang(lang) {
|
||||||
|
document.documentElement.lang = lang;
|
||||||
|
localStorage.setItem('lang', lang);
|
||||||
|
|
||||||
|
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||||||
|
const key = el.dataset.i18n;
|
||||||
|
if (translations[lang] && translations[lang][key]) {
|
||||||
|
el.textContent = translations[lang][key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll('[data-i18n-html]').forEach(el => {
|
||||||
|
const key = el.dataset.i18nHtml;
|
||||||
|
if (translations[lang] && translations[lang][key]) {
|
||||||
|
el.innerHTML = translations[lang][key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
||||||
|
const key = el.dataset.i18nPlaceholder;
|
||||||
|
if (translations[lang] && translations[lang][key]) {
|
||||||
|
el.placeholder = translations[lang][key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll('.lang-btn').forEach(btn => {
|
||||||
|
btn.classList.toggle('active', btn.dataset.lang === lang);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
setLang(localStorage.getItem('lang') || 'ru');
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"name": "netijeli-binyat",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build:css": "tailwindcss -i ./src/input.css -o ./dist/styles.css --minify",
|
||||||
|
"dev:css": "tailwindcss -i ./src/input.css -o ./dist/styles.css --watch"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tailwindcss": "^3.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fontsource-variable/manrope": "^5.2.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 253 KiB |
|
After Width: | Height: | Size: 450 KiB |
|
After Width: | Height: | Size: 324 KiB |
|
After Width: | Height: | Size: 556 KiB |
|
After Width: | Height: | Size: 428 KiB |
|
After Width: | Height: | Size: 338 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
|
@ -0,0 +1,121 @@
|
||||||
|
/* Inter — variable font, full weight range, Latin + Cyrillic baked in */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Inter';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('../public/fonts/inter/InterVariable.woff2') format('woff2');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Manrope — variable font, split by Unicode subset for smaller first paint.
|
||||||
|
cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Manrope';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 200 800;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('../public/fonts/manrope/manrope-cyrillic-ext-wght-normal.woff2') format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Manrope';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 200 800;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('../public/fonts/manrope/manrope-cyrillic-wght-normal.woff2') format('woff2');
|
||||||
|
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Manrope';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 200 800;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('../public/fonts/manrope/manrope-latin-ext-wght-normal.woff2') format('woff2');
|
||||||
|
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Manrope';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 200 800;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('../public/fonts/manrope/manrope-latin-wght-normal.woff2') format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Material Symbols Outlined — static instance at FILL=0, wght=400, GRAD=0, opsz=24,
|
||||||
|
subset to only the 16 icons used on this site (~3KB). */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Material Symbols Outlined';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: block;
|
||||||
|
src: url('../public/fonts/material-symbols/MaterialSymbolsOutlined-subset.woff2') format('woff2');
|
||||||
|
}
|
||||||
|
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
@layer base {
|
||||||
|
body {
|
||||||
|
font-family: 'Inter', sans-serif;
|
||||||
|
background-color: #f7f9fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-family: 'Manrope', sans-serif;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@layer components {
|
||||||
|
.material-symbols-outlined {
|
||||||
|
font-family: 'Material Symbols Outlined';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 1;
|
||||||
|
letter-spacing: normal;
|
||||||
|
text-transform: none;
|
||||||
|
display: inline-block;
|
||||||
|
white-space: nowrap;
|
||||||
|
word-wrap: normal;
|
||||||
|
direction: ltr;
|
||||||
|
-webkit-font-feature-settings: 'liga';
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-btn { color: rgba(42, 52, 57, 0.4); }
|
||||||
|
.lang-btn.active { color: #3a5f94; background: rgba(58, 95, 148, 0.1); }
|
||||||
|
|
||||||
|
.carousel { position: relative; }
|
||||||
|
.carousel-slide { position: absolute; inset: 0; opacity: 0; transition: opacity 1s ease; }
|
||||||
|
.carousel-slide.active { opacity: 0.9; }
|
||||||
|
.carousel-prev, .carousel-next {
|
||||||
|
position: absolute; top: 50%; transform: translateY(-50%); z-index: 10;
|
||||||
|
width: 40px; height: 40px; background: rgba(255, 255, 255, 0.8); border: none;
|
||||||
|
font-size: 24px; line-height: 1; cursor: pointer; color: #2a3439;
|
||||||
|
opacity: 0; transition: opacity 0.3s;
|
||||||
|
}
|
||||||
|
.carousel:hover .carousel-prev, .carousel:hover .carousel-next { opacity: 1; }
|
||||||
|
.carousel-prev { left: 12px; }
|
||||||
|
.carousel-next { right: 12px; }
|
||||||
|
.carousel-prev:hover, .carousel-next:hover { background: #fff; }
|
||||||
|
.carousel-dots {
|
||||||
|
position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%);
|
||||||
|
display: flex; gap: 6px; z-index: 10;
|
||||||
|
}
|
||||||
|
.carousel-dot {
|
||||||
|
width: 8px; height: 8px; border-radius: 50%; border: none; cursor: pointer;
|
||||||
|
background: rgba(255, 255, 255, 0.5); transition: background 0.3s;
|
||||||
|
}
|
||||||
|
.carousel-dot.active { background: #fff; }
|
||||||
|
|
||||||
|
/* Mobile drawer */
|
||||||
|
.mobile-drawer { transform: translateX(100%); transition: transform 0.3s ease; }
|
||||||
|
.mobile-drawer.open { transform: translateX(0); }
|
||||||
|
.drawer-backdrop { opacity: 0; pointer-events: none; transition: opacity 0.3s ease; }
|
||||||
|
.drawer-backdrop.open { opacity: 1; pointer-events: auto; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
module.exports = {
|
||||||
|
content: ['./index.html', './js/**/*.js'],
|
||||||
|
darkMode: 'class',
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
'tertiary-fixed': '#dbdafb',
|
||||||
|
'surface-dim': '#cfdce3',
|
||||||
|
'primary-dim': '#2d5387',
|
||||||
|
'secondary-container': '#d5e3fc',
|
||||||
|
'surface-container-lowest': '#ffffff',
|
||||||
|
'on-surface': '#2a3439',
|
||||||
|
'surface-container-highest': '#d9e4ea',
|
||||||
|
'error-container': '#fe8983',
|
||||||
|
'on-primary-container': '#2c5287',
|
||||||
|
'tertiary': '#5d5d78',
|
||||||
|
'secondary-dim': '#465468',
|
||||||
|
'on-error-container': '#752121',
|
||||||
|
'on-tertiary': '#fbf7ff',
|
||||||
|
'surface-container-low': '#f0f4f7',
|
||||||
|
'tertiary-container': '#dbdafb',
|
||||||
|
'on-primary-fixed-variant': '#375c91',
|
||||||
|
'primary-container': '#d5e3ff',
|
||||||
|
'on-primary-fixed': '#153f73',
|
||||||
|
'on-tertiary-container': '#4c4c67',
|
||||||
|
'secondary-fixed-dim': '#c7d5ed',
|
||||||
|
'on-secondary-fixed': '#324053',
|
||||||
|
'on-background': '#2a3439',
|
||||||
|
'on-surface-variant': '#566166',
|
||||||
|
'primary': '#3a5f94',
|
||||||
|
'surface-container': '#e8eff3',
|
||||||
|
'surface': '#f7f9fb',
|
||||||
|
'primary-fixed': '#d5e3ff',
|
||||||
|
'on-error': '#fff7f6',
|
||||||
|
'inverse-on-surface': '#9a9d9f',
|
||||||
|
'tertiary-fixed-dim': '#cdccec',
|
||||||
|
'tertiary-dim': '#51516c',
|
||||||
|
'surface-bright': '#f7f9fb',
|
||||||
|
'background': '#f7f9fb',
|
||||||
|
'secondary-fixed': '#d5e3fc',
|
||||||
|
'surface-tint': '#3a5f94',
|
||||||
|
'on-secondary-fixed-variant': '#4e5c71',
|
||||||
|
'outline-variant': '#a9b4b9',
|
||||||
|
'inverse-primary': '#9fc2fe',
|
||||||
|
'inverse-surface': '#0b0f10',
|
||||||
|
'on-tertiary-fixed': '#393953',
|
||||||
|
'on-tertiary-fixed-variant': '#555571',
|
||||||
|
'surface-container-high': '#e1e9ee',
|
||||||
|
'error-dim': '#4e0309',
|
||||||
|
'surface-variant': '#d9e4ea',
|
||||||
|
'on-primary': '#f6f7ff',
|
||||||
|
'on-secondary': '#f8f8ff',
|
||||||
|
'outline': '#717c82',
|
||||||
|
'on-secondary-container': '#455367',
|
||||||
|
'error': '#9f403d',
|
||||||
|
'secondary': '#526074',
|
||||||
|
'primary-fixed-dim': '#bfd5ff',
|
||||||
|
},
|
||||||
|
borderRadius: {
|
||||||
|
DEFAULT: '0.125rem',
|
||||||
|
lg: '0.25rem',
|
||||||
|
xl: '0.5rem',
|
||||||
|
full: '0.75rem',
|
||||||
|
},
|
||||||
|
fontFamily: {
|
||||||
|
headline: ['Manrope', 'sans-serif'],
|
||||||
|
body: ['Inter', 'sans-serif'],
|
||||||
|
label: ['Inter', 'sans-serif'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
};
|
||||||