This commit is contained in:
2026-06-09 12:51:35 +03:30
parent b14998e426
commit 283958f84e
67 changed files with 6427 additions and 1 deletions

25
.gitignore vendored Normal file
View File

@@ -0,0 +1,25 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

4
.prettierignore Normal file
View File

@@ -0,0 +1,4 @@
dist/
node_modules/
public/
*.min.js

13
.prettierrc.json Normal file
View File

@@ -0,0 +1,13 @@
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "lf",
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css"
}

4
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"recommendations": ["esbenp.prettier-vscode"],
"unwantedRecommendations": []
}

19
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,19 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.tabSize": 2,
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"files.associations": {
"*.xml": "html",
"*.svg": "html"
}
}

View File

@@ -1,2 +1,32 @@
# homepage # Inova - Frontend
فرانت‌اند قالب وردپرس پروژه Inova
## درباره پروژه
این ریپوزیتوری بخش فرانت‌اند قالب وردپرس پروژه اصلی است. اینجا تمام طراحی‌ها، کامپوننت‌ها و assetها با استفاده از Vite توسعه داده می‌شود.
## نحوه راه‌اندازی پروژه
### پیش‌نیازها
- Node.js نسخه 18 یا بالاتر (نسخه 22 پیشنهاد میشه)
- ادیتور Vs Code
- نصب بودن اکستنشن prettier روی vs code
- نصب بودن git روی سیستم عامل
### نصب و اجرا
```bash
# کلون کردن پروژه
git clone https://dev.novindiyar.com/Inova-Agency/inova-frontend.git
# ورود به پوشه
cd inova-frontend
# نصب وابستگی‌ها
npm install
# اجرای محیط توسعه
npm run dev
```

1251
homepage.html Normal file

File diff suppressed because it is too large Load Diff

14
index.html Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./src/core/stylesheet/core.css" />
<title>Inova</title>
</head>
<body>
<main>
<h1>سلام دنیا</h1>
</main>
</body>
</html>

889
package-lock.json generated Normal file
View File

@@ -0,0 +1,889 @@
{
"name": "inova-frontend",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "inova-frontend",
"version": "0.0.0",
"devDependencies": {
"prettier": "^3.8.3",
"vite": "^8.0.4"
}
},
"node_modules/@emnapi/core": {
"version": "1.9.2",
"resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.9.2.tgz",
"integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.1",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.9.2",
"resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.9.2.tgz",
"integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/wasi-threads": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
"integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
"integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@tybys/wasm-util": "^0.10.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
},
"peerDependencies": {
"@emnapi/core": "^1.7.1",
"@emnapi/runtime": "^1.7.1"
}
},
"node_modules/@oxc-project/types": {
"version": "0.124.0",
"resolved": "https://registry.npmmirror.com/@oxc-project/types/-/types-0.124.0.tgz",
"integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/Boshen"
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz",
"integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz",
"integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz",
"integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz",
"integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz",
"integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz",
"integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==",
"cpu": [
"wasm32"
],
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "1.9.2",
"@emnapi/runtime": "1.9.2",
"@napi-rs/wasm-runtime": "^1.1.3"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz",
"integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz",
"integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz",
"integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==",
"dev": true,
"license": "MIT"
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.1",
"resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/detect-libc": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
}
},
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"picomatch": "^3 || ^4"
},
"peerDependenciesMeta": {
"picomatch": {
"optional": true
}
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/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/lightningcss": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.32.0.tgz",
"integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
"license": "MPL-2.0",
"dependencies": {
"detect-libc": "^2.0.3"
},
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"lightningcss-android-arm64": "1.32.0",
"lightningcss-darwin-arm64": "1.32.0",
"lightningcss-darwin-x64": "1.32.0",
"lightningcss-freebsd-x64": "1.32.0",
"lightningcss-linux-arm-gnueabihf": "1.32.0",
"lightningcss-linux-arm64-gnu": "1.32.0",
"lightningcss-linux-arm64-musl": "1.32.0",
"lightningcss-linux-x64-gnu": "1.32.0",
"lightningcss-linux-x64-musl": "1.32.0",
"lightningcss-win32-arm64-msvc": "1.32.0",
"lightningcss-win32-x64-msvc": "1.32.0"
}
},
"node_modules/lightningcss-android-arm64": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
"integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-darwin-arm64": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
"integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-darwin-x64": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
"integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
"cpu": [
"x64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-freebsd-x64": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
"integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
"integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
"arm"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
"integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm64-musl": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
"integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-x64-gnu": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
"integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-x64-musl": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
"integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
"integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-win32-x64-msvc": {
"version": "1.32.0",
"resolved": "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
"integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
"dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.4",
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/postcss": {
"version": "8.5.10",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.10.tgz",
"integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/prettier": {
"version": "3.8.3",
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.8.3.tgz",
"integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/rolldown": {
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmmirror.com/rolldown/-/rolldown-1.0.0-rc.15.tgz",
"integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.124.0",
"@rolldown/pluginutils": "1.0.0-rc.15"
},
"bin": {
"rolldown": "bin/cli.mjs"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm64": "1.0.0-rc.15",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.15",
"@rolldown/binding-darwin-x64": "1.0.0-rc.15",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.15",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15",
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.15",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.15",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.15",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15"
}
},
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/tinyglobby": {
"version": "0.2.16",
"resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.16.tgz",
"integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
"picomatch": "^4.0.4"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
"license": "0BSD",
"optional": true
},
"node_modules/vite": {
"version": "8.0.8",
"resolved": "https://registry.npmmirror.com/vite/-/vite-8.0.8.tgz",
"integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
"postcss": "^8.5.8",
"rolldown": "1.0.0-rc.15",
"tinyglobby": "^0.2.15"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.1.0",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
"sass": "^1.70.0",
"sass-embedded": "^1.70.0",
"stylus": ">=0.54.8",
"sugarss": "^5.0.0",
"terser": "^5.16.0",
"tsx": "^4.8.1",
"yaml": "^2.4.2"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"@vitejs/devtools": {
"optional": true
},
"esbuild": {
"optional": true
},
"jiti": {
"optional": true
},
"less": {
"optional": true
},
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"terser": {
"optional": true
},
"tsx": {
"optional": true
},
"yaml": {
"optional": true
}
}
}
}
}

15
package.json Normal file
View File

@@ -0,0 +1,15 @@
{
"name": "inova-frontend",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"prettier": "^3.8.3",
"vite": "^8.0.4"
}
}

0
public/.gitkeep Normal file
View File

0
public/images/.gitkeep Normal file
View File

BIN
public/images/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

BIN
public/images/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

BIN
public/images/CTA-pic.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

BIN
public/images/Group.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
public/images/Vector.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
public/images/bishp 1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
public/images/hamkaran.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

BIN
public/images/hesabdari.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
public/images/images 1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/images/ipka.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
public/images/king 1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
public/images/nil.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
public/images/petboom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 B

BIN
public/images/prof.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
public/images/sepidar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/images/snap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

BIN
public/images/soldier 1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
public/images/soldier 2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
public/images/thumb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

BIN
public/images/videotest.mp4 Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
public/images/zarin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

View File

@@ -0,0 +1,390 @@
@media screen and (max-width: 1400px) {
}
@media screen and (max-width: 1200px) {
}
@media screen and (max-width: 992px) {
.services-grid {
grid-template-columns: repeat(2, 1fr);
}
.text-content h3 {
font-size: 22px;
}
.service-grid {
grid-template-columns: repeat(2, 1fr);
}
.comments-section-wrapper {
grid-template-columns: 1fr;
}
.about-content {
flex-direction: column;
gap: 25px;
}
.video-wrapper {
order: 1;
}
.content-wrapper {
order: 2;
width: 100%;
}
.content-wrapper h2 {
font-size: 22px;
}
.badge {
font-size: 12px;
}
.piece-1 {
position: absolute;
width: 312px;
left: 152px;
top: 21%;
}
.piece-2 {
position: absolute;
width: 482px;
left: 160px;
bottom: -144px;
}
.piece-4 {
position: absolute;
width: 472px;
right: -305px;
top: 32%;
}
.piece-5 {
position: absolute;
width: 290px;
right: -127px;
bottom: -92px;
}
.footer-container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: flex-start;
margin-bottom: 24px;
}
.footer-cta {
bottom: 93%;
left: 90px;
right: 90px;
}
}
@media screen and (max-width: 768px) {
.related-boxes {
grid-template-columns: repeat(1, minmax(326px, 350px));
}
.related-title {
font-size: 22px;
}
.related-button {
display: none;
}
.related-button-mobile {
display: flex;
gap: 8px;
height: 40px;
padding: 0px 12px 0px 10px;
background-color: var(--color-primary);
border-radius: 10px;
color: #ffffff;
align-items: center;
align-self: center;
margin-top: 24px;
}
.related-button-mobile span {
font-size: 15px;
font-weight: 400;
}
.services-horizontal {
padding: 30px 14px;
border-radius: 18px;
}
.services-header {
text-align: center;
}
.services-header h2 {
font-size: 30px;
}
.services-header p {
font-size: 14px;
}
.services-grid {
grid-template-columns: 1fr;
gap: 12px;
}
.service-content {
min-height: 72px;
padding: 14px;
}
.icon-bubble {
width: 46px;
height: 46px;
min-width: 46px;
font-size: 20px;
}
.text-content h3 {
font-size: 18px;
margin-bottom: 4px;
}
.text-content p {
font-size: 13px;
}
.container-service-section {
padding: 0;
}
.service-section > .container-service-section {
padding: 0;
border-radius: 0;
margin-top: 100px;
}
.service-section {
padding: 0;
border-radius: 0;
}
.service-header {
text-align: center;
}
.service-heading {
font-size: 1.8rem;
}
.service-tagline {
font-size: 0.9rem;
}
.service-grid {
grid-template-columns: 1fr;
gap: 12px;
}
.service-content {
min-height: 72px;
padding: 14px;
}
.service-icon {
width: 46px;
height: 46px;
min-width: 46px;
font-size: 1rem;
}
.service-title {
font-size: 1rem;
}
.service-description {
font-size: 0.8rem;
}
.related-under-box {
flex-wrap: wrap;
}
.consultation-title {
display: none;
}
.consultation-title-phone {
display: block;
color: var(--color-primary);
font-size: 24px;
font-weight: bold;
margin-bottom: 8px;
}
.consultation-text {
font-size: 15px;
}
.header-container {
position: relative;
padding: 14px 16px;
display: flex;
justify-content: center;
align-items: center;
}
.header-logo {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
.header-logo img {
height: 36px;
}
.header-left {
position: absolute;
left: 16px;
}
.header-phone {
display: none;
}
.header-menu-toggle {
display: flex;
position: absolute;
right: 16px;
}
.header-nav {
display: none;
}
.footer-imgb,
.footer-imga {
display: none;
}
.footer-imgd {
display: block;
position: absolute;
top: 0;
left: 0;
}
.footer-imgc {
display: block;
position: absolute;
bottom: 0;
right: 0;
}
.footer-cta-content {
border-radius: 10px;
padding: 24px 16px;
display: flex;
align-items: center;
flex-direction: column;
justify-content: space-between;
gap: 24px;
}
.footer-cta-txt h2 {
margin-bottom: 16px;
font-size: 22px;
font-weight: 700;
align-self: center;
}
.footer-cta-txt p {
font-size: 14px;
text-align: center;
line-height: 1.8;
}
.desktop1 {
display: none;
}
.mobile-stat {
display: flex;
}
}
@media screen and (max-width: 576px) {
.hero-bg-word {
font-size: 257px;
top: 57%;
left: 50%;
transform: translate(-50%, -50%) rotate(90deg) !important;
transform-origin: center;
}
.comments-section-brand-card {
position: relative;
height: 117px;
border: 1px solid #dfdfdf;
border-radius: 10px;
overflow: hidden;
cursor: pointer;
}
.comments-section-brands {
grid-template-columns: repeat(2, 1fr);
}
.comments-section-title {
font-size: 22px;
}
.consultation-container {
padding: 0;
}
.consultation-box {
padding: 20px;
}
.piece-4 {
width: 258px;
right: -236px;
top: 18%;
}
.piece-2 {
width: 304px;
left: 45px;
bottom: -15%;
}
.piece-3 {
width: 641px;
}
.piece-5 {
width: 206px;
right: -180px;
bottom: -10%;
}
.piece-1 {
width: 172px;
left: 22px;
top: 18%;
}
.h-txt1 {
font-size: 32px;
}
.h-txt2 {
font-size: 30px;
}
.word {
font-size: 32px;
}
.scroll-text-hero {
color: var(--color-primary);
font-size: 30px;
width: 153px;
}
.hero-actions {
flex-wrap: wrap;
}
.hero-btn-primary,
.hero-btn-secondary {
width: 100%;
}
.hero-content p {
margin-bottom: 24px;
}
.footer-cta {
left: 20px;
right: 20px;
}
.footer {
padding-top: 129px;
}
.footer-bottom-line {
margin-bottom: 92px;
}
.video-title {
font-size: 20px;
}
.play-btn-about svg {
width: 60px;
height: 60px;
}
.arrow-btn-about svg {
width: 72px;
height: 70px;
}
}

1617
src/assets/css/homepage.css Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,77 @@
<svg>
<symbol id="expand" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M28 28L20 20M21.6 28H28V21.6M10.4 28H4V21.6M4 28L12 20M21.6 4H28V10.4M28 4L20 12M10.4 4H4V10.4M4 4L12 12"
stroke="#1A1A2E"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol id="eye" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M2.06202 12.348C1.97868 12.1235 1.97868 11.8765 2.06202 11.652C2.87372 9.68385 4.25153 8.00103 6.02079 6.81689C7.79004 5.63275 9.87106 5.00061 12 5.00061C14.129 5.00061 16.21 5.63275 17.9792 6.81689C19.7485 8.00103 21.1263 9.68385 21.938 11.652C22.0214 11.8765 22.0214 12.1235 21.938 12.348C21.1263 14.3161 19.7485 15.999 17.9792 17.1831C16.21 18.3672 14.129 18.9994 12 18.9994C9.87106 18.9994 7.79004 18.3672 6.02079 17.1831C4.25153 15.999 2.87372 14.3161 2.06202 12.348Z"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M12 15C13.6569 15 15 13.6568 15 12C15 10.3431 13.6569 8.99999 12 8.99999C10.3432 8.99999 9.00002 10.3431 9.00002 12C9.00002 13.6568 10.3432 15 12 15Z"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol id="play" viewBox="0 0 11 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M0.75001 2.12914C0.749322 1.88513 0.809349 1.64531 0.92393 1.43432C1.03851 1.22332 1.20352 1.04874 1.40201 0.928505C1.6005 0.808269 1.82533 0.746706 2.05341 0.750136C2.2815 0.753566 2.50462 0.821866 2.69987 0.948024L9.12272 5.06888C9.31394 5.19079 9.47227 5.36374 9.58223 5.57079C9.69219 5.77783 9.75 6.01187 9.75 6.25C9.75 6.48812 9.69219 6.72217 9.58223 6.92921C9.47227 7.13626 9.31394 7.3092 9.12272 7.43112L2.69987 11.552C2.50453 11.6782 2.28129 11.7465 2.05309 11.7499C1.8249 11.7532 1.59998 11.6916 1.40145 11.5712C1.20291 11.4508 1.03793 11.276 0.923441 11.0648C0.808953 10.8536 0.749093 10.6136 0.75001 10.3695V2.12914Z"
fill="white"
stroke="white"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol id="t-blank" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M17 7H7V17M7 7L17 17"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol xmlns="http://www.w3.org/2000/svg" id="pause" viewBox="0 0 24 24">
<path d="M6.5,0A3.5,3.5,0,0,0,3,3.5v17a3.5,3.5,0,0,0,7,0V3.5A3.5,3.5,0,0,0,6.5,0Z" />
<path d="M17.5,0A3.5,3.5,0,0,0,14,3.5v17a3.5,3.5,0,0,0,7,0V3.5A3.5,3.5,0,0,0,17.5,0Z" />
</symbol>
<symbol id="left" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 12L6 8L10 4" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
</symbol>
<symbol id="chevrons-left" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M7.33333 11.3332L4 7.99984L7.33333 4.6665M12 11.3332L8.66667 7.99984L12 4.6665"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol id="chevrons-right" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4 11.3332L7.33333 7.99984L4 4.6665M8.66667 11.3332L12 7.99984L8.66667 4.6665"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
<symbol id="right" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 12L10 8L6 4" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
</symbol>
<symbol id="arrow-left" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M10.0001 4.16675L4.16675 10.0001L10.0001 15.8334M4.16675 10.0001H15.8334"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 84 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

392
src/assets/js/homepage.js Normal file
View File

@@ -0,0 +1,392 @@
// ====================================هدر===========================
const headerMenuBtn = document.querySelector('.header-menu-toggle');
const headerMobileMenu = document.querySelector('.header-mobile-menu');
headerMenuBtn.addEventListener('click', () => {
headerMobileMenu.classList.toggle('active');
});
const headerCloseBtn = document.querySelector('.header-mobile-close');
headerCloseBtn.addEventListener('click', () => {
headerMobileMenu.classList.remove('active');
});
// ==========================هیروسکشن===================================
window.addEventListener('load', () => {
const bgWord = document.querySelector('.hero-bg-word');
const header = document.querySelector('.hero-header');
const content = document.querySelector('.hero-content');
const pieces = document.querySelectorAll('.piece');
const heroSection = document.querySelector('.hero-section');
const observer = new IntersectionObserver(
([entry]) => {
if (!entry.isIntersecting) {
header.classList.add('sticky');
} else {
header.classList.remove('sticky');
}
},
{
threshold: 0.05,
}
);
observer.observe(heroSection);
const inovaDuration = 2800;
const pauseAfterInova = 600;
const headerDuration = 800;
const contentDuration = 600;
const pauseAfterContent = 600;
const piecesDuration = 1000;
// STEP 1
setTimeout(() => {
bgWord.style.animation = 'revealInova 500ms ease-out 150ms forwards';
}, 0);
// STEP 2
setTimeout(() => {
header.style.animation = 'showHeader .8s ease forwards';
content.style.animation = 'showContent .6s ease forwards';
}, 1200);
// STEP 3
setTimeout(() => {
pieces.forEach((piece) => {
piece.style.animation = `risePiece 1200ms ease-in-out forwards`;
});
}, 1800);
// STEP 4
setTimeout(() => {
pieces.forEach((piece, index) => {
piece.style.animation += `,
floating ${4 + index}s ease-in-out 2000ms infinite`;
});
}, 2400);
});
const wrapper = document.querySelector('.words-wrapper');
let index = 0;
setInterval(() => {
index = (index + 1) % 3;
wrapper.style.transform = `translateY(-${index * 50}px)`;
}, 1400);
// =============== جدیدترین نمونه کارها ======================================
function initRelatedSection(section) {
const cards = section.querySelectorAll('.related-card');
cards.forEach((card) => {
const container = card.querySelector('.media-container');
if (!container) return;
if (container.dataset.initialized === 'true') return;
container.dataset.initialized = 'true';
const progressCircle = card.querySelector('.progress-circle');
const type = container.dataset.type;
const src = container.dataset.src;
if (!type || !src) return;
card.classList.add(type === 'video' ? 'is-video' : 'is-image');
if (type === 'video') {
const ext = src.split('.').pop().toLowerCase();
const video = document.createElement('video');
video.muted = true;
video.playsInline = true;
video.preload = 'metadata';
const source = document.createElement('source');
source.src = src;
source.type = `video/${ext}`;
video.appendChild(source);
container.appendChild(video);
if (!progressCircle) return;
const radius = progressCircle.r.baseVal.value;
const circumference = 2 * Math.PI * radius;
progressCircle.style.strokeDasharray = circumference;
progressCircle.style.strokeDashoffset = circumference;
let stopTimeout;
card.addEventListener('mouseenter', async () => {
clearTimeout(stopTimeout);
try {
video.currentTime = 0;
await video.play();
progressCircle.style.transition = 'none';
progressCircle.style.strokeDashoffset = circumference;
requestAnimationFrame(() => {
progressCircle.style.transition = 'stroke-dashoffset 5s linear';
progressCircle.style.strokeDashoffset = 0;
});
stopTimeout = setTimeout(() => {
video.pause();
video.currentTime = 0;
progressCircle.style.transition = 'none';
progressCircle.style.strokeDashoffset = circumference;
}, 5000);
} catch (err) {
console.error(err);
}
});
card.addEventListener('mouseleave', () => {
clearTimeout(stopTimeout);
video.pause();
video.currentTime = 0;
progressCircle.style.transition = 'none';
progressCircle.style.strokeDashoffset = circumference;
});
card.addEventListener('click', () => {
if (type === 'video') {
openVideoPopup(src);
} else {
openImagePopup(src);
}
});
} else if (type === 'image') {
const img = document.createElement('img');
img.src = src;
img.alt = 'portfolio';
container.appendChild(img);
}
});
}
function initGalleryFilter(section) {
const tabs = section.querySelectorAll('.tabs button');
const cards = section.querySelectorAll('.related-card');
tabs.forEach((tab) => {
tab.addEventListener('click', () => {
tabs.forEach((btn) => {
btn.classList.remove('current');
});
tab.classList.add('current');
const text = tab.querySelector('.txt')?.textContent.trim();
cards.forEach((card) => {
const media = card.querySelector('.media-container');
if (!media) return;
const type = media.dataset.type;
if (text === 'همه') {
card.style.display = '';
} else if (text === 'ویدیو') {
if (type === 'video') {
card.style.display = '';
} else {
card.style.display = 'none';
}
} else if (text === 'تصاویر') {
if (type === 'image') {
card.style.display = '';
} else {
card.style.display = 'none';
}
}
});
});
});
}
document.querySelectorAll('.related-content p').forEach((item) => {
item.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
});
});
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('[data-related-section]').forEach((section) => {
initRelatedSection(section);
initGalleryFilter(section);
});
});
// relatedCards.forEach((card, index) => {
// card.addEventListener('click', (e) => {
// if (e.target.closest('.play-btn')) return;
// openPopupByIndex(index + 1);
// });
// });
const revealElements = document.querySelectorAll('.reveal-top');
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('active');
observer.unobserve(entry.target);
}
});
},
{
threshold: 0.2,
}
);
revealElements.forEach((el) => observer.observe(el));
// =========================================== 300پروژه ================================================
document.addEventListener('DOMContentLoaded', () => {
const stats = [
{ number: '1.5X', text: 'افزایش رشد/فروش' },
{ number: '45+', text: 'تعداد مشتریان' },
{ number: '91%', text: 'رضایت کارفرمایان' },
{ number: '300+', text: 'پروژه موفق' },
];
const numberEl = document.getElementById('mobileNumber');
const textEl = document.getElementById('mobileText');
const content = document.querySelector('.mobile-content');
let index = 0;
setInterval(() => {
content.classList.add('fade-out');
setTimeout(() => {
index = (index + 1) % stats.length;
numberEl.textContent = stats[index].number;
textEl.textContent = stats[index].text;
content.classList.remove('fade-out');
}, 500);
}, 3000);
});
const slider = document.querySelector('.op-box');
const cards = document.querySelectorAll('.op-card');
const pagination = document.querySelector('.op-pagination');
let cardWidth;
let cardsPerPage;
let totalPages;
function setupSlider() {
const style = window.getComputedStyle(slider);
const gap = parseInt(style.gap) || 0;
cardWidth = cards[0].offsetWidth + gap;
cardsPerPage = Math.round(slider.offsetWidth / cardWidth);
if (cardsPerPage < 1) cardsPerPage = 1;
totalPages = Math.ceil(cards.length / cardsPerPage);
pagination.innerHTML = '';
for (let i = 0; i < totalPages; i++) {
const dot = document.createElement('div');
dot.classList.add('op-dot');
if (i === 0) dot.classList.add('active');
dot.addEventListener('click', () => {
const scrollPosition = i * cardsPerPage * cardWidth;
slider.scrollTo({
left: scrollPosition,
behavior: 'smooth',
});
});
pagination.appendChild(dot);
}
}
setupSlider();
window.addEventListener('resize', setupSlider);
slider.addEventListener('scroll', () => {
const index = Math.round(Math.abs(slider.scrollLeft) / cardWidth);
const page = Math.floor(index / cardsPerPage);
const dots = document.querySelectorAll('.op-dot');
dots.forEach((d) => d.classList.remove('active'));
if (dots[page]) {
dots[page].classList.add('active');
}
});
let isDown = false;
let startX;
let scrollLeft;
slider.addEventListener('mousedown', (e) => {
isDown = true;
slider.classList.add('active');
startX = e.pageX - slider.offsetLeft;
scrollLeft = slider.scrollLeft;
slider.style.cursor = 'grabbing';
});
slider.addEventListener('mouseleave', () => {
isDown = false;
slider.style.cursor = 'grab';
});
slider.addEventListener('mouseup', () => {
isDown = false;
slider.style.cursor = 'grab';
});
slider.addEventListener('mousemove', (e) => {
if (!isDown) return;
e.preventDefault();
const x = e.pageX - slider.offsetLeft;
const walk = (x - startX) * 2;
slider.scrollLeft = scrollLeft - walk;
});
slider.style.cursor = 'grab';
// ========================================
document.querySelectorAll('.slider-track').forEach((track) => {
const items = Array.from(track.children);
items.forEach((item) => track.appendChild(item.cloneNode(true)));
});
// ================================درباره اینوا=============================
const thumbnail = document.getElementById('videoThumbnail');
const video = document.getElementById('aboutVideo');
thumbnail.addEventListener('click', () => {
thumbnail.style.display = 'none';
video.style.display = 'block';
video.play();
});

0
src/components/.gitkeep Normal file
View File

View File

View File

@@ -0,0 +1,232 @@
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 100;
src:
url('../fonts/yekanbakhpro/woff/YekanBakhFaNum-thin.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/YekanBakhFaNum-thin.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 300;
src:
url('../fonts/yekanbakhpro/woff/YekanBakhFaNum-Light.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/YekanBakhFaNum-Light.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: normal;
src:
url('../fonts/yekanbakhpro/woff/YekanBakhFaNum-Regular.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/YekanBakhFaNum-Regular.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 600;
src:
url('../fonts/yekanbakhpro/woff/YekanBakhFaNum-SemiBold.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/YekanBakhFaNum-SemiBold.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: bold;
src:
url('../fonts/yekanbakhpro/woff/YekanBakhFaNum-Bold.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/YekanBakhFaNum-Bold.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 800;
src:
url('../fonts/yekanbakhpro/woff/Yekan Bakh FaNum-ExtraBold.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/Yekan Bakh FaNum-ExtraBold.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 900;
src:
url('../fonts/yekanbakhpro/woff/Yekan Bakh FaNum-Black.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/Yekan Bakh FaNum-Black.woff2') format('woff2');
}
@font-face {
font-family: Yekan Bakh FaNum;
font-style: normal;
font-weight: 950;
src:
url('../fonts/yekanbakhpro/woff/Yekan Bakh FaNum-ExtraBlack.woff') format('woff'),
url('../fonts/yekanbakhpro/woff2/Yekan Bakh FaNum-ExtraBlack.woff2') format('woff2');
}
:root {
--color-primary: #0274b3;
--color-title: #1a1a2e;
--color-text: #505068;
--color-body-text: #6a6a6a;
--bg-gray: #f9f9f9;
--color-pastel-main: #c5d7ec;
--blue-50: #eaf7ff;
--blue-100: #c5eaff;
--blue-150: #a1ddff;
--blue-200: #7cd0ff;
--blue-300: #57c3ff;
--blue-400: #32b6ff;
--blue-500: #1796dc;
--blue-600: #0274b3; /* همان primary */
--blue-700: #00598a;
--blue-800: #003f61;
/* Breakpoints */
/* --breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--breakpoint-xxl: 1400px; */
}
* {
margin: 0;
padding: 0;
direction: rtl;
box-sizing: border-box;
font-family: 'Yekan Bakh FaNum', sans-serif;
font-weight: normal;
}
html {
scroll-behavior: smooth;
/* scrollbar-gutter: stable; */
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: bold;
line-height: 1.5;
color: var(--color-title);
}
h1 {
font-size: 36px;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 22px;
}
h4 {
font-size: 20px;
}
h5 {
font-size: 15px;
}
p {
line-height: 1.75;
font-size: 15px;
color: var(--color-text);
}
a {
text-decoration: none;
line-height: 1.75;
color: var(--blue-500);
}
div,
span,
button,
a,
li {
line-height: inherit;
}
i {
font-style: normal;
}
/* برای Chrome، Edge و Safari */
@media (max-width: 767px) {
h1 {
font-size: 24px;
}
h2 {
font-size: 22px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
*::-webkit-scrollbar {
width: 10px;
}
*::-webkit-scrollbar-track {
background: #fff;
}
*::-webkit-scrollbar-thumb {
background-color: var(--color-primary);
border-radius: 10px;
border: 3px solid #fff;
}
}
/* برای Firefox */
@-moz-document url-prefix() {
* {
scrollbar-width: thin;
scrollbar-color: var(--color-primary) #fff;
}
}
::selection {
background: var(--color-primary);
color: #fff;
}
/* Hide number arrows */
/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
/* Firefox */
input[type='number'] {
-moz-appearance: textfield;
}
button {
border: none;
outline: none;
background: none;
cursor: pointer;
}
/* Hide scrollbar for Chrome, Safari and Opera */
.no-scrollbar::-webkit-scrollbar {
display: none;
}
/* Hide scrollbar for IE, Edge and Firefox */
.no-scrollbar {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}

0
src/templates/.gitkeep Normal file
View File

28
vite.config.js Normal file
View File

@@ -0,0 +1,28 @@
import { defineConfig } from 'vite';
import { resolve } from 'path';
export default defineConfig({
resolve: {
alias: {
'@': resolve(__dirname, 'src'), // @ → src/
'@core': resolve(__dirname, 'src/core'),
'@components': resolve(__dirname, 'src/components'),
},
},
build: {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html'),
footer: resolve(__dirname, 'homepage.html'),
},
},
manifest: true,
cssCodeSplit: true,
},
server: {
open: true,
port: 5173,
},
});