aboutus-prefinal
25
.gitignore
vendored
Normal 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
@@ -0,0 +1,4 @@
|
|||||||
|
dist/
|
||||||
|
node_modules/
|
||||||
|
public/
|
||||||
|
*.min.js
|
||||||
13
.prettierrc.json
Normal 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
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["esbenp.prettier-vscode"],
|
||||||
|
"unwantedRecommendations": []
|
||||||
|
}
|
||||||
19
.vscode/settings.json
vendored
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
32
README.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# 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
|
||||||
|
```
|
||||||
1011
aboutus.html
Normal file
14
index.html
Normal 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
@@ -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
@@ -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
0
public/images/.gitkeep
Normal file
BIN
public/images/1.png
Normal file
|
After Width: | Height: | Size: 253 KiB |
BIN
public/images/2.png
Normal file
|
After Width: | Height: | Size: 199 KiB |
BIN
public/images/3.png
Normal file
|
After Width: | Height: | Size: 454 KiB |
BIN
public/images/4.png
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
public/images/ali.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
public/images/amr.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
public/images/armn.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
public/images/azta.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/images/blure-effect 1.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/images/ftme.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/images/hamkaran.png
Normal file
|
After Width: | Height: | Size: 890 B |
BIN
public/images/hesabdari.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/images/ipka.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/images/liveinova.png
Normal file
|
After Width: | Height: | Size: 344 KiB |
BIN
public/images/mhdi.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
public/images/mhmd.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
public/images/mhsn.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
public/images/mlka.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/images/nil.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/images/petboom.png
Normal file
|
After Width: | Height: | Size: 1016 B |
BIN
public/images/pic1.png
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
public/images/pic2.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
public/images/pic3.png
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
public/images/prof.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/images/sepidar.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
public/images/snap.png
Normal file
|
After Width: | Height: | Size: 862 B |
BIN
public/images/thumb.png
Normal file
|
After Width: | Height: | Size: 473 KiB |
BIN
public/images/videotest.mp4
Normal file
BIN
public/images/zabanmehr (1).png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/images/zabanmehr (3).png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/images/zarin.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/images/zndi.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
323
src/assets/css/aboutus-responsive.css
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
@media screen and (max-width: 1400px) {
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.hero-content {
|
||||||
|
width: 90%;
|
||||||
|
max-width: 673px;
|
||||||
|
}
|
||||||
|
.contact-info {
|
||||||
|
width: 460px;
|
||||||
|
}
|
||||||
|
.picteam-track-wrapper {
|
||||||
|
height: 380px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
|
||||||
|
.hero-h1 {
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 42px;
|
||||||
|
}
|
||||||
|
.video-wrapper {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
.live-section > .container {
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
.live-button {
|
||||||
|
width: 100%;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
.live-gallery {
|
||||||
|
flex: 0 0 100%;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.picteam-track-wrapper {
|
||||||
|
height: 310px;
|
||||||
|
}
|
||||||
|
.picteam-caption{
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
.showcase-section > .container-showcase {
|
||||||
|
height: calc(var(--slides-count) * 100dvh);
|
||||||
|
}
|
||||||
|
.showcase-sticky {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
.showcase-inner {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.showcase-media-side,
|
||||||
|
.showcase-text-side {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.showcase-media-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
max-width: unset;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.media-item {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(80px);
|
||||||
|
transition:
|
||||||
|
opacity 0.9s ease,
|
||||||
|
transform 0.9s ease;
|
||||||
|
}
|
||||||
|
.media-item.active {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.mobile-pos-one img,
|
||||||
|
.mobile-pos-one video,
|
||||||
|
.mobile-pos-two img,
|
||||||
|
.mobile-pos-two video,
|
||||||
|
.mobile-pos-three img,
|
||||||
|
.mobile-pos-three video {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
.media-item::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.gradient-one::after,
|
||||||
|
.gradient-two::after,
|
||||||
|
.gradient-three::after {
|
||||||
|
background: linear-gradient(
|
||||||
|
0deg,
|
||||||
|
rgba(0, 20, 31, 0.9) 6.09%,
|
||||||
|
rgba(0, 20, 31, 0.8) 17.54%,
|
||||||
|
rgba(0, 20, 31, 0.7) 26.09%,
|
||||||
|
rgba(0, 20, 31, 0.6) 36.3%,
|
||||||
|
rgba(0, 20, 31, 0.5) 43.43%,
|
||||||
|
rgba(0, 63, 97, 0) 87.09%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
.showcase-text-side {
|
||||||
|
z-index: 5;
|
||||||
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.text-track {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
}
|
||||||
|
.text-item {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 0 24px calc(env(safe-area-inset-bottom) + 48px);
|
||||||
|
color: white;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 1;
|
||||||
|
transform: translateY(60px);
|
||||||
|
transition:
|
||||||
|
transform 0.6s ease,
|
||||||
|
opacity 0.6s ease,
|
||||||
|
visibility 0.6s ease;
|
||||||
|
}
|
||||||
|
.text-item.active {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
z-index: 5;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-item span {
|
||||||
|
color: #aebcc5;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.text-item span::before {
|
||||||
|
background-color: #aebcc5;
|
||||||
|
|
||||||
|
}
|
||||||
|
.text-item h2 {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 22px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.text-item p {
|
||||||
|
color: #E6E7E8;
|
||||||
|
|
||||||
|
}
|
||||||
|
.container-showcase {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.showcase-text-side::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.op-box {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.op-pagination {
|
||||||
|
margin-top: 16px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
}
|
||||||
|
.desktop1 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-stat {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.container-hero-section{
|
||||||
|
padding: 0 ;
|
||||||
|
}
|
||||||
|
.hero-card {
|
||||||
|
height: 400px;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.video-wrapper {
|
||||||
|
top: 89%;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
.hero-title{
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.video-title {
|
||||||
|
font-size: 20px;
|
||||||
|
bottom: 9px;
|
||||||
|
}
|
||||||
|
.timeline-card {
|
||||||
|
flex: 0 0 90%;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
.timeline-viewport {
|
||||||
|
padding: 0 20px;
|
||||||
|
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
.goal-item:nth-child(4)::before,
|
||||||
|
.goal-item:nth-child(5)::before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
.goal-item2{
|
||||||
|
border-right: none ;
|
||||||
|
border-left: none ;
|
||||||
|
}
|
||||||
|
.live-title {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
.live-subtitle {
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.live-text {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
.goal-title {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
.goal-grid {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
row-gap: 24px;
|
||||||
|
column-gap: 20px;
|
||||||
|
}
|
||||||
|
.goal-item {
|
||||||
|
grid-column: span 1 !important;
|
||||||
|
padding: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goal-item:last-child {
|
||||||
|
grid-column: 1 / -1 !important;
|
||||||
|
}
|
||||||
|
.goal-item-title {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goal-item-desc {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
.team-grid {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
|
.team-card {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.team-card-info {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.team-main-title {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
.team-card-role {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
.team-card-name {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
.team-group-title {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.team-main-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.picteam-mobile-slide .picteam-accent-line{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.picteam-track-wrapper,
|
||||||
|
.picteam-btn {
|
||||||
|
display: none ;
|
||||||
|
}
|
||||||
|
.picteam-mobile-wrapper {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 576px) {
|
||||||
|
.hero-section {
|
||||||
|
padding-top: 24px;
|
||||||
|
padding-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-content {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-h1 {
|
||||||
|
font-size: 20px;
|
||||||
|
line-height: 32px;
|
||||||
|
}
|
||||||
|
.video-title {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
.play-btn-about svg {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
.arrow-btn-about svg {
|
||||||
|
width: 72px;
|
||||||
|
height: 70px;
|
||||||
|
}
|
||||||
|
.video-wrapper {
|
||||||
|
top: 85%;
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
.timeline-section {
|
||||||
|
padding: 48px 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
1390
src/assets/css/aboutus.css
Normal file
77
src/assets/icons/portfolioGallery.svg
Normal 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 |
1475
src/assets/icons/portfolioP.svg
Normal file
|
After Width: | Height: | Size: 91 KiB |
0
src/assets/images/.gitkeep
Normal file
BIN
src/assets/images/pic2.png
Normal file
|
After Width: | Height: | Size: 814 KiB |
BIN
src/assets/images/pic3.png
Normal file
|
After Width: | Height: | Size: 692 KiB |
BIN
src/assets/images/pic4.png
Normal file
|
After Width: | Height: | Size: 899 KiB |
BIN
src/assets/images/pic5.webp
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
src/assets/images/pic6.png
Normal file
|
After Width: | Height: | Size: 763 KiB |
811
src/assets/js/aboutus.js
Normal file
@@ -0,0 +1,811 @@
|
|||||||
|
// ========================= هیرو سکشن==============
|
||||||
|
const thumbnail = document.getElementById('videoThumbnail');
|
||||||
|
const video = document.getElementById('aboutVideo');
|
||||||
|
|
||||||
|
thumbnail.addEventListener('click', () => {
|
||||||
|
thumbnail.style.display = 'none';
|
||||||
|
|
||||||
|
video.style.display = 'block';
|
||||||
|
|
||||||
|
video.play();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================= اسلایدر سکشن دوم==============
|
||||||
|
const slides = [
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
src: 'src/assets/images/pic2.png',
|
||||||
|
number: 'شروع داستان',
|
||||||
|
title: 'اکثر کسبوکارها با یک ایده جذاب شروع میشوند ولی اینوا با یک شکست آغاز کرد!',
|
||||||
|
description:
|
||||||
|
'چند سال پیش، یک جوان بوشهری با این هدف وارد دنیای کسبوکار شد که فقط به فکر خلق درآمد نباشد. این جوان میخواست مسئلهای را حل کند، ارزشی ایجاد کند و محصول را به دست کسانی برساند که به آن نیاز دارند. اولین قدمش شد راهاندازی یک فروشگاه آنلاین خرما؛ محصولی اصیل، باکیفیت و ریشهدار.',
|
||||||
|
gradientClass: 'gradient-one',
|
||||||
|
mobilePositionClass: 'mobile-pos-one',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
src: 'src/assets/images/pic4.png',
|
||||||
|
number: 'درس اول',
|
||||||
|
title: 'موفقیت فقط به کیفیت محصول وابسته نیست.',
|
||||||
|
description:
|
||||||
|
'اما واقعیت بازار با چیزی که تصور میکرد متفاوت بود. محصول خوب بود، اما نمیفروخت. نه چون کسی خرما نمیخواست بلکه کسی خرمای این فروشگاه آنلاین را نمیدید. همانجا بود که جوان، درس اول را یاد گرفت: موفقیت فقط به کیفیت محصول وابسته نیست. اگر کسی از وجودت خبر نداشته باشد، بهترین محصول دنیا هم روی قفسههای دیجیتال خاک میخورد.',
|
||||||
|
gradientClass: 'gradient-two',
|
||||||
|
mobilePositionClass: 'mobile-pos-two',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
src: 'src/assets/images/pic5.webp',
|
||||||
|
number: 'زمینه شکل گیری ',
|
||||||
|
title: 'پیدا کردن مشکل و راهحل آن',
|
||||||
|
description:
|
||||||
|
'نه جا زد، نه ناامید شد؛ شروع کرد دنبال دلیل گشتن و آموختن بیشتر و بیشتر: از طراحی سایت و سئو گرفته تا تولید محتوا، تبلیغات دیجیتال، برندینگ و تجربه کاربری. هر پروژه، هر تجربه و هر ساعتِ یادگیری یک واقعیت را برایش روشنتر میکرد: دیده نشدن فقط مشکل او نبود. هزاران کسبوکار، استارتاپ و برند کوچک وجود داشتند که محصولات و خدمات ارزشمندی ارائه میکردند، اما نمیتوانستند به مخاطبان درست دسترسی پیدا کنند.',
|
||||||
|
gradientClass: 'gradient-three',
|
||||||
|
mobilePositionClass: 'mobile-pos-three',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
src: 'src/assets/images/pic6.png',
|
||||||
|
number: ' تولد اینوا',
|
||||||
|
title: 'اینوا از دل همین نیاز متولد شد!',
|
||||||
|
description:
|
||||||
|
'اینوا باور دارد که رشد کسبوکارها نباید فقط در اختیار برندهای بزرگ با بودجههای سنگین باشد. هر ایده ارزشمند، هر محصول خوب و هر کسبوکاری که برای مشتریانش ارزش خلق میکند، شایسته دیده شدن است.',
|
||||||
|
gradientClass: 'gradient-three',
|
||||||
|
mobilePositionClass: 'mobile-pos-three',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
src: 'src/assets/images/pic3.png',
|
||||||
|
number: ' هدف اینوا ',
|
||||||
|
title: 'اینوا در خدمت کسب و کارها',
|
||||||
|
description:
|
||||||
|
'اینوا اینجاست تا به کسبوکارها کمک کند که هویت برند قدرتمندتری بسازند، مخاطبان خود را پیدا کرده و مسیر رشدشان را سریعتر طی کنند. چون ما از نزدیک تجربه کردهایم که گاهی فاصله بین یک ایده عالی و یک کسبوکار موفق، فقط دیده شدن است. و این دقیقاً همان فاصلهای است که اینوا بهدرستی آن را پرخواهد کرد ',
|
||||||
|
gradientClass: 'gradient-three',
|
||||||
|
mobilePositionClass: 'mobile-pos-three',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const showcase = document.getElementById('showcase');
|
||||||
|
const mediaWrapper = document.getElementById('showcasemediaWrapper');
|
||||||
|
const textTrack = document.getElementById('textTrack');
|
||||||
|
function renderMedia() {
|
||||||
|
slides.forEach((slide, index) => {
|
||||||
|
const item = document.createElement('div');
|
||||||
|
|
||||||
|
item.className = `
|
||||||
|
media-item
|
||||||
|
${slide.gradientClass || ''}
|
||||||
|
${slide.mobilePositionClass || ''}
|
||||||
|
`;
|
||||||
|
|
||||||
|
if (index === 0) {
|
||||||
|
item.classList.add('active');
|
||||||
|
}
|
||||||
|
if (slide.type === 'image' || slide.type === 'gif') {
|
||||||
|
const img = document.createElement('img');
|
||||||
|
img.src = slide.src;
|
||||||
|
item.appendChild(img);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slide.type === 'video') {
|
||||||
|
const video = document.createElement('video');
|
||||||
|
|
||||||
|
video.src = slide.src;
|
||||||
|
|
||||||
|
video.autoplay = true;
|
||||||
|
video.loop = true;
|
||||||
|
video.muted = true;
|
||||||
|
video.playsInline = true;
|
||||||
|
|
||||||
|
item.appendChild(video);
|
||||||
|
}
|
||||||
|
mediaWrapper.appendChild(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function renderTexts() {
|
||||||
|
slides.forEach((slide) => {
|
||||||
|
const item = document.createElement('div');
|
||||||
|
item.className = 'text-item';
|
||||||
|
item.innerHTML = `
|
||||||
|
<span>${slide.number}</span>
|
||||||
|
<h2>
|
||||||
|
${slide.title}
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
${slide.description}
|
||||||
|
</p>
|
||||||
|
`;
|
||||||
|
textTrack.appendChild(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
renderMedia();
|
||||||
|
|
||||||
|
renderTexts();
|
||||||
|
|
||||||
|
const mediaItems = document.querySelectorAll('.media-item');
|
||||||
|
const textItems = document.querySelectorAll('.text-item');
|
||||||
|
const totalSlides = slides.length;
|
||||||
|
const showcaseScrollContainer = showcase.querySelector('.container-showcase');
|
||||||
|
|
||||||
|
document.documentElement.style.setProperty('--slides-count', slides.length);
|
||||||
|
|
||||||
|
function setActiveSlide(current) {
|
||||||
|
mediaItems.forEach((item, index) => {
|
||||||
|
item.classList.toggle('active', index === current);
|
||||||
|
});
|
||||||
|
|
||||||
|
textItems.forEach((item, index) => {
|
||||||
|
item.classList.toggle('active', index === current);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetTextItemInlineStyles() {
|
||||||
|
textItems.forEach((item) => {
|
||||||
|
item.style.opacity = '';
|
||||||
|
item.style.filter = '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function updateScrollScene() {
|
||||||
|
const isMobile = window.innerWidth <= 768;
|
||||||
|
const rect = showcase.getBoundingClientRect();
|
||||||
|
const sectionTop = window.scrollY + rect.top;
|
||||||
|
const scrollInside = window.scrollY - sectionTop;
|
||||||
|
const scrollHeight = showcaseScrollContainer?.offsetHeight ?? showcase.offsetHeight;
|
||||||
|
const maxScroll = Math.max(scrollHeight - window.innerHeight, 1);
|
||||||
|
const progress = Math.min(Math.max(scrollInside / maxScroll, 0), 1);
|
||||||
|
const exactIndex = progress * (totalSlides - 1);
|
||||||
|
const current = Math.round(exactIndex);
|
||||||
|
|
||||||
|
if (isMobile) {
|
||||||
|
textTrack.style.transform = 'translateY(0)';
|
||||||
|
resetTextItemInlineStyles();
|
||||||
|
setActiveSlide(current);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
textTrack.style.transform = `translateY(-${exactIndex * 60}vh)`;
|
||||||
|
|
||||||
|
textItems.forEach((item) => {
|
||||||
|
item.classList.remove('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
textItems.forEach((item, index) => {
|
||||||
|
const offset = index - exactIndex;
|
||||||
|
|
||||||
|
let blur = 0;
|
||||||
|
let opacity = 1;
|
||||||
|
|
||||||
|
if (offset > 0) {
|
||||||
|
const enterProgress = Math.min(offset, 1);
|
||||||
|
|
||||||
|
blur = Math.max((enterProgress - 0.35) * 14, 0);
|
||||||
|
|
||||||
|
opacity = Math.min(1.2 - enterProgress, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
item.style.filter = `blur(${blur}px)`;
|
||||||
|
|
||||||
|
item.style.opacity = opacity;
|
||||||
|
});
|
||||||
|
|
||||||
|
setActiveSlide(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('scroll', updateScrollScene);
|
||||||
|
|
||||||
|
window.addEventListener('resize', updateScrollScene);
|
||||||
|
|
||||||
|
updateScrollScene();
|
||||||
|
|
||||||
|
// =========================================== 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);
|
||||||
|
});
|
||||||
|
|
||||||
|
//op-box
|
||||||
|
|
||||||
|
function initOpSlider() {
|
||||||
|
const slider = document.querySelector('.op-box');
|
||||||
|
const pagination = document.querySelector('.op-pagination');
|
||||||
|
|
||||||
|
if (!slider || !pagination) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let track = slider.querySelector('.op-track');
|
||||||
|
|
||||||
|
if (!track) {
|
||||||
|
track = document.createElement('div');
|
||||||
|
track.className = 'op-track';
|
||||||
|
|
||||||
|
while (slider.firstChild) {
|
||||||
|
track.appendChild(slider.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
|
slider.appendChild(track);
|
||||||
|
}
|
||||||
|
|
||||||
|
const cards = track.querySelectorAll('.op-card');
|
||||||
|
|
||||||
|
if (!cards.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let cardWidth = 0;
|
||||||
|
let cardsPerPage = 1;
|
||||||
|
let totalPages = 1;
|
||||||
|
|
||||||
|
function getCardsPerPage() {
|
||||||
|
const width = slider.clientWidth;
|
||||||
|
|
||||||
|
if (width <= 768) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width <= 1099) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMaxScroll() {
|
||||||
|
return Math.max(0, slider.scrollWidth - slider.clientWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getScrollOffset() {
|
||||||
|
const max = getMaxScroll();
|
||||||
|
|
||||||
|
return Math.max(0, max - slider.scrollLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCurrentPage() {
|
||||||
|
if (!cardWidth) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const max = getMaxScroll();
|
||||||
|
|
||||||
|
if (max <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const offset = getScrollOffset();
|
||||||
|
|
||||||
|
if (offset <= 8) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset >= max - 8) {
|
||||||
|
return totalPages - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.min(Math.round(offset / (cardWidth * cardsPerPage)), totalPages - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrollToPage(page) {
|
||||||
|
const max = getMaxScroll();
|
||||||
|
const target = max - Math.min(page * cardsPerPage * cardWidth, max);
|
||||||
|
|
||||||
|
slider.scrollTo({
|
||||||
|
left: target,
|
||||||
|
behavior: 'smooth',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateDots() {
|
||||||
|
const page = getCurrentPage();
|
||||||
|
|
||||||
|
pagination.querySelectorAll('.op-dot').forEach((dot, dotIndex) => {
|
||||||
|
dot.classList.toggle('active', dotIndex === page);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupSlider() {
|
||||||
|
const gap = parseFloat(window.getComputedStyle(track).gap) || 20;
|
||||||
|
const previousPage = cardWidth ? getCurrentPage() : 0;
|
||||||
|
|
||||||
|
cardsPerPage = getCardsPerPage();
|
||||||
|
|
||||||
|
const cardBasis =
|
||||||
|
cardsPerPage === 1
|
||||||
|
? Math.min(358, slider.clientWidth - 48)
|
||||||
|
: (slider.clientWidth - gap * (cardsPerPage - 1)) / cardsPerPage;
|
||||||
|
|
||||||
|
cards.forEach((card) => {
|
||||||
|
card.style.flex = `0 0 ${cardBasis}px`;
|
||||||
|
card.style.width = `${cardBasis}px`;
|
||||||
|
card.style.maxWidth = `${cardBasis}px`;
|
||||||
|
});
|
||||||
|
|
||||||
|
cardWidth = cardBasis + gap;
|
||||||
|
totalPages = Math.ceil(cards.length / cardsPerPage);
|
||||||
|
|
||||||
|
pagination.innerHTML = '';
|
||||||
|
|
||||||
|
for (let i = 0; i < totalPages; i++) {
|
||||||
|
const dot = document.createElement('button');
|
||||||
|
dot.type = 'button';
|
||||||
|
dot.classList.add('op-dot');
|
||||||
|
dot.setAttribute('aria-label', `اسلاید ${i + 1}`);
|
||||||
|
|
||||||
|
dot.addEventListener('click', () => {
|
||||||
|
scrollToPage(i);
|
||||||
|
});
|
||||||
|
|
||||||
|
pagination.appendChild(dot);
|
||||||
|
}
|
||||||
|
|
||||||
|
const max = getMaxScroll();
|
||||||
|
slider.scrollLeft = max - Math.min(previousPage * cardsPerPage * cardWidth, max);
|
||||||
|
updateDots();
|
||||||
|
}
|
||||||
|
|
||||||
|
setupSlider();
|
||||||
|
window.addEventListener('resize', setupSlider);
|
||||||
|
slider.addEventListener('scroll', () => requestAnimationFrame(updateDots), { passive: true });
|
||||||
|
|
||||||
|
const DRAG_THRESHOLD = 40;
|
||||||
|
|
||||||
|
let isDown = false;
|
||||||
|
let startX = 0;
|
||||||
|
let startScroll = 0;
|
||||||
|
let startPage = 0;
|
||||||
|
|
||||||
|
slider.addEventListener('pointerdown', (e) => {
|
||||||
|
if ('mouse' === e.pointerType && 0 !== e.button) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isDown = true;
|
||||||
|
startX = e.clientX;
|
||||||
|
startScroll = slider.scrollLeft;
|
||||||
|
startPage = getCurrentPage();
|
||||||
|
slider.setPointerCapture(e.pointerId);
|
||||||
|
slider.style.scrollBehavior = 'auto';
|
||||||
|
slider.style.cursor = 'grabbing';
|
||||||
|
});
|
||||||
|
|
||||||
|
slider.addEventListener('pointermove', (e) => {
|
||||||
|
if (!isDown) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
slider.scrollLeft = startScroll - (e.clientX - startX);
|
||||||
|
});
|
||||||
|
|
||||||
|
function endDrag(e) {
|
||||||
|
if (!isDown) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isDown = false;
|
||||||
|
slider.style.scrollBehavior = '';
|
||||||
|
slider.style.cursor = 'grab';
|
||||||
|
|
||||||
|
const delta = e.clientX - startX;
|
||||||
|
let targetPage = startPage;
|
||||||
|
|
||||||
|
if (delta > DRAG_THRESHOLD) {
|
||||||
|
targetPage = startPage + 1;
|
||||||
|
} else if (delta < -DRAG_THRESHOLD) {
|
||||||
|
targetPage = startPage - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollToPage(Math.max(0, Math.min(totalPages - 1, targetPage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
slider.addEventListener('pointerup', endDrag);
|
||||||
|
slider.addEventListener('pointercancel', endDrag);
|
||||||
|
|
||||||
|
slider.style.cursor = 'grab';
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', initOpSlider);
|
||||||
|
|
||||||
|
// ================scroll logos========================
|
||||||
|
document.querySelectorAll('.slider-track').forEach((track) => {
|
||||||
|
const items = Array.from(track.children);
|
||||||
|
items.forEach((item) => track.appendChild(item.cloneNode(true)));
|
||||||
|
});
|
||||||
|
|
||||||
|
// =========================================== تایم لاین================================================
|
||||||
|
(function () {
|
||||||
|
const track = document.getElementById('timelineTrack');
|
||||||
|
const viewport = document.getElementById('timelineViewport');
|
||||||
|
const btnPrev = document.getElementById('timelinePrev');
|
||||||
|
const btnNext = document.getElementById('timelineNext');
|
||||||
|
|
||||||
|
let currentIndex = 0; // how many cards we've "shifted" from start
|
||||||
|
const MOBILE_BP = 768;
|
||||||
|
|
||||||
|
/* ── helpers ── */
|
||||||
|
function isMobile() {
|
||||||
|
return window.innerWidth <= MOBILE_BP;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCardWidth() {
|
||||||
|
const firstCard = track.querySelector('.timeline-card');
|
||||||
|
if (!firstCard) return 0;
|
||||||
|
const style = getComputedStyle(firstCard);
|
||||||
|
const gap = parseFloat(getComputedStyle(track).gap) || 24;
|
||||||
|
return firstCard.offsetWidth + gap;
|
||||||
|
}
|
||||||
|
|
||||||
|
function totalCards() {
|
||||||
|
return track.querySelectorAll('.timeline-card').length;
|
||||||
|
}
|
||||||
|
|
||||||
|
function visibleCount() {
|
||||||
|
if (window.innerWidth <= 768) return 1;
|
||||||
|
if (window.innerWidth <= 1024) return 2;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
function maxIndex() {
|
||||||
|
return Math.max(0, totalCards() - visibleCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RTL: positive translate moves content right (shows earlier cards).
|
||||||
|
We invert: moving "next" (newer) shifts track to the right => translateX positive */
|
||||||
|
function applyTransform() {
|
||||||
|
const shift = currentIndex * getCardWidth();
|
||||||
|
// RTL: shifting positive moves older cards into view (goes left visually)
|
||||||
|
track.style.transform = `translateX(${shift}px)`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateButtons() {
|
||||||
|
btnPrev.disabled = currentIndex <= 0;
|
||||||
|
btnNext.disabled = currentIndex >= maxIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
function goTo(index) {
|
||||||
|
currentIndex = Math.max(0, Math.min(index, maxIndex()));
|
||||||
|
applyTransform();
|
||||||
|
updateButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── nav click ── */
|
||||||
|
btnPrev.addEventListener('click', () => goTo(currentIndex - 1));
|
||||||
|
btnNext.addEventListener('click', () => goTo(currentIndex + 1));
|
||||||
|
|
||||||
|
/* ── touch / swipe ── */
|
||||||
|
let touchStartX = 0;
|
||||||
|
let touchStartY = 0;
|
||||||
|
let isDragging = false;
|
||||||
|
|
||||||
|
track.addEventListener(
|
||||||
|
'touchstart',
|
||||||
|
(e) => {
|
||||||
|
touchStartX = e.touches[0].clientX;
|
||||||
|
touchStartY = e.touches[0].clientY;
|
||||||
|
isDragging = false;
|
||||||
|
},
|
||||||
|
{ passive: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
track.addEventListener(
|
||||||
|
'touchmove',
|
||||||
|
(e) => {
|
||||||
|
const dx = e.touches[0].clientX - touchStartX;
|
||||||
|
const dy = e.touches[0].clientY - touchStartY;
|
||||||
|
if (!isDragging && Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 8) {
|
||||||
|
isDragging = true;
|
||||||
|
}
|
||||||
|
if (isDragging) e.preventDefault();
|
||||||
|
},
|
||||||
|
{ passive: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
track.addEventListener('touchend', (e) => {
|
||||||
|
if (!isDragging) return;
|
||||||
|
const dx = e.changedTouches[0].clientX - touchStartX;
|
||||||
|
const threshold = 50;
|
||||||
|
if (dx > threshold) goTo(currentIndex - 1);
|
||||||
|
if (dx < -threshold) goTo(currentIndex + 1);
|
||||||
|
isDragging = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ── resize ── */
|
||||||
|
let resizeTimer;
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
clearTimeout(resizeTimer);
|
||||||
|
resizeTimer = setTimeout(() => {
|
||||||
|
currentIndex = Math.min(currentIndex, maxIndex());
|
||||||
|
applyTransform();
|
||||||
|
updateButtons();
|
||||||
|
initToggleVisibility();
|
||||||
|
}, 120);
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ── show/hide "بیشتر" only when text actually overflows 6 lines ── */
|
||||||
|
function initToggleVisibility() {
|
||||||
|
track.querySelectorAll('.timeline-card__body').forEach((body) => {
|
||||||
|
const index = body.id.replace('body-', '');
|
||||||
|
const toggle = document.getElementById(`toggle-${index}`);
|
||||||
|
if (!toggle) return;
|
||||||
|
|
||||||
|
// Temporarily remove clamp to measure full natural height
|
||||||
|
body.style.webkitLineClamp = 'unset';
|
||||||
|
body.style.display = 'block';
|
||||||
|
const fullHeight = body.scrollHeight;
|
||||||
|
|
||||||
|
// Re-apply clamp and measure clamped height
|
||||||
|
body.style.webkitLineClamp = '';
|
||||||
|
body.style.display = '';
|
||||||
|
const clampedHeight = body.clientHeight;
|
||||||
|
|
||||||
|
// If already expanded, keep button visible regardless
|
||||||
|
if (body.classList.contains('is-expanded')) {
|
||||||
|
toggle.classList.add('is-visible');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show button only if content is taller than what's visible
|
||||||
|
if (fullHeight > clampedHeight + 2) {
|
||||||
|
toggle.classList.add('is-visible');
|
||||||
|
} else {
|
||||||
|
toggle.classList.remove('is-visible');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── init ── */
|
||||||
|
updateButtons();
|
||||||
|
// Run after fonts/layout settle
|
||||||
|
if (document.fonts && document.fonts.ready) {
|
||||||
|
document.fonts.ready.then(initToggleVisibility);
|
||||||
|
} else {
|
||||||
|
setTimeout(initToggleVisibility, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── expose toggleCard globally ── */
|
||||||
|
window.toggleCard = function (index) {
|
||||||
|
const body = document.getElementById(`body-${index}`);
|
||||||
|
const toggle = document.getElementById(`toggle-${index}`);
|
||||||
|
const icon = toggle.querySelector('.timeline-card__toggle-icon');
|
||||||
|
const label = toggle.querySelector('.timeline-card__toggle-label');
|
||||||
|
const expanded = body.classList.toggle('is-expanded');
|
||||||
|
icon.textContent = expanded ? '−' : '+';
|
||||||
|
label.textContent = expanded ? 'کمتر' : 'بیشتر';
|
||||||
|
toggle.setAttribute('aria-expanded', expanded);
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
// ================ pic team========================
|
||||||
|
|
||||||
|
const picteamSlides = [
|
||||||
|
{
|
||||||
|
src: './public/images/pic2.png',
|
||||||
|
caption:'خانواده خلاق اینوا',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './public/images/pic1.png',
|
||||||
|
caption: ' جلسات گروهی برای خلق ایده های ناب ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './public/images/pic3.png',
|
||||||
|
caption: ' جادوی سینما به سبک اینوا ',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const total = picteamSlides.length;
|
||||||
|
let current = 0;
|
||||||
|
let captionVisible = false;
|
||||||
|
|
||||||
|
/* ─── BUILD DESKTOP ─── */
|
||||||
|
const track = document.getElementById('picteamTrack');
|
||||||
|
|
||||||
|
picteamSlides.forEach((s, i) => {
|
||||||
|
const slide = document.createElement('div');
|
||||||
|
slide.className = 'picteam-slide';
|
||||||
|
slide.dataset.index = i;
|
||||||
|
|
||||||
|
const img = document.createElement('img');
|
||||||
|
img.src = s.src;
|
||||||
|
img.alt = s.caption;
|
||||||
|
img.loading = 'lazy';
|
||||||
|
|
||||||
|
const line = document.createElement('div');
|
||||||
|
line.className = 'picteam-accent-line';
|
||||||
|
|
||||||
|
const caption = document.createElement('div');
|
||||||
|
caption.className = 'picteam-caption';
|
||||||
|
caption.textContent = s.caption;
|
||||||
|
|
||||||
|
slide.appendChild(img);
|
||||||
|
slide.appendChild(line);
|
||||||
|
slide.appendChild(caption);
|
||||||
|
track.appendChild(slide);
|
||||||
|
|
||||||
|
slide.addEventListener('mouseenter', () => {
|
||||||
|
if (slide.classList.contains('active') && !captionVisible) {
|
||||||
|
captionVisible = true;
|
||||||
|
const cap = slide.querySelector('.picteam-caption');
|
||||||
|
setTimeout(() => cap.classList.add('visible'), 80);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function mod(n, m) {
|
||||||
|
return ((n % m) + m) % m;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateDesktop(animate) {
|
||||||
|
const slides = track.querySelectorAll('.picteam-slide');
|
||||||
|
const prevIdx = mod(current - 1, total);
|
||||||
|
const nextIdx = mod(current + 1, total);
|
||||||
|
|
||||||
|
slides.forEach((slide, i) => {
|
||||||
|
const caption = slide.querySelector('.picteam-caption');
|
||||||
|
slide.className = 'picteam-slide';
|
||||||
|
caption.className = 'picteam-caption';
|
||||||
|
|
||||||
|
if (i === current) {
|
||||||
|
slide.classList.add('active');
|
||||||
|
if (captionVisible) {
|
||||||
|
// small delay so transition is visible
|
||||||
|
setTimeout(() => caption.classList.add('visible'), 150);
|
||||||
|
}
|
||||||
|
} else if (i === prevIdx) {
|
||||||
|
slide.classList.add('prev');
|
||||||
|
} else if (i === nextIdx) {
|
||||||
|
slide.classList.add('next');
|
||||||
|
} else {
|
||||||
|
slide.classList.add('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('picteamPrev').addEventListener('click', () => {
|
||||||
|
current = mod(current - 1, total);
|
||||||
|
captionVisible = true;
|
||||||
|
updateDesktop(true);
|
||||||
|
updateMobile();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('picteamNext').addEventListener('click', () => {
|
||||||
|
current = mod(current + 1, total);
|
||||||
|
captionVisible = true;
|
||||||
|
updateDesktop(true);
|
||||||
|
updateMobile();
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ─── BUILD MOBILE ─── */
|
||||||
|
const mobileTrack = document.getElementById('picteamMobileTrack');
|
||||||
|
const dotsContainer = document.getElementById('picteamDots');
|
||||||
|
|
||||||
|
picteamSlides.forEach((s, i) => {
|
||||||
|
// slide
|
||||||
|
const slide = document.createElement('div');
|
||||||
|
slide.className = 'picteam-mobile-slide';
|
||||||
|
|
||||||
|
const img = document.createElement('img');
|
||||||
|
img.src = s.src;
|
||||||
|
img.alt = s.caption;
|
||||||
|
img.loading = 'lazy';
|
||||||
|
|
||||||
|
const line = document.createElement('div');
|
||||||
|
line.className = 'picteam-accent-line';
|
||||||
|
|
||||||
|
const caption = document.createElement('div');
|
||||||
|
caption.className = 'picteam-mobile-caption';
|
||||||
|
caption.textContent = s.caption;
|
||||||
|
|
||||||
|
slide.appendChild(img);
|
||||||
|
slide.appendChild(line);
|
||||||
|
slide.appendChild(caption);
|
||||||
|
mobileTrack.appendChild(slide);
|
||||||
|
|
||||||
|
// dot
|
||||||
|
const dot = document.createElement('button');
|
||||||
|
dot.className = 'picteam-dot' + (i === 0 ? ' active' : '');
|
||||||
|
dot.setAttribute('aria-label', `اسلاید ${i + 1}`);
|
||||||
|
dot.addEventListener('click', () => {
|
||||||
|
current = i;
|
||||||
|
updateMobile();
|
||||||
|
updateDesktop(true);
|
||||||
|
});
|
||||||
|
dotsContainer.appendChild(dot);
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateMobile() {
|
||||||
|
mobileTrack.style.transform = `translateX(${current * 100}%)`;
|
||||||
|
|
||||||
|
// dots
|
||||||
|
const dots = dotsContainer.querySelectorAll('.picteam-dot');
|
||||||
|
dots.forEach((d, i) => d.classList.toggle('active', i === current));
|
||||||
|
|
||||||
|
// captions
|
||||||
|
const mobileCaptions = mobileTrack.querySelectorAll('.picteam-mobile-caption');
|
||||||
|
mobileCaptions.forEach((c, i) => {
|
||||||
|
c.className = 'picteam-mobile-caption';
|
||||||
|
if (i === current && captionVisible) {
|
||||||
|
setTimeout(() => c.classList.add('visible'), 150);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RTL swipe: drag right = prev, drag left = next */
|
||||||
|
let touchStartX = 0;
|
||||||
|
let touchEndX = 0;
|
||||||
|
|
||||||
|
const mobileWrapper = document.getElementById('picteamMobileWrapper');
|
||||||
|
|
||||||
|
mobileWrapper.addEventListener(
|
||||||
|
'touchstart',
|
||||||
|
(e) => {
|
||||||
|
touchStartX = e.changedTouches[0].clientX;
|
||||||
|
},
|
||||||
|
{ passive: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
mobileWrapper.addEventListener(
|
||||||
|
'touchend',
|
||||||
|
(e) => {
|
||||||
|
touchEndX = e.changedTouches[0].clientX;
|
||||||
|
const diff = touchStartX - touchEndX;
|
||||||
|
if (Math.abs(diff) > 40) {
|
||||||
|
if (diff > 0) {
|
||||||
|
// swipe left → next (in LTR terms) → in RTL = previous slide
|
||||||
|
current = mod(current - 1, total);
|
||||||
|
} else {
|
||||||
|
// swipe right → prev (in LTR terms) → in RTL = next slide
|
||||||
|
current = mod(current + 1, total);
|
||||||
|
}
|
||||||
|
updateMobile();
|
||||||
|
updateDesktop(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ passive: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
/* ─── INTERSECTION OBSERVER (scroll reveal captions) ─── */
|
||||||
|
const observer = new IntersectionObserver(
|
||||||
|
(entries) => {
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
if (entry.isIntersecting && !captionVisible) {
|
||||||
|
// captionVisible = true;
|
||||||
|
// updateDesktop(false);
|
||||||
|
// updateMobile();
|
||||||
|
observer.unobserve(entry.target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ threshold: 0.4 }
|
||||||
|
);
|
||||||
|
|
||||||
|
observer.observe(document.getElementById('picteam'));
|
||||||
|
|
||||||
|
/* ─── INIT ─── */
|
||||||
|
updateDesktop(false);
|
||||||
|
updateMobile();
|
||||||
0
src/components/.gitkeep
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-Black.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-Bold.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-ExtraBlack.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-ExtraBold.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-Light.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-Regular.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-SemiBold.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff/YekanBakhFaNum-Thin.woff
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-Black.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-Bold.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-ExtraBold.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-Light.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-Regular.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-SemiBold.woff2
Normal file
BIN
src/core/fonts/yekanbakhpro/woff2/YekanBakhFaNum-Thin.woff2
Normal file
0
src/core/javascript/core.js
Normal file
232
src/core/stylesheet/core.css
Normal 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
28
vite.config.js
Normal 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, 'aboutus.html'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
manifest: true,
|
||||||
|
cssCodeSplit: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
server: {
|
||||||
|
open: true,
|
||||||
|
port: 5173,
|
||||||
|
},
|
||||||
|
});
|
||||||