From 2dd08650cf0d888e3360e73af2ad96887a29fbe7 Mon Sep 17 00:00:00 2001 From: alireza Date: Mon, 25 May 2026 16:07:58 +0330 Subject: [PATCH] Initial commit --- .gitignore | 24 + README.md | 2 + eslint.config.js | 22 + index.html | 19 + package-lock.json | 3448 +++++++++++++++++ package.json | 45 + public/favicon.svg | 6 + public/fonts/Vazir-Black.woff2 | Bin 0 -> 44160 bytes public/fonts/Vazir-Bold.woff2 | Bin 0 -> 44272 bytes public/fonts/Vazir-Light.woff2 | Bin 0 -> 48804 bytes public/fonts/Vazir-Medium.woff2 | Bin 0 -> 43972 bytes public/fonts/Vazir-Regular.woff2 | Bin 0 -> 43440 bytes public/icons.svg | 24 + src/App.tsx | 4 + src/app/layout/Footer.tsx | 196 + src/app/layout/Header.tsx | 815 ++++ src/app/layout/MarketStrip.tsx | 135 + src/app/layout/RootLayout.tsx | 17 + src/app/router.tsx | 33 + src/assets/hero.png | Bin 0 -> 13057 bytes src/assets/react.svg | 1 + src/assets/vite.svg | 1 + src/components/ui/Badge.tsx | 56 + src/components/ui/Button.tsx | 111 + src/components/ui/PullQuote.tsx | 44 + src/components/ui/Rule.tsx | 44 + src/components/ui/SectionBanner.tsx | 91 + src/components/ui/Stamp.tsx | 37 + src/components/ui/StatCard.tsx | 40 + src/components/ui/apple-cards-carousel.tsx | 280 ++ src/components/ui/bento-grid.tsx | 131 + src/components/ui/index.ts | 7 + src/components/ui/infinite-moving-cards.tsx | 156 + src/components/ui/world-map.tsx | 191 + src/data/events.ts | 95 + src/data/market.ts | 179 + src/data/plans.ts | 74 + src/data/reports.ts | 335 ++ src/data/team.ts | 109 + src/index.css | 239 ++ src/lib/utils.ts | 96 + src/main.tsx | 11 + src/pages/Archive/Archive.tsx | 430 ++ src/pages/Events/Events.tsx | 367 ++ src/pages/Home/Home.tsx | 27 + src/pages/Home/sections/EventsSection.tsx | 104 + .../Home/sections/GlobalScannerSection.tsx | 180 + src/pages/Home/sections/HeroSection.tsx | 315 ++ .../Home/sections/LatestNewsBentoSection.tsx | 240 ++ .../Home/sections/LatestReportsSection.tsx | 251 ++ src/pages/Home/sections/NewsletterSection.tsx | 103 + src/pages/Home/sections/PlansSection.tsx | 338 ++ .../Home/sections/ReportsCarouselSection.tsx | 279 ++ src/pages/Home/sections/RiskSection.tsx | 264 ++ src/pages/Home/sections/SnapshotBar.tsx | 116 + .../Home/sections/SpecialSpreadSection.tsx | 165 + src/pages/Home/sections/TeamSection.tsx | 51 + src/pages/Market/Market.tsx | 757 ++++ src/pages/ReportDetail/ReportDetail.tsx | 721 ++++ src/pages/Reports/Reports.tsx | 581 +++ src/pages/Risks/Risks.tsx | 340 ++ src/pages/Scanner/Scanner.tsx | 430 ++ src/pages/Special/Special.tsx | 383 ++ src/pages/Subscribe/Subscribe.tsx | 680 ++++ src/pages/Team/Team.tsx | 333 ++ tsconfig.app.json | 30 + tsconfig.json | 7 + tsconfig.node.json | 24 + vite.config.ts | 13 + 69 files changed, 14647 insertions(+) create mode 100644 .gitignore create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/fonts/Vazir-Black.woff2 create mode 100644 public/fonts/Vazir-Bold.woff2 create mode 100644 public/fonts/Vazir-Light.woff2 create mode 100644 public/fonts/Vazir-Medium.woff2 create mode 100644 public/fonts/Vazir-Regular.woff2 create mode 100644 public/icons.svg create mode 100644 src/App.tsx create mode 100644 src/app/layout/Footer.tsx create mode 100644 src/app/layout/Header.tsx create mode 100644 src/app/layout/MarketStrip.tsx create mode 100644 src/app/layout/RootLayout.tsx create mode 100644 src/app/router.tsx create mode 100644 src/assets/hero.png create mode 100644 src/assets/react.svg create mode 100644 src/assets/vite.svg create mode 100644 src/components/ui/Badge.tsx create mode 100644 src/components/ui/Button.tsx create mode 100644 src/components/ui/PullQuote.tsx create mode 100644 src/components/ui/Rule.tsx create mode 100644 src/components/ui/SectionBanner.tsx create mode 100644 src/components/ui/Stamp.tsx create mode 100644 src/components/ui/StatCard.tsx create mode 100644 src/components/ui/apple-cards-carousel.tsx create mode 100644 src/components/ui/bento-grid.tsx create mode 100644 src/components/ui/index.ts create mode 100644 src/components/ui/infinite-moving-cards.tsx create mode 100644 src/components/ui/world-map.tsx create mode 100644 src/data/events.ts create mode 100644 src/data/market.ts create mode 100644 src/data/plans.ts create mode 100644 src/data/reports.ts create mode 100644 src/data/team.ts create mode 100644 src/index.css create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/pages/Archive/Archive.tsx create mode 100644 src/pages/Events/Events.tsx create mode 100644 src/pages/Home/Home.tsx create mode 100644 src/pages/Home/sections/EventsSection.tsx create mode 100644 src/pages/Home/sections/GlobalScannerSection.tsx create mode 100644 src/pages/Home/sections/HeroSection.tsx create mode 100644 src/pages/Home/sections/LatestNewsBentoSection.tsx create mode 100644 src/pages/Home/sections/LatestReportsSection.tsx create mode 100644 src/pages/Home/sections/NewsletterSection.tsx create mode 100644 src/pages/Home/sections/PlansSection.tsx create mode 100644 src/pages/Home/sections/ReportsCarouselSection.tsx create mode 100644 src/pages/Home/sections/RiskSection.tsx create mode 100644 src/pages/Home/sections/SnapshotBar.tsx create mode 100644 src/pages/Home/sections/SpecialSpreadSection.tsx create mode 100644 src/pages/Home/sections/TeamSection.tsx create mode 100644 src/pages/Market/Market.tsx create mode 100644 src/pages/ReportDetail/ReportDetail.tsx create mode 100644 src/pages/Reports/Reports.tsx create mode 100644 src/pages/Risks/Risks.tsx create mode 100644 src/pages/Scanner/Scanner.tsx create mode 100644 src/pages/Special/Special.tsx create mode 100644 src/pages/Subscribe/Subscribe.tsx create mode 100644 src/pages/Team/Team.tsx create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# 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/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md index e9ab022..e2bd34f 100644 --- a/README.md +++ b/README.md @@ -72,3 +72,5 @@ export default defineConfig([ ]) ``` "# thinktank" +"# thinktank" git init git add git commit -m "first commit" git branch -M main git remote add origin https://github.com/alirezaameria2-dev/thinktank.git git push -u origin main +"# thinktank" git init git add git commit -m "first commit" git branch -M main git remote add origin https://github.com/alirezaameria2-dev/thinktank.git git push -u origin main diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..ef614d2 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,22 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..25aab4c --- /dev/null +++ b/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + اندیشکده فولاد ایران — تحلیل راهبردی صنعت فولاد + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..699cda7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3448 @@ +{ + "name": "andishkade-foolad", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "andishkade-foolad", + "version": "0.0.0", + "dependencies": { + "@tanstack/react-query": "^5.100.14", + "apexcharts": "^5.13.0", + "clsx": "^2.1.1", + "dotted-map": "^3.1.0", + "framer-motion": "^12.40.0", + "jalaali-js": "^1.2.8", + "lucide-react": "^1.16.0", + "react": "^19.2.6", + "react-apexcharts": "^2.1.0", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1", + "tailwind-merge": "^3.6.0", + "vazir-font": "^30.1.0", + "zustand": "^5.0.13" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@tailwindcss/vite": "^4.3.0", + "@types/jalaali-js": "^1.2.0", + "@types/node": "^24.12.4", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "tailwindcss": "^4.3.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@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/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@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.132.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz", + "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", + "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz", + "integrity": "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz", + "integrity": "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz", + "integrity": "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz", + "integrity": "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz", + "integrity": "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz", + "integrity": "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz", + "integrity": "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz", + "integrity": "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz", + "integrity": "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz", + "integrity": "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz", + "integrity": "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz", + "integrity": "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==", + "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.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz", + "integrity": "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==", + "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.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.100.14", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.100.14.tgz", + "integrity": "sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.100.14", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.100.14.tgz", + "integrity": "sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.100.14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@turf/boolean-point-in-polygon": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.5.tgz", + "integrity": "sha512-ba7+B0wzaS9GtERZOoXUZ6oW8IcIJHNQZf3c+tiD9ESjcsPO1Q/4qIJGTKl92nBLhhracHJxMWBM/U6hAVkaRg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.5", + "@turf/invariant": "7.3.5", + "@types/geojson": "^7946.0.10", + "point-in-polygon-hao": "^1.1.0", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.5.tgz", + "integrity": "sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/invariant": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.5.tgz", + "integrity": "sha512-ZVIvsBvjr8lO7WxC5zYNjRsjSDvyGvWkJMjuWaJjTU8x+1tmfNnw3gDX/TI2Sit83gcRYLYkNo23lB/udqx/Hg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.5", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/jalaali-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/jalaali-js/-/jalaali-js-1.2.0.tgz", + "integrity": "sha512-DRQKjbfFe0/v3siCou9eFzYjDxJItkJpxbU+/CSptvoRqq2/VmTA6y8QvqK/VELKW6xX3qb174nLZlrFV9OT3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", + "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.4.tgz", + "integrity": "sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.4", + "@typescript-eslint/type-utils": "8.59.4", + "@typescript-eslint/utils": "8.59.4", + "@typescript-eslint/visitor-keys": "8.59.4", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.4", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.4.tgz", + "integrity": "sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.59.4", + "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/typescript-estree": "8.59.4", + "@typescript-eslint/visitor-keys": "8.59.4", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.4.tgz", + "integrity": "sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.4", + "@typescript-eslint/types": "^8.59.4", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.4.tgz", + "integrity": "sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/visitor-keys": "8.59.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.4.tgz", + "integrity": "sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.4.tgz", + "integrity": "sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/typescript-estree": "8.59.4", + "@typescript-eslint/utils": "8.59.4", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.4.tgz", + "integrity": "sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.4.tgz", + "integrity": "sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.59.4", + "@typescript-eslint/tsconfig-utils": "8.59.4", + "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/visitor-keys": "8.59.4", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.4.tgz", + "integrity": "sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.4", + "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/typescript-estree": "8.59.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.4.tgz", + "integrity": "sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.4", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/apexcharts": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-5.13.0.tgz", + "integrity": "sha512-PJuXT6zdiCbv0IkX5cqkKFVIIh+9v3kqP9zsOHEGpIWi7DfTgzvfOKc8icw6G3/ulR3V1alDDUtOVH0zWCWGEQ==", + "license": "SEE LICENSE IN LICENSE" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotted-map": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/dotted-map/-/dotted-map-3.1.0.tgz", + "integrity": "sha512-E0z9o5IaTf44FnWHvbyg4QQcBwXgzZJr82HJASWb1dKUCULHfnlWKRpfe5EFHTk/yaoS1sQSLMyMrL6o74/sIw==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "^7.3.4", + "proj4": "^2.20.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.361", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", + "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.0.tgz", + "integrity": "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/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/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/framer-motion": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", + "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.40.0", + "motion-utils": "^12.39.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jalaali-js": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.2.8.tgz", + "integrity": "sha512-Jl/EwY84JwjW2wsWqeU4pNd22VNQ7EkjI36bDuLw31wH98WQW4fPjD0+mG7cdCK+Y8D6s9R3zLiQ3LaKu6bD8A==", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.16.0.tgz", + "integrity": "sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mgrs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", + "integrity": "sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/motion-dom": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", + "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.39.0" + } + }, + "node_modules/motion-utils": { + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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/point-in-polygon-hao": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz", + "integrity": "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==", + "license": "MIT", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "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.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proj4": { + "version": "2.20.8", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.20.8.tgz", + "integrity": "sha512-1C8sfT4xY4PAPwk0MroFBTGF4R4bzDXdmPQTGYVLsoNssrZ9odzObxS2dTeGBty8jW8KO7h16C1Hs2JP+ctfFw==", + "license": "MIT", + "dependencies": { + "mgrs": "1.0.0", + "wkt-parser": "^1.5.5" + }, + "funding": { + "url": "https://github.com/sponsors/ahocevar" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-apexcharts": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-2.1.0.tgz", + "integrity": "sha512-xrmeTKRKHh3cvvLc8SasqFjlOgIqGpyHc81qjnRtcjUM0Fu7qEjgVRWGPokGFjqhwRZVgEym8zmuEyYr5LMYIg==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "apexcharts": ">=5.10.1", + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.6" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", + "integrity": "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.15.1.tgz", + "integrity": "sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==", + "license": "MIT", + "dependencies": { + "react-router": "7.15.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "license": "Unlicense" + }, + "node_modules/rolldown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz", + "integrity": "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.132.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.2", + "@rolldown/binding-darwin-arm64": "1.0.2", + "@rolldown/binding-darwin-x64": "1.0.2", + "@rolldown/binding-freebsd-x64": "1.0.2", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", + "@rolldown/binding-linux-arm64-gnu": "1.0.2", + "@rolldown/binding-linux-arm64-musl": "1.0.2", + "@rolldown/binding-linux-ppc64-gnu": "1.0.2", + "@rolldown/binding-linux-s390x-gnu": "1.0.2", + "@rolldown/binding-linux-x64-gnu": "1.0.2", + "@rolldown/binding-linux-x64-musl": "1.0.2", + "@rolldown/binding-openharmony-arm64": "1.0.2", + "@rolldown/binding-wasm32-wasi": "1.0.2", + "@rolldown/binding-win32-arm64-msvc": "1.0.2", + "@rolldown/binding-win32-x64-msvc": "1.0.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/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/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/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/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.59.4", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.4.tgz", + "integrity": "sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.59.4", + "@typescript-eslint/parser": "8.59.4", + "@typescript-eslint/typescript-estree": "8.59.4", + "@typescript-eslint/utils": "8.59.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vazir-font": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/vazir-font/-/vazir-font-30.1.0.tgz", + "integrity": "sha512-XN2Uprw/Q3QhAAApITykf+v0l4p4FpqvIh0h2XDSJRjwUiYeDpwQxECQF/93ZOCDO2t8haBi6BZZqO8sifYNRg==", + "deprecated": "vazir-font no longer supported. Use vazirmatn instead.", + "license": "OFL" + }, + "node_modules/vite": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz", + "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.2", + "tinyglobby": "^0.2.16" + }, + "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.18", + "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 + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wkt-parser": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.5.5.tgz", + "integrity": "sha512-/zMYi94/7D7fxcOSlVmWn6vnOMj3Gq5d1xvVjaYOS9n6h0qOJ4I7YYVxBWYcH1vq9+suhqzXkn05Yx47zQNUIA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ahocevar" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/zustand": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.13.tgz", + "integrity": "sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9594e4d --- /dev/null +++ b/package.json @@ -0,0 +1,45 @@ +{ + "name": "andishkade-foolad", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/react-query": "^5.100.14", + "apexcharts": "^5.13.0", + "clsx": "^2.1.1", + "dotted-map": "^3.1.0", + "framer-motion": "^12.40.0", + "jalaali-js": "^1.2.8", + "lucide-react": "^1.16.0", + "react": "^19.2.6", + "react-apexcharts": "^2.1.0", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1", + "tailwind-merge": "^3.6.0", + "vazir-font": "^30.1.0", + "zustand": "^5.0.13" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@tailwindcss/vite": "^4.3.0", + "@types/jalaali-js": "^1.2.0", + "@types/node": "^24.12.4", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "tailwindcss": "^4.3.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..51bb508 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/fonts/Vazir-Black.woff2 b/public/fonts/Vazir-Black.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d6f74d42b9223104de9f192a5963e6fe32943cad GIT binary patch literal 44160 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 VP|$5Zr>Eg=)9VweGz}8s{{eudYEb|H literal 0 HcmV?d00001 diff --git a/public/fonts/Vazir-Bold.woff2 b/public/fonts/Vazir-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f6789731d49013e1b7c4aaf07ba345b733960061 GIT binary patch literal 44272 zcmY(pQ;;w`(*-!TZQHhO+xE;ewr$(CZQHhOoBMwMR&CXui<9n7DmgdlRJz(tUW^F< z5a2&l-vc21Hvq=i{AUOMzp?+t|Nr0@6H}4J!3yxkzI4V(763B*&2a2_MbAPs@?RVx3F@c|O*LJh zPPe;7IftW6D}@R~vzO~WarLkMQjbXZ`THMQO%Xd;nt68QO#~l=G0*0*%v=klbV|gVYs{X06A=X$DjW zOQUXXed0FxROaHg;>_}OdXhe*^UkJR3Uzksw(h>h6?=ZMp|Q%`^=~?(jdjgw@KFZj zb(Y3EhVqbgi4lzPcqEPy#9%uAO6o+^(U?psw4Hj!8yHeUvi}^$YT`xk9j)o7wApc) zKm`YVT;<%<{L(+fBJeGA+i8m4mt5QawqzlzR`1&i8}v_PIFEEbIPI%^o=+S-h;y%c3ZABqnIp8MEUd~Gm_LW2~5l`{-m8y8yivP;ug&IB9O2a8bvM0X0j|%XamH?i@ggH znBKq*vH}Z{i_A$33|PUC3Y7|ri3*6&A~9KwmpU#AqeEJ5va+grqsG4+we)vrHzZZt zP}hI@-9=C^$R0>a`|JO*Bx9r z9P`WlQ7}vg-&}!B*5gy7^C6{rUr<}3v~*ucjVGC0J_QE0e@`(L*2W?H@%JhuXJU(s z{e^*eD=MaprK*nR2KNvITVa61$X#CZO6qflQ*AI6Y^27!+$GmcPT^rofn;H zN4^~QwOU1!X3P=+Jrf>OEr~JgoNE&y3w}eML~v2<0i1^ojEQ9!d&y-KRHCzkht3=L zKzQ~~la-_>M_}P}iYOurEi+3k*D<)EV%1P=;IM9m2d9nZfbG;MOOlng_y4~Y>>T!S zg%+8Gl##FgS^WRaNd;VJ#0R97dG*gw|K~TbyIK644Tv8|Vf=M&0JSlH zXHQ{O{pVNl+2T_tpa7bvgscWGa4Ya@_gm^KWvy7?r1dgfU)_19+EeKn0;He{fGCj! zBoZOmC=r-Qsq~2t8t)2N_)K{rzKMLDm#7>jlMtDF(kjUf?iy~0#> zLc{K4)|ER_Y2JnNXRRf+@{}XQKlXPMy`HKVN{Do8^`f?R{x92Mv0Uv&*P{iF0+gf- zMwz64*_2~`ejZ>UNPL6PJ{yk+95uRytIO@JP(WrAi7-NAs7nJqDj;4WSm_{Q{h!Nk zFUXbwR{;w@qU7O&6h{=@%Rkq1c0eeLVLm6*rE=wRmD^|R&mo9Wpuzx0qRp>8BL8Ss zcd=vx9%B)2a@7xN?hCN=5In9@3@l{~<7kKA!t^i%(HjSsSw9-%O+R4B@T>ae!*XE4 z$59Nw@4bItIKgQXrJ|VW1O$vOz_Y$L23zN5BE|#3s8s@YpV({ZtLfuDl&p$I5g0TO z(9ksL0tH+ya**Ug>w9v@pf>6FIX!=SY(770?>gTPGor2y^!!t2IORHh___=l)|1m@4&@`#H_1 zDvh=VJC6wEWq4p$8R7z}9yrxn^8S@hsMWE}fC>-ai);P^aXyZCUy zAVLU0{&K)D0l~0+ueZ&r4gZ9p_VWG-U2+c4RpUC{CeX_J{`xRMknGaK!GUa`C@??! z#%=WJ<&IO7w@27;h-4p+W)OPga0IAe3(s*xrtEwbypZQfAy2Rzscpgj}svBiU65|u!}qX;D;d+(_wO;p-^w}fHvJR#>tsS02T zCwGUkU(Am_wIqz-3HwsR2Z6k)BF3JzE{mbZ+;Iw#lYq=NC0Cn-$jjo05D{#C^uK>` z!7Y^9ys-w@9idk76CH`8bJkxRDg&{U(iH0{WO%R1M7)Eec zpY)XJCN;IIrAlOj|E6w*=M(KDic_^@u_m+|4w_t=2nD6L<#4NH(QG`KR32*m4rJvJ zjmE>&5-tuzb@SXR9mvt5aaQS9$r<=+wB21w7VMg0%+EEI9%qL1T3bHk5$L6)^?q28FBuoAuq0H3dz!Mm0Oe0PLhcgsJ6DI;Lo!aq7FLhUM@%@jpZvM~H z`q$cJ>W&Q$6FaBfXf?F@wP$9jA;ekR;BXS_@c*5Y;7+BjprfX#yq64^1e7sqVlBU{ zdviExqT4mg`)qg?-kw|?*qB+`+Pe^O(Gen@TBp@z=%=}mT^QM!`kPc=mFd|VFNJ;8 z{Xc5Yr7vDgy=l*V02S)UjYtWyj@!j<+}>dQKXJWB^^8eo)Bh9GzdOV+GiBAYar?>~ zN{&vW-DJ6?*~pY{yX0;$Z8>8w+LXSd6PmpS@r3V`9YSk$SVChBN)4>)$3>uzj`h*2 zqKN2*X7cPu#^T}zV&Yv<81wZ8p+Y@?jE%C^%vn&A7ouLR1{9eR8B2bsZ^tv3Xz~zS zfTR!G5=O3rgseV{C5fNFMyl6hyBccA%*Pan_c|*8^-oRuBgz3rC9-WAgVpD{u1(+9 zY|!!Yl_&@Rn=Q@HNk^YI&B6PYgzc$7Bjfn;+HN?j^eDPDx~q$1ms9C_zEUE3$Pk5| zr22fw8Osp5of*_Hr(HaV=;qy30(GFVK*V@7L?l!58dcdI!kXBQHN)ngfiLTdf!3B< zLq&y@uNAA%w;O9^44FcuNdCrzY^7~paD^t*Wsr);TzjQ*V}|K@}n;CdVyqrn@hXbc|AR0sw3IFh?K?0d()7ut3Zp9_JMcVKoLiwL3gin0Iy( z0IQa9?|b=y#tAm#xL3+s%@G@t5M@ctb&LBNm8uVp=vY~Wue*!;OQi`&Q_k|T5`5e$ z-(b>$V3WXJJ%uWhQglu~aSceBbF@VWL@j3Ct6Xf;{!^PltRb^RFuzTkA5zIy659lFcKhX$57ed&xpPEDq?U&T9GgtKPG2&eUN_M6zQTg!#Z4%eJcXRm`6_B?bRZY12MCw{cPcp+$M1$QA405`yG=zD{x`{wDx>z;38}u>LK8J3w!Ud&vGX0DVAj=zHM)Ie|jAKZ~ zX;V06jMl?&;wali=&27#Yzg`pV_i8D{?5f)GX?$Jm{aS1nm5gXV>moh(B13QJ)>FP zEA;QEeHU*(ets8sKYseqHpcNsfFkJ%qyMAO6L$c_Qj5?N2zY?O2Z?eF4X5MX_{Jqv zqsfxiT}B!*O5(cWO2T>W;bdu5cH1@c;3QB}R#{tM;iM-aD%$9EB^297o#hQM3eg#U%z1;Y?Bm%=(WxEk@1I zqq|gAeaDn5bcDq8I7NjO#8Z5<%nY4IuhntpQ~vQy#J%kT6o5jO1sV4=Kuqq|Ku0Aj3rKANe7A*F{WOZ zoGaN-wj}FU(zK+4NjH_uELwJWb+}!0J!^x}%G1*a(lB25Yh2hN{K;DpOx4g6h+)G% z{*VG2wf_c;zG#4GyFLXSx~~Qt+JFXZ6K9nZE1C^YREKJR5%AA$u21J)U#t)JR+4uU zAU^Q?)D*(Lc94$brAm`mO-P+Gx5gxFQ}aDGghV=uIR?Z?zpBJPw8TC*qu!p?)5?8J z){SkkF!g5^(f#++{oSRmg93btijjW6Hs>mUxnRM>zF9$mpYhC`4o%;QpV`rk)X^yx znH}WP`dVZ0lo*z8d==DQ=0k+T8S#43z0SeuKofeu#` zH&kS*i<+)s8VnK4bbfpxH6kn(glbpL$F?6z+qSrK- zsdF79L@rty1w8>#QH7;bLr|fbsZ`U>X}d~9YSCOqt$Z@`s!-aR-4#CEX#oE>G^Uqp z)U|rl#2|Cz$a0u${5Hp}%YV<11wJx2Y?!u`-;G8MeQ#Ohqg&q1wXTH)pGP82tRuyJ zBRpJ6(;(L&$-^hMt8gy=Y}}XCM{T@H&D4WI1Gw!7{Csp{HL<8^t7o~62&ynUQ$^}% z*%@)w(B1Ojf|DtwgBM zGs#kyP@QzZS7Syf{k4~4Lq-3AP;Uk@j#B(6c**&&90R}S%3TX5bs&t#HU)15D8ciG zlCt8-o;6WJ{%)`gOsKnHUG0h?W|DJ5SV{0(vqO+SPl!mrpH{x0z3#NNMQQNwWp-2j z+@!&iy=Pr2?&%X|%UxC4L?v~G)~mIfkDN^tS4(mhF$?VJ_Pi+FJP9doKdn=&Uc!M% z-1x`33b`&?$nmusF_K@^m-}qm3`|>zSuH_JPn&I6p4oean0Nz2#(P+5cvxyX&B2u_ zN@-jL=jK7ay1{#c{f!-4p@XwNic#I?VlwD^J)7DpUU|Y71i&vWRUGqFD zVhuzL4l8U#;+|>o6GZI(i0%y$T{0d;GKr}o32q~SmouLDM;M(V)JQUAc{~{h@~16e zLLBwCXkPaT8XWHDs0!y}$1Zpq7v52hnI}GOzNAJ5V~(F#CYGPSH=T0=6PsY>-doj47+l5GPUf!cD+O7 zV@IQWO|1cU!#S$Y^=5*GX{^#~@`T%V+uIQY#dG5J{0k^dsKIIpk&&+vay^N>_qii( zSiHlms1FVXg7!E@Gb@~pc-tHWZ5*zO`HG2ubkaOi^_~&=7#yhO_is^Hm}nL#6dM+{ zJ`{Yg6;vz{5KkP3a3Bs}G9pnzG$~X@5UhbYm&XK}6@}9xRscY5e$zyzygHwy(%lC<8t=>)YlaxK1uU4EN)Ce73TBHh&npP zSl!Epq~F!O9cykaI1m?2^ubw>_`M*&5+i&r-eC}QE^D(1rl%7eW5dES*;1Ifkk`WV zv+r-gkpYDj+>I-ziIr8NwTuc(HwN=4lV&Y`b^q!*TG!BY!4w8(kZwJ->(Fg_xP-}a zfvyD28Vq$kYwO6Z!l|ld2^k1BO>Xk_0KWxF^c9vOis89}9?7&STA?9)v>1i~Ew*)B zNu!RNCZx9U7U3G|Fz*wdG=_hlEWu*A`vW40X$0q0VU=B{bTWvm5C+gS&#@tqVc6EE?3{@()(XZIyMf1tUL{SngHc=Q z-Yf5-_>A65#c7_61@0=WwsZ;A&W~r+-zr@B=XD)xo&5)-wIrem8xw6y~XKwip_jEQmwt}ukOWF}HeSxbbf$(6} zPQxEo<49rIzgKjLfe_4{@2)IAIi6+i+F29>_F6Jzauyg1oCEf>-l{tJH?G4C#-;Lw zFh_l_zVGE~^h`ytZ-y6%8>|I+ArLdh4;TAp!b9Ne~8NqC+;NgF2b%k9_a{ zq_|VRAoCvkBV?E0V3_-s-2!~hcA4Mb7Q@@ZF%tGChQ=A;pR5bHvwPgeRY%L98rh zbN$Sgcs)x$g=&=eFI}E-2#DVhxD@NCf3wFPFm<-VHm1ev_?$Rmma6$KvGbwqoxB){ zd=GzOn*+{pwbgrW;n&=r4L^kMSW3xvF7@ZDN+&VWe6yP3Qu6S&T_;svY_ADJq%^;tm*D_p6aa9SV9zKg;TPEwIl992<_5hj zaKv-niM`INYCnedm6a;Az8&iIlBjMQcgfXBJ7m+{RsX@Oy3U!4^;9=hI{flbYZ!SN zhKIm?IfVi+Ecav?3x6PXexM$9k7N4{K>wyciugl8;yVFi;5&-K zUhC%j3#E?chvMK&{#%VG25_m!D!ZSc!bKxmaTq6*D^ci#>fjt!20ZNWENr`0;6P9u z3u*c%Xj6-}d){$Iu9-+}shfOBV`v-?C?IZD325)?%V?xh_YLR{QD zU7>!=e>duR-5_d5T;~H(ee3l@{I2fPnYOn-?K|uaVsF%KChoKs-`8`dmb`N+VTk`< z3qSHNf6cl41^($Tu_*EHMk$f#tHS|qUT@)y8DK$-m^xND@dN8L!@&$#-rqe;68qj0 zU;x0gy|Yqmy6#Ao_U-Gcw^Q9KpMeK3#%7J&{$ zv^>x-iPU0rU)#Bn;JGjDQP=XHt>u;e2VEzQZA_bT;Deilfk7K{aeV-4&61not zHDC!LWmTElt;RAJ@iEd8`i4bZa!3rJW zHSEXq&Oy$a?N7a*{2+aWWHg(UK;Synr==J+p2}N zt?QPVSI!H^Nig$E=Nj+}`+WHiTx*%I0fiDTXt#V*jD8SgIB|sb2yo)w*{cu2Xx<}@ zp@2dajahbo$uzAbF*mX1@6%euAs z&Mf=3yLkWoWcOe{^;+PuCxr4fWh50W#@vEEVQZXQkb|j6R45d4mxpw1?jCe$(&??W$46bL zw_Eo>clr>gclT3@6q+Q8j=b1=5E29xYZSmt>seeLetjrS;+}6z8QAU2$n=7 z!lc&ly{zgO*KUNIYvo94ueL2^+$WX|NHF|KA^3J6ed#}pq!><*QcG*5>{X41i^K6+ zDVmm9&n%nQ$Om;FlIMu|GNC+ZAJXTSdDHXbc}u|abE^PWmz{Z7VRk57yiQY#R>QM# zAFw%7Kx?AIeaEvN%RiaLm!%=zI1UHF)@emk%)MrtgU1g-R|b|weOV5ZdxMbRiv#wH z5dGq#yGk$!KpO%6{4C-62X%~NWGFOtbkwTFLsBX-!>ov;0*M&8vwr6ls8!=~Od0VQ zgUu@Nr*19=+ZCP6%D@ejUX`$dv)4I-Gd-ywR+1Ju_CmR;BVgNrQ~~Au0QIs)|!@=?pLnM>MC@XAo~K& zLHWXB3$O`h6dZ$h0vdn8Yr}Yphx|s{Fo35En6%l@ZQ%H%W8ryc2&1SFMts|y@zxQs zf|f)cHLJ=lZCKV7rE}QIs$E|InAMG6*dU8N1gUlLytnVi&)46FkCz;Y(!~t#0*#8( zNk(8Whl6_=r_fVTb&%9FUIGxp$Hp~5pv&q`@b!YNtx-45W1-B<9(ZHxU|neFANwwf z*1(Iq!`oM&eDo!X|S9C7~AN*A;KQ&8~)3THBH2^BFp zL0N6}y} zCTu8c;!vG37ugp0pM@b6|FmCRU@Lf)<|1%U>P_N9ro8r&FGzAfAo=wren=Ejxmc>- z6D3ICKBA0K7abFn-Yv}c&p%BH9Inbm8RQsN1*PS5pN$M_GvtUX8wKildpR|FTd5Vr9J$grXTsw-@AYKPqC*pBUwueTVB%8EKL)|EuVF# zSGK&B(k=yT)-7m{&dnnc^$<_@MBYS!;TG_)I>afAWxz14#H1M5HpFsCB!3EJ#`|L= z{-Ow32!_};Btpw%S+)%;Y(}lfZ9&1!J@qu45m{Q?SC*4I=FBF;>5$51OdM^EftRhH zp|3a`j)~(gZoG#BOZ;kzR9Su*y!~15`t*DGt`W*`+=KimX8>;~8W`pvDB%7*2hK)E z4^FN2#4!NZv}3x-$2`+v9LFLH{yoHs@zRDI5-2y>aGSvMCdWfk=`=m&@g_gMKaTDh zPlV6${Zn@cJVL<;YdiK!pb3Mztc$Pl7-mV|-CeM-;u{Mk%dYHSO_RC2RvTPJfg+wc z<391fx~}n4f0xuR{AZ?rtTZjk|NMaWBJ&0MgRDa=E^w5wrSIMLaPVpl&qw4be6KJM z59CSuszQu+*G2*80XilWSO>O%K;WK+-H_@HodiK)#XId~H?VLMHk)KJ9L>JZkIhbMtw867qT$+}fQC`RH@j*SqCjI(g^vQ+S=WbINwIeIPg=mlfTOoXiSu!{sM*21S@ z1XCk~e;D4Pd>pha5Sn9DO(mT6sMH201$eF4R_00`tdN>uqAPKigEw`~%NYp+Tz4>M z#B#ASmxU60vG`A}Y34&0ARKAwdTHR59OdR`_qDfE2{MdHfHb3LWzj}01!rMsu_mO$ z!s#^(EVoFnSRWB${_$<+&(^}WHM7cC83X0a>XJ;aaBD5d14fDF7V`}qvbBh{^Fmgq z=j&lhIzz5=q5oyu-`cdn<|)pV&I%K8Ghw1Mufr$C1EZp_BERS|3D(*JBXLZt;OaNv zsR-$J-6*7&pvg8_V9;nknx8BtAD2^4YEAK8(!r%J<4V3qEnEU86n#oS5c?s4k(GoL zq~Kx`bGzPbI2r6Ag2&3I8EpJP<)yXaDnt6ZPue{E97{Ik@gK=&J$?T)2vam8#jP1| zV$KGkcUxA|%AUT-&`wvYu${WnTyr|^2N1{N5~I!uq%;&hHQ@-hpzUZzB%uKg@Yug#vf@;5v|J&CIC`t(-YtLj$0K*)D!dMVcs)#YL6k;0`kr zR~|C2Pqs*tR)Tzsg-j#vjwMZ0VY``Vr?olrNyIII9kcb8QmP z8a)FKF~Vs1N`S?L#yO%MGzCO(QaPfRwoH&-V^Nb61}J-8rsK%7?gbJx&IVO!5P(Oa zK-5~-i7YTNWj3!$bDpC}bU-la$lld?oe)ecaREf<3tqh#D7&~+DRt7RWiBsJ}v z4^b?>63=s2uEYO1a%2wmE#n8&Be7BD2d!1+*{;04QjMOAj0rH0fR5mEQrIZPEXjo& zm(u!|Zk5d^Kq_BE_k%-;X%B5@;^eFKj0W>90ONHPS=Q2!l8lJ9fWBtvMuPY=6{1oC zM5jWlEUBA~Cb{9pV0Iyp zJL(OJxk#z{qRNbA7>0uRQ2v;LVHuXZv4ew3Doh1rnx+DJ$rzF;utn-(*h5Z!X4pHj zPAEIdQwc;nx=Co;+R#LTJ?5R&B;7eU3VRxm+rLHXb8y98fxh28u6&^W_Qg;TV zZ$YU^>)JM6MpH;tE+0%M#9C3s=EBZZ&!F7LGK2;*vboOo!cvlZy1bO=sg(wxJ)l>O zJHNb^@!6@Q?{;~m3Dga$@9;t#hTr0sT6$ZT+ArJJifv0`qr(42lE1p)VpJaH4x!=fuqhqQF^hW%NMYJq7bR(?3sJ;w@yOHtM&JWsMQ%JA z3b?>)ossa#>Td8y;*GE*=w( z9LVWV2LUpAv<@OC3$YX4CN-0iHUR;4$KZ+`)4r?XZHAXoNn@`4f~ETJ)Zvu=giWyA zlYYz+&E^gGi^$Xl0$8{IpGwR6)%DuZz&V-jFr^?Wpb}0#9>&)fJD`^%k-u!yKus31 zcEpTxW;wxh*NW({Z@rxXjhL$d`z7^P{HL#U2_6Enb&_0m<2}jQPcd`k>p6G+=(O$P zB0ZZ!poP`CY>uY#^OES2U$~6(aH9a+TNV#M+j9GBv*H_@2cifmL)7KzZ4p9oI3+7R zpeg|%;sJ>rY$?rYZHv9i)*hfodk#DtXwH=>=tnx-GC%IF z9h%=ZpT)|w{f(mT7f&trv6QGM4Wk(5)$_4NZilDk-Yo9sXNJ)||G7DLM#cQV-kxl^ zM+LYeVXPaDp1kcG{LkO#arB0itDW%E_iG4e+~d#trGt^<@G)98##UunCuB`gCh69N zk`{d={XpszUPKpB6fDz$Mkw%fPQA5n{zj&(pPCNy?TE72gQz7c;fzErnY6@g+s z9h`9$eG@}HxzS8*ql^YiSPeQ2Ji~Cb=E*rEGLwMXs0;mRz;#)b&qI0qwDe~Hoql@L zqkoQkHO$`gf-~0tkG@F zac&Op`-4bjnn5s-fiNFL;xZMg1nrL4Y>gTT&@jhFyDEAD{2|wf<*}1V`wG=iGQh=~;2N$Klyq954ax9wQ?uS{v!PJah5E0PUWCyI`;T zSn4A}RSas358bUaCJZ}T1S;kLNVOtD9SrzF;!)&bHpAimB+zn6426>YHS=|3kn)Z3 zm%Jg6lwYNEP>N$uTOHOoTnp`IvU6W=AYO>uJpu9>7Rz$ zz4IZ?rIwf2vHjo#u&P=hh@10imn<{Il)FM{pT>8*7bNdst2c>0; zhpKK#FHxrA9g*i1Q6#};5H=twPftQaYRGxtyqFN{f zq80_lV|W|xu>Il1T2wJ@ts8Bg#+9lHgeJq!Pr$8>>J94Z@8DH<={)voS+2d1Rk6f`4@WP|Nf$`9d%xV*K$I{Qj`7z&6SzH$S$! zXsva~=LvwQck%DFhlvwU>?RY>|k>}uA#M$ys11E~a0C(4D^59om%+5aE z2$KQi&0jJ)^`~TFVDVQ&&DVCqi~#`YrYztxkhVFmM9ekj#Y#bZ&HGVV_>*i%4k;1& zi-rd+H{BmW6$ObeaG%XrkN@iiqjPaFlzFUwBst?VE0BcU!pCi!rtJ|ZScGx;k-w2O_BP}Mln=k+V;7&V8DA2a zM!6#k3}RK+N&_>E9}Xz{&@J5PM=sEi-i)n;_|AJ2&Ks#)*ZmrX+zc>0yb#hDi&6h1 zU)%+sPT3dl*W(df)}EAmx|8ak4F%|8d@Ai&zwFd0qZerh|2hZ>fsQ{&whXo-U}jC!?+bl$3PhjGrZEKjgnF%hg^8-Ni_Z@m-j_b_P3uh*K5?WU z(1jwhVs?q%4e?A`h@ZN{^gmpN=d&MnEJ}ov?}`WLuvk)GBkYH&OqYxquxjyTZ$(cd zD&)6!vU5IV!^}SkMsZmtuT|H?Z?1bZ^86Sw`36gIZcUMksa{XoBlHeh+@rC5O2vpp zhEp2zp*Hh;;yxmsGv+@KB9cTZBFtf~ZC}^TtWZ#L(*#EOG*7y&`v5H)a~m9EMPn({ zS6aMs={7Xyxu&%W7*@MZ@Th3a{GA+1hIW`rNwy5&_h1*JO7zy1dbNs+de+{)va?^o zPSl;^54k=P+-h6O7PD8d=gyBihV_ZC$(v~T#IE}hnD8$>rt#Is%wS9jvtUq`d_Qjd zJp{ksz-6s?h{yR^hLOc9I&vU{&b!H6Xs}EK<|w49wjAB@*)Vl*Qg^%DPO0qUx%!M`J$WkO&DCzZEbJ6E{nsC-`Gl`%OiaK2+-$k{(|#VWI1kxKCX=`m zJ(%uskWDt)cPIv{9(fIV_yK4i#D+}H?tOb;M%FU?nsC~;{qu&Jcb?BH!>s~-dzbgt z?GU!(zCSdi8n(y0t%Ej*81oHJo+;^Q>GBFOT*1E!W%ho*WxHD8ArkvKb zgvmOolCtmtKhe%nz2aUtZDMk4LGfa5Hh2Vd1W|&M5rK7;!s`9C;@i&@IWwkyLqrfa ztN_k~`N8B5N`wlw2reH?g*DdaGDLBoqhAN6xV|MorK?0dn4vom(*;d3ZQh|JT%ps! zyB;uyrM-nMhVp6;t``jbnpn3;8de z;9@l|HsBt;a!fGO^+v`YA;GhH3l$0p(Ns(<&iuz<)fNYRJmIi?(EQwDPz+ozub9In zp(wY2)@9F@CtuxiZlm@hIE;;Aa7bv6fhQ8<6lLt2L@E42!_WV^q+KI}3-^%h+sY}{ z2pDU+wI~Y+JC}kRkpHh@OW`1C*WAc>bw*kzF7#K&Nb}5xCXqIxCVrN{*@UXLNHo@M z)P4;;!G5j~Mr5C!&YBh^ZGyo<@u8GslNJRiCz3-5VhF4Ge8Z74-xt=*#zHbJJ*qr} z*s}!@rR|$~m&9lcch*P;rNK#Rg=ae!c)?1nSbko>k$ZB&f+F09(W9l5&6Tus`6406 zIJsN_100Yn9L2*Q)X}U$bF{dODnqzLPWt0u&#E&ICaC2CE1H&oRz7OP7R}Z(M#O2V zrhXbbs(yG@vH_-MMwZ=f66MH>zg6|}up7}vhLPCYAu+`=CLwSjq_l*rQjh2ouDuZ; z+Cqk@)9EU!%oXYTJ-Lc-pDCXTS*@DuMB{x9YWr~rA|#^uzK~$FqxfGs8@s*r;_Wj> z7KUs4uyV@5jHj4=oE9`d)d}%ds($R!>)~R!?HJvVC3t%=S-51X?o0NH_O=CFkhc^= zHKV**eqllr5J!cbI3Rup39YuMjSU0V`GwBs@AU##7@!zxaRR8)R{RZ8P8}ubt-F|l zVc2%yen93X4}tlK$KiolwIi&Rh{NlaF{w^1HE!%Mr!PYpLuB*ZE_P4`d{Z&e@YCn9 zYT^6yDK~~A9f7-+KA&-68THN)yXCtH6?*!jyD!ixj1m%S6#Xuj%XTQn&SzAlJS)C`NQEXu(6 zLtO!oZknMUE#DFzgJ*ItqR=OvnQmFAX8y6T6S z7R3$^DHf(|9B(c$F+~S&dpXS=Fs4?j#mr@m{iEwJBV+mdn_7mIJ0YqlV2P=1Lv);7 z5&oli(Silqol7in=zmo?j({)H3}G#YuG`slzsEDA#(x2{ag>0XBwy*hhZ=|o^#p>B zr7#5b3`n9diwhsZP+EE46ZApUV7my>4T-z)tlm5v5$2MfF2izm{6$lJM4#TCY7{60 z^MF9vl5Y3o&W~}%w+*L1oK*UZNPs57pePlyDGZuuG_Cx1!?m3YQP;0XDtDio=hI&~ zB=D?9gA=eXh5c_kjMwMG2vo#HC_cLTdNl7N;CttJ9Nxm-GBOnb*TGHjRse!78#emA zbnKFJdA|cP4gBDNQwOVOKXu*Dv`aw5aPh-C8uZDj$j1M|o<8a1Wfbn#sjnW!AeZtO zF#@n3m#%S_Id*mfJ$hnDf(@>y4-1sM$`qE%T8dZtcQ6$Ywx(aNtv$axI(SQCoI%rF zX7yvk*2s3ABdsp*&%NQbo}y-z)^*#aC zHRL@rl|xeS~~vLtvpJIIRfuXZnFmvatPtg2|kC{+vpVpI)v%bm{Xy*xDH z@?(qx4LsnM!jwpOu#z+N24@X&Z&wX1>Jt$K?YhjJx88T@wpjB+elfKiS7_)ZmwqSH zq-GWfq6L+Z2o{w=MbK6RcyCDNw=zc0=-vKdY{b#cqv?NKUsTcLd)Lvd;*`x`28~xf z1g|L6B9E@>T}iUw1db2v|7L1>iDOjJ9I5UTwrvkVZ1c${*p)nB=0a$@hp4@ zA;|%R_1+O{lai_=K6_siEwj0W7z9b;%2-&VFCSiq77Me_*cG_-aZi4%lj+39&XTS*f^H&2WH#{_UuARu#NH-_ORi7t1!^T;b%=(m_9A3m} zS#z;@DI2-xof?ayS~L5j-i|M%knvQtv1kzwcY^Tk!1YoWUTY9OtNGdN*!t78k(hCu zUzeBd*Oz}|k-UXBQyzLA%4nQ49CSp?THg>V<7$h5RxLE-g8WUn@KAfTo?!`oQY{ zG+IZEHRr#PK3Do`(iliT&HK)LKg4y(hPTpCX~%Esw_tJ$DJQfm`y*&!Jj7aM9}+fj z3;-^RifRg`7tW?k_(Abs}jPJL}v z06OH9|2ChJW&0{sICD6Ab6=mO0csbL)0If)ZVjs4*yVrp!-Rd|KvrgaJz(-z`P?%? zLmv|1H8a3a15mmcEUTn}iGbpif(;s@%U;C3asbwQ>DUQW%HyH4d{#Bz)S#`SVy*JB z2N!$2p6;edA3XA_@P3df-2ya83YVObuKAAmReMj#i(A{g+{|A2+RVNIuXvf8pVG@} z-No*QF+V|oD#}}43lo??8Sw6cx)@P2U58FxiyQ=tE{A0R% zIKBOQ5hNcg$@g)8@>#UJf{zNTMM`KO4+Y1>&Hn(U&!f9%4^{g)y=K55M4y+ z)Y#EZ%EVdA^EFHqq{csGLQus1x;KTNQ`hy`%lY44S#e~PdJWMdvJz6GhwppnJl2yR zThjjnLqNR0Po_`lU;kL3meX`C#`*)~SY}|j-`J_eQ&y*rej4$hNX;$1li4l#uSY}T zRkzhjV^vA^A4%|rac_+J7~bFT(43oL`y9nQ05~S^EpMsrJZGbL_4QS^neL;dJX2N) zB>NX3HGf?BOYp>2`Mo`we>#otrTHQrp72tLO(Q}7$&j+Wa{m=cv|oCE|AXtCHAvyo zqRBoAtbC~fKvr&ePzsiPPpu!m z2KS`>RaDn8ajt{M#kUmN0cvEQTe!z+pnGC#b1@b2DIfqDw!wvIqpL$O83<@Bx+A*A zF=?+;a&4VuwK_K1Zks9$0uqz}0qKV?_~t#AGX<&r1e-rU|9Jwqqy%ILW9X4lE#n3g zkQtHn3P{xwSu9oh-@OmD0kcVe-OYCz2Pq!TiAu@tuASuzhObt`JZvA?a$$j@GJW> zC&N`G{Y1221``#o*X}KQY`a!N57z3qFSGO%g+ zU60<&^%uwWuNpqqxV;5EY4~vc(TLvBduT)%$Pz};q9WS>>Dwlwn#hi5shV6*Lj4D$ z1s+~y7}PuR`o8qz?yr-Vwm%Fl8?pj}Xlqb zAi=-f1TbOV14lRP#_j!(RLCqu!%D+p)*;nl|7WiakElWgU6AfN=qrdoTzPbOm|YQh ze81}IM`UpAJOtoT7*d#&N4a$@5WGAZ7~ z1Y)w_bUeRnE0|<1^r4e-;rF~~HhdJvKONq#>CAGb5Ij+2Vhov-=SSLdbfFU5J^YEz zPTBuk#>D3evuk!3b8@>fd3JF-ZFJvQdtVrr&gMl_0D^MUBP)2p!PM~avOVp3D$}Eb z%A>u8%pODKJs8!gPD7gV#AZz}X|;&7dOUdZ!YK~n+|r80+KJ#`?s89zA1yDVBuA7m zku?+LSeS+-IN0q|h?y;_s_bnnM+&s5p~YqlskVX4C}G^O zb*5d7s;IB5>n}CVX59T{LI$alu@1`Ji!)%|q~hjj%IBH>ce~phS|?q*bEc{wDarFc zyM!@mT!(V+N`@cSi_%|SMG8SX`TDx^0QGyF$9El^I0)JGe`(6_a6bV>7_)>A1o0nnz=wdKKdR3`VXwm2s(S$1>dvnqI%nMz3#b{w zc0|lCsFs2hj?J!$!do4M0!RblH8RwvGJmdL1OI($0U(uPYLEJGSq(f^4WH>t-~?*1 zrKj3;S`rQy?vdV;M6>WRAb|`TTy{kWh89n&Ev@7c22Y$$9XNF+dlnSVi>LZ?;s9Y( z0WUtlpC^t&eSFI-HLmM#sEn?lUUjym--#@l@0R+35?D5~{fCiEcS*VD=s>G0UXN(i z-$UU91F2Bp(ueC;uD#kkIoQ<|#?vzu0NFSwkq-8!&1gU>5T zW3viVLk0QiDRirWhyg2`+3;D5Hlld|)fwvreWKS#u;fJ)B!us~?`!E2`8m0?E7Wu- z8gW`h(Qzpx!d_A#OnV~eB}g5j2^_NLAv7PVl>x-M#6zHE{5Cx zzcT_G;K48cEOHcsBqycOl-!Y3PK=7Iee^xCBuShVQzHbYZyNV@0{*sXTh+bo7-Ld@#Tk!G8hb&KIiuX zKsx$Ejcf5Ad}}T{(?MR^OkFiAE<*PAEioFKaH+h2FyP9zNI~=<3w216s-HKMgL(h> zhWY5RXL(W?>+nb$&(8@?Z{Tg0%rj5@IQy2Ci2%F7UpMY{I?+T$1w4JRnqPlyIoSj| ze^GW#m0Y26*ANVkv59kfn?6>et8lT$Mtt|9_QdnO9EUAphp30dIYf z>y}(pznGf%t#K8m!O^UfvGGSz0I#DT`Z-?CFjF`_|K0H794k+f&>pG26UX#ou<*gx zCNpO}!RC_JYtGVtoMUrW1hKh`F>!~}fthc6lmYSw7W*HSNU-O~btBUztOq$Ji0JOj zxxi3pRYZ9t$*>?_-_HZ8zcCS3PK)dA=e!HrFc(@QKZ~7Snm5${@>;G)_^*DVOJR&< z>t$U}7N;Lw4oZqTO6Q_5V6ZyK8>9^edqP16Hn#B4nmkYOkJuuwrO`qI^xfuN2f9V7`0wNb`Rb$h90HrjhuC7@u6--r+_aTd!V=yKlPc2^APhUfg6CfJ^ zarPtP@d4?u1{ngTWE8@*I!0XB*S}IcIeP|F{(eWS8@^Ud6H}~>NjT!UrAUw1AjOwn z49Zgb-*Yj)C`O&Mu-s6Sy+1SLY-%)qq9r_mCbUu%A~@E&Z4vwK9S5Hw^Hk;^7~2&% znfgc41H!Skvl)l}z{Z=ERGIr5Aj87zm@F<8ns0K&b ztIQrZ?-xpTW@0t5=Fu9UkWJez)kITYTgNK+yth(v@O_=mEjDzofzhV13DwdUaw6l} zQem`$f{X-{*}t;V`b0}YNzn*^C!H6PP2XLFSLEhwHI z>U6#hUcxw+BodLC8DIWh zj)N)G8-|1VfWcs3djJOLE$tV6D6dYQdsr{A=3_LQgy)74@G*RUYjvF6u=d9@J|r`$ zXm0fGLJ4*SAU*azQ6o>rJycZ08rst#q3mPJHbm9Wa#Q=t|=c#C84D_gBo~r~001Pf9Nc<^Ow^b5t*fE9NM?JaO^oP9+BsMRU-t z97iLWn+V`T3Zef4B|l6mdk%F}aM*dRAwd?g#@Y2LC5@vmY$|a+GOEB4yp$=g(H?1+ z>@=oBkuuk3*_yv{>wPk)_#w@uVCCYldt?EuQ`bi*WH3(-0WQQRAvrp2>dmKlsj1{_RgkvLpAMJgckZ zseJOx!F`Xg|W+gz*cAPEEICw1LANF+lksfvS}caMmo~l!P-Q0foGboet`#6 zH%MoZ(7+d0h2!G*Dd|q~6MzuB%kug;_1@rX^!VRrd3UDzPvclU6( zyOOYC?nD_zy7^{y@j*dB;`ABUJmEcayavnQu4PQPycf;@E0Cxv_a+hDoP8q7mEaEy zJNU^0pqe-g>jO{AnwBpN-=0XzD$YH)M~ynF+TS~4=bm8mevV-xoGKg_okRac?5dRd z$|4;hO)D3I!S*T#C%FZ_0Bgbm)}Mg98q);7sFBP*A&${cMu4qjW`^$st{lrh%e&M69X8I#?n<24Gm~h zgm!Wi$H-8PZ+YhK&FePWp&>$O=7%gzGQ}p;PR`U?AZLx#SJyZ4jMkO+-Gfp&NB2)i z@OQmeCGZs=TENFuhMjl0IkU@2L1i3aVIj^}P<8T)c0SyX7cU%g63;#9RzeGn-xr_x z`B>ku%KLl5>M{a!gL`}Qg8ftyhGpaBWn+t7C$P5jZDIKk+ncW-c9;uWf-DwM;5Ljb zK6G%9Z^+2Dfs^B-C5dbhQ5;P+!!Wb&{_+N6W(An}#fw1gc~vfAT9`#M;Pnsa^Zc0a zj}aLeyX@^GCQ3?5NS;><-dWytx6^9n{yjv}&FeRA;I{CD4KJ^)>t-KF*gCuZqR;mG zuQiJQ5CP6)12GQRh?d-y6Eo*I;Dd)p=O@ljGM`f8R#(0!e06U;O=3r=I$Z z$7c`Fo<1!WA1}4-M`qU6o@wi(ewaz#|BJp@jNu#eI+Wkn#}5s4lJ|$6M{n|~f3y48!o<-wViw6#K8@(#G-}XHkYk%OB1|K5Nj1Ym;A+_DRn{y!ING$(15Wb<*+ZFFJEofx+eSSz$zCigAtiyg zPDT5h`n<38**bbsK4Ilaq+4plUQs>9x6@?!Xi8%A<>kssMvdo5+P$7YYg;hZLD+gV zNy`m5)Y#pa0Qbv6d8OlG_orNBp%Y>EH`( zFQU6EmWU#n4AIqXxHP7LBKI!#xMsPUX8Cag<@sKwomlUC7iT&xZufV&w9=PZ!yHmY zt0V|6wcRN>lNV;}55EQtp1E0jLBQDjgrHa5J|wH$P`# zF1cZwqFUPJP@1Gt+J2PATOZ$CjiN*Obtz; z-1iQs+c9vbd)3v9{Q#blp(|=dpoTNQJ}du0t^fHxdDk7F+O@Y^Uq0|(!t?BlEo;0& z$cEFoc8#{B{qwK|DMj)V7eL8uwN2X_<#Y3PS>r%u_m49l@Ls?0+ub<5{YRSG)sl}R zuOZL+GD_d_#2JHYfU?l`BmCF}9C`+$)?%l5!F_vBB2aM-x*t$*_%_#82#wH>Cg$GE z6m;@Xn$g{*R>(~#%BASE-f64T=Rdvh!$0pk=`!{$z3O)KP4OR6Qhq2;l;rPwqQasi zfTF*pw|VM7du7GwcrCtSc#r&WNBXkWq_r)AfF`@SkR7Z#En#Qw(r8rrpP=`iss8{! zhkkyxqTqypt-MF_V%v+EuH%b?@SX?iN5c>W5y^>H)!VApw%BzVQ1%aG*$=Z?S;a;} zOKU32s}rb!lWQsci|g65QbJx5HGq>GjSlB0`&0PIQL1fBl#XzI-UvV{Md_p-It0r> zmwikKB_xCiiVOzQ67v(=4T@fu74L7@UnTBr!$Lw1C!c8k)K>vWiffekHc(dnII{Gk zL?a4dkrCf>_EEN`q(x_T_HI3cl%zN#ru=wHioyKc`Op}GHdf2(zwQ+KS|!VAi8|D| zJp1R9-OpK&p9=p2>(BGJQdVh zI#gZrUN@q(n<~v{`A~}R3IZ}ss&OAZPD5B*WxML87OM|$_ys<>|SRT6|FCG z-;!=7UYB3H*I!PaFSwY$neS$rI$)2|CSa94kyvFdf`8|6tl3RAMGoSV>FrACh;c^; zVa*(UX*Q4y^d-D@i-SW86)$--p`UT|zfZpXBS$RUn=3>Z_)x6uQuJ8FUs$s?Z`aI+ z-gf?41gtXB6RWIEK;@|Xt{dGq>b6(@7T|Qct-+s=B2f^%jpx(PDanA}pA(l1s%wYj zTe%dso%fT&UczU;yQy~qeGm6^AF)cd$;^&r>Vx!SXQ^H!U+O#3%Ew=&s2TeW{%laO z0gK0mSFRI!u3K=wvzWU+P2tQy##R`mex-x+pY<=z5=Dn*d49GIdBTVB|L6eX>R$&v zmzRvdyY=on%axE{Cm(Hy4dBJGFa>t`NR|^61PL!E1}3_sngr=+1*CYNFajSl2>olW z55m%;EZNi}qleb)LvX(2>LjJBpTBj%K*q7LW&PS_THPJ9^bcARHj-~CnP&Is`|2XZ zH6ts@T=GnQQ=5>Ws-GX?uZ`=?Xzdqp8?@?}YOnSn^R6uX%%wTGK$WaEp2t-kdqTGz z$JIY9|8znmg#vi8n`Q>t+S5f*{(zYM!clPYF2KbYTQkEzsAUAhkwh?5 z_TTos1K}s8u|=#UJG=jsY?olLBYD4ri0vC8P3f`A@0OH*Xf%{pyk)7rEw5PAlu=sp z3I8yXdwg}%c&RI(Ej4x(b_<~bd#gSy9#((LG9<$Pq+Hz|^KiDFzBi{fGOT_t#cKDC z?rB8rZB*5Nmrx-b6fQUv_w6x;JVNVr>giV*>g~}p;IpJ8qj}9H zrurWVHD0JJz4KdcN>AHpXA|>&L!ZHxYz+Uivs+?ei&UHrqN<{Ly3D<4YY*q`v6QRu zKSV>8Xuqm36$I>7?CRP6=6dho5ZpkDkFa_i0Uk${zJ6txiYgckcH2V9Vj~M9yT~Ax zr1~puS@~tY{Az=Zw9nnV{&eQYY_h*^ptiOezb;jkkZ^sM-_Ww$`H9=#M3P}Lhor+| zF{NA(`{uV?`AZDu-#`D;xW84ZgGN(Ut(Y-4(55(CuFoU)xOMxu5_$4)-uTjDHB$Z;I zMZh>q7n*$3XF;TVk_b(a;{zU7VCc^0o)X0#O>;5~&-U_`v^M}5q)ZRyw+$1IG*Q_2 zW>2vh2u}4k&?2A_(gof8A|b(GFmpv#g&^r{0MgGNwaH+af^7O2p!e5KBLbFqtMpNNe;lJchZ;j#CinrnkOuP^aAqK|Pd#9>(|{&^?E z{9)S+X2Q0QXV&ckv<7p}wC0?Q?M-!r99W}&?V!M5a25YgMwwr}GmabBVmGcv_8C!a zvEv7NJ2Q(5t1&2o#k_Gi5`=_mF4fT+rv&k*n%4f=rx$31{Kzv~Gt4`npE&X0;o$P} zp-snp@SSJT5hOGKuIQ-9!>`VPF@@h!(pHw!ljG*;T$JFZmuU?a zpj&p?@;K<2Ma~o4M#!r-Qd_n3lXae9V?QigA(UY8(E`T=NV3onR&XQl2B|5T!BkAK z)+WNt#a|s*se@<<9`uO)KW48ye{tWCo5ig}rlLVuF@?%L_2U#DL*_$329edC`gUjJ zlKKQ8qiW%5!6=-$9!SqE+9c;lmTkb^#!-N~A>9|YW;$$R|IEh|Pq!<)Q0GOp0GW96 z(&2Ps`{B{-thtQP(zUz`6h~NalB=a4f=vrSThjTa-1d95SgNH4ps*>8@LNqz zN`H9hh+2qhFbW6P1?jm)!bRV5ZD|b+J8=DDzB3~duYcKxy|E9>RIM&C1R2TrUri3E z6ij)E>h(B1o~4Nn7C*3lnKY!18QiE$os?TJ6vUwLUM+1inyzOu(Fl9|T)O}|;jzq5 z>_RGOTd=MC%R(E>Qt(IV|aA7n9AUDW6W7r z!ZQeu#%r|nJ~ zOH)sS>{&mdkvyKfJ9#WwJz4Hd8$W|;-jC$leXu_9JGmhFXY#A$AIT|@g2dm6u+q=O zSBXCo|A4+?E9f4dE|uR;&RoL0|1i8CK{Vx7kc#$nv^Ndb01M8mwpzLsI)(B)I2aqQ z-v(!Mdedqi1OfqM20$Q?w~UNp$XcFhfCb3P(^!r}WB*_Wf`jKAEkR~}sb>1>AVWV3 z{}{O+;Bue!p@bSk|K&rjJ$?4$`}c)h>5GOcwjLrwFE>*~BLbFy_agYjCb?mhe@^d? zcmA%T>q~^I1!-{HF=)G@(>FWZ`MU+tGLk+pwU9eS<^g5J=`?zDBqh3uHm$`?gYIC8 zIff3#_u&pSq6f#G2_77%M-2^*5B3kxn{i0yiUS~>&Ql%a3)2267#SWBiBF?mmYqjs z*xub;Jv}`tu|><9`$Mu)h21@}r~A#lqD3KYNR}p;*(WE>NLzn%`lOIST-u-0Rcl?v z&E-};_B%|+@}%eJ%o_OlW}^-Gj=$n!DGo-T(L@3zQX2r6&EIeCx)0QdYIpw2pEzFCKAAX$N(N3U!PL zICtq>mrr_32#A8iQZ%4v4p*5`+wacH24%;QC_)$Mbd!(zOhb_W(^9bLh~=vjlL3~4 z!MW9?$2J5s{y7r@<9{l_YKP>pWFbGpn6gR~MpFm2ONzNnhG&&pf7^>LP*y}1vODcTpUF$ORz!s{U!mdI7#4suo);m%5A-%4y>w4Ys8 z6KNOo=XWM<7T&@Kpbs(|>qW@8DuwyhBHF$^QdezF(64=`DnOOmc0vx& zkXrYyyNywOL8}6eA7F^lKP(4 zSlctba^7A)W@TWN1^jx5+NZwCdLllOlMl1)R3^QuLWQ^6%&7F`vKnRWAN~dr@BpzM@}c<2#tf-w2Z+*4Hi`Opm|xG515l4Ru-}$N&rm zHz6~iVYb~es(}U#TGI-wsjI?;MvI8AL^X4_S9zIVu@R#iXEUz(#v?$s;EWsisuwss zH)X@X&NQWGff6tqkd5%8wU1+r!)}}MI8cIfmqcexbOtuj4#y2_w%emd^2KpS5^HAz zo;l@%&wFN(3nn_^ckOwwBN(hRuQj`*rt!~#5JVm^j|$#dHTphipBAiV^FOFR5Z&z$-nwa?S7?O8F$Mx zHcmA|F;T1_N+>Q$h)UIa?yx@J-MIO9R_Rg3qvxvsZw|xwDYR674jS$9=xz+Kkr&?e zqWT4`+M-NCI6Tn@43yd)d9!-{@y%7}ky@NjA}CfeFwx`6TK`#vrv?Y7e#+>|O~~Ee zc01?v@1T~GfQMB(o9&{iYjn!$U7I~e#+Smo+y~$Kn1xILn>-s!I&-s&+uN)(nqq5@vKUex+D{DX0D2%%vNj~%Hrp3>TsgtqVdNGrYV&JdktUbGNO_Re4 zT7#24^4Isja1uKFefO=4AWf)BiT2~u)3r69q#B5~zZuxYntlTKLOtANsou@ zeiES@Giy2)J{9j5Uz$Di$h6HT`*z3TQJ1A7eaMbeM_iVV^v;5Uf+HBzAOVnp58?>} z{CVNr-B&5l^VhD!>S5=v-+*R2HI*5ZLCYS$eT;2SoEhjQcC~OX@V_q)um<|dPlANO z1YaSG{aE*Vp3Xhi-+M*i5crJRe6x7uh@(4Zy~PIZ>b4uZE!y^2ktYclM~@ z3lt2ydZ*3~h}b~JLxF@a5I+bOhV{ZIP}J^RU!pTm-0nJ+q;*4Sa~y9dkGgFULgnqC zN3$c2aWrd7h%ZvRlXu3i*lvbB65GGpH|vysrn1n7fu$~i6C zXCu0yxRBdQP&qn2TC%m5FD*Y-v*4xEi(s54xA-;xdns9=)1z#dbIjVVsI`mD>j$>m zpw6m&?1V|&Kp>pqMoV01e?)NDlIiCHvitiwJcwUwCl9Q>W3>|%jgv;G*z zm)4{cbT3!&IM@SofS@WIFF~0~njMH{`Lc0S#q7OQDg|zsH{mK!R)XbbBjNC#hAFFb zvMxoOTj8Qf9-@WIL)R%j-3+PcST4-kiIHq(-+~F`N?<84+prYX^0-5a4kng_?IJ9D zfOk+7TP&vSUPRb8Uy;YI+f|oov!T6SJJ_yvA?OfDMtD3rm9^)8Cvc@CDBFm8ftScJ zyMQY{X$6eNs!Chu5vm>dGt$4!njp`Z#1q)DOp$Q{!Y$=ss(Xwnreh?TU0A3g3`ohr zf>J!#aM@#3!+9>7V`T#e-}eoGXTzMdHXmo%n%95LNKSaf#X$M2{nyYL&&gev(5|_8 z%cO5PtKQVS3$iAT<@$aa;)6e!YnU1X^CnRq>Fl_4tDS&R3EA3r4DU_0j zKs%n2c&eoR-TKZ~8~V}?bGFCn?7f4jQZSVHT%AkG|nA)B^_#>0UP7^(k>4&;PmfjOh#reuzb0rz+G2CVIZ3vMC&lXfP$vW8G+vVewSl@= zy{OhBE`K6Q0`wDB##G;Qv>*3o<9soKLhHA_rHwWE*ez&iHqzaWIoZ3_IiCYNhrb#E z8I@--V_Sza;P{P*l|K-f|9dea^lY+&MG_;{^Y-5w8UqR#wfCU1>g%fBP!kbrHrRm5 zL*r|pVz?9BZuzKv>P;%@uPJ)yq4GMkuF>g#8ES!IW}Bf_y|X>acdp&=*Bq5MG339W z(au)8EZTp>c?|avMNJtp4=>EKliDGydz}Jg9e~{U-iE>-NGUXYTx1(R(bClW(2afM z+x^!}cwl6LLB@_Kev^FRXZKxOWb`GALS>@s*Z8*+yxvK0GR#zY*D2rh>0Tx{89tU8 zU8icMUrs;^r}_6nOZ+o|QrolPvVPURVq#zQ^zNeN_bs8-?CaZJsaZYS+b9Z7X%Ow6 zx|N;gQ`inJd^Y@uJWdWVo~DfN%Iy(wIXZ= z*lIWW3m&Vi(@QgphwRliR=i~i?~}^NgaqJhCJW9MBq$=b+(SZl3u8rFIV60|+Qtnu z7#p)|u`(VDBDX@KjD4H|>zV0^4nzj3+Q*DNxZzMYGKE07Np;kv6?Y9>r0Ou=(s^&V z7*FisSUBK6y>{TUsh$PeoH8OD@d@9nc zh5t=a^P|Y&tnH54@2_uTAN_V10M0+RvNszEv{ldaF|=aA&Naa6ih_Gq@k)?Gaw-l4 zFiY!6RL7%msSqgRMT{>$v}OfTMCNCkQ9ldaA&A&tqX?u@i(YaDnZYfD=OsxOS8Kx} zq9#>0?s{E1qBXvA?X6SP`ms0#pdLN?fDw}Ytv165jgkIfOKdhfl}~coP!$kKi4}f# zKSC0LD6o`D()#!x-PG`F`AkwYt(Ra2akT6O$m~ z{Jc50Wv9!{ZS_*_M>nkkJi2)-L#^jRNk~cMgJ>+$z_f$(A#WJ5$rUXQu_Td0BoOV~ zp4(Efk~cV|Dnt92P-uu;pT8Tr-Kx;a4M`GH*4?hiZvg5$wKjVE7{H5U9ya9~$+AK;m=Q-;PtK%O;muO5OJ77P`dTW$!D(dPX(G52FA0HN2@T1!8bpolwOK4UdU zcDJU-uxo@S3P3$OSuJ)Q7G?GP4gVF3QFYL4**Zq7oaQHnGlJTElg?_H`X#(*@g;&h zC=?V5RuEzcYD*L}4R9kG_kGe2p}3Ux_(7I+DkpEYUJYz2MRwe3+OYf>PKPQMl_+v9 zlJr);RXtE8=U@eez;Hy1kZz+Coi0PH*CZdo_|S1~l5y)~V^rn{=i=O#th4zV0nAWv z{VWMDSwcvd+UJ~+xDfh^4Fb282gtoTZ#V_`HR_M&aY4kG_fd)E9;mtJJlXDrG`jI! zgO+mFav1Rk*})d#m9P<1wP~nU5|o&Sc0e9k*`^k{PHJ+?JUr)~KuG0-T5u*jtI7Ai zN4+{l9YeTz-VPg3C2yuJVqFvghh!1a4JqpB+~(aB`KB6W-q%x?j#2gW6GGJ66Exl= zqs*UCx}W0t=@5E91d(P&YOxEE@6AVom(U)FZhn)}b-5$MNo?u5$A`fYBJ&JUwpP!s z_*&)E(j|GMP!CvNW(^Y3s2(-IX@Ja2ysia>O~+mcikBa(JCZXwxQ`~%WALn41X8(- zf;HyB6seXFma~#o*wJ>g+AD;04$&}p0{Q9=Lw?v;$`h2!0wnQb=!`)F(j8E}qoG#q zdjLr^p%a=E!gwZ7bd4wyNo90aOYuGlISwoKxMBCg7d5Wk!3ac?VCoN@B;7h+hA4_BoD3V2%)wNU9*K&)<7e2>2zH zz0zLYK?OKdk`rj6x<+Gf{`7vge7!!E;-%OH?>(|lt7DlW;?xxe69SR%6H`iBo5bxL z+o>Bts%LtLa*zZ>z2}#qB%>oFrD&M1DnxPnx67BB_RkfD^z;3?_{Pn7mDy#uGJTN+ zpI$1fqgtJG>OX?us1hqe;m#*Z`Ae3hhPkTju>!>3Mb_)9)jyH?u?YaEU_B^yM)EE1 zMyur1@9ielJh>9$Ms1cr$Z#0!fXlJv*WOY3vGD;=U?pR13fYRHFMcp!ruOjzlWo?o z#sYc6oLs&-2;`)S)hvVnJ0-b_yV1&5TnWu2bV3jtd7D%)LKOarsCX&%jpP>otC`A{ zB+$@D%v|0qNUqdK-z>wCiv_`*RsqmvpEGo?9%R_4P5M`&ssAeqW%0G^dG^=RJTxNV z@)#;K0pz03>5#{76ok+Kn?(zUbx_#Gq+96zY@E~La?7U_o|E>JQ*6Qoh~ZJYIG|C| z%K#asD15fDCSwZ6x`SAwn)(CmzKO^d?vRYl+Bn_H{vr^?r#ZVc{*fzVoIfDmuz8$x zyt^q};8`A22Wn+Arn@4Abky|5<#p%^ymHw}SnZe;Cw@|yd?}s zVTM*0l#zvly-38u>Z4Z)Hq8nD+dx^KZIUGkA!EHtx!~Ke1E5`dt5n z_~g>V0d>$va3E2g6Le3(Fc9I40dk)tYoU5go22frf3U}gr;21UYga3{?w}2*UtpM%&3nZic7I&=Q1Domv=!9Xzb%>UE`+l1d3~ z=iKs=(A{o&00ZdwHM9l>1}Z7dAg)D}Wl$@8N8i9{(IOhrT!9K?1(TbFQ$Y!~E%zO& zwitrj1;9%hNfP_Vq5V?vl!ro1V60gybpvBY#8Wc<$ z0MWB-S62dp9e^9%rPz*adTm^wTP)AFl$O(P%#JUOql9tdO!zEZLyh{Ki=6+K8?Bb# zS6CvUNt66sf9;*O=uFpI9L!v*8ys1!o&^W1Y9w{+zeP(Z2;&^^{}AB{?PS_JlPUo9 zx0%hxnrT8^8S$m4=*f!@kEsp}*~|XfxYKE0+xdPZ08E#%`sg4@uaSR?I7Mty zF^_s{ME_|O7XyH_|2M>3oP7?UjrPhl%w+e2o*se0Q0fVck^rx~Fco=c#Jg2amg?1Th0tfA0e^Mabq0Gm~Dsj*|qd~KDj zT2-ddK5Ym`SFu?bGzc9`YybliqaJugXTc84OoqW7;Z^qx0#SH`E~?NgI*=WT@BLq& z!mG{2?U}zLZ+Xwg`~S}*Xq|mk?(Mtk;Z2=S;1n?uW%I=!LuaH6TJf^&6;=z`IKwE( zf@6_?Iqjb|Q%0<8X3SJA+NO2nm!tQR$iQ4f<{Da%PwWn4+syFz+UgoqtGN}dy8ej? z4=W4Rv}$Qg%q}J72V`~cC-iWL53lveWKNkMP%?#iUJ$d6R=3nZeDKx-O^-Tsj9S;u-l_LfI+ z!)d;U99s^{J4Te>kVvXykRe2Qk~IRwUW?K~Nsf)P^BKFKbcki@oQ7|`ePEo| z@G0fV5I>=i1$)XtU#&74grH6i!y+n>d$Cj(9N|MWs#mZRn#SbSj7;}NC>xyKBYP-Z z+f10b;!mR$3rOTnwQ0^jV1lDoYbkWm&9M*&O~-V_{1}JxvLZcRk?#SWyBpeE4DRBrt0W<+W2N+HYwYfNc~>;2@iL=ZiDypv8B=d}!*_p%Bu zMW&(&tuRAdWacOJx}IB0SkmCJPz2d15rN3lw}v8jMxc-bjTtC|%8(>OzB{;Tn>l{k zUrrW~3VnDQp_H}Fh#@J=WbfD%hUn$N0jAQBQI0Wi+UhEeg2RxPz+NX7qUduzQxn9G z=zBAf18s9n&w_rv>ULy`$C}HLcM3(>iYbGWG^dz77Tc@9z}wSM0BsRgL{Q@!Q~*Iz zmo*i3-Ho-|pg>KvN*1#cPOxS4)^nfvgvWP1@54XKtqa4ik0KK6mjGHIwWSw?vV@%y@ub3A@`bfT9e!XUn^cD z=!@3*#CxeIe*0_fHi%6+xaTU%PCeH_5;G9VbgrIHx@c*J6f25LU0Wh)XB&q*n{&Oq zS(fgeYj=HU5Z8h@fbkcg2XTP2FQ)-Vrv0o?W);fy@l26G;u!gFZiF#mfADG<;zaYh z>945|L7bh<$_boG&yox$)fC)xrG`y?DfOm|vPK{q1Mc?atk3uGKF3AYp_RiLCiVo? zl;m<<<1R-1d1tdmN$wuS6WaOR(32FkmKOJF1&7+|8jiA>U4rnb&gF`1ToTOL6hBL_ zG2FNT93qIr>N5VGaCaTZuYgnhb0YsOHlxjEs>U?!be!W#g=NU1NNL6m^zTCW1Y%yD zOq!44;)C&-G#`2A$(pT>0%f*7DwFX@FsK*S=t>dR_YFg@iCh(w(mvtljy89HZ!WYj zqd&lfE%qlaIJQfAamFTFVyWXw+kvybZv02Yb|ZpbPIE&FP-kBDZsEqUlU3kM(nF34 z6EW)?FW3UTNzj^5wUben)MLn-?0%B8(vsJ-i6iQBU|Ks{-^(f=6mOVmy2wNIl%K_n z#45xmLm5Ne!i(%yTtDW@`4k+3gCavkXIfw<$HJnyF_K#8gCNk#01^ycJa}3W-F*b4 zMIlz4Hg6&Eo#Ao^RGJ0VqPhNDVNT4W;9mj@2tjiJ*tlu1}3@Az~wdO*xM^Cg48i^Ua13qm9Z|)dU zeA<}lK1l&Jij5J~2TXwCBG5KW!Z@P+w@qAqdWBPSDkuN?tA|w^x95=lB0|owGh}A_ znAeAVr|X!QbVYQT;v+cudN0f%hH!mzFv?plv#QGg;C|rPbE$+gUQaW$nz@C>A&j2Lz!XyU5|Z zw4y^qupNj?snnVuelC_UBvj#`29t@dP4BZu7CD?3z51WYOJXDEazdVdbkU!ZCjHos zeYwI&O4%beGe>~p!+EGgyew-|ohod_5|ZFc0nB*TW?p;cc zW~sx~O@A~Oc}wc;IiRA^vZ30_rDfR$!|l=Kq%oLE7>kxNf9;tQ(!pWF(@2kOeHHU) zK7eS~$eW0qnNTvh2Cs@b#XY&J>KueF7Xi|T?mB^N{;x%nN-|aoST9&v3c*Vj<8QRS zZ;uivc3mlPJc(ZRF`)91U^1wjLtFa|8JoVhcTP*+x~%)-#du35wbj7sAtyal8qwhDM57hK6tD8afUbZ#y+D=>=L#RRv+o~OJpMOjMKsqInbu)g!X7Loos z$%)(VrgEN9c=lqw;R4}(8}PaK#*QM4?-R_En0jCdm=TdgxMi8jtWdi=gpPbdwCO4j zc_EgU9(n6_1>Vm{b-8)d*9CRU&SqM6#8Z}RJ&jb_A8)d)yF}x-)&Qa#E-MPFth+h1 zo6L-91X5#YmwYPk*IUCDb2d5IVG)d~P(l*rI?h?DRk64w8C*dEOaBrxnZS^FJ+L?( zUvt5=38pue^s|($Iw8mH?i$w3nNX_~L{EMa%E|7$u68;(1l6~PQq0O+6D6xw;emH9 z@Wyc+5QNTY@Jr~rz_HH+5Hmex8W~WRMmn7>o!*H+?u* zAis#CRbrMW2@t?;FN~zM$0ud!Rjp&dc$i1HPGYj@e{``HE2q)?1j|Y-vRET}#O z7FC<-E|;&f%}$K%Q!SBaI`E-Zgr}dJg!v03HFKDa)pH*G;aXv7-lBY>=_6di<>5<1 zh~6LAeN%MlkPn!de)t=>(&ts`i9}un?Vn zq(a*ijiFt6*N65&j)Kr3$#ISSr~1K|qc|B|Sz&)dU<}spQkWf!3s|s=Y_QP6SVOBn z#`2Xd+|}Q+(zjDtrp*ib!X2#2RM9R+O4mPR27am_tLDZy^(B%zWT{q^e7rRAcj8x- zVwCAB_{!!XyV^j&xH$DmG2=>c#lmnSo3xv@nO5eQ&=8`SY`Y%q#4gcROYA7+8eD!i z3stx3rn9Z#fLqdaL8NR8uB2QR={6OWV4m?$u@$8>b}=?>nyu+GVkX2s(}eJU-(=j? z8kIY72A8TApN(KGcl&vSsv(*)Mio8Fz&iE&1&|w0TK#6=s8T074c1C8r~y=sRS7a5 zsj8WJN9hgHGsc0AZj@1LB^c;@>RBK(URTPA-?e%0LWh=gfg@U$Eu%J5b2OrS&Yef&QsN-XseF@tx z%peFwXrtxq1z4cp3-x2fLa-x**X}IZ4<3=YOIf(9SIq!ZFC}spj3gppzAH-Za|j5r zYFjgngQQ(nXoFfJ(D}Tu)QOT7LHpqBcQv%_G3$4h@G8<>w?!@CBvp7c;qT7`)hir}>!%YbI(^n7wX z`XPpkm@21y$fuB)rJi9!ktg_Ri>xAbeOCjS#`|1jZ$3yVZtiD-#|b%=B< zNWtnNX;2|GHM)9AY@NJvL^PED}``0RkEez3h@ zeLrWDm1ilyPz@soJC~`!ORGJ^k`Jm!oqN((|CnE9)=n-Wgm1xg*%9ySL+IG zFC5FyT+OX18m(CcCYMom$#aQO7_MRj>m#7~RNz>kBxN?rWB7DkuP8J3_K<`sI$@&Z zk{u@Xyw**KQ|z{y^*I!lmf$_KwzW!XEc}EDJuurLa`KzO-r`1R2&F0&m=$c{PZ4!& z4AgZK4bo=u@d$VnWK=}p0ci$l$k|kqD3N*<(Zl12n0VgGorqBUj_Rh7suGK zg!z+7uzSjL^GKy0NqD)@yW>(sSnE@_);*%Li!;59_l}4m7BiY8S5+fl zzwuT$A)m>A+Bd6wO&@_P8}gjs>Kn9?*#jHi>oNP35UM_Ji+0cT<*x%lxubjVygy9D zNY{RFFSO!*rZT=J>{D-tgDH}|Sfjj){3x-Y5B1JlO_$+9!RZtTIC_P@hU%bOqFD!i zir!4xBjCGe7eN#$U%9>fbG&D%mfSC`Jei5;r?slwP+izT{hd`PoZ(;WeY=#O{nflR zQ?}K!0ruQp!PT=ueU-h)Fwgx;4?fWdX^`GczY(XR=#K*OyyNafx@FZMbJ}bp2HH1R z!fxg`q|G47(IuZ|;3PTW|1`#Z8B*!bPrt7L!T?=P49>x?FvQ8PP83F>@xG4+f|w!Yh6| zJ{0qT6yHq7ZaSujOI-#o(!9@Z(}hJ$ZNB*Z7hd={;ni5N^NL{-9hZZqKy*m-e$4`_ z>QZmXR$1Oj4J^l;m|y*vb&MJPfs>+@*4{Q95??ur1~HHFoE4CwH>^d>A^}{90}w=v z@b#in6p*vBTCkD`0`i88R0UrWc9dLysUm=$c+3gF(HpL$k?EXFRTITI;aQ5_zcFxv zDj_3dshhj{gN=>=G)n7X@AYn|&y|?DZ0>5cG+d|OpyC$q7V>O;LLlb*a4v8sPU^~{I=9?jPGOeZ?W8V}S(H}W^UkR?*_ zg+^$0)1yFpN;o;d@2+?71PCpnHHk^hi29Sg?6*?l-WG!iy0ra)_%j@FWZWG(8BSQy zy(|I!?a)_GxGy2K*1^}j!xOCRQ|PfPkhkLyAT7py2z}shtz0EN=Gl3DHph|XuZYOU z?ZpO|7Wmj?5-g~*ynh&o`MG%Y^$LvfNWgm#C_^HxbQ29?EbQ<%$kDn z`M7_3Yu0wJNo<~62nW5^EGbg5*UNz~&J0E_LP@+w5vb|$ zyPN+aCqT)L|IUZIhYvPty%*r$=rHo!s+uEsUtB*}`kaPOTn8Tq9R!7#UY+sI{T+3l z17*sS7G7et>NiJ*yC1PP+kGZ&o$kGPej{!Hd}wDysAuMtUM6XB6G4ZAA0!O44rH!ng;9aiaOv4>UZ~iyX%ZxsxrA_ z=4KL=T;Y!D;NplvG#$Ptjx9(`^9`u2ga8^=#s}XdG9XL zcDaIMdg!R?6x}I$lekn;F6zk*Z1~-JJ)T{nl0|C4d-j|nhFvz?4~uvhZ^UJd-fCdk zk=Aa75GOlX9LNN?E>+rCf~8pr_udfB$*v9fi8g6}#t}Ht zA&D}zkp$_!`#cR+Dq@unqjUkgDXD?oa?_GD#gz ziQ591b3<;2*eL~ra#r8!E6A4|Zli6)BWG3W$PvlMs;M57jRNfXrEk;YjA>L^{b`Ru z5I|z_^CP%IgK#NW6hwd#XHN_a`J=kyy=_Xw$GWl(hL(is<1RaM0*|HKJ;8A^%Tp?V zvIk)O_={inSZIAUEHzo14ey7^#osFJtzkism|(ass71EVGVe?GWAxlUY~3$^A*3^N zsImHUI?D?*5oTrRdm>$+q=o@NXX+T;ai=x=~~+nTE0jMJ6+=a;1LfsoF{B+OxfEc$a9d$XrS! zbwWkxF{;*FCSm1*N>_#KB-JI4f2;kitTFa0a!}~$3MTujRPnj%VN&vFrqj} zr$vr?4Tl7q2Ext*L8;RpOwe)@suUBP+VxgBAf8kApiAkOCfH&^(%_9;%hfu0?8Bug z5TQ@BPSWoDOSiwQ-lg52&aocU@`60!R-z)_$r5DomwXD*AYfcP^1#n0{%S+IIeI*I*s03expR|Q>A~aN%Ai!MBHA0?BI&s`=YfQTSWX6+BfsO zQnpZn#*#8RcfQ1Hm8w3vaRO+vt<$~Ce!?l*0S5&hav_{z{%7wnf`zal< zPbO&yIyR;q5GIrnCF7l)2TvpX{Xl1GgNvO|U1>L$V3MY8IPhY&{c>bf0M>B0E6yJZ zA1$Zxm&i)jg87qsre#}(J5ZnyC}t=yS~>vJ^_5kk_r*wakGA)GvpRM>@8Y*3GU4cz zUHnpZH-O2}2qE6rdI??gOeE3*w6vVb3l?O-_IiayBiFx4d)xk55(f(^qtM#T(O z$e-jY0tXVA{(3Q_Z8x3T`vc+}1ka=VCSN-DHAdw7wI`)w%w3Dn?f0fNWKc*;N5`c_ z0RwyF6!g1X1!-afJH*LVRmG;fuBxV@wz8Uno|=}Dj*4dd&(zGs?BukBv|O}wzChpUK>ac71&n+U4{#VAhwM zC5ywlvYLv5dTLriItC0JG&OqJ^vz6oG;PKBFcd;PI0*R`7j%d(R&8nXq#c zm8k$<7X%J1&~(>GqpJix^{iedkVVEB|8!`)BV!8}bINH*Cq?qWDMl{x7_%tcss=Nh z@7=c?JWuG38tq!I@|#ZCCK&jlAJMUKYP*}o^S2&uYHR(R8m&v?%kV0({R~I z=Etta*I#s#W;EZ*hNK`u;YnV2-#23xPLB^ODPaFj|ljbeQ4Q|fq z2%%-45xM!!R?QjRs%xK>Pve*iJXbgpJ(>h5iSvpe5L+c{^`Xv#-aEFww5dL-06-!JNart6zxq*oS@_N&N#r zw}X=lcGYJ1$ukg=D_&-Ljnug{cy2mv2DU3ka)=NV)?h}BIniBlpAYx+kBp6(uwP#% zX3B~&9};7A0cOM;Mlalp}3z#RHt;#xq5vX1JH0 zHe%aW5~+SurEjWH3`k0C&nuE4+EBg)n5d+Pzv>#q%4>vcWJ(hEvhJ62W023t6~3|} z?m$4WiornxwKq=T&_dGfMh6f)jTHUnJeetnpWh&S?37B!*9|K=A^7E2c?y>uR;W12 zSImh>?%Kq4X`+i-9?W@tUCa@&>3cf~5VwlnH;Uy#3`f94##$y(8Qk0tFRc``1OhgH z?0{yovCd=L z-}#+$(%ONq3)FV!_nl_1zzzOMva27FWd_6c$EbcSVrAL++18LDF8W(%e_uz?$`~?X z27%>(=nfy(h&b?Stxv1^{A2C`n{5bO0~dd!mvIZrJxYEXoFyqjiwrr}C_6^gOLjpc zjXfD@PwH$}ZBl1~;cVM@L-JYe+j28S+Y_zAs3zXpXb`26=SwU_+CEhJ27Wwylm-1v zi!3;qE%`Vgh2Zj2RP5RKEHgXiDr_4GtVBmYc20!$4aB>IA+my?U8`Kt|rJ>lJO$q&wx%CP_h;PArTi{|fO*?`h4 z4DWl90AY*}O`x(RS8-y|^8O-3a$O{P1~P?_Av+(rOlGgXRf_9AZ>71gqHgR!?8P@K z%DSi@tt6a8!o@(SU!?uUY{1qGgbQ#0?Qh;QHnN8A4vZTPY!%WPLl=Mu&;HYjd@W|d ziV@=HMYOymJxY@6iM!D}K-bs!(2E5Vo%D+*2q=`ANQ=@Y5pvT;;G3hzg`@T(LwN|O zD+@#`KnAj4f{8!i(M;-if-B#^?;93+fszroyZE%R3%R*6Zo@w4!hFNO3242QIJ>_h zCn#g^u6;o9O+5vEeyVPD7`SO0kd`KmR?h)g74h#om7cdF`PZxE*KJncn^W`8RzfTl6(}4Z*xNOAcTwd2$6c(Y0;#?x%K+McQbfM^f zb3=h8VT#OsjzX3aF6j9G(Xt{}Bw$m8k@RMBb*DTOf3zkb97^oIzQjytyo+L!d!; zBT_+#hBxQr{7cWMeksPFc*pB^ZX~59Be_J&kDj#*yhyaKA*7*>%`jvdK_C zc>X$?^wPVw-upL_wO(Khe0lt`FWfTLsH;+&n`=V|>innqc_-}~5jtm=)XZcN@QsN5 zI>tgfHWelJ2BHAq`P&5n^`~=`COY1(7ZtkD4gHG0!c(odcCZWW81M+7#$005${DXI zBtzguBf8Mpt;C%-WR85Gerp$#*Eha?p4*JfXeo~xOB&_@cE^BirbJ~)s-Ezj#b5gR zyE@1ZE`TRVO=^Vj7SF7MQwUM@iB0avpl@-Y+$a$U^n)}}4;2hND!Ppbva0HS2ZRZ; ztMCid@uCOi_LM;)-Gu`*6&HZL5gQyTFFqh1uwAtq5)1aJv*M1>z16^CH-57k1xkIh z8WN7}UM+mz1A>jfS7y<_zVdD0MppLlHs%Fp<-jRV9ixFiy5>IT4r!j6ERy^y zF-BMcqXshTC7PbD`>`VZzN_Uja<{IPEfj3Hz3`C9X3i~Y7BjC0^Szs3|H{!cH$dMA z!yJh7N4Q7JI%PLjM$BP|qai!AyT6!CB{~&0k0)ZiER?*U%RKc$5a0iCW%JEm)Y0R)B=*HNL zq77Mv^X8p|!ty<|FBej_dIF8c6yFSsBWn`Tm2OaBsa{m?ERgH=UjJeR2?OerW&ld2 zfzDt8;74gRJe&9{RRq z#tTvQSx&d*>|K0^m@gd>25jMBHYJJKACY)CYw0XjUK*Kpm)jsGtXJj7 z=sngbP^|!;j-@M&=#H=UQB3_Bzu_NAHVuqHL;weHglQ)AcP$6yxZ8~DlikN&sD`2v zZ*mfg2$q9tB8Gdg^^(rolCEdJ%(I7%1k{DeRyJZd8S=@ z>Q#F#ez0P8v8GQ=KZfAnH^^=>b3E&&55bP#bo1q*o85OO#PQ;1X%b2<%M*wn!< zNNA|2@W=>h2`R~`akW|^a{V4L<&esyOx1;UsSzfrNvcY#bF3NGmUH&G+NwqW$46M0 zm}psreuas){e{z!kI6ftuK%|O9R132|>byr(*eN3nb$qC8|%QMUj%{9&r z&o{7;dux*v!3Hv^c8z8Hm1m)rYq8WHqDb<*7|`N{4eb=k+ct7&k!rw1 zFh^I*=dfUmjasJ<(tDA1r~cR4Y$E9jqaiA>7jJ?XBa)d%qMA#x8&5+VGt&6Zwz%+i z%O8|`p_{xsJ=1s3cTW%Qf(-frkfKHrDrD*usuZEfB%)QU>*SI-@Ad{MLh)F~USL`q z!pF_89$$y_aNae(_q@wJ`td(M=sj!=%W+{j8D1|9n>SpE+tQf#DyRNbTAE4Q(0Z@j zrf2}75K`%I21ONFc8Y^iiBtfQ42tR^Y^EmQe~hg_BIy*BrHdNW0>Kf5R-J;F?4pgZ z1dJYqxTvasP6evVy_zG3^QUE&p^qZC1cFs(@}sjNWM-#>JGcXSaUd8k+k>WA})YU#^c^oVfNxTh?`51?s=} z+9#2@&+u}_2fuzu=Nvxivc^7K%lc^JbT0lVJykrB#Ahe@pB?D6V~g)^j!Y#G|6+q( z2_4P%NmmY5I^1{{9lFjm)>0HV9pj2BZw*1jJ%sBtG6T!6Jj1N{m-Hy}M)I9)*~K>F zf1q&tPu51+W$;>R`>C;fs<`Y$*vXE{B-TJ}HLp)5;r{_bv{6vwk3}bCXtr#u?G=e7 z_qa0)1A^iI!w8pPP(+b+>mM3KYk+^|f2T=dR5qa+`2XPf-`)_({%s#{(@m6#f6)DZ zc#;3tQlS4S1>1kuXVPPsXUuY({~>u_Y(@SLe_G$g5!FHLQc+#2#P{8o<%j^~P?>&9 zGSw)Zr1jf8W|gb@K5Uw@kGQk5cwCpi{{+VDiu=@x1-|jr!PLEvJHNi&^3?Izme!1i zCO>c8_V@L28a`h%N8&~$LhxL%aZC-nFt<@mA0w)_2V@GBhQUQ?!&WTQ#sXE+=VRxf zRnx|GVt_zDfkM7e5S%fNwD7Kygk8jxB$v|&KYOVI4YEO2hqdOKxTwY*B zfk5CAoNq#LObP`>)Ar&B#YYKt5dbtaG`Lw-!#-lTkSy?Yx_43Z)#wB<0$9EN_ypKh zN672CnY<@STZa1<8DlTcebf>t{c@xJL_K~W=wBsiC-~stU>fGk+#i3uAN>k9NdOfa z>+e}uFV0WjqG>2zO&y{sOQd!;wFq5>f@k7mk`*V^SBlN0quEud6dN!$lDj`QyAbWM ziytb+rhSYL+Pm67-0`yfQAuU|7j0M4vUd;ic2S>I4}untUw^h2qwbFU;>mU$;}E!e zyp1(I`iVD%Z3r)33Lda7r$ic7=u4JNQ+qc|73l7+=>ZZZROUSx^LiAA&nPs%)n1HB zYt9$wuogS$@AlAc`$yy-xn98MbukX1sC)4_94gxWD7-GY>uZJhv;X!9DazGG3?3UO zsomNCBH}uiLjjkPdnc!pC3MFhL)sdt-AoV?y`AWe%f7ImN^koZcy;I60Z)@3G=vTJRr@xmS`B=?^r9G}1c!zy`-Rig)XaH)2JW zE|~a(9GX(*$Wqa4R%-zu@yAz6>fZb&VTP0D+aK2ue`bYfCN1NKlf58ml}_-KkF z-CCt%1ORRRoNp`Cns1>~{sYa(#yzq_2Mmah%A_Z1X2JS8GxcD{h)^^XRMgUq5kvdL zTj53l!(r1@QqmJl6y`={)|zeRg(CM%)+Va@S0g-+vdnWZZA@~dWRVE47u;p8TT!?Q z7mrOdG@CrGANv&+J=D@#yxLBUI3HTa1*5!GcI~!vhMSo=Ih2)~2W^k``x z0t2-_hUB8!5TgtsDE7nAsEnh$`!ROs{Z%(v?8qYp#FnE_(4^8Y+X(kApWQyNSRus! zl!=*y#Y)vD!N`Y-=}M1P2^%Z$TFj!vWRI}4!j#n_BQpn#8mz6`uBf3_WRwu_FuPuzbfZE8;aWjUHO+`&>Wnlz(3MOACiFz-Upm34KsT3yoH);blmoMdR=Azlx!kvwV?C*%BI* zFZ&dbVUGX;?WDuUp%o7TQRVrB2#oN7TYR=PmW})6J>;F9;b$rne?$-(z^H-B&#{)% zI(*MU97>KXWu(GF9=$iIKN5JFx#Was_?|svoEheVWLa9TWTpG5^nI~cEHYc=6$Sh? z{rywqSSH9^SSVds%4PGs=@32>gv*4G_P)tEpj8boASf}!mC?lKi5hV6IwX|Y|gmwcEk+ARr;~Gmmb(8}+*A11IL7?$SV97#V?W89D>UbVPWrKr4 zge5Y)^;?jqrSWm$gJamRhNSXP(6fgffmf>D>q|a}-u~>pAl}n31xKnQB@lJ{%)NXa zK3;vQwBGpNehUKsi;i*~mk9!Zn484XMCT~2u?5>-S=Hsl*R2C>&G0ynPyc`xOBsb@ z-+@U4A*F2BOgB6FoUG`OuY5mL-RAt>)?Fc1wOy~w{EmzwS&88 zgC-q#gc;W*J;w%K6;J}B#0k}S?2)i_b$;Xa`{`~OKPp?e6mBQ$_StIc*V6X;F`hNI zMzq~LZ-MWC;*hM1Nj49m-1oECV!_(-vAg_RIa%V(NnqjN=)kIps>3k_m)NbR+5r%$ z)aO2ejuOM}5#o)l8Kg!^i@{ty#|_a_SFfTT_e4gvpR>f9~Y$#Jn3*L=jv2W7bBBBj1XPkuWRKh7Kq0MfumbIT#+a zIYo(4$qSMs595jfL?hQ0drz#v{V0Wiu1D0=(K0mmn8JVVRN$Xz3{zIyYpbWL9#pjg&`!bS9iw-0~SxZ?3-h38+ z-R}0g-fv3fM-*C9TN4_IL}ZO>qf7vPldAwj**0Nh0yDhqNqt`1dy-fbDkscj2Wao> z=|{iuh+p@&qC@Nak`N-26p=Z_nb%b2f$w&IZ!~6ViV%p-<_NI-94`Z z#lPAj8#olS-&P0bLN28qG^}t}rEt4Uyv{;C@kEpFLf`}=0v|Z<1L}XQhC-+mMilnJ zZFa(I>cDW|DnJ-JPa*f!&RTVB%$Y3<;mHP5Mmo0mGP?F5*7Yt_uU(v(b(x~rPDTwI zQlk99JX)YnMFbhlTBuo~>>~sktb>0ykl~jNevA~U@iaI&A@+gbhysC&{lX=^zf3#+ z?Kuc#=WXqVv*-#S6px?5%DJ70DRBX9U_v6{@!?z@m8U0Lod%bOIq zl#F6fwbVNz9e0~gHm45#%_^56-;jEy>LWovh5o&xP$~7?gMK{S`BEIhQvDFSMN~E zZX(?hbRgI0CEgw6J$nAb_{@Pn+VqVc&Z~K}Z2-pt6;&*X|7L47FwO8G1{3Z(5TaSk)^W>pw6Q8yC zl3-o;6$PPuM7?sJ?-qb!=sf$e2IeG%H7tzxhZK&iNUase?WStAP&tJ|-&-!H)e4sP zyc^?VW4Db+Oo(harZP%X8i=67j3t!O*V`r1i#X)pp&cg9w`g z1w%M^)q~G1-*-eNm3mdW?E~J{i3FE)!W*@R>y)TmZVoZ5G~5^m*(JZZ?cJc;a{=JeHf%KC3&&^rn{5@8PhZ=WBP zqt&j7-EXEIOBjf_mk?DUAq~cDW`BchJ3+5lr0W1mdT?lH?YAIgy9A0GEX+}4MJUM_ z^ocmS=u{SmCNwkF)0xAIr0(eYdY&f(Me2^262oprg2t;_O zx%tVFB}78csCDLZ?aD&IL!XF%XYt zO{iTi5nR;YlnOYGFt1jd9Abc;%_Ycw<3!eb*>c=O; zOeE7J(Y%ZhAFDXcKv!>nbLEJUmYA)tMPRo~jFgs`uBxVtnVq%Y;*g zKZp2fR?tJrD_;JjmfyAL%LBQXXP^j?m{0;~=KdBKeNIG_f)C}Y*$tdUAYgRl%B&P3 z3M%mySuW+w=)m(S{wyjyWoOI3wOYb*fzQdq8Wk68L?r=G~_B?E)$h7*QBi2 zGMmDptLy1oXZiZcVnyI!xYlTTC5ebAkh-UZfSaBUtlv)}z)Ld2O(0n>*8r!}iS*s0 z_0(-d1|n&)b4<=$?Q;I8O>5HZ_4r9jb@q(*w1}mLldg@jUeQ>34*5&+HHzg%A3U(9 zd14u!&=@C6dR`N2P-AqgSAj%N&dsJKKJmj#3AH*SZLJ3ri-f_tSViUL4yIg7J&gk+ zc&*DKZc+(YRXweUiuZ&ODL7_03xkARb>({ee+K|D5C_(&?0&Bh$ z2_9VI@(x_Oa)klLy^eNi(HL^B@X28XRN9%th~rxueYBoWESzNzKZ{>5TzA*&H|of& z;aE(-%~n#KvrzT%hEnQF9&TsawAjDgO+?~@yXke>_)4{x*-X>I30B=j_Tp=puV{7! zFK;|ua)NQk!P_s2w(f*nP<+-8CD_#0V-cv~)AA7*Sk+g(uPDod>9T6cCk&TZ=DWC| zarXW@4?FG8MYOf?>48G8^YaN~xQ#M)e7w0QK16?1_ zzlS=8s{AB(OXq2>4`Q)I8CX~^L4~#>ex7X)RVGVLCkb4~DnH8hm-rZyaagqR*bo$4 zcQtIzEf`je60voD1oboL(VjLlo>9CqPUXC$1v{=(s8BKLn_lY~X9D(Eo8!0kBuON6p7g$xbIfJmIgb&I@yiO7PtwAsB%T za0OBWH46nq1QR!_3maYmbq)nt^nj3Zv!G<>y|B86C*&-o+D0HH{*AItV1x`IEyaKg zXLm8pNRU^*;tig4#Q*rr0S)k4P33QN=kjQY3D2tp0cj!z29yASkXx|Q!_ z@Os#DGk-qvynQ(Jxq2&U${O-NI-jFhl2sPhn^GOo4*N7UInBH(@ah+GzkWRZy?8nH zy34%kCV1OEE6Cj5L@daWTAhM-c+U&=s}MgU0v+;>9QvP=KfIP)Wj)Fll+n3i=lw1mE7!z36Kjsirg zWJ|6~f4K5Mt=$P->B4Z=0eHS?@QSYH3`Md_rZ_|4Mf`R$l_0#aG?yiVHXB=h`vy$Q z2ncZ2GHmCYrDNp!%zc~n|Wx;1Z~c#lX_OqUv@OS0YA!U{q8=Vert=*%b&$H zHCI-cIRDJlmU@VKtoQhFE&tNZ*-x_Y8sm$8t(5jg9UeIM;JXLvV(IR506MuSo+7QP zl;TW|l`sz(l(kNBZcQI#J{=S@Kg|{v&i2-TuRFu$u0nJe61`C-|BW*f%V3W}nM>Gf zE6ZGOI3p!Y;3^J_aw71~tG@3QPWY?X3^wv#rEa`e4%=Qy9u9s`2O+NRL3Az1`0?!s z{4yAl-7JPn?6MZcJ#mQq6E>^Fc51RQP|-JjXl&lnjAX?A69$_KV#f~5Zw~2wcg8jj zK0b+Am3^J+qDZ-IIByr=%-s~G9xU}Hzs6!u6u3XEj8@Q_ej-?dhup6)zEaLj9u2>re(N1upw_XN>LhLcw?hFQ_ORo*h@mDO zL0V9X+?r!G!;5%c_=!#Nj>a@`!ipg+i661&Pt&D4gp)2=;i+w+3yxiFOqabJ1-98Y zUHiHPbE3$$O5CvCaBl5vc6^zbF@vf$nD+5!qLqN9K5Gl92E4^qBZhdq7aF%#zbkHF zQF=LUA!m5qVGl4em%Febu~P>MzP-Y@5$-dh3psW6bpjOmn*>aN{D*2+oeN6ALGBn2=ZZdTbr3YshGGZ z%-7mzNIe~jU7X;*IDoxTrGs=jc3xqHu#qI|r0Uvs?B?f=jn|3JY6JEwx9=BLUJR_4 zdF9#)imuEjjtzm~m)-6MTug4>3Dq*`9BS4Ry4{-`_j$ zUcd!Q;BgYBk@c)&@<)Qyu#xnXu9w2#Y}UqdR}W6`+#wjXz{7AewNJ8-l}a^&?4)9y z*y;WmVvn-v!Gk@qy0-&F6w=`f9vRtZF6vb~4BO7q9xZ4voyoM*ha^vpEwQ>RAywI5Gc zUh4(q3kNyhrR~cJhS--C#X3)iE9p~10zvzk^pN5`PX7=gK!D@$5fachm&;fZ@PQEE zI71hPD}UcBAmZ>1ozb^7Ydz24eO^U9mA>_~KLVZJv7?nAONsHRHT5h(WnYAzu*Z`-@~Il;`cFSA8|d=J-*v(ojgFOu*aE~)yOPp(7t%UtjHkn{6t z4jy0F0DXAVPg~~5P_0YDo2~IH^2c!%`TkecpMT|mV7p4GA`e#PbGKW5)r^6~`@<=< zV56TfdiK*-`s!_v0v@;1pG=p3F8e5N`-YghJ~|fLmrfJ)zC(dX@$s^&rlRHZfTN*`ys{{nno#`<+-&-1(SdbBcSTQL|I&;R{BE6k zh2&-!^CDvuLQwa2ae^`+Ijc35z$gkQ!*c%~)bjA$ARyFBxSel6zO*6hrk;lop3wTK zs|Q=~Tqj;V0P;3&2R4X?)+BDb$vz9>Nu%zAafGuM!B-xGD-4l#9BXN0p5KOTMQ}Il z+y~YJpN68eDcxtCGR!7gclR5+GSbn*0?Oe5l5@j=x82M0lyRp#pIu$Heb?^ni!GsD zy5=)4Z5N#2Ne(K&P_rSsLc~_^!=@J^+hg6YSos7*_Bru0;V7ilo|D_Z^hWKoL%EAO ze)klzwi&2b>Xf=;ah2>)Bh@|Jxv^U+UUOZPaCg$afq!~im2s>qhq0Vc#YdYu?&$Jz z;oJX;&vILl{^R2duU((Z9ctfQuOjdq!ya{r8DmFi9IKgHfNI7dE53GX1o*SqL z7BkPAq5{=@E^{SW>XVT3M9TR-<+JX9Q<1?+qcT{gLY~5O=shU38dM1{2#Xmff|CdD zn?)ob@XDp9Mss?^E~)L7BZ+V@6?t3?j|H6>S#w|wIRwvyPl4k=`?kARXdg0Tk3j_! zrRl%9hayrDH%_8~i5Vnm&A=_KGrB99)}6m5Q~b*y^P+^%0aLY<9X=XIDAnO`fXn2% z%Od_SonK(_#B79;Zk=Q}TG>a{Z#Ho+vw~3~M%zB^U|8z9^T>rbB8>f0BT8m8k%SH_ z#9_CI8`TE%av`eFKok0Y98;3~oWP}4bXEG*=rsz~V$^9nCf5F{${eNp1_#+#oP3&s z9b`3m7YF+IC*qa;&qZHzgy5gf+lzBhhWsc2zP)yoJOq*7A}7eLuf8#Qp{tl=*cqaC z@y=?_)oi_9)3`h=owoeSZqMwgDR$v}3acu5W!VPF@vV@NMB`ii# zYDX!IudcM==(Z;b=~_G$_`OiHlQZMnkvbqDrIT(h_DqExR zLIc(7L2>kzLM`aDbUJKNZ*KGPD&-=T+5-(@crHFLX;rX&Z!0QB#!ZCw_13H&e(oTN zGB}#CAccc8GZ0CLj>Us8KJr%xd)H}X{X{qFr%%Lpw zw+3kes}RK0LsCE)@l6+PM~mnv(1j57R=g+eg6Bq^Xt__9>*f5XL5l_g1{xK?u;{T0 zJU@BCaqn;@Hyb5?`b+tMG`XlOKW_`?^)^jkXtL}%_CdlZ7%ravTV({ z2aMng7L`&Ylm&6Ehr^OBY|f4D&%s=+b^g=LB zY1`dHVT$JFvfjf*h7jpzf_TehEp(!rw%=51Bso7*N>4^YwX%|MYZ&*@?E!_ovJuyA zjD!)y_kc$d*&GrMXNvQe<)W`qI9H0nc`OkpMl31?0ThV<30;VY6$*_Jdz`zWbNtl- z!YP3G=%o<%qqSkSHLpzz>9NAxV^NBWX=y_anq7hWG}+dn)936pTQl-$7)h=1)$caZ zpIB|Ks#K*kQwJKpR)uF%y-KB4BCq>`-P&F95J~T!aKbTPWow-p~n_@&CiT)2a$dy;yGe30D! z(dgLGVztFmg?5eh+racIa0Df(rjeOifiiFdjQW?nZwt zi$Ios^0Tn>|6*tEROV(9+|>20dhk>q^45`lO8DgI;=<12-nn{g+;UVOyKddO>pbh^ zmq}l3bOB)C_cDu`bsq7V8US5>TBitp1FYwgvE>P zJlG3lAKG3vivr(1zQ3)?Cs9TB20esH(wF2mI4eTVBHNqnA@IDXT3o17l*=>UUNnO(92J}*t~K5m>oxEKqGkD7`S&F9QlXLXLn5dC zdpmWD@LRWc(az6jFt&Qi!dlFepp=bD4?K&fo}sN)Y(gQT%r5Q5Uxs&2#6~~!Bbvu9QAY)Hh36C z-{$K_%sZ-6OroKZP*@YJOZu0L(Nqw)(WF2bWGG*+!*x;}E^>}w+N4Nl!3#YB<*N$> z_hm}~9kMECnTiG-Vr>5?eEA=tZcMqO;~t0N7M7KgMrif@!tDiCbtdkARwPsLYBb)6 z&PfhC*1)WH)ssuEP0Dm}5%*L2g4@rO$BFz0m$|`CO`OWvA1Cf^Pj$1{ks#G2v@&wM zh7gsrW^OGKKb4&di%@vkry6(a+~P%FrR&Ym!S%gh&+Dl2C}WrH!Upv|H-ZFx?IVHN z#`OA11my`OH-d9nBRQuo33#@`2d+@%nBK7%0(MDV%-Gg%?>cAIENl3cGoaWRM<=J6|5WSnG;K2q=h9_)wXy4o`Ep0pHCqM2m6!!- z5QwNui5fu@DK$M7&BotC=2W((nWmhS!zI z<)|`rdoyM3BTh0?TUX`_p!#VKP0Dxh3=`g(8UjY@7_KF_@HGzaU~?yV@+1{Zg5}4&$fnm$^3pe$dI5 zz;8VZWwJEDIvF+p9qogex!2|E(#-pC=(%fOy~5)1d0B7%azlL+(fJbeIZw1P zlFjITRds|h3ako4Y9A8#Ah+~Jhl51@sC$#M?Z3TTU|iLsN(T(9$l#YVQBhAdYRF(* z7Aut&8eDzM&nf~qG-sZqp47`vd)bUuqF!(*WSzM_0Y#YNm8Pb5XGgyvm71b1kU;Ix5bh5qS>BzEG(`2=w27_#Zp}mP?jM2(7s6 z;d(ylPXU7W_AOnNf+y&n$d%`>RpuE<$$82BGpzK3(?m$O;g43MeH7#UU^m?&!{EH%8w6l08ie z42-Vk0u9krupQ8KioWu+^jkT#@`c4IdF+=y?N?!-f`i0STM}lDOHVQOvl) z>d-TaBBzM9JxQ`RY-oS+;9VSHLg;zT!39KOfE!HZOY34yLX`^tlS!Pqo9YJYK}B#2r%uvOX4b4J+qb zR-pT!jTp3aL%zG44yaFpBT|S(VtC*|$aF~I9+sO`%-ltbT{PDsap)4HD|r6j0u)@N zG3U{fRPJdrd8qt|M!r^B~b)VX=kt|%7}5%f}SAy%U+!&$B~({La+ zp7y6zu;V`^5_tf&{178j+JbOL*&zmPx(G2iBg^*yF*}nbW}JFQ{@hzg?ird|lNCcW z?ZY%OCaSjp!WW+K>N5&=|0eigci;?)5xnHaT^W-ZOKqlpqTa27QQbX5+97o;`;ye} zd8?|uG{|V?bsp-39a6N>aOsF1$Qp?7z=#h(;+qXUohDnUG6;ggc5TNYCfw#4jJ8h~ z#0rQIMkZ=lxLG}>(9Q4O3J+f*0Nm}GZmxQZlH&s=;N42~bRfMUSLupBvfLUS) z*X)KcuYqgSYj>{4Ctjh;rkrK&c*A!3nHckGfL31k{jsyh2&FIN+BElClU2lrd2|C> zl+HsjRrY-o{s-0v1F zl>~9OJ>M3`sOe@nEHp|wdv3jg$05&-rS`xk zYgJ)jJS66Hmr#JuT`m6=h6PO##I_*W%KFyTt3iDWXJz}+V@ia=irf>|{8!FnVdxJZ zKD30|d%LFiK8qUuCw$x z=9P5jGUk&!A-$V>y(Dt<2f;dW|kAsHXPx> z+A{6yfXJ)?;BdP)#j*7S@}Zy3Tp|pvQtyi8zJ9?K`?d;i5R$Gcg*(Rxe)h3ABGEVz zp(7fd*-cblzR!XRnUI~ywVz2%&qenzy+4P~7p{})?ktpU?*L=O@PJ>A7?-fXAP>LB z3J11`D}=&p-fY8AcX#gy1Gra+8&kBXxupfAV7BRtZCDjaO%1}ekX2AiW7TqYwug_z z5yAekakyxx4chs=7D#rI(koRTy#XLwAA1;$s>x91cKd;MlyP%!Ho9R_WWsvq*5uV| zVA+1m?6V}yT4TNxywOfI^qk8I>lhKLdI9!|=b*RUvhU1~A*qhhvL)V~_r2Inf;X{U+L~Q}L zu3dz(fD{{%Z$an8DA%kfLHL{j&PMw*V6$KofFXGQh1Z4tR7!n{rq$)t4AHLIg%SZB zN8(l~MZ(4d=8~=NhIFdUcG3$Rg~InB@F{d2ayCnrNHh%W_jR{Pj*S>Y=5SW2lkfdn zS3k?F*<*(fN08c;p&->S7;6bH09_BcbC-m<(9^`>pRcW9DS=^>VK;4}?fxRL4O7?6 zN_l+u#m$O}w)>?v`%k2T=72ViEo1KI&j3dlgY=; zTu-G^6o}6MP9ox3!A%9)9H0{f#KCB65W0A<)WiiFktI}8RZZgU?-XtvWyUpP3CGvK z66Dzc-Xd(|sFk3;mVvngNXG#vX2fQSn2LCK6?CI9 z@Li%((vBn|8Pe=zhSfPYMy8lgvEDv1{uc#5PE( zml5QnlVHe&5nkYc5_Ivg9t`&B$>X_DJUx|R99P+P!w9`vb}~r~Ws8yzEr0fD zd}Rd{bB3$6S0XLrTvU^SsuTBTu=V5qooLv3Wg;=x?w(xpsnPbcxEjNP`c27SdbOtI?x_ts73M<{&`~6|)7x(3`i$tKkZU!}F9&D`jJqZ(O zoj!az7A#|eKI%Tv4_+2LD9Ojw@>k%`F0l)E_o?DhcNHcnr7y3`|_$6Y~rs zBbmqhTD_%7y81gj@f`2`iQ|lJ>!G9`w{GWIfms%d~9oPYN%>>B$~R(%HfDiYN53^eKT%z z&%~abvLNc`{VKfX9z;<)1bG0SexYv139z8CxOm7i6G_R6a~L&qBGYF_Aw%g(TcS-K zCtUJ6`HP$V;Uch@s$~=;3XVTYKkv6)^WFpZa}eJo)1%btRH8||y_IRF0GP-fWEFk_)_ zoc-Qsg2xNr((#E_89CHDob_;`oJ1_%Av2E*;E4!fWAZR~()4 zR^M-X8VXccJvkYBww+Nc&v@)4#ypF1QW!-j)^d?uQA}%VCXhJ3?1xPW1_SFY()cX| z+h$AL=$NicCaxr}Fdg>}!6#Tqg$Q6j{0S1XAg>>p;_fvO;md9=tvY}goP{F0^$OVI zR~G=(NzY1jyV1yj8_ReEpUc8_@taSi#IWq3-RaXqq5{3mpmD})n5jFlAkc0^Ce7Sz2A1*UsEXUWo4 zjb~xk%&KT+>>-@!=R)egHvvkNQTbGCY^Y&~#3dKv!|TDJ5|3HwJi zP3#?v+JHE(bsSGs(KB!?ODMV*)2*DB&#I)RV`^`Y*V@>`qPF4CE8c-=EuVSHZjUr9 zU|-yRevTmmj?_DO5Ez9~uV!F_X7r+%4-TlZ#kJ^nt!~S7zmqc?o@0UVHxu9+$TR95 z*`wcnH}=I*=Y2A-|8$`-vT*u3bJ{;VPSvfpeyS;W)K?YofFaGrc^Wn>>3XF0KY4Xt z?_;j0Ul16P*Bu3gDTJ`jk=TniI3{q9V+KmBe;Ww`lBN0*SI+lBYp12Gfhl74eF?YM zFJhv^LjDds!n16QAqw9L{IvRKc&4a|i(A0pO<+dw>gn1Rq*{CP%oVO;K@bErG(dvC z0&nno@Z|!LY2X<--e+<)j~tmTz}j8OV-+7|U!8Kv1jF1&(7BewaQoW)vu4SpK3;07 zok-;o9=*i+k!bYwSN>HX4D<=03inKwZQ&0;_-1^~zv)E7t+>SuwC|6fO{;e)= z2>w=<7J00P&%x11qZM+gmm~Pyv0Z-%s?}dw|EPF7Ry4T$-LjkEGODFzE>*}UQQM?+ z6)ES2&_}$gYm!4fXj*~(+$E@i8oe~Qr(e$~czhtmRnoo|knq!!m#-g5t&A^c<1!l{6S}J# zsakB}E5jR%l{*&ffc*=?{xXl?4^t7hlc`&yzP!oscd)EwVp5$jyz-ae{&*lIw`V~W5uY3%gX<%c5`_edZ(QepepmQp zLFvUVARDBFeVJ=l*A5c|7=Dy4z}ha4v)|l?j6mmnbSxkFRTy=wExC=L|D0Na|HGi}QU7*>sjW8s z315@?1$#^qXoDSE4sPCXuMysD`Xr_Fj!Ydk(+0I{Wor2>LZMZV3f=YQdQI7FPkZ{x zPOCzSge+>s{L9W1>=V|3H1c4##%zgA+d@VEv!FY zWW0y@|?DsQ*g*)%FOGGv$MNipY#cBIde#I{qEerkJ)M#x`OlD-XC346x z1BQ}n6XHpdm3cHW->QMfhoK9A`1>y0i%93Hp%I*PS~0g{U)27mTV7P}IGqx- zLws8&kwCIo%$_e7J=OZ{TV;?mq4}XB+5r)vk0r;~R4)o89QSxYA(&oW_zzJ$N_51u z4jWvBPAeAIe+wJYmq;IjtR@LXjCp(Soud}%7dZof06ee=57-j^YaAIb_%w1a8NsJI zFZM>qG#0l)ZHjRv7U~nCg4hEU>KAD5S&BLrWZZ?5C4Jg9`vkKG$zXqSRHg$2m%!w8geuavdFPi83&u&b zu}Rd1%Z^|xkd$$=*gUS^62_=*nt}TO(Cncy8UdYR)pdfDz|!JR#l$k=1fP>4RX{Gr z;4G2TQ$iq49lSPbZ8pWbkJvBxfUR*o7}GOP?*U>8vnk_@0O~ccm&DnoPz1tJWzu%( zri&;1r-%o!=l%Vyh_&IhOIf|EPMaVV$;%aP7^EG6oel?aH4O$Y7TSbbU=U_&L2`BB zvGg}+YSIuRCwjY;YUmG`H^({$1`8Qy&&j?JF1Ph3uf9G*<&^@|Op`;xy{AZtsRHW0 zRik)b1ckv=74FS|#T6eDcwET^-T60sz90J+drjWy!Oh&sfL8=2Iqg{k z?z*>_RYgE+s!yr;#YMR-jL?|SH9h4!UlQovHUl`a(Ll0>)06|8ft#fq<5UX&m2;$E zJ-8q`=G+dUIo~G%xf=td96~#%Opjc#HLHNz%&bMxb!+;hcFwQ4a4`5#sFIz{Bm7>i z>HU9_PuH(>2ev)yfRBU0=B|za#FLPQiZZUz*8Y;P+>pg`DSmGcvAWhJ$k${>S;f-N zUgE$~D0+9&n*YE5rY`}GXI@J{OMN8ML#yyaKlg_D^#^!@I&|^U2@w&^T6AC}ju|cT z(b3a1uIpu6%&4|?m!$ zQ7`xK$JW_=>6WMB-U+WKO?);T2INT?RzYEIz2Ezfg#Y-`&S1Al9gu;0&`e&mqfbb5`@}$g3uy^g+{XLH&zLYlME-wp&;L~DN zK8|PdvNZ!UAxbSH3$Ad0;Fk#h0@9D9ynUk*gAx&bKZKc+X&kx==91ZI7~Wd2qLa54 zQbK$0B2P)RP)_3jnqa`#LJ_s`6>ofYLs*V)1SQyCQ~h&UWU?k#Qor^?aZ0Tz@(YAm z5o=?E+r9Bsa92<--XrJ!~-a6+vnrR6Y>~^ z+A1`anlh#)kw&`01;D#W(E8^fr=KXkRVNuKqsmlITqojMLnsb2p}KKOIFZLaTRnk6 zliW_)m*hBH9I@U7asU21fIybR97Mdp80k}ohL+U{8GHz2-<_XFqY^*5IDNM%{+>W${x28VBb|CqaGT zis1uFMT=wILGsbdHKa0euDS);7+10dVMKBy_=;!=B-so`XIW^iffBO+Q1lW95{JxT z$7<=3m8a8r+{@S5Koeayo;jBQw62nO6UtW_d4vm~kh@0f4@>+Q>835t?^i-r@rk+% z*B40t68>AABcRhJE1(>bj|cKVhM)SpncJ=F6e_R@x`0@oskJuJs-pmj$LDAuHd5NC z5i!WAT^Hl-?fJKJ`!`RsEZDnIFYm8Zb>eLaY_+yQxc@hKZRvWHbd}eKm>K^O^np@? zm85mgE^*zwxfMJ%#nF`t#K>85*Ew?LNFf!0M~2?$h@LM0#g3WT`E96A%l`p6K*qoI z<@^!l99Zq+8wKA7s~q`?qIA>!P&73;6aO;?Hn0HKdu}D>x_xD4g6>)R{H+7w^)9W* zl5i{9wgroIcU}JVOdT9kuzmUHg0p}hk?oslIQ=gz{|Bfb_hO*CP=jqq3Sh<4e44&H ziv2X-#_TbiYzMJvr6o}WnVS&;OH3*{r1lUq#UxaF_tMm(8jG)cSyfeo(Ix!d9l?tZ zNahIMR;Kw2! zL&54!HIXMUEA#iCq#-{F$>Nu3pubP12p|DK1 z>ez*Y*Tb)3SVhY+xxDaz<5~N)+BN&T>wvOcUIIBh59y*ai*RoB!4F31uTLj^~v<Z3W^{6pTGr>3~j>Krz%vZ`AdpPi7s zRCRShTIEaeC6hT34dUG9Fy3eZU(9RH4yK0CO0zWVs|%#|ZzhP%X0v_Zy5!4=>=N~f zuQ$ZH{$uHU?Ei9q<(| z_b^Ax9^D+5l}!8zA-K11CZ4=uz#F1loJdJGES$f6B`yf4^C_X3ThSX}ndUT);s7H` zNI84bOu<}pyl|n~rjUNd@@(j)e|u7T0N~WZDFFEIIGbCT1EM|)RlFF!+(>R_xK1${0za8Wg^c%G*xh$D6My(+0%)TdFvtKyx5+`fxGe2kJPs9TY z74JhUT0%LYyxcl^1|!or%Hd_OA>H%P4MSz4;lU-}q6*cn;_kn@8C|Pt$ao{Qb%QSxd zsrs^pvf)NejS9ML0b0f+v+13Krpdl;9*s+z0XKFh$iF;cJOKct1rh-C<^}P;+jkVG zxC8*#lMV{^Eq<(;7c%r7LT;a59Y#}^9 zokeWy%@k*dx6bgyeDOdtJ$_vuW4_el^c2$3($V7lUF!XosWf?N2_h#UN!NPkNkDr| z+m-8~bItRA(1y0(;TL}@Sq0zI`@cS3e9L?<7(zbA*JoF?b+Y74>0Bndi8Jyu!$nC@ zvCyiNMYK7j)6Km8czWu?7}S~mxTnJZZ@q7B$j?lR1i^`t^xVoLMs0)k`puBiI_+V7 z!x3G?SGQ)5r_IE2)Vc8k`r@f*$#H$LzSwdi2Op&FjsA~x%rBJXh)3+g&$({EM^K}dGxaH+DWut;Fx7A}-f^i0${#Fl7c|76eTX z^lMV^ZEQt`d~-CA>z`G@DpFp0!HaWE6rEpdVc;6|AIp0QWz9H(Zdv`Ww?)c&YCuN- zGN3&G8D%!p|KBFnHeGXcTiKQYaJWU)4oFEs%|69IdpF2VQB}Twe+As^)wSA@oj>}~ zLgp<;Rk=Fpns^ASl;JvsJ2!1B)q;0>yuN)yiH0s!vW+DY#KDtd|{ znThZs!kN}Q1iXLs&h~qPq9ajRQCn2`XYx*2|6%ht{V3zONinVXOq}nsYQGrlB^b+h zQMwm@-0!(xC%P@VYvXDIls?jZajaULcrU5;!(Pt`sU)Myi!8W#q-k#6EN%>*hv4A)Zb4Jd4ayYwqa^YKZf%lJySJ`vaQt4rah z9j`wBS?QX+VGqJHZY8N~gl<&i6}|Wv&NKUP(6!2cW&InNTiG9M{nTlvjM{qb3)-wL z0Hj7_0VKbT&L9=OZ)R{357;*#JF*BIQdJ8piIF&o0DwDyK0|-T`(bDGfboaFGn%H? zaf4T>CVeuWPTtj;wfjX+Q=7r#!E%pxeklF;myCcM$LKSqL$Q?DORYoiR3k-W$5(S$ zLb~_Sb9$82Y09=1{ZMb>J zT=1V^Fom{@rUQKj_^I$UH2^>X;C4$32+yc#y$Apg0YI%tzCWG~0M$z%JVV{O0RZm+ zAX}7i_o6{zBd#rK?>?I)##EbMnS&8@sD(7OHn|^QwYrz$4&!4v(|~-*Ng{3?#Vf8A z4@FU;u7KJNe^pLaPhF0e*$ig8H$+>|0D##1t}JU5SRMy}X8TbsyQ7th4=SuiWzc58 z*GuluHc=Pac)KO2B6z~?(_}4@y-wKsTfrdWrQy<%^O4z(3=}?YDV7#@5!|R1xQ#{D zV|7#K&bbe&2h6~P+{DmK)vSMPuW^^Q=Wm7STFc&w0Q=@#zpmuxbw0w3QRE&fkiDZO zm;qJ-Kr$f8LhigvnDk}lSMB`kpY=YE!l0i?6%#C~Yj-XS9O=~Q`BWcn_XB|R8Vj+ZnC zPKh#eGdrjux@?vaoe7cyfFMAcYkEh~skDl*l@4uZ=@*Q4uL0hFG<;${M7s=J<^4kx zvA0a{3E9M28HbRWz7dt{F&O6!Dc%2PM5b0i=q5yW6}^~fj&F)5$D-(ipo6GtVRrD_ZO8@}EV~Zd>1^^dZ=_JPC#XF!Y4NYI~plU50f9h@Q zZ3KULukgmUBOBXy9zL?|CTZqRkB8e2_?wTL{637=dmP&SDEPq@k<-?h@Qk3{ju(E3 zcjW&PxX+Pgli_pT?){@;mzD7uc&DeU&Yo&db=5h=c+R*?jV~qyJJpLYXHFfb(XL+Z zcfww{;DSASjcGtTef)GT=0dFgmf`+UpXCNP)M3d13inxVI9_xA+TMhrs1}Px+@WSm zZ?o3NM%>GG%Us_}pXw<9h!70`YxVgcVorWA$!Wrd*1dBIp-j-ZXv}HM zdwB=|1jUUF1~oP26U%=AO8P&ZE(w06c1}91$_(8P(O3~J_=8OzrQ@_?)%8Fs{PW%HZ1}W;qYnVs zgCVp)eFBYF{lR_#02cK3@RSR}T10t`VSFbd#mTa+D_l;et1AKEk^T`B)Y39E-(wh8 zD=i;6E}J065S!4JC4-J+&*~Uy?eVRN#SY;2A7=k7{yY~JpOKMc=-)lGW$S1`&?Zg& zv5ksx{p9>FCo{F|vXT5=elQOXeFKH(EUk|eB!Zh=oc7g>o?cx(0_r+Be+m>bFjym{ zMNx4WjuYhfIysl-lS0@O`+3Ct&Twmg&X90Vn0utLo^7m)bPwBo@(kVSV(5(ysWn)|nZ{y(53&pIYLCqK?}91~XTs7+){imC*aH^Z%YE=)gy_!2!j+XFY6Qz@(<;NLmE z(~Xyo9y?uXSP1-U9^ktMElbc%+OG5I8lT)Wwr&_a2RX^namzx8Qi`2Lf$Y!-k~_<5lR4uhDM_ul{f#O5@%;vw9~J2J<_BBd8|S0zli}o$ zejTrzf2c(kCJl{ccX(#HFTiriv5Z7RT#kz?B|_!ah5G~mC-f%(U<>u(2SdcwI)X!L zO%f%E(zOKuj_8j7z$YE)Gl!AH=%PlvBsr`k8|s#6c7et^iP}hERC!u{y*-kiWGfsOVGD2m=AS~b zIbiqY{1e-Qd;Da*vc4}+cjW!@-d(;2Z6D0vwLACG+K-NVE|kK$1*aCXDz-c%h(%S@l1sc$OPx3<-lC}%ER^Vm{i=p8K8 z_w>z9XC&=Tl%AQZX%5skSXMbWoc}aiE}wOs%dP9|EURp6nT=}uD&4#GQnF5&rb??x zF7=I6rd2;~X-+JS{&$%gS?ZHi19D4IrY7qydDn~}C!8XO)(elVxPO$!0>BCY#7g2g z(aX^Q5GjfLqZcXt!+oWWj&!{RJgr^)@6X&nS92dN(5Z|2^F*yVLG^4x1i4MN*dS?= zeqAQ_>^|EmvTG@Z9-jw8n{%0eW}?Inu|vX?oHR8SlOd+ZK1f}UEQl4yhA~1J+5>xe zd1-I_@&0%jC#~s!eB>Uiu5y3eXNF?viFs%pKXaoxh(5tj7N%;LKW};>(vbZ|0{`W@ zlig1w@SI*fIUQGTb0XJ`;fccvoV%0K(X1~&qxq5ihl422VuT2X=em4$`Gl02lrfs3 zv!ukBRw70T?B!INl}{?GfxIUS8+P*48E5_|v!N6-s!hcWOzVGLSJ0WJTxFhet!!7m z@_a3h#jeJ5XV4)X)sTX}Q{^64D??vg6e+~(n-b_rOcj>tYN~Ok_~7nNtSyIn?4-Nz zTn=5^$C(IZl+{p!2L&s|q&R}L1jm9zRuN{>aXT)bEY%c|X7&kn$QG z#i)&yr_Fq;}O8^Vh(h8G6Bu9trxIr9gpJlcFRE0vv6TWLtS^;Kj-0VCDL zDJ?gtb|Mo8_3UIO+*)ZWc&S!B*0hPf=MJdSi z0RQZ$DF18}nW8A9P@|C9zlwcO(bMU89zP{@em*6I&x;D0pcNPk0AQqV1OO_Hl>ji@ zHw-vCC7|okMb4DBN4{BBdN`9qHK2-EPJDJ_FwORwdEp&1h~omH-%=T@&uLx4W&wEb z?r!Aec@Vy-_fM{yAlR zzdOucAMt`_L(U}oyt8hlMYWhgGiYWr!}DG-CGUkW_mU{9$-fpv!=4_5Q zCx4Pz8=fZ)YvgpAYf>`v^U}gK>=+MTD%~e6CpigRly-b0UG!U5CN*6*8h;`sKJmPE zkc#h~5&mjSKbhH9DKqxg%z>~U`ZWu8oZyl|n_{ptxa#SD_CAT8ANQTN{{kwSw;WN4 zweka}i=-;)-tF_dN-IDD{yH#ui6wCP2NEsDE`yGqPM(`hCCgP_dgsnVhuOJw@pNjA ztFbKzFN&|uT_w;fMBVWctB&emFWOeur!wAJL)21{hFV%$xS}!WSc+pW>k{%3OWnIn zi;sBtK6q@~o;{=68eaYD;*Yq*8r#& z2q6e}XL;-({Zh1VL{CInhrlk0M8Fp6q!kA>?g@%KC=3tnM&6aL=I$?D!oDpoaGD=i4I4Rg6hhvogw3HfCBFK(|FKaHM7)5nHJ zeYlN@bB6@h4)0z#ANwWp7auI-bg~2r$^+lptgPaMox818n9VJ~ykE(m4h#m#*`3C(b?p)^h5T}8)AAkRUxzWs zS-ood_vtNlnFL-&fAiyFt{djFQ9TlgNvZU=fW_=y&ngJcCA)cLyO6qeqqcL@Di-M6 z6z0R8RFMM!R{ZnFSj>1bA?#!%p|g>wCIU4Os1pJB>54qUJVo(u zf+$jx{5c23U&1+GAx9~xzCr1U2DAU&TT%1Aqk=p#L#>J8DN)j0`&)kx> z<#Vduwv3&|FH~fLTz3~8vSV3;qQ;Z(VY?&oosGmIh7aUv$=7DPK7vqQfcz~{FN+n^ zi`kO(&4(Zx&5%M#rAAU$EKMQg%d-pRlvYUIJS2}&BNxcH_!2lDadpMO61L^wBn_PL z-P^kiTt=XR5zZ9q6rz+8sSwj<^yzVGHNpd{_Y@2+io-CLHKWliMgoHfWo2>V0)x3B zypT}j?)&BV>~1ABkRQwsfjk>n8z4KtU@+_0gaHsxRZbWZRj{W>+po3M^pKHIPAmPz3~q5BEf+_`t97?=?r0kFPG>d9^kPULN2d>5q)v z9=CT5G1xL{Kuh?R4zIC@~OKi(IDVIUm?l2cC{ zIU&p*S<{wNU0cv*`LXkH5{y0-*_@6V$Sth@YObMdTVDPqRkSS;CO2@n1WSaaz<(L# zs>H*Us;rD!Q;z)>M|=nuS_vOo3$ZWJ{Cv5_?&K%c}A1JSi*)^)SO?Wg`RPp); zUH6)z#t1K79;gnp**Rw?9&`(qi^O1+9BZzFAT3>-If>$e^Iw!Xuu=Zr{48s>XB?T# zD`D<%lH!xuK0Kf8>Gy85J-#sZ;suC>^n<8h#o312J0q+eS?CLBDWYi@%7<=Z9Sn7C z+1X@AKe}hX0d&Ds$lIYF>fSp*$_~gqnZlv1#tIy#*1E*FtFCCko(iqN`HAKu#O0$)l7#YPP&BGN+^=9{4UzXY_ zILkv$-WV`ws-~tGZwDyoLQFEY>6`FBe-w$Z-k~^KL}BK5)r7D$sfyen!3EKmYxiF= zXMpIi-z-^D%EG>g-1hws|EX_Y4D0ifS%N)!=Q7Q`1XU?yv9|(^T}nPw4zg`hbgo|T z*PcKnxp@`gK98!Gz#z~wIUDPujo!~ZWd+}MlPbz4lLgr{UkAdiWxv#KqDc{i{cI^Y zlAh+N%hbA?6L$qp0&;Y~eiVKL3o^2;;Xex58R``n5D?4{@wcXU5F%D{j;;@aJw(F_ zLN3{d$pWGD4@O544>OIH=?|Sb*)&@tmqruu$s|$o)aU=(g@v|dz|K&wAY?!=FA0Uj z$TvAk9}DM85Npe9OH5EuG#X$sZ2m|*KLE1urv94|6W6{AyZfhDv|~OiqQ**y^P@tb z4P=>&;@QX)i|OQ$;~^n)8?I+rwpShqxv}p`qe6m35|AV$3iHS^hEm2$^dtF`krWsV zX4Zv2`w}IvPYrk4rAr;AB#BI-la9+E@<7Q(2+0w$9nwI)aS9^P{_MmzFp?3YIC1^OO&-lY>mGxl-hr`G?% z*qvI5nIQ3!r^P^Poo$d(gt$ron8|6zHall}n?wnL^zE&TXcRm82YoOF6y?VNlU?3r5%N<4}hnR zZ~YiE&{AIW{rO(TnCIb!Hg)~bHM$|DQ>N!DP-Hr&{mxTS{LiLEYu9h<9X#-9H#G z+~vV9SVsswAkOgP0a~9e!J(wO7rMSLTFBMcu5!myW2x8dtFN|@`yajVBpAGqhyLzA zWO%OYuQF3=28pG{Q?3G#()Y!Ul#}K1M1f%Eq*mHGR!ewbF=+h)7&brA?+M)pJq_If z4Hi1lj;>A94aov>q&gu>$F2=mIXyDZ@!Td*M@76s7e}BbU#la{V$#N`wfU}3{0Vc2 z_o^ZU5df${Ee>E9@poc|s53+Dn&NYSE&uJ%|3*h0O8=?8j`Sn($FL5MJ3Rudu=J}g zT5pMxRF&lVP4)OW(VR@k3B`dU`TzL%ldh9btlWG4WTD}XBJY%0Z<@j>ZE2>ZMM^x} zSEH47$~Y?l_ba2qFcFwUDPF)*_2xYHst6SmpMcNE_Sc6oim@V`%rOqynJJ=(Fb;MX zAM-|XlF&@oA-XRH^L8_^2*Nsj<$L3I;Q;#x?7EdDzQUES6|y5?j<6TP3K87JUe-2f zuW?G*GTqQsKswY{TVj~nLIqENI!eyGCS5{4{H#1)?#FJnPafWj&QjaHk-JxgvjO-Z z97g6~PpnZeQmg6K1zT-0zoEB%shdsyj2sk}0l#lIdf@+z)Wai7Th)8TyZ_lK`&Ol| zr~-rBF7=%S-?o0~Ug8qc(&1MQi z?uUF}(Nk?Ky~QVDJg2=-n%g_U$aQf^%8y9V{aqb;vU63qd~@3#;)HXT?=!B?*AZ&j zt%DWW{Yud|G5M7q7E#lYuShGeIZ+k8l8chIf{y1FN%%sYjK@~C?Sj25Vw6D7vjf-# zKaE#sLNyo+0!}a(Zt>=hqRthEP)aC1IF*q>V7p-?v73<>9aN4BVI5A;i8^3Mpp)@~ z^UZ`tbvB-usmo2}FeK#4cfpuEa*mRsutmf4CMZK5@kP?ZwoH_eQYQ$n@f#(e!+q~~ z+4uy<`^36xvon3{;dvp~zy16{$z7bn_b&RS)`P>tZHuyrvf)~JC3vBUfs`^&TgpT_ zoWf(3XjtC<1-)`=+2O+!U9aqy7?wuEig_mQ)loOSbQF2d*PsNwF5@j+AzGW1KaD>E zN|M6tGigsL`OqOPMb`59Oz>lK)N9GhEqgIk|Vrb-Pt+z~Iu zrM^)RSiEBgjL{^RdljkIL+w~v4G6G>$|I9T8%{3#_kvwJW1ju-OXKXjmDO*CU$8Rn z(5PQzWZvoM+y`oz_i`m+>=Z1RER&PT@*R*_l*!UbAv;4h*zUY~L;2}r=-ap9y9K*; zuE8EebB7ZAHdqc~Acd^s zQ*~9`lE}dDW-~T2mZ|2%H4$5=C%^+Jr2sg8xW-(i>2`#D0Ca*s58>=1+1k5 zlH(V4eX}m^VKO8*|IQ|28IxFLrqsBRvb6nBt z$M*8ROV4>>ox!|>P<&Vy=vdoqmEV46{Qu&3CNN;hOU!OE8!ny~%qq$QK+W4uY)IJ1 zPw;tu$gmn-02bG|4tVeqvb)VpyXL1#B2{71mnpo2U{cr+$Y|HXRE(QS5h{ff_-kDN zFupK8!M27rSiDedrYo1o0eT`iwlD^;+1N~21J=NENwKG)=TDCIY==!ixvCJ6Q;3Xin9~-}bX8#8{~h!jQcrrr{MP2it(&@B_;)gwqv7{mvwm<Ke4>6=??wyjbnt#xqwz7qeCjpt z3^X5m$m)x0)YHDJrO{T(m`&|jovJV0ibdy5ixaMl>Y}v2i9diuk;AX>tIh2LL9d!vJ7@1SF@P3jgMy zD#6A42qGY117X?+D?$+N0fJp#2n18%G@f)huX0p8W7yz!P=NavetWYcb_n=dS)L2{Iq)?Az|4d249z9ISf3BykFXm7fKLnFp*We5f-(Cj-)vTHb}y87899&~Pi=j&hCrTAzwSg?E#SqB{w_MUsDK_RD`>AcqP&FXTCY_))ljz`4+z zQrl2e2G;Q%=#{h&`9GxW)a0to=#+;)JRa_6?t0I*)}dB;&)g3l>&!Fvyav?S)v=F6 zIXYOl?XlO|Yu)yP3okMrK0jlW5Z}i*iQ^adyH%~Rwm$|LrUwAX)q>Ij-JVhz0%$Gw zD1XOuRi?_v>!A^gFQ7Kasd210f%+t=hg{DuQhz&(2i(3 z`-!lWDSJB)aMl6gjmZ6~WjUP@`_u*z{4wwgP8Y9d#^1^5)cgr2C$H>q3S}?17yM*n{)m}d>%r!=M}Ft*j?W*r zOMC5)2LR|I^bXIqo+bJs*5dhf>zAFC9hDc=X`7nM4kZ{0P6rg9j?P=m&JbiwxH6_* z`VGH6RvW|sIW35}BGVo`2|x=7sWeheHH*#4>Yz0;IZRG<6@x@dgGzL|G zGdX{QPTEP1bJ#i8mf_d3x9OyL4!9@&gR9YO zR@En<%4ujRZX+sBd1$*@X{Febz;p$#`JXF#LMz!E)7Ttn55vUrD&mF;j{~)4Umrs$ zjNILf3PvdlV@=F=5}vFLW0?*d*i`V@os@4TNYGH$%-VtZPN+I4slc^1?bWS#_bjlg zI4DW%6L!pL!JQN1Ocovrcvy5eRXViQ*3rSU$ahaL$B1b@Qs9~5l|etk9 zQQ!X5$f&}O@nowG`+3@BDwgMlHSycItzV~_fzuGu?08<>!WR*Uh}cZo<#`bPBLG|n z01*D;Jcw|?hZK9BN?1$qtF5Qki?8(ciElRkT_56?Ks?G$JwJywqTN$nJ*)dS`J=~; zzm+6f?`lLI`2KUlhV#H^N<(U+mZG6_MGBp`7+qCv=ANfd=^|OjfL=7vr6Fs`X^p9k z6Yil%YUkiCzA&-(;Uagd^D1+Ou5{0K&;OzYakmPJ88uQTlmGUhqMt~3l>*>G{SkBjrNyLwf?E-nsXe>DnIwHcS@K_@t*rVt$5 z>Fnv_grG+`nKphD134knq)ti~5rU$r+z7wg^gA?<@u;Zrpm`^GG<`3W{x|+{&!Y)} zTA4+Bzwh|#={7nd&BqtcYA!FI@bb>=lD#5{no|fbIb5HqldHm9{f5coE;wKQb z;D*eJRBt2fCW-@C!Csb+RAF<*Ql5Ed`@Rd223*s4kJj7dUA?L#<_sJ7r$bEdROJ>Z z6PK$Ou){eRrj(hj0)#an#QV1`f@DHQ+dyNL2~%1PbFnY?{a&L-j?@~im$JVZV>h}811-1a}+FHG; zB3y>$iSR1-sFlyDzpExi;9)+0q<}_b#};w_4Jk>WtBUCKqIaMIs@Z7cU8^3g(VYFY*Wpjs(_P(foZ)Y}x=*`V0cR+Rw@d#YzwEuzkpLRnq`8cI9PfyH zDOXB5L{RcP z9WjmY?)62iB7E~^ZK#1$M~*KwDBe=e09I~UvcR2Bgswk2p7~XCcC@DY+Efms@gM&U zpS;J|u^ zUaR)<;N8_T+XY?-lfQet8rZ&!o+%o9*(k;tzN9GBe2L8~(85;jEZfAIIZMmm1xkw) zFcG_58-a;+HZ6C)Ncd4R$j~K*lo1gbKJoQTE=d<(7-}jxXLpebGHy^34m|v5l|GhX z#6K_mA+akw<6d)DkYby7NxXcef;6gG4qI_K8AFA=(xJR+yZ9Rk)h2w7C`l z6Ob+Yb-zDvJ`$2-_%-b=usa)h2rcf6OgQez$z!qtP2MbSFv`_J!_%)WAz0PtA^6Vr z{0SeEx1=`%MT0_jFu7zvk@aqW7n*w)aW4=Uu!8bxzJEq|<`}PwVxl#5 zD4L?IDw7vC=k3oeH#;F*Tr>2%?{xCTWgvfEg0m+GD(-@g>r6?cz7i6tI+xCVMU1OU zYsj-!_?Wz#wnpb?h5i}6&pR}w5LmrgRY;gKC8eO|#6va*m zne-@9mY0P=mE6Tlgsj#Ba;25p$K>5N6%))3vW(r1Fg=PKi9ikHD(b(QYbwpBVRBU6 zDDz6J3bPtJx#F3!{^?v}DI4uqf>@$k#lM-VBZt!h1}v0YvrvvE%Wiu3^i9UfTf}Xb z38fPnovNeA^drqgyij7I zFLO7=%9g1)-HvSKUcEW=e3Z$5xH=ypPi7ABp7|c~z%?i4m26P;-#cZGn~nj%+v{O7 zaeGvrzR0tCJNeW`c7kM$@2ATPs*OG-Z&6OT5gPn&tcSDjCLzq(#4V7;AvGC?2G-9n zpT8!NKl>YvT!zX^HxYgXe|qBa7|IqG=_6NAdLNQomv~ z&-OE7W;d5SH&;~LQxM0e;x(89G^r=!5EGgtVG_!#(}$Njlw(`hy*l9%frgAQc{j5v z!pIteEUF+@%3cx-BL3Or-sZ_pu@M$4M7}1}M1Py7p>q(=?cQi{Ji8x%Z&*ypqhuyl zg=dP={gMMw>up%~I;AE)G`>=fOA&CT9ZGkNWTX6LT2W$_Qc2QXWP@ST=k;`T!f$(m zS?Vj^`=l8oF>w?B-}JXhfd9U1_a-rUTj$$>@5u~Hl0A(JK0o+^0rv9G1_wpIpuHWC zIh=R3CcqTf(pHbG<=0r(eGy`h5dF5to2A8>FBYQ~A4Yi7zry`c>L=US4i?tH@k397 zkKfEh;G`Q*ys0*_RLi{*f-ePwm8{*k?saC#nIGAgV6VXH{oFb zn3HYYDRlpzI|l&C(YZSTpgG|l)_0E^wgYgzz!d%=>=Awvb_+iWk=PM|S9Kge`Zn&`ReVNJ1mzQF$+Jh4C1TGrt5MsImcdyz0C2+l3@o`mykl&MXIdU7fPukY{hv z3$S9y0Ex?wbTvoh#R!58hnvTv_<)bX%1nT^BRt8&WOcO~GBPCvG)X&am;3&Ul;%=o zYH(dxid3E|#Tm_v^$kv`!MOdf(X3vkOS-YsoJ~}dhr7J~MX6z@v8lYWCJdVIq0PK9FHou^Jl6JY>pKUA^qJy2nwUMccs9s!9OW zH^G9`#9N zsP7;;r^NOR&%@1WEFY}!TxWjr#zQ6R^K;*n!y0moAj(gSm5{R=0+-+!0{1M_h!X}=Hn-oa_-sI;J0jesbTzcx z(+T8xUP`pxOL|^`l3TZ4(|844@6R&5-ht=5TSJ@8T6C0S;@6D!PK~mo@pI2DZnC$w+2bZ37z{Sb84WE<|Hsj9>e9FW zDQ)%XQMua(U)r=>vH8Y%?Rl~~-V_PL79d$O{LcGiAYqRWov5~}ga$^KB8uKe6~rlG zU84uJrm}<~XuoYTJ*{U@)EufN!ZXO`Jr^u!>>j$3rTZC1!(h91_N!2In1(Pn-CV#i z*rq38Z$95SwOy=ix3oB?ukTrLFi+=+vglplFQN*g`!mc8bODnSp4Bc&i}nx6Ax8c( ziKaVNVkVCl>}rs572GYrUHj{Xn|9~eu;zsSL_%}Jyt#xD!%S$dr9?2WISf+dr?OzS za|XOFYzIFw2tOif$Y&R1E!*Ff@NyD4)R;V6y6bt}U`C|Y8sW-nMuaH&jJ0O*d#gLVGXHVYVwJhIg zRea_?r(;b>8%R9>bdjD>|A<@imrS}}&IggSFlG=k06_8}0C0Q$_9wv#wfvjzlLfR= ztA@`iNp}G!uZQKc0rnnw4<8DOE$POiz9X0GNp# z0H8I$%ia!F~0(nv3l|DxYYcZ?2 zH9a>%YV)^CZK+4`t=CWaF4@@+=Jy)VMZPzG&<^2zxwb?hji_=X=Qer)H3GMau9;DX z0SCvv{GpJyh6ZYWyGf}4vK&WpMYrgfY^SKn^?g&E@mxWkaEw_SnkNjaVRb^?@-F$` zTA(8$@`HjDyhx9X-3fU)G@8T@?Be_qAbOs`eNRgYLXZBwi< zpU}PDng$gTVgPrJR2|c;?_zDQRX)f-tn0No?ixkvqw>QoLi3||I?Js|IPQDy z<7?=(ES5^GFC(!FrDp!CkFU393|0+qz|{1N(bZk`zwG-@WdhKr`8U-Rs&sp$XsvgQ zh0l+f!gA+{6#DyQQLQWE@^2GCN9-q*{oPh8#=P0*TbI^kz}z^zEg@3<0Wx@jenqp? z22ZTodTeCE2)=|TL;U#6%$(Z1zem<@R^1vU7&S6TP}r1Gae-NPdupriUAy@~HVCJVVJ zkt9ABUx+WoH{x6Coj}8$Nnow0jepffIsZq^_$TV~dwvV&KRr4p>Nim1t;1v;8c*M* zvGii7`FVh<4rwlG+^}EFxdZ2Da$?mdnv#iHF$dc``yQlmeiztx^%fDHpNtNiK1+rx z-iHpD+lwrXPvXd?44UM_R9+f6jf_^{S*qbI^2(y~n|W_6T3=Eos(2b~f!P3P3f_xg z(WLeSNai+}6T`p-zSs@v z;GC?k8spHlF{f4y0ONeUM_iWHW1wR|sxFdF!VVey38>wLab&TyJ~Zj(?B$pk2kuC^ z%N}Ex$#v1*e!=G`kcMFA`J1V0zPUh9agnNbW3H|Ctc6DbTYmchycMc%T=08l zqm(UyU)OvxfgH^=9%n$zPA*a}G13f2p%{Imp%G_34KDIYDL=Cn=CqTi*|-)d0Zcmb zumZjavYd^}n`XCscfo`!>dd=<>dGaXu{1}>om}^>^^co!c_+45_c$m%*mfV?@2>cQ z>N0cGKC+%+dQx{dbiQZ4B>RmeuU#5!o(Y7bK=Ss_{PpOe)@!7f_MEph(?#k%^#W_%N^N#Gg z$}LR>lv&1C1L%m7#GX>EGxUFsUp4``pWS*DEpb^%6p{Btlr))utF;e zdac+WI%36)OjB*@oyo}K*1{$s-lMp9k_i>YJz4IVzpEgOLsV5EqQHfxO2=< zcj0wm&E3N$3;$%%Iy>+$|JTdwoW^u-q&muzjzVii`C_+lIJlJn0n+sk-#G;T#UV|MPdq9V_ztB!7U z=n<96qxL1*=pItg6YI*oKGNduu`jS(0DG5rCh?xwWp%Uay0{k4gsBSs=FQ3(S=7;+ z-t1j(sN@dY-BH)u>ta_>LBElnbY!`noxv^#W{!Pa+~`nsW*t7i4;J#IP6Nf~qR>mE zFc06=?(=R{?MeGT@{^^9Y$hJ+eTv!|)j-WiXZKM1`%i<7_>9;z%>q-pgF0`HLTNUa zvU?t_)SkbS!>TQ&1|aI#Vrp=nt#bLSr(Zj($HC*+UK{UWBB>kldIYZHjNOdVEG+Fj zwt6kEV1m=wO`UVF=)e-Ek8RtwZQHhak8RuM9^1BU+qP|U?|Zei`|?-PnVEFDDyht* ze_!JwDkuOB-JDYMz5t2U2c~9U`wk0?Ue?~=mF{>v1_bZUuWP9Jc>>yo^svVudwK4tL(*Wlgdf~{7={{t^ohVjr2 z%DvEhA#*kFR##61{IY#Rkm*~hxy+o#)6n(^3#RCx6t6D812A=Z#pn=g zHgOM~qTYg2rF#uU{qHHe=rLv)S$3I-QUKemB%7 zQ!UT7?}V|8*rB^y$EfgW1_$Mz+n^OeN1m}2hh2gq!uKzb`7JRtyQ$b|gwue!&QpK= zDwz&+$Q>V+%a?Y!ESfyt$Y=o zk-U;Z&0+OkoUHmlL>*z0#hHWO9Zd|Z^iVV0dKwusDsXwF&0ZLCI~>#6;B!^Kwp!^& zZ%>H-J`4U#0=v^^`}QmuCw)2b=H_ZmL30S${;0fu2HNwT`S-@u`Pi!hfptz z{yCfvzkzE@E>DI6wuDuoBG|}No#>x>1QpGZ*Uqb^YN&au(QLON!foW5!UFbm{cjW{ z-u5+GSm&_}-o0am!z@M(Ir*?DC&GCHH96l0~K;dpP|- zu+6@?$HHDr*os*~$upOCr_3BE4|BV)K<{Ap$BC@`b@`9v{c3+U@R1q5M~Y{c?|?KT z6IAo2oaEg#qgUtoZY(L{Ey7eoU}ncC7;&MH8<&5hSM zCtEqF|JGJ@3s-A;;6LHPlCay%T58J~{iX7AAs7YsnHc;hE8T^rjfeGUgB(q#t7c|& zcI7*!(wspDC)1K@c37;CfOd^%z9pPv1#i?wVyq;%<{?a;7zv(7{!{bXMC~sEiuzTw zK3iu1b;Qk2)awwM?zf6+6Gzq0b1h2DMd!IDCxxx^<}Tx9!GXaphB<##FXyh3Gt3E- z7PcraMb+LNYS&LQA_c`(Fieqft%}Z?*R7E4gcYwdpPnBd;G)Xlv!RebUwn)!^j`DA zp@)u`@zN*D3?(4^((LGY^B^?jXcZI58BG2_Di;6Qi!)7TF!unGJ)z_3a+eED2w#0j?} z9#6a{=e*~_;%u3to&4Xnped%?5rgi&M{w)yPr|Vx<04a3mMuSWkbn;e(MK+r6xkaX z^;zqGAi+j%k$v7&9*p|?Hm;_X_{|%X1HkN?E17yGvRkY?7Qwx~^`;`6%bBv`Uo`9+kXXM5ojy8n!JL=|XAs)Qc z1y@sX9?E6o&8hMVINU8_Pv>kOkaG%}$QnO>r5vSz6Wn){j5YA81!6{xEr2mlK$v4aQGN}>SDn|)RuJkO}N zlB{S_J2wP6Z{ap|u2b`B08;=Rkf_=z_T!BG?{$Q3K6GMM=+o}kmw}>R1W~msI8qAEWAe4$gn* zUq%2*4e-cnqW8#Ia8st)R5D3fyD#_f(PT$J>X1PL?T#7r*V^vV-!vfrin`Qywy>+} zCD{99NapF9-?s_53TATz=S!vhaJGOf38X!hL=kF;gSAJ(D)rA_hl(tfKPryUzkAIk z>k^p@7H5A-o{V^j+UYy%XN(h4Qo+=5rTnvg9$;-w`3Yf1ldW#AoV{FoIyZN#)gLuC zA!Z~P#}g?;_@2yEPwcl2$#*yCmyEA4haR1T^C1b)efos)dIty~o*^332nVz%uHNn+ zj|wo|20$~V;GDR07t^KKi4JYUw*N&#ISU00 z?9;ti7-o$o{TTO|gOTRJ|AG$HSG5cE%%)#jcnzlzDjd21> zNdD0FslEJ%REoSvHm^$ z$EdsgW!OpqP2rBTNUb%Bq=X;Zfcj{!dawsvc^8o7%^;ySX1YlJ{CpC!3}xJyGC`+2 zEF$cfE8LP|tyv;*yNm+XohQuS-N8DGkdhE*Y59N$lYxef3lQ07KJS$w9y0!5N!x)H z2y$+Y{XzHwn{q_K+AfXe^cb`~{4&xV#|vWD7QC)nFboRP9jCqv<%j?kCl=`G~7_ca8*`z?R;;^EIu$$j1o>Zz{n8_H3y zV;mVSFA-Bg*jSJ7oSN|NSgMKuq1L2>?^YDIhj>OxH-w}#_znCLb;^9z@nv6m&6m$^ zPdTD=HJyL}(stW`ip96_Y?Mic1d^yW0@y}fKIfD&P=*tzssEU;C`YjpisMlQ#^co~ zBtR&M%_3XxS#jO#`Y&)$x7YcL=Hj6q>!m8Jp*|F zxaaZ@z?#B^Z8>Ab!Zdnyjy-{>mNV#Ut^sF+t??f))B%4A%|^u^3ZiTkeDxc8-xM@i zZX2!fst!FK_YU9{$R;nucksE5?4%xhn0>7ZXW((_Ldk*8=^a(8C9Ig4CRg5Yfn44i z$duL4QM6I$RDOvJMp zf>=F~+hxaQSG;J#hWJU0|0>r75byw|O?HS31Az;(J-+BwN+RWlil5tKS>#bm&6}!- zFms^7(o@mYsyEtCjD1ojAF`gMklF)sP>^S3pKN9cCbB;8oV0+{h{`2}!E}~R8AJh* z>dGHUMAony*K;CF^>37puTZC>n09rgri3@GPZ~#)FQ*gsZ2TBdThu1QDCqA<*#9GG zG?+v8xPeqQFpnU(8BegYBWN)>tZPLbeS?zxMq?NR}_@$R=~RjcQnke z+Zv_+xS47JLLiC(4t+PzfwIaddl8RQ6;EDD_|~bR1!3?AY}V$yJNK6+Wfz0#3P99+ zlYk)C6T6^|cM{yS0kV5~D(vw>Q$c=B#x=kiW^uGIq#zs*;27zR->v01#v8P$AgOT^ zQ$)bYlk60(*#Xe?j*?7ED*J~0Ep&zMXPpnKcoBS(r8f8QSgS>2s`;RXGvg39LPyCn zDV(?rr5K-y*-xf+H#og3Z*Wen9g+-G#n*7om)4O3Fmhc-R4_mhI2uu+@ycs4pBYju zY|$=&k>2YKpb=VU-+Vf+DG*gMnHjekP~uGR!w!uF=XoxZm173#XX=B^jE{~69*w_D zBb>~!X~ZctQjEse)pVK2GA0*-NPmc?lWZ8>pd{~%?0#VxzBZd6u4s@Tt8$>NTCP%g zS5RG0(1hoT$57Bj16EHcPLY<9lG@-5UB)WJU{fnnQth(cx+$LvZ6iWrRE}?QRiL7C zcdEzhj0G#!G1PK-z)gx3U)%nUrLi{$lS^lU17OgdsPYgOza%7nStV1x(0F0{Q}6%; zNy%V8rsJ~|?93Ezw#u-0-hw`(4O>cnZRxt;TE{#h1SL(w6PZqC+u>t?R-n^3_^wzu zXkRI{jS?V@2w{W~r^qijM3YqNz?9Xi-cM*2n#L1~jzkfo-<&ca`~gA}UjiFLOhGNi zFE5oA;!MEmr@WD^$S7&N_Y!UQ{`0Ti*@^w6Z11rsGl}#bpH>j8byEx_5VUirRuEmv zbpW?Q8z5AZ@ypW0y5ZY0>{dcjq**+SYsxti=LDuLB5qo-Tp_{hW^|%Zt33H|g$`)~ zyg2fzyKU;la9*u+YGA$v`#6b*U6x=U#U(4COVxn^uYuI3Si4LY9AR}J?r=3jcAOeA z2vIGn7={NSzYq(JwzZo>X#>wfjE!*5=qsFfK}X5o<+PZ({_^u+{c_F&5laqw+5zne z6v2qJ*Ri}K5SB%(k`$rJs&fswxPUsV-Azz1lMu7E;* z5Aooj(vYAU?8S|S!inFq7e^i2xAjhz5!LMwJI4C`p!vW+&paf-?x#_n>*-jzW zTAfoRC={=0-GdOm48Y9p@4vLz9)+jJft0$-Yo#DjF*jPn9@n6WUTV%OzH?oY;p0)P z!y_#zj1?dUnvS2^4aSD_->CZ;SLXE5g7`x}0@PlpolpNz(5`(i_4#7lr zP6E)DJXauELGjGbYbZLvF>>O?+*O{;Ns-4XC-EoIJ3-f;8j(jdS1k>e(t^KLnia)-v!LXjhkQS7@D{F{Vr_B>A;A9lc^ACOB2paqnFF$Aj&$?1a; zIuoi6Q1>zL*Lk1$5t$$4XUpc8SkPwjq#Kpjd*%S~ntlge!zlQ=4J<#xh^*=3{tmTg zGq*YE&Hh#SN9XM76;_`6+_F;EI_-+{-9AWf!QZDny?-JKepM`Jz0n?SAAyJVbzgQq z7+6I5^@zi$ED$po=k60+SQV0~$O-0?gtV{x=pJ=Hmm9>m0T=5J)aTnfW|0sYussLk zT8*ryLaAJ&83}gGO)VVxUmj@+%-r0a?X9{=S#uxaEk-rxzJg)2iy%>Hkj|+LK(x5E z)ohpR{r&m^9H-Xv!htSU=SK%;PZ|tJZ{;{N0jTSaSb2CVSCB0z`XZBExPhgo{vGjj z{+|UQ&gxLG0aOWzNeBp_Ag$a z1zd=s;-#C0-5@8axX(i3#<690a%TUY-H8Rt;0bkJB@dv_tFu3$OK=Vfj2de% zjBa~KaLOwI_}CaUF?nR*gV4X17;y6G7~Rt#7&Kt%_Gwmw0gi8FbLDk0d~eD0*lPC~Wc)L?S*INbaTxLO zKW40B{?8C7oRN4DN1QGfGx{+-KkxFsUxoN&+oIgbX1eu$*HQtFsI9`0o25|$4xyF; z);rA6z%^>gRhYZ-!ki=+p~}#eC&4ThM8!PC9Au@3QtNtqIiO)pW~tVThWr>Sb*N5Y%jex0pVZI6P85%-6z&JZq(STbG{F}GD|k9-`a-JE6Gm{xd}(9+ zQ3`AzJeB!5u?icNo~2{}_hhN<_N7(SS{YzN=Ox_Ditbl+PNd`tT#1nU+ehpS&U5z- zH(Z>q1pkVVm_hJBloP%#HJdbb?u>2}k77|iW4iF0p4Wxl1}C~gd}P*E97=?Q=8X`t z9tY<>?GgwLUmp9OwoqUvAMy+x#=M$g--=W3HXC-xVq!Dw<0&F$FIs<`)lJmX?{-83 z5k`p4?+hX6q~~9VCRf>~L7=9Z0(0CQupFt_hPn%BR}<$dLa95CI#Z1e7(IPz>RdkY zX|3=XjS^fitkESrq{57Q)C6d7Mz&@OrSb~?9qmP)x{Y2Itx$Bl|@+U(N z^9ZO+Qo!?22G~(WMc>#b<1Whvw>oh zoWck0?kxn*Wtva{*gB@oI zRqr+_=WG>g0H|(Z7r-cNRblEzfaF>HtW|%cyJLOg@(pF04oYR@DH@_BKSni+6-U=H zR}Ss)C|7V&@Ck=^?M#Blx~Ytrii2)I&d88UZwFGD9GH8QMQjvnwzg?4v`sRYX!3w1CSRDDZAY+TLo( zJgMBGj|k&tt5R)27iNWuR8?pJcyH|P`Mi+QDzx=wshl)I0-LF-O4q^>{YAAV&Wk!7 zYW2!0VSHk;&&{nYDpSTRx(6D?;aKFYNvwg?DZ~aFN4rBTS{2Yms2q3SnJ{fW`b>c@ zLyz|{ps%(`penkK9P;jAn47yTz&Xu;=l3g&n6!IwiRw-n0MI{C&(LI+XMbvGD&u|- zsr)j@c^n-jq)t$=Cj_~!=ByH$%Fahx4ve-N=fRh|y4)|9g5MEIbG=$K4+a@Tpylqx zL!kJoB*)8bUM!hmwi|~`bvHR}7a~o7;e-XGMe6fsqT=$X?-~Xq;yD@&6;u8Qk4y}& z1)4!#bC!{|LC#FK06Sh#w3-Y&A!4hLTVg%M9YoEqc^2kbt#deDL(5N^<-AV8>~x~` zS!LDH>vJn_+NEK(7#bkC(8+@f&6%q@gxR3sS!5jns$ZLu2j#z0ihF#D)_gFq4+NWC z2@^!hlT~_fnd2_4(bqOtSUod z14HzelVi8w$yW4FryMGzd0XY94wS-ekTDC7vDnfwe{ZWdz2lf1GGE_3j+ub zL($o9-?!d?a*wt@q$%%I)d%q4+|UMXu9&kECnJ19=)4IFe8`4HBM0j8q3a}%udq392h01o2XCJplsN#s#)XF zwL4^E2`^XTKGFy44p5qW-&q>Pv6;@AS&i1F;#VYuzhZ z#dH{CqG84m7G)R;9Wa-0^wHuGcs9mu!FSNQl@{H(eR$npUJ|xKuLUQf7&HFC++qHH z!V3+sv08>Zd%a$Z2wWcko7%)$#Asb`LY+<8XV6Ox=-B%N6VSpYkW78@Q!TWq$A2e- z@=!%726=BKP$dDoo&|{4gs8)%acNI&blqQTeV`o+)B7bbW3a5iyx#n#&R;nlc4@11 zfks$s`0yqNJ`k5;kgF>$ha|sllS*5P!|r~K@`V;r!N3%j4SyRZG**-h>7(j4??XKI zbrceD>u-?P$~A*hb^V2X9>p;hVJ)RF0lofy2cg&RqRA`pVgG7sZqBZn{$Ph zC@U7sL12W@d98 zDbBZfp3M6u|3e?1VJf!nmX3kyv9zr5$HAss*Lzd z$LF*X&@B)Hm)OgZiO<*3*3ou^g^z1(cYA$9M_*m7f|640_%t$joyQd{TWV;ubflDw zT*zt!Eqc*8;DLGB#3V6z?4cmKJAt-V+|JgKO%4~Wy&=LbVOm&z@%wO%DpFJ_DH;yA zumk5gt;|vP*@m*uN?Z2WTk){_MpgvkZ`x3K5F6R#U0`ZFpZm+vJ+X_E$5w5sO;G$T zLJfd{y<*w94pVhmQJyK|jJeRTeN)oK$#7RNxuS&(!hu@$z?4n93A;)qZsyQ*&mmnR z{JIHCfeiQ}{g?bz7tzgtqTCdINLeA+ffsE|YVbRWM>YqRxg?H?;d31PVZx^Ek!2H3 zD41Bo0M5e&PvUu4FI%32Unki#a$FX!iUkhF12%kJL*s-uBn=j33JMW=AWODd88!w& zqM_R~eGKfb8*|zbOgji(GX`LbM?mA=h5=neN1-DII$VYX3#nE_jVAOh&IK3;)bN(` zQJ=q<5hj%SeN&uxbF64*ziKwK+Bd<)VOvhVAZ!4YClV8wu$&DWROj4~T-g z-s?Pa0lb9e%Q({1xz>+-@8>eT-+}S6$;w9o!qRw6=J*Tx1cmLMY0Vgm^91Tsg2V@V zK)+Z$@nsi`>&d#XI>|FWmH*>sP;15web;ORVi`MO8*|dblVJSmsuEMw|}Jw=7lszvD#z-iuItyCmKZ2aDu!_}6jjlTcu0 z;_^VN__)0uzh>WBUTVFX+jNr!_#tnpuMR9w?AF|sKBX|)*M=)FCl|<4+-ewjJ|*KF zzWYR{SJW^DL~;3gdNbb1MJ6Sddy^YSs11iw^RqsGDk!{)YUtp&ONHCZCCLe9;rfo2 z#ab)3a@;wRRYwVvIGiR4?xgxh%!y`IgedJ=abrncd79Aq;eS-qW zdlHKFejiF*YrXivd>yx2x^#H5N`EUUG{A_SU=(a=tO{(UI*W6MT=T$D0$~F9maVq( zn%a;~1sBnx+hP0k2`HlR6FZ@5iJ!&yO~~}XXX{{#8PgItD!DQW6fYk3tUaK}&FjHL zxBv9>2{BO>PJG&$@~n9M*ebbd-J2u~>BiBXF;rqvjb|~#DT$Vbtp9@*z5ED15zQvN z*OfyvYk0rwJk8HSvEH05FB{4`rTGKG1YLY1#_amerS`OU@!@eaSH^euT#vZ~mT4VU zxO9$R(zK>)+y2XpcEVU4hPy1Q({ovKcBxWr^KkBKCTFiJH+tNx_xq}_@`-$Yt`MzO zA5Es3>{P$?dHn}Wy2&X^l{@XcHd6K(eo z_2}D~04yD*=wvPXQbvQIC?4q^N+CCXkLciF!TAZ$%*2YB_oR?^t_OH+nr-5sKsN}( z`N89i5$f#)tsI%emL-RAynx0?xjrtQu^N};lq^K}jD1_)(#8+DdccgAC5IC80E5k^ zc$W!vG_&MNAUv-3nu3&rOYuMxLk1cL&Hbems0L<@7(I`0mZqX z=?L8d!eb5BH&tiYjUybDfrX5&ea3VU#SNbTcBYLc{~ zT%u)0Z0#9Nmrx@$`x4Vkf5b!>PQvo^GE&V4w$s?^>{1$Cp@`?i&3x8Dd3(&AsFsS( z%{2bt9n?{*6tdwIq{f&!BnXMZFqlEr<<|!#0>aqzK40r%h*f8;q$lj^E)B2E*rS%g zt5vwSEHy5w%cgxHKa4KuN4P>p&cqd%cC;P3>umMKrq`~5e@2P94%*qBWF&@Eo7r66 zOw9v!z;^RwHhWXIFj?Z-LQh1U1fOX-AV)u-SDjf?N877-XNM%WekeN11L>Aj?b(lz9NUP@9-%(d;)UCBt-7IAf> zb!GfS@@{eM`?~q>XIbZMrR8R%p?c2gdy?zZIU0jAHXuI57f-kqys8zYJ$GvK&OsEO zN!tb15xTb6$71{Z0PRZn&`1dG4Ripp^Y?WH4La&+)yETC_FQzm7NoJPJdTTQ6oT_; z0lg#5Bgqq$nK{zi8)G#YT(F<3HypT*sOB_R7*IyXNX_3ptGw{v!w17vCSZNtZ2XtX z_a?+Hng$lAI(F!6GT}5n!N$`})@^QR{C;k585L@t7bom-JpO8e;is+UVw==8O zXf`#)Kf!~*3pjxAd$OMp*@Md8%&O>%0!GQP>jYP6bp^XzPg&5xl^YoBZP_N0I96WXh04WPDpN_u0*RFte67gX3QfsG%TzpW z8Jav}+TxDTq>L)eS+bjEl-Qs=SWTe&lNjKDw3n>)>kly4&@EQVR*nyYoPb$XM&@j; zSp)VlQxUbvU%e(LdO{*&eGIjzW=*@u>|kx6>#q}Bh%#Rw?aT2Op8 zo)Wo8H!)lIN!Y@G8A8$AcAMo%zuUFG_m8x8pIOUj-A$6^ zg&xTe(dGT1Gy@LbB8-Zjx=5_c+;U-$ZAPh&@oV|jZ#jSp;rap+;o?|X`;I7j>o9fu zZSeeENPxkXXWq?MgimwORF7moctS#@Lm)7`PwUxeH4&%CLcjxi(;qi~pC=a6SHYLS z4-9fIBwvF1oYkD;1Rx>SEw=JkA8Hjttg8_4o-jR^%y3y_>ZCba`T+=DsOqFaTTWu+ z_&~U1^#?+&8Yd$Gw5Q(?JjL_*DZFDqafDO{Q)I(zmKR!MmYl7lzXbiGsQ^&oB?3T& zL$J5m(i3xun&qEQTDf8oBr@_ic?=QmP^E;(V6j9 zz~som*^iIrlJ@k2?<^vW3hAOP%7tu*2M548R;TEZ z^l!?x1OusK%~bvWfN`(}PA^}}0f*T}yqoP3496veJS>9pcpG9TkhZMP?++XLY-CyW z5W5(!-1ckkidGv485B9iwm0D=gEA4(+oEOb!^dEDf;86q8;(I1ciA0V327Y0XS>;P zkG)!$ngO6I9qB0i0&JK4)XK`CS7JCLvQussU^xIzF{I(9t+LaVjHYxxu1|l7sT9?K zt;C{lYY@z=qs%JX{^e#fL^kN0R(O>|;kdMP)cx$crfoJz)ss3DzS)$9BXFG~Aa-fJ zl%#(CGFc4olBNE*hH)&478@ndkzva+9P{YirMqv~!nIoo90jyry~wi9Ty19S;fMy_ z5+tsvMCQQ<1V<~O#D#=Kk3T6klsh`>En8n2XHIK11q0Q;n=zT${R^8;-$2E$!;6C8 zBvsDGe6>RapO1ArhLNZgOG&&wajT2wBnvC=#fi*|Td%QAK+NAV2ogoIz;W1Ryc4J~ z>5>9Ard=6{(>AzSz{CcgGUfv)9`<=J12G_OexkdL1V3$R1q@%Tp-?7D!!Up;f@4v0 zrX?~r1No-t0M#5XOQm(#r!ak56;W1#)xa*K?YU-a!C)mDU+k_v5uiLxllQbG;5tyIZ9)CjPtb(u_={N8x@S7@Bu1u@|r!bjcZJ{D>H4SOw z4&zGao4%$rv9j9@qW=1j-_Gmtt@*VwAC|(p*-s40*4L%Lu0;>^(3%_-L}ia(3d*IJ zDk?y1Aq7mPjBlV=p~62HYdTB2F8%4^ech~UqaH0fu9cy(y5*nD3c>9Tuq0c}gCX01 z(ly)Akuh7KT%5ta)XUq;n?IHnEH9PSy{J~4>4rk0L3Xe@J9^^H!ne%`T-08O$6!e_bJxgVH<*ZE zaYDRdSN##JA10onH)?fPjQs!7|W4b)S$9rS>&rH?iHaIpie+?6c3j!4Trj7IXPok;CdzldM_iH2s+KXr1hb6DsX}wM#h%%b-Xn zG<1Sba$d0gDEKtmhZPG05Nl_fA=fxil<RpV>84Xb&iL8ivC_s~ShMGiGd@3`wIaWiEtF_&-0UZb z=xRo>t)UIHaR57`o}7Q?WUZLG51WG!02GG;Vux>x4v3em3*;h;JpMxoFc{Y`>YF)G z_;<98e=?{vZfReRQ4Sg6nN@M0SD-kbySWjLO^#gdD45XFY;u&!aP z4Hgz3&yiWO<3H*A$g_+TL{+8d+ZPbuW3x9`yRzFrO`W;&k<4`+0??Y-__-}3wALC- zm(7=KF=8K@?e8btj_*q6M=wPm@TuBwXBDeD?uIG~@EQ0-!%%=Q9t@W^VJP< zJ8U0bs_?6Su6i|?J5rx`e-#N+w@lGsTgEHMJN(Zj4&bt=R{b0l|BDGsDLOD}Wucm{ z%*a(07CR#s)=OW`8$?Zi`5Q{lNKH6@Y$f3KR%rHiSsl_jR{#B)uzi!lxL=ca_So6{ zjXO-7!z`-Nf_L@??BWd$B%N>xuUF6uXuF)q*n|9z0{!BN-b_Y>Z&Euhpb8e@R1olr z@6Zg+p^l^iiLf(mfWew^rOq2}bRjO}v#PCj`eaW?s>@v&Vzf7^o&M2_7OC6xEb*iN zRrmr5dsNwI~tOv&he7aYok$$?)i1d8P?h z2Gz8&CQIZh|A4AcG}ibWg&JRAs&bv~I?ghJk5rxx>%YocN1ol~9m39(_6jma)>H9g^`biCdebu=;>xmoK$8h8{&bbb*2uh^ z$K;fwgRF4VROI@2Kw^_S^k9vzAQ(Fw71l6hMNG&8u)G>9uLxpusGYv=vi;5;FsKH$ zXNA{;D@~qGZm>}-n`qeqHkl$8(+o^P>3RH10f-l4|6W&yxev#bGEKqYCAw?L4HZB@ z0Hn$isT*<67TNGYzvPPXz*u~?+9hiI^hW+|xxfB1IOHY43_dp_o<(hpMjcTZ0*HTc zmIM|Lzsae}VHYXe9GTjY0$1xhkw(f(&?H26Zb2{#P?p>b(tVUiN}8XL;0w|`F(RZY zRKBzOmT_uNras{Kql!ci8?XJM{XLuI-}8UZhgts{&0k$=%a#6Y{MD>R-A z^rpHWjovx@9hT?4Q&{Sl^HUo=x$nr_h*PD4n%<5hLrs`29Y$)oZ`P2FMGNHxjhQY; zV9d>El;MLXsg8t6S1dmjjCU#Lqf?L(TILgLRQH&7iIa7*GeNlDJ!SHS% z{AR2Xt9ONBloHuG$^H_@72{=%mDJeYM*n^uuHY)DKyPx}?$UjAKC0+J2KA{yp-Q=6=OX1uj<5ipB=SH>5G?8^EyRO7 zYc-x8@GOcAl!4Pin*h&P8Assl$PAnieM95~K$8fTGtygH@4jiHSU1G@u#GY5m~6S8 z7Lo&Xs9#9-@~+rf{+0q8UH}OE>3AKjq>=+@07on|)scEAgqi3HW4FPT{EvS%wu;7G zVKW5$cTG^Rb`S)E@6tg0UHwvEAP4}IkDjrx?eg?qA?aeDFnP>;0svOTYKkX)K=FX0 zGbHzYzSqPO=k=8gJ^e{opJ2&MU7leDhsb;e`#uX8apsZba_!>3`~1ft0nAk~J_wo! zo(LrfH^TB!9KmKtF8O#0_H7ZEC>!E{&&OCfNS})&Q=Z!6v==aO-_}+gxej+uH!>Mv z<0QT)Ap9|h#Scdfug{6e24{H9V;R#AGETys(Cz$Kk+R5#+2|MoJMRLj?stP3*+@&p zv+)v)9i5@|ztreoDx)l>2r9Lg-}fJ3dqu;N+A_Fxl{gt>CaQNuVlQE{;uoDPEYF7^ zRqwf~9D^n|um)J|W1}LrDh|ZZ*Cb!8<{8T17PDMT;%qK|u+o%A@>qvVh^i+-Dveq9 z@HjXsFkp>zZpPf<8Msv@T`R#%$&cQi9#%d}bz9oC@x5HfdYbE@Wvine3Mmgv@xc=D zd!k8ZyO*(d4!k(fn2HSA(w`XDVcm~<3=_Ud_JCK4y>WXaQL?> z`nxumWB=aYvq4LHJ_cmLw4uBa=R4B?2YWD!LndGWK^NS!VR#(W+PokW%NZJL^^#fS z8%;?Wi#bYA!47H$P^E%-9d@A~N>p!yN4HVskAo^!%^kSx4M?HRgVF4VhAWvL;gdEIPgZ*kl4h6!v6!ksbbUv8S6uJ8PJQ< zOax9QSIh)?%?+`{`W!7(|Gble_Gn50q0YOz?g3%WW9|=M`t0vSto#*pC@*FyhsPQ@ z2rb^Oo6oSGjJVt&cNuN21 zI=1Rwzj+BeJoi34slE#zD?3YD=Lq`;GAL*FA#@ zAW~TC7wiCq+yV{#M1}22=C!RKN6t*DwO1#9PVMXI=VxOXCsF0?RUt0FD%Nz1nwPk_ zx|_V6KK~OU+<&{_%SR?EjD%EOm~H%z+r!7_k)1opboAkgRb?5rX(`ujIrzbfSw)z@ zA&X|Il$4=`_aQ4`y-u(%*pffFrsCZesr7Ft@=wn)OYGy zp09}gw(VaT08Nl^3i(t7Lm}A3226CN;zEp+5z?7^G5e@{t(Dk zX(`if@l@N8@oPlOAxm{)$&WF8OLa!9By5LFy6R*~u>KI(CI6a~lM%?2#g|)Nv;DhI zRvGJtS27pZ^Z7rr|2>>E(~(G~8^HXTet%iqJRBX}Ed4MM9l;9Qfw#MrlMnrecg;L~ zXnSH|U2XM3FKJ(m%3Vx~hAyA^c+LOV`OL1r+4ZY#r^_9Ezuu<2{k#${e)rvSZ@%wD zP7ccT`jpnY7XPv%$H$8)nee>WQe2afaRd~M^5*{XQ(lIr~CK!&4EkrN<41)yEkm` zJI-%+n_&L#U zx7%w=FFW?p&u(QSguc}6){gJHEhonhBU%JPZ&zZ)nD^L~KLioys;8enEeafd+$Eo) zymbJ!_2FCB8FQSk2jAYQN3Vw4U!ad5kHKIdkhd&^@LzURZ2}$H@d7hYp*+M#KNGEu z3d@L*7~(boNYI5)00NDGpx`4noFfk)6tFD3w1x^SC>kP7-@mP2x3&W+*kFGhpw?4D zV_%F_f&c`1uPtTJJncwbqQJAb0kv!ASB0hQ-IV(C&tC*mD`)-dM?Rp0K5Yv@KVTtY z;Ztr@+TNbt@8^HtvnUMqo?uw=8t=HhHcRFM63?VfX>SXh!)KVGVP*Q=f4h>P`&W_f zn@O+CDf9`~mWO_?(sK9e@q1-W4|8Cc3fgL9e6X~Cf^(($g#ECVjxU7236eCyDR3))Di0 Q4ZKz*`7PSY&m|oGAIDGj{{R30 literal 0 HcmV?d00001 diff --git a/public/fonts/Vazir-Medium.woff2 b/public/fonts/Vazir-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b6bdfa97689f95dfebb363333ae81f9787a7bc0e GIT binary patch literal 43972 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

>nvWsP;yF#nR}$de~g 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%0D#(2EzwWwa{~B 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 literal 0 HcmV?d00001 diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..52bf47d --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,4 @@ +// App.tsx is no longer the entry point. +// Routing is handled by src/app/router.tsx → src/main.tsx +// This file is kept as a placeholder. +export default function App() { return null } diff --git a/src/app/layout/Footer.tsx b/src/app/layout/Footer.tsx new file mode 100644 index 0000000..7c9018b --- /dev/null +++ b/src/app/layout/Footer.tsx @@ -0,0 +1,196 @@ +import { useState } from 'react' + +function SocialIcon({ label }: { label: string }) { + const [hovered, setHovered] = useState(false) + return ( +

+ ) +} + +function FooterLink({ href, label }: { href: string; label: string }) { + const [hovered, setHovered] = useState(false) + return ( +
  • + setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={{ + fontSize: 13, + color: hovered ? '#fff' : 'rgba(255,255,255,0.55)', + textDecoration: 'none', + cursor: 'pointer', + transition: 'color 150ms', + display: 'inline-block', + lineHeight: 1.4, + }} + > + {label} + +
  • + ) +} + +const COLUMNS = [ + { + heading: 'گزارش‌ها', + links: [ + { label: 'گزارش‌های فصلی', href: '#' }, + { label: 'Flash Reports', href: '#' }, + { label: 'گزارش‌های ریسک', href: '#' }, + { label: 'گزارش رایگان', href: '#' }, + { label: 'آرشیو کامل', href: '#' }, + ], + }, + { + heading: 'اندیشکده', + links: [ + { label: 'درباره ما', href: '#' }, + { label: 'تیم تحریریه', href: '#' }, + { label: 'اشتراک سازمانی', href: '#' }, + { label: 'همکاری با ما', href: '#' }, + { label: 'تماس', href: '#' }, + ], + }, + { + heading: 'منابع', + links: [ + { label: 'داشبورد بازار', href: '#' }, + { label: 'رویدادها', href: '#' }, + { label: 'اسکنر جهانی', href: '#' }, + { label: 'خبرنامه', href: '#' }, + { label: 'درگاه پرداخت', href: '#' }, + ], + }, +] + +export function Footer() { + return ( +
    + {/* TOP GRID */} +
    +
    + {/* Brand */} +
    +
    + اندیشکده فولاد ایران +
    +
    + IRAN STEEL POLICY INSTITUTE +
    +

    + مرکز مستقل تحلیل راهبردی و سیاست‌گذاری صنعت فولاد و فلزات کشور +

    +
    +
    تهران · خیابان ولیعصر
    +
    info@iransteel.ir
    +
    ۰۲۱–۸۸۱۲۳۴۵۶
    +
    +
    + + + + +
    +
    + + {/* Dividers + link columns */} + {COLUMNS.map((col, i) => ( + <> + +
    + + {/* BOTTOM ROW */} +
    + © ۱۴۰۳ اندیشکده فولاد ایران — تمام حقوق محفوظ است +
    + {['حریم خصوصی', 'شرایط استفاده', 'درگاه پرداخت', 'نقشه سایت'].map(l => ( + + {l} + + ))} +
    +
    +
    + ) +} diff --git a/src/app/layout/Header.tsx b/src/app/layout/Header.tsx new file mode 100644 index 0000000..fc57a07 --- /dev/null +++ b/src/app/layout/Header.tsx @@ -0,0 +1,815 @@ +import { useState, useEffect, useRef } from 'react' +import type { CSSProperties } from 'react' +import { NavLink } from 'react-router-dom' +import { Search, Menu, X } from 'lucide-react' +import { motion, AnimatePresence } from 'framer-motion' + +/* ───────────────────────────────────────────────────────── + DESIGN TOKENS (mirrors CSS variables for inline styles) +───────────────────────────────────────────────────────── */ +const T = { + paper: 'var(--paper)', + paper2: 'var(--paper-2)', + ink: 'var(--ink)', + ink2: 'var(--ink-2)', + ink3: 'var(--ink-3)', + ink4: 'var(--ink-4)', + ink5: 'var(--ink-5)', + ruleThin: 'var(--rule-thin)', + red: 'var(--red)', +} as const + +/* ───────────────────────────────────────────────────────── + DATA +───────────────────────────────────────────────────────── */ +const NAV_ITEMS = [ + { label: 'گزارش‌ها', to: '/reports' }, + { label: 'گزارش ویژه', to: '/special' }, + { label: 'ریسک‌ها', to: '/risks' }, + { label: 'رویدادها', to: '/events' }, + { label: 'اسکنر جهانی', to: '/scanner' }, + { label: 'تیم تحریریه', to: '/team' }, + { label: 'داشبورد بازار', to: '/market' }, + { label: 'آرشیو', to: '/archive' }, +] + +const COMPACT_NAV = [ + { label: 'گزارش‌ها', to: '/reports' }, + { label: 'بازار', to: '/market' }, + { label: 'رویدادها', to: '/events' }, + { label: 'ریسک', to: '/risks' }, +] + +const META_LEFT = ['درباره ما', 'کارشناسان', 'همکاری', 'رسانه'] + +/* ───────────────────────────────────────────────────────── + HELPERS +───────────────────────────────────────────────────────── */ + +/** Social icon box */ +function SocialIcon({ label, href }: { label: string; href: string }) { + const [hovered, setHovered] = useState(false) + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {label} + + ) +} + +/** Full nav link (expanded navbar) */ +function FullNavItem({ + to, + label, + isLast, +}: { + to: string + label: string + isLast: boolean +}) { + const [hovered, setHovered] = useState(false) + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={({ isActive }: { isActive: boolean }): CSSProperties => ({ + padding: '12px 20px', + fontSize: 12, + fontWeight: 600, + color: isActive || hovered ? T.paper : T.ink, + background: isActive ? T.red : hovered ? T.ink : 'transparent', + textDecoration: 'none', + borderRight: !isLast ? `1px solid ${T.ruleThin}` : 'none', + display: 'flex', + alignItems: 'center', + transition: 'background 150ms, color 150ms', + whiteSpace: 'nowrap', + letterSpacing: '0.2px', + })} + > + {label} + + ) +} + +/** Compact nav link */ +function CompactNavItem({ + to, + label, + isFirst, +}: { + to: string + label: string + isFirst: boolean +}) { + const [hovered, setHovered] = useState(false) + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={({ isActive }: { isActive: boolean }): CSSProperties => ({ + fontSize: 12, + fontWeight: 600, + color: isActive || hovered ? T.paper : T.ink, + background: isActive ? T.ink : hovered ? T.paper2 : 'transparent', + textDecoration: 'none', + padding: '0 14px', + height: 56, + display: 'flex', + alignItems: 'center', + borderRight: `1px solid ${T.ruleThin}`, + borderLeft: isFirst ? `1px solid ${T.ruleThin}` : 'none', + whiteSpace: 'nowrap', + transition: 'background 120ms, color 120ms', + })} + > + {label} + + ) +} + +/** Drawer nav link */ +function DrawerNavItem({ + to, + label, + onClose, +}: { + to: string + label: string + onClose: () => void +}) { + const [hovered, setHovered] = useState(false) + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={({ isActive }: { isActive: boolean }): CSSProperties => ({ + display: 'block', + padding: '13px 20px', + fontSize: 14, + fontWeight: 600, + color: isActive || hovered ? T.paper : T.ink, + background: isActive ? T.ink : hovered ? T.paper2 : 'transparent', + textDecoration: 'none', + borderBottom: `1px solid ${T.ruleThin}`, + transition: 'background 120ms, color 120ms', + })} + > + {label} + + ) +} + +/* ───────────────────────────────────────────────────────── + MAIN COMPONENT +───────────────────────────────────────────────────────── */ +export default function Header() { + const [compact, setCompact] = useState(false) + const [mobileOpen, setMobileOpen] = useState(false) + const [isMobile, setIsMobile] = useState(false) + const searchRef = useRef(null) + + /* scroll listener */ + useEffect(() => { + const onScroll = () => setCompact(window.scrollY > 80) + window.addEventListener('scroll', onScroll, { passive: true }) + return () => window.removeEventListener('scroll', onScroll) + }, []) + + /* viewport listener */ + useEffect(() => { + const mq = window.matchMedia('(max-width: 767px)') + const handler = (e: MediaQueryListEvent | MediaQueryList) => setIsMobile(e.matches) + handler(mq) + mq.addEventListener('change', handler) + return () => mq.removeEventListener('change', handler) + }, []) + + /* body scroll lock */ + useEffect(() => { + document.body.style.overflow = mobileOpen ? 'hidden' : '' + return () => { document.body.style.overflow = '' } + }, [mobileOpen]) + + const showCompact = compact || isMobile + + return ( +
    + {/* ════════════════════════════════════════════ + EXPANDED STATE + ════════════════════════════════════════════ */} + + {!showCompact && ( + + + {/* ── TOP META BAR ─────────────────────────── */} +
    + {/* Right: login / language */} + + + {/* Center: date */} + + شنبه ۲۱ بهمن ۱۴۰۳ · دوره دوازدهم + + + {/* Left: secondary nav */} + +
    + + {/* ── MASTHEAD MAIN ────────────────────────── */} +
    + {/* Left col */} +
    +
    +

    + تحلیل مستقل · سیاست‌گذاری +

    +

    + ۲۸۰ گزارش منتشرشده · ۴۵ متخصص +

    +
    +
    + + + +
    +
    + + {/* Center col */} +
    +

    + اندیشکده فولاد ایران +

    + +

    + IRAN STEEL POLICY INSTITUTE +

    +
    + + {/* Right col */} +
    +
    + +
    +
    + اشتراک سازمانی + ورود +
    +
    +
    + + {/* ── NAV BAR ──────────────────────────────── */} + +
    + )} +
    + + {/* ════════════════════════════════════════════ + COMPACT STATE + ════════════════════════════════════════════ */} + + {showCompact && ( + +
    + {/* Brand */} +
    + + اندیشکده فولاد ایران + + + IRAN STEEL POLICY INSTITUTE + +
    + + {/* Desktop compact nav */} + {!isMobile ? ( + + ) : ( + /* Mobile hamburger */ + + )} +
    +
    + )} +
    + + {/* ════════════════════════════════════════════ + MOBILE DRAWER + ════════════════════════════════════════════ */} + + {mobileOpen && ( + <> + {/* Overlay */} + setMobileOpen(false)} + style={{ + position: 'fixed', + inset: 0, + background: 'rgba(26,23,18,0.55)', + zIndex: 100, + }} + /> + + {/* Drawer panel */} + + {/* Drawer header */} +
    + + اندیشکده فولاد ایران + + +
    + + {/* Nav list */} + + + {/* Footer CTAs */} +
    + اشتراک سازمانی + ورود +
    + {META_LEFT.map((item) => ( + + {item} + + ))} +
    +
    +
    + + )} +
    +
    + ) +} + +/* ───────────────────────────────────────────────────────── + MICRO BUTTON COMPONENTS (hover via useState — clean) +───────────────────────────────────────────────────────── */ +function FilledButton({ + children, + style: extraStyle, +}: { + children: React.ReactNode + style?: CSSProperties +}) { + const [hovered, setHovered] = useState(false) + return ( + + ) +} + +function OutlineButton({ + children, + style: extraStyle, +}: { + children: React.ReactNode + style?: CSSProperties +}) { + const [hovered, setHovered] = useState(false) + return ( + + ) +} + +function RedCtaButton({ + children, + style: extraStyle, +}: { + children: React.ReactNode + style?: CSSProperties +}) { + const [hovered, setHovered] = useState(false) + return ( + + ) +} diff --git a/src/app/layout/MarketStrip.tsx b/src/app/layout/MarketStrip.tsx new file mode 100644 index 0000000..cf65c9e --- /dev/null +++ b/src/app/layout/MarketStrip.tsx @@ -0,0 +1,135 @@ +import { marketPrices } from '@/data/market'; +import type { MarketPrice } from '@/data/market'; + +function formatValue(item: MarketPrice): string { + return item.value.toLocaleString('fa-IR'); +} + +function formatChange(item: MarketPrice): string { + const abs = Math.abs(item.change).toLocaleString('fa-IR'); + return `${abs} (${Math.abs(item.changePercent).toFixed(1)}٪)`; +} + +function TickerItem({ item }: { item: MarketPrice }) { + const changeColor = + item.trend === 'up' + ? '#7dbf8a' + : item.trend === 'down' + ? '#e07070' + : 'rgba(255,255,255,0.5)'; + + const arrow = + item.trend === 'up' ? '↑' : item.trend === 'down' ? '↓' : '—'; + + return ( + + + {item.name} + + + {formatValue(item)}{' '} + + {item.unit} + + + + {arrow} {formatChange(item)} + + + ); +} + +export function MarketStrip() { + return ( +
    + {/* Live tag */} +
    + بازار زنده +
    + + {/* Ticker area */} +
    +
    + {/* Original set */} + {marketPrices.map((item, i) => ( + + ))} + {/* Duplicate for seamless loop */} + {marketPrices.map((item, i) => ( + + ))} +
    +
    +
    + ); +} diff --git a/src/app/layout/RootLayout.tsx b/src/app/layout/RootLayout.tsx new file mode 100644 index 0000000..7b1718b --- /dev/null +++ b/src/app/layout/RootLayout.tsx @@ -0,0 +1,17 @@ +import { Outlet } from 'react-router-dom' +import Header from './Header' +import { Footer } from './Footer' +import { MarketStrip } from './MarketStrip' + +export default function RootLayout() { + return ( +
    +
    + +
    + +
    +
    +
    + ) +} diff --git a/src/app/router.tsx b/src/app/router.tsx new file mode 100644 index 0000000..9f07893 --- /dev/null +++ b/src/app/router.tsx @@ -0,0 +1,33 @@ +import { createBrowserRouter } from 'react-router-dom' +import RootLayout from './layout/RootLayout' +import Home from '@/pages/Home/Home' +import Reports from '@/pages/Reports/Reports' +import ReportDetail from '@/pages/ReportDetail/ReportDetail' +import Market from '@/pages/Market/Market' +import Subscribe from '@/pages/Subscribe/Subscribe' +import Events from '@/pages/Events/Events' +import Team from '@/pages/Team/Team' +import Archive from '@/pages/Archive/Archive' +import Special from '@/pages/Special/Special' +import Risks from '@/pages/Risks/Risks' +import Scanner from '@/pages/Scanner/Scanner' + +export const router = createBrowserRouter([ + { + path: '/', + element: , + children: [ + { index: true, element: }, + { path: 'reports', element: }, + { path: 'reports/:id', element: }, + { path: 'market', element: }, + { path: 'subscribe', element: }, + { path: 'events', element: }, + { path: 'team', element: }, + { path: 'archive', element: }, + { path: 'special', element: }, + { path: 'risks', element: }, + { path: 'scanner', element: }, + ], + }, +]) diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/ui/Badge.tsx b/src/components/ui/Badge.tsx new file mode 100644 index 0000000..3f1cff3 --- /dev/null +++ b/src/components/ui/Badge.tsx @@ -0,0 +1,56 @@ + +type BadgeVariant = 'default' | 'red' | 'amber' | 'green' | 'outline'; + +interface BadgeProps { + children: React.ReactNode; + variant?: BadgeVariant; + className?: string; +} + +const variantStyles: Record = { + default: { + backgroundColor: 'var(--ink)', + color: 'var(--paper)', + border: '1px solid var(--ink)', + }, + red: { + backgroundColor: 'var(--red)', + color: 'var(--paper)', + border: '1px solid var(--red)', + }, + amber: { + backgroundColor: 'var(--amber)', + color: 'var(--ink)', + border: '1px solid var(--amber)', + }, + green: { + backgroundColor: 'var(--green-ink)', + color: 'var(--paper)', + border: '1px solid var(--green-ink)', + }, + outline: { + backgroundColor: 'transparent', + color: 'var(--ink)', + border: '1px solid var(--ink)', + }, +}; + +export function Badge({ children, variant = 'default', className = '' }: BadgeProps) { + return ( + + {children} + + ); +} diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx new file mode 100644 index 0000000..f35eda6 --- /dev/null +++ b/src/components/ui/Button.tsx @@ -0,0 +1,111 @@ +import { useState } from 'react' +import type { CSSProperties, ReactNode, MouseEvent } from 'react' + +type ButtonVariant = 'filled' | 'outline' | 'paper' | 'ghost'; +type ButtonSize = 'sm' | 'md' | 'lg'; + +interface ButtonProps { + children: ReactNode; + variant?: ButtonVariant; + size?: ButtonSize; + className?: string; + onClick?: (e: MouseEvent) => void; + type?: 'button' | 'submit' | 'reset'; + disabled?: boolean; + asChild?: boolean; +} + +const sizeStyles: Record = { + sm: { padding: '9px 20px', fontSize: '9px' }, + md: { padding: '11px 24px', fontSize: '11px' }, + lg: { padding: '12px 28px', fontSize: '12px' }, +}; + +const baseStyle: CSSProperties = { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + gap: '6px', + borderRadius: 0, + fontFamily: 'Vazir, sans-serif', + fontWeight: 700, + letterSpacing: '0.5px', + textTransform: 'uppercase', + cursor: 'pointer', + transition: 'background-color 200ms, color 200ms, border-color 200ms', + outline: 'none', + border: '1px solid transparent', + whiteSpace: 'nowrap', +}; + +const variantBase: Record = { + filled: { + backgroundColor: 'var(--ink)', + color: 'var(--paper)', + borderColor: 'var(--ink)', + }, + outline: { + backgroundColor: 'transparent', + color: 'var(--ink)', + borderColor: 'var(--ink)', + }, + paper: { + backgroundColor: 'var(--paper)', + color: 'var(--ink)', + borderColor: 'var(--paper)', + }, + ghost: { + backgroundColor: 'transparent', + color: 'var(--ink)', + borderColor: 'transparent', + }, +}; + +export function Button({ + children, + variant = 'filled', + size = 'md', + className = '', + onClick, + type = 'button', + disabled = false, +}: ButtonProps) { + const [hovered, setHovered] = useState(false); + + const getHoverStyle = (): CSSProperties => { + if (!hovered || disabled) return {}; + switch (variant) { + case 'filled': + return { backgroundColor: 'var(--ink-2)' }; + case 'outline': + return { backgroundColor: 'var(--ink)', color: 'var(--paper)' }; + case 'paper': + return { backgroundColor: 'var(--paper-2)' }; + case 'ghost': + return { backgroundColor: 'var(--paper-2)' }; + default: + return {}; + } + }; + + return ( + + ); +} diff --git a/src/components/ui/PullQuote.tsx b/src/components/ui/PullQuote.tsx new file mode 100644 index 0000000..4fe9e09 --- /dev/null +++ b/src/components/ui/PullQuote.tsx @@ -0,0 +1,44 @@ + +interface PullQuoteProps { + text: React.ReactNode; + source?: string; + className?: string; +} + +export function PullQuote({ text, source, className = '' }: PullQuoteProps) { + return ( +
    +

    + {text} +

    + {source && ( +
    + {source} +
    + )} +
    + ); +} diff --git a/src/components/ui/Rule.tsx b/src/components/ui/Rule.tsx new file mode 100644 index 0000000..5cba6fb --- /dev/null +++ b/src/components/ui/Rule.tsx @@ -0,0 +1,44 @@ + +type RuleWeight = 'heavy' | 'mid' | 'light' | 'red'; + +interface RuleProps { + weight?: RuleWeight; + className?: string; +} + +const styles: Record = { + heavy: { + borderTop: '3px solid var(--ink)', + borderBottom: 'none', + margin: 0, + width: '100%', + }, + mid: { + borderTop: '1px solid var(--ink)', + borderBottom: 'none', + margin: 0, + width: '100%', + }, + light: { + borderTop: '1px solid var(--rule-thin)', + borderBottom: 'none', + margin: 0, + width: '100%', + }, + red: { + borderTop: '3px solid var(--red)', + borderBottom: 'none', + margin: 0, + width: '100%', + }, +}; + +export function Rule({ weight = 'mid', className = '' }: RuleProps) { + return ( + + ); +} diff --git a/src/components/ui/SectionBanner.tsx b/src/components/ui/SectionBanner.tsx new file mode 100644 index 0000000..41401eb --- /dev/null +++ b/src/components/ui/SectionBanner.tsx @@ -0,0 +1,91 @@ +import { ArrowLeft } from 'lucide-react'; + +type LabelVariant = 'ink' | 'red'; + +interface SectionBannerLink { + text: string; + to: string; +} + +interface SectionBannerProps { + label: string; + labelVariant?: LabelVariant; + link?: SectionBannerLink; +} + +export function SectionBanner({ + label, + labelVariant = 'ink', + link, +}: SectionBannerProps) { + const labelBg = labelVariant === 'red' ? 'var(--red)' : 'var(--ink)'; + + return ( +
    + {/* Label block */} + + {label} + + + {/* Rule fill */} + + ); +} diff --git a/src/components/ui/Stamp.tsx b/src/components/ui/Stamp.tsx new file mode 100644 index 0000000..c88bc0e --- /dev/null +++ b/src/components/ui/Stamp.tsx @@ -0,0 +1,37 @@ + +type StampColor = 'red' | 'ink'; + +interface StampProps { + children: React.ReactNode; + color?: StampColor; + tilt?: boolean; + className?: string; +} + +export function Stamp({ + children, + color = 'red', + tilt = true, + className = '', +}: StampProps) { + const colorValue = color === 'red' ? 'var(--red)' : 'var(--ink)'; + + return ( + + {children} + + ); +} diff --git a/src/components/ui/StatCard.tsx b/src/components/ui/StatCard.tsx new file mode 100644 index 0000000..b1c5118 --- /dev/null +++ b/src/components/ui/StatCard.tsx @@ -0,0 +1,40 @@ + +interface StatCardProps { + number: string; + label: string; + className?: string; +} + +export function StatCard({ number, label, className = '' }: StatCardProps) { + return ( +
    +
    + {number} +
    +
    + {label} +
    +
    + ); +} diff --git a/src/components/ui/apple-cards-carousel.tsx b/src/components/ui/apple-cards-carousel.tsx new file mode 100644 index 0000000..14d6b40 --- /dev/null +++ b/src/components/ui/apple-cards-carousel.tsx @@ -0,0 +1,280 @@ +import { + useEffect, + useRef, + useState, + createContext, + useContext, +} from 'react' +import type { ReactNode } from 'react' +import { motion, AnimatePresence } from 'framer-motion' +import { X } from 'lucide-react' +import { clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +function cn(...inputs: Parameters) { + return twMerge(clsx(inputs)) +} + +/* ─── types ─────────────────────────────────────────── */ +export interface CardData { + src: string + title: string + category: string + content: ReactNode +} + +interface CarouselContextType { + onCardClose: (index: number) => void + currentIndex: number +} + +/* ─── context ───────────────────────────────────────── */ +const CarouselContext = createContext({ + onCardClose: () => {}, + currentIndex: 0, +}) + +/* ─── Carousel ──────────────────────────────────────── */ +export function Carousel({ + items, + initialScroll = 0, +}: { + items: ReactNode[] + initialScroll?: number +}) { + const carouselRef = useRef(null) + const [canScrollLeft, setCanScrollLeft] = useState(false) + const [canScrollRight, setCanScrollRight] = useState(true) + const [currentIndex, setCurrentIndex] = useState(0) + + useEffect(() => { + if (carouselRef.current) { + carouselRef.current.scrollLeft = initialScroll + checkScrollability() + } + }, [initialScroll]) + + function checkScrollability() { + if (!carouselRef.current) return + const { scrollLeft, scrollWidth, clientWidth } = carouselRef.current + setCanScrollLeft(scrollLeft > 0) + setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 1) + } + + function scrollLeft() { carouselRef.current?.scrollBy({ left: -340, behavior: 'smooth' }) } + function scrollRight() { carouselRef.current?.scrollBy({ left: 340, behavior: 'smooth' }) } + + function handleCardClose(index: number) { + if (!carouselRef.current) return + const cardWidth = window.innerWidth < 768 ? 230 : 350 + carouselRef.current.scrollTo({ left: (cardWidth + 16) * (index + 1), behavior: 'smooth' }) + setCurrentIndex(index) + } + + return ( + +
    + {/* Scrollable track */} +
    +
    + {items.map((item, index) => ( + + {item} + + ))} +
    +
    + + {/* Arrow buttons */} +
    + + +
    +
    +
    + ) +} + +/* ─── Card ──────────────────────────────────────────── */ +export function Card({ + card, + index, + layout = false, +}: { + card: CardData + index: number + layout?: boolean +}) { + const [open, setOpen] = useState(false) + const { onCardClose } = useContext(CarouselContext) + + useEffect(() => { + function onKey(e: KeyboardEvent) { if (e.key === 'Escape') handleClose() } + document.body.style.overflow = open ? 'hidden' : 'auto' + window.addEventListener('keydown', onKey) + return () => window.removeEventListener('keydown', onKey) + }, [open]) + + function handleOpen() { setOpen(true) } + function handleClose() { setOpen(false); onCardClose(index) } + + return ( + <> + {/* ── Modal ── */} + + {open && ( + /* Outer: scroll host */ +
    + {/* Backdrop — click to close */} + + + {/* Centering wrapper */} +
    + e.stopPropagation()} + > + {/* Close button */} + + + {/* Hero image strip */} +
    + {card.title} +
    + {/* inset-x-0 ensures text never overflows past modal edges */} +
    +

    + {card.category} +

    +

    + {card.title} +

    +
    +
    + + {/* Body */} +
    + {card.content} +
    + +
    +
    + )} + + + {/* ── Card thumbnail ── */} + + {/* Bottom-to-top gradient so text is readable — tall enough to cover 2 lines */} +
    + + {/* Text — bottom of card, small */} +
    +

    + {card.category} +

    +

    + {card.title} +

    +
    + + {/* Background image */} + + + + ) +} + +/* ─── BlurImage ─────────────────────────────────────── */ +function BlurImage({ src, alt, className }: { src: string; alt: string; className?: string }) { + const [loaded, setLoaded] = useState(false) + return ( + {alt} setLoaded(true)} + className={cn('transition-[filter] duration-500', loaded ? 'blur-0' : 'blur-md', className)} + /> + ) +} + +/* ─── useOutsideClick ───────────────────────────────── */ +export function useOutsideClick( + ref: React.RefObject, + callback: () => void, +) { + useEffect(() => { + function listener(e: MouseEvent | TouchEvent) { + if (!ref.current || ref.current.contains(e.target as Node)) return + callback() + } + document.addEventListener('mousedown', listener) + document.addEventListener('touchstart', listener) + return () => { + document.removeEventListener('mousedown', listener) + document.removeEventListener('touchstart', listener) + } + }, [ref, callback]) +} diff --git a/src/components/ui/bento-grid.tsx b/src/components/ui/bento-grid.tsx new file mode 100644 index 0000000..3f21e97 --- /dev/null +++ b/src/components/ui/bento-grid.tsx @@ -0,0 +1,131 @@ +import type { ReactNode, CSSProperties } from 'react' +import { clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +function cn(...inputs: Parameters) { + return twMerge(clsx(inputs)) +} + +/* ─── BentoGrid ─────────────────────────────────────────── */ +export function BentoGrid({ + children, + className, +}: { + children: ReactNode + className?: string +}) { + return ( +
    + {children} +
    + ) +} + +/* ─── BentoGridItem ──────────────────────────────────────── */ +export interface BentoGridItemProps { + title: string + description?: string + header?: ReactNode /* visual block above content */ + icon?: ReactNode + tag?: string + tagColor?: string /* CSS color value */ + accentLine?: boolean /* left/top colored accent rule */ + className?: string + style?: CSSProperties + onClick?: () => void +} + +export function BentoGridItem({ + title, + description, + header, + icon, + tag, + tagColor = 'var(--red)', + accentLine = false, + className, + style, + onClick, +}: BentoGridItemProps) { + return ( +
    + {/* Accent bar */} + {accentLine && ( +
    + )} + + {/* Optional visual header block */} + {header &&
    {header}
    } + + {/* Tag */} + {tag && ( +
    + {tag} +
    + )} + + {/* Icon + body */} +
    + {icon &&
    {icon}
    } + +

    + {title} +

    + + {description && ( +

    + {description} +

    + )} +
    +
    + ) +} diff --git a/src/components/ui/index.ts b/src/components/ui/index.ts new file mode 100644 index 0000000..67fffda --- /dev/null +++ b/src/components/ui/index.ts @@ -0,0 +1,7 @@ +export { Rule } from './Rule'; +export { Stamp } from './Stamp'; +export { Badge } from './Badge'; +export { Button } from './Button'; +export { SectionBanner } from './SectionBanner'; +export { PullQuote } from './PullQuote'; +export { StatCard } from './StatCard'; diff --git a/src/components/ui/infinite-moving-cards.tsx b/src/components/ui/infinite-moving-cards.tsx new file mode 100644 index 0000000..56674be --- /dev/null +++ b/src/components/ui/infinite-moving-cards.tsx @@ -0,0 +1,156 @@ +import { useEffect, useRef, useState } from 'react' +import { clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +function cn(...inputs: Parameters) { + return twMerge(clsx(inputs)) +} + +export interface MovingCardItem { + quote: string + name: string + title: string + level?: 'critical' | 'high' | 'medium' | 'low' | 'opportunity' +} + +interface InfiniteMovingCardsProps { + items: MovingCardItem[] + direction?: 'left' | 'right' + speed?: 'fast' | 'normal' | 'slow' + pauseOnHover?: boolean + className?: string +} + +const levelConfig = { + critical: { dot: '#7f1d1d', label: 'بحرانی', text: '#7f1d1d', bg: 'rgba(127,29,29,0.08)' }, + high: { dot: '#9b1c1c', label: 'بالا', text: '#9b1c1c', bg: 'rgba(155,28,28,0.07)' }, + medium: { dot: '#92400e', label: 'متوسط', text: '#92400e', bg: 'rgba(146,64,14,0.07)' }, + low: { dot: '#166534', label: 'پایین', text: '#166534', bg: 'rgba(22,101,52,0.07)' }, + opportunity: { dot: '#1e40af', label: 'فرصت', text: '#1e40af', bg: 'rgba(30,64,175,0.07)' }, +} + +export function InfiniteMovingCards({ + items, + direction = 'left', + speed = 'slow', + pauseOnHover = true, + className, +}: InfiniteMovingCardsProps) { + const containerRef = useRef(null) + const scrollerRef = useRef(null) + const [ready, setReady] = useState(false) + + useEffect(() => { + if (!containerRef.current || !scrollerRef.current) return + + /* Clone items for seamless loop */ + const items = Array.from(scrollerRef.current.children) + items.forEach(item => { + const clone = item.cloneNode(true) + scrollerRef.current!.appendChild(clone) + }) + + /* Set CSS custom properties */ + const dur = speed === 'fast' ? '25s' : speed === 'normal' ? '45s' : '70s' + containerRef.current.style.setProperty('--animation-duration', dur) + containerRef.current.style.setProperty('--animation-direction', + direction === 'right' ? 'reverse' : 'forwards') + + setReady(true) + }, [direction, speed]) + + return ( +
    +
      + {items.map((item, idx) => { + const cfg = item.level ? levelConfig[item.level] : levelConfig.high + return ( +
    • + {/* Level badge */} +
      +
      + + {cfg.label} + +
      + + {/* Quote / description */} +

      + {item.quote} +

      + + {/* Footer */} +
      +
      +
      + {item.name} +
      +
      + {item.title} +
      +
      +
      + {cfg.label} +
      +
      +
    • + ) + })} +
    +
    + ) +} diff --git a/src/components/ui/world-map.tsx b/src/components/ui/world-map.tsx new file mode 100644 index 0000000..74e5d4e --- /dev/null +++ b/src/components/ui/world-map.tsx @@ -0,0 +1,191 @@ +/** + * WorldMap — Aceternity-style dotted world map with animated arc routes. + * + * DottedMap (height=60, grid='diagonal') emits viewBox="0 0 119 60". + * We project lat/lng into that same coordinate space so the arcs sit + * exactly on the map dots. + */ +import { useRef, useMemo, memo } from 'react' +import { motion } from 'framer-motion' +import DottedMap from 'dotted-map' + +/* ─── Public types ───────────────────────────────────── */ +export interface MapDot { + start: { lat: number; lng: number; label?: string } + end: { lat: number; lng: number; label?: string } +} + +interface WorldMapProps { + dots?: MapDot[] + lineColor?: string + dotColor?: string +} + +/* ─── Map geometry constants ─────────────────────────── */ +const VB_W = 119 // DottedMap viewBox width (height=60 → width=119) +const VB_H = 60 // DottedMap viewBox height + +/* Equirectangular projection matching DottedMap's output */ +function project(lat: number, lng: number) { + const x = (lng + 180) / 360 * VB_W + const y = (90 - lat) / 180 * VB_H + return { x, y } +} + +/* Quadratic bezier — control point lifted proportional to distance */ +function arcPath( + s: { x: number; y: number }, + e: { x: number; y: number }, +) { + const dx = e.x - s.x + const dy = e.y - s.y + const dist = Math.sqrt(dx * dx + dy * dy) + const mx = (s.x + e.x) / 2 + const my = (s.y + e.y) / 2 - dist * 0.35 // lift proportional to length + return `M ${s.x} ${s.y} Q ${mx} ${my} ${e.x} ${e.y}` +} + +/* ─── Memoised base map (expensive, only computed once) ─ */ +const BaseMap = memo(function BaseMap({ dotColor }: { dotColor: string }) { + const map = new DottedMap({ height: 60, grid: 'diagonal' }) + const svg = map.getSVG({ + color: dotColor, + radius: 0.22, + backgroundColor: 'transparent', + }) + return ( +
    + ) +}) + +/* ─── Component ──────────────────────────────────────── */ +export default function WorldMap({ + dots = [], + lineColor = '#9b1c1c', // var(--red) + dotColor = '#d1cdc7', // muted cream-grey +}: WorldMapProps) { + const svgRef = useRef(null) + + /* Pre-compute projected coordinates */ + const projected = useMemo( + () => + dots.map(d => ({ + start: project(d.start.lat, d.start.lng), + end: project(d.end.lat, d.end.lng), + startLabel: d.start.label, + endLabel: d.end.label, + })), + [dots], + ) + + return ( + /* aspect-ratio 119:60 ≈ 2:1 keeps the map undistorted */ +
    + {/* Dotted world map base */} + + + {/* Arc + dot overlay — same viewBox as DottedMap */} + + + {projected.map((_, i) => ( + + + + + + + ))} + + + {projected.map((p, i) => { + const d = arcPath(p.start, p.end) + return ( + + {/* Ghost — very faint, instant, gives the "track" feel */} + + + {/* Animated arc */} + + + {/* Start endpoint */} + + {/* End endpoint */} + + + ) + })} + +
    + ) +} + +/* ─── Pulsing dot ────────────────────────────────────── */ +function PulsingDot({ + cx, cy, color, delay, +}: { + cx: number; cy: number; color: string; delay: number +}) { + return ( + + {/* Outer ring — pulses outward */} + + {/* Solid centre */} + + + + ) +} diff --git a/src/data/events.ts b/src/data/events.ts new file mode 100644 index 0000000..451a4aa --- /dev/null +++ b/src/data/events.ts @@ -0,0 +1,95 @@ +export type EventType = 'conference' | 'exhibition' | 'seminar' | 'international'; + +export interface Event { + id: string; + title: string; + date: number; + month: string; + year: number; + type: EventType; + location: string; + city: string; + registrationOpen: boolean; + description: string; +} + +export const events: Event[] = [ + { + id: 'iran-steel-congress-1403', + title: 'کنگره بین‌المللی فولاد ایران ۱۴۰۳', + date: 12, + month: 'اسفند', + year: 1403, + type: 'conference', + location: 'مرکز همایش‌های بین‌المللی تهران', + city: 'تهران', + registrationOpen: true, + description: + 'بزرگ‌ترین گردهمایی سالانه متخصصان، سیاست‌گذاران و فعالان صنعت فولاد ایران با حضور ۱۲۰۰ نفر شرکت‌کننده از ۲۵ کشور.', + }, + { + id: 'middle-east-steel-metals-2024', + title: 'Middle East Steel & Metals 2024', + date: 25, + month: 'اسفند', + year: 1403, + type: 'exhibition', + location: 'مرکز نمایشگاهی دبی ورلد ترید سنتر', + city: 'دبی', + registrationOpen: true, + description: + 'نمایشگاه تخصصی فولاد و فلزات خاورمیانه با حضور بیش از ۳۰۰ شرکت از ۴۰ کشور؛ فرصتی برای معرفی ظرفیت‌های صادراتی صنعت فولاد ایران.', + }, + { + id: 'steel-policy-seminar-1404', + title: 'نشست تخصصی سیاست‌گذاری فولاد ۱۴۰۴', + date: 8, + month: 'فروردین', + year: 1404, + type: 'seminar', + location: 'پژوهشکده توسعه صنعتی ایران', + city: 'تهران', + registrationOpen: true, + description: + 'نشست تخصصی با حضور نمایندگان وزارت صمت، سازمان ایمیدرو و انجمن‌های تخصصی برای بررسی سیاست‌های سال ۱۴۰۴ در صنعت فولاد.', + }, + { + id: 'world-steel-forum-2025', + title: 'World Steel Forum 2025', + date: 20, + month: 'فروردین', + year: 1404, + type: 'international', + location: 'مرکز کنفرانس برلین', + city: 'برلین', + registrationOpen: false, + description: + 'اجلاس سالانه انجمن جهانی فولاد با تمرکز بر کربن‌زدایی، تجارت جهانی و تحولات ساختاری صنعت فولاد تا افق ۲۰۳۰.', + }, + { + id: 'iran-metallurgy-expo-1404', + title: 'نمایشگاه متالورژی ایران', + date: 15, + month: 'اردیبهشت', + year: 1404, + type: 'exhibition', + location: 'نمایشگاه بین‌المللی اصفهان', + city: 'اصفهان', + registrationOpen: false, + description: + 'نمایشگاه تخصصی متالورژی، فولاد و فلزات غیرآهنی ایران با محوریت فناوری‌های نوین تولید و تجهیزات صنعتی.', + }, + { + id: 'oecd-steel-summit-2025', + title: 'اجلاس OECD فولاد', + date: 3, + month: 'خرداد', + year: 1404, + type: 'international', + location: 'دفتر مرکزی OECD', + city: 'پاریس', + registrationOpen: false, + description: + 'نشست سالانه کمیته فولاد OECD برای بررسی مازاد ظرفیت جهانی، سیاست‌های تجاری و استانداردهای پایداری در صنعت فولاد.', + }, +]; diff --git a/src/data/market.ts b/src/data/market.ts new file mode 100644 index 0000000..40158d1 --- /dev/null +++ b/src/data/market.ts @@ -0,0 +1,179 @@ +export type PriceTrend = 'up' | 'down' | 'flat'; + +export interface MarketPrice { + id: string; + name: string; + value: number; + unit: string; + change: number; + changePercent: number; + trend: PriceTrend; +} + +export interface PriceHistoryPoint { + month: string; + price: number; +} + +export interface GlobalComparison { + country: string; + flag: string; + price: number; + unit: string; + currency: string; +} + +export interface ExportData { + month: string; + tonnage: number; +} + +export interface InstituteStats { + totalReports: number; + years: number; + experts: number; + memberOrgs: number; + subscribers: number; +} + +export const marketPrices: MarketPrice[] = [ + { + id: 'steel-billet', + name: 'شمش فولاد', + value: 18400, + unit: 'تومان/کیلو', + change: 220, + changePercent: 1.2, + trend: 'up', + }, + { + id: 'rebar-a3', + name: 'میلگرد A3', + value: 17800, + unit: 'تومان/کیلو', + change: -90, + changePercent: -0.5, + trend: 'down', + }, + { + id: 'beam-14', + name: 'تیرآهن ۱۴', + value: 16900, + unit: 'تومان/کیلو', + change: 135, + changePercent: 0.8, + trend: 'up', + }, + { + id: 'scrap-iron', + name: 'آهن قراضه', + value: 550, + unit: 'دلار/تن', + change: -11, + changePercent: -2.0, + trend: 'down', + }, + { + id: 'cold-rolled-sheet', + name: 'ورق سرد', + value: 22100, + unit: 'تومان/کیلو', + change: 66, + changePercent: 0.3, + trend: 'up', + }, + { + id: 'angle-bar-80', + name: 'نبشی ۸۰', + value: 15600, + unit: 'تومان/کیلو', + change: -172, + changePercent: -1.1, + trend: 'down', + }, + { + id: 'mobarakeh-steel', + name: 'فولاد مبارکه', + value: 12840, + unit: 'ریال', + change: -143, + changePercent: -1.1, + trend: 'down', + }, +]; + +export const priceHistory: PriceHistoryPoint[] = [ + { month: 'خرداد ۱۴۰۳', price: 15200 }, + { month: 'تیر ۱۴۰۳', price: 15600 }, + { month: 'مرداد ۱۴۰۳', price: 16100 }, + { month: 'شهریور ۱۴۰۳', price: 15800 }, + { month: 'مهر ۱۴۰۳', price: 16400 }, + { month: 'آبان ۱۴۰۳', price: 17000 }, + { month: 'آذر ۱۴۰۳', price: 17500 }, + { month: 'دی ۱۴۰۳', price: 17200 }, + { month: 'بهمن ۱۴۰۳', price: 17800 }, + { month: 'اسفند ۱۴۰۳', price: 18100 }, + { month: 'فروردین ۱۴۰۴', price: 18600 }, + { month: 'اردیبهشت ۱۴۰۴', price: 18400 }, +]; + +export const globalComparison: GlobalComparison[] = [ + { + country: 'ایران', + flag: '🇮🇷', + price: 18400, + unit: 'تومان/کیلو', + currency: 'IRR', + }, + { + country: 'ترکیه', + flag: '🇹🇷', + price: 530, + unit: 'دلار/تن', + currency: 'USD', + }, + { + country: 'هند', + flag: '🇮🇳', + price: 510, + unit: 'دلار/تن', + currency: 'USD', + }, + { + country: 'چین', + flag: '🇨🇳', + price: 460, + unit: 'دلار/تن', + currency: 'USD', + }, + { + country: 'روسیه', + flag: '🇷🇺', + price: 485, + unit: 'دلار/تن', + currency: 'USD', + }, +]; + +export const monthlyExport: ExportData[] = [ + { month: 'خرداد ۱۴۰۳', tonnage: 285000 }, + { month: 'تیر ۱۴۰۳', tonnage: 310000 }, + { month: 'مرداد ۱۴۰۳', tonnage: 295000 }, + { month: 'شهریور ۱۴۰۳', tonnage: 320000 }, + { month: 'مهر ۱۴۰۳', tonnage: 350000 }, + { month: 'آبان ۱۴۰۳', tonnage: 375000 }, + { month: 'آذر ۱۴۰۳', tonnage: 390000 }, + { month: 'دی ۱۴۰۳', tonnage: 360000 }, + { month: 'بهمن ۱۴۰۳', tonnage: 415000 }, + { month: 'اسفند ۱۴۰۳', tonnage: 420000 }, + { month: 'فروردین ۱۴۰۴', tonnage: 400000 }, + { month: 'اردیبهشت ۱۴۰۴', tonnage: 410000 }, +]; + +export const stats: InstituteStats = { + totalReports: 280, + years: 12, + experts: 45, + memberOrgs: 60, + subscribers: 2800, +}; diff --git a/src/data/plans.ts b/src/data/plans.ts new file mode 100644 index 0000000..03e4025 --- /dev/null +++ b/src/data/plans.ts @@ -0,0 +1,74 @@ +export type PlanCtaVariant = 'outline' | 'filled' | 'paper'; + +export interface Plan { + id: string; + name: string; + price: number; + priceLabel: string; + period: string; + features: string[]; + badge?: string; + featured: boolean; + ctaLabel: string; + ctaVariant: PlanCtaVariant; +} + +export const plans: Plan[] = [ + { + id: 'individual', + name: 'فردی', + price: 350000, + priceLabel: '۳۵۰,۰۰۰ تومان', + period: 'ماهانه', + features: [ + 'دسترسی به تمام گزارش‌های پایه', + 'دانلود ۵ گزارش در ماه', + 'دریافت خبرنامه هفتگی', + 'دسترسی به داده‌های قیمت لحظه‌ای', + 'آرشیو ۱۲ ماه گذشته', + ], + featured: false, + ctaLabel: 'شروع اشتراک', + ctaVariant: 'outline', + }, + { + id: 'organizational', + name: 'سازمانی', + price: 1200000, + priceLabel: '۱,۲۰۰,۰۰۰ تومان', + period: 'ماهانه', + features: [ + 'دسترسی کامل به تمام گزارش‌ها', + 'دانلود نامحدود گزارش', + 'دسترسی برای ۵ کاربر همزمان', + 'گزارش‌های ویژه و تحلیل‌های فوری', + 'آرشیو کامل از ابتدای تأسیس', + 'مشاوره تلفنی ماهانه با تحلیلگران', + 'داشبورد اختصاصی تحلیل بازار', + ], + badge: 'پرطرفدار', + featured: true, + ctaLabel: 'شروع اشتراک', + ctaVariant: 'filled', + }, + { + id: 'ministry', + name: 'وزارتخانه', + price: 0, + priceLabel: 'تماس بگیرید', + period: 'سالانه', + features: [ + 'دسترسی نامحدود برای تمام کارکنان', + 'سفارش گزارش‌های تحلیلی اختصاصی', + 'نشست‌های تخصصی حضوری با تیم پژوهشی', + 'پشتیبانی اولویت‌دار ۲۴/۷', + 'داشبورد تصمیم‌گیری یکپارچه', + 'API اتصال به سیستم‌های داخلی', + 'آموزش و کارگاه‌های تخصصی دوره‌ای', + 'گزارش‌دهی سفارشی برای سیاست‌گذاران', + ], + featured: false, + ctaLabel: 'درخواست مشاوره', + ctaVariant: 'paper', + }, +]; diff --git a/src/data/reports.ts b/src/data/reports.ts new file mode 100644 index 0000000..7b7e724 --- /dev/null +++ b/src/data/reports.ts @@ -0,0 +1,335 @@ +export type ReportCategory = + | 'بازار جهانی' + | 'سیاست‌گذاری' + | 'انرژی و ESG' + | 'صادرات' + | 'تولید داخلی' + | 'ریسک و بحران'; + +export type ReportType = 'quarterly' | 'flash' | 'risk' | 'free' | 'special'; + +export interface Report { + id: string; + title: string; + category: ReportCategory; + type: ReportType; + author: string; + authorRole: string; + authorInitial: string; + publishDate: string; + pages: number; + price: number; + isFree: boolean; + summary: string; + tags: string[]; + featured: boolean; +} + +export const reports: Report[] = [ + { + id: 'iran-steel-global-trade-scenarios-1404', + title: 'ایران در نقشه جدید تجارت فولاد جهان: چهار سناریو برای ۱۴۰۴', + category: 'بازار جهانی', + type: 'special', + author: 'دکتر علی محمدی', + authorRole: 'مدیر ارشد پژوهش', + authorInitial: 'م', + publishDate: 'بهمن ۱۴۰۳', + pages: 84, + price: 850000, + isFree: false, + summary: + 'این گزارش ویژه با تحلیل روندهای کلان اقتصاد جهانی، چهار سناریوی محتمل برای جایگاه صادرات فولاد ایران در سال ۱۴۰۴ را بررسی می‌کند. مدل‌سازی کمی بر اساس داده‌های تجارت ۱۵ کشور رقیب انجام شده و توصیه‌های سیاست‌گذاری مشخص ارائه می‌دهد. این گزارش مرجع اصلی تصمیم‌گیران و مدیران ارشد صنعت فولاد کشور است.', + tags: ['تجارت جهانی', 'سناریوسازی', 'صادرات', 'سیاست‌گذاری', '۱۴۰۴'], + featured: true, + }, + { + id: 'steel-energy-consumption-efficiency-1403', + title: 'مصرف انرژی در فولادسازی ایران: مقایسه با استانداردهای جهانی', + category: 'انرژی و ESG', + type: 'free', + author: 'مهندس سارا رضایی', + authorRole: 'پژوهشگر ارشد انرژی', + authorInitial: 'ر', + publishDate: 'دی ۱۴۰۳', + pages: 28, + price: 0, + isFree: true, + summary: + 'این گزارش رایگان مصرف انرژی واحدهای فولادسازی ایران را با میانگین جهانی و استانداردهای IEA مقایسه می‌کند. شکاف بهره‌وری انرژی در کوره‌های قوس الکتریکی و کنورتور شناسایی شده است. راهکارهای کاهش ۱۵ تا ۲۵ درصدی مصرف انرژی نیز پیشنهاد شده است.', + tags: ['انرژی', 'بهره‌وری', 'ESG', 'کوره قوس الکتریکی', 'استاندارد جهانی'], + featured: false, + }, + { + id: 'global-steel-market-q3-1403', + title: 'گزارش فصلی بازار جهانی فولاد: پاییز ۱۴۰۳', + category: 'بازار جهانی', + type: 'quarterly', + author: 'دکتر حسین کریمی', + authorRole: 'تحلیلگر ارشد بازار', + authorInitial: 'ک', + publishDate: 'آذر ۱۴۰۳', + pages: 52, + price: 450000, + isFree: false, + summary: + 'تحلیل جامع قیمت‌ها، تقاضا و عرضه در بازار جهانی فولاد طی فصل پاییز ۱۴۰۳ ارائه شده است. روند کاهش تقاضای چین و افزایش ظرفیت تولید هند به‌تفصیل بررسی شده است. چشم‌انداز قیمتی برای زمستان ۱۴۰۳ نیز ارائه می‌شود.', + tags: ['بازار جهانی', 'قیمت‌گذاری', 'چین', 'هند', 'پاییز ۱۴۰۳'], + featured: false, + }, + { + id: 'iran-steel-export-sanctions-impact-1403', + title: 'اثر تحریم‌های جدید بر مسیرهای صادراتی فولاد ایران', + category: 'صادرات', + type: 'risk', + author: 'دکتر فاطمه احمدی', + authorRole: 'مدیر تحقیقات ریسک', + authorInitial: 'ا', + publishDate: 'آذر ۱۴۰۳', + pages: 36, + price: 380000, + isFree: false, + summary: + 'این گزارش اثرات بسته تحریمی اخیر بر کانال‌های صادرات فولاد ایران به بازارهای منطقه‌ای را ارزیابی می‌کند. ریسک‌های لجستیکی، بانکی و قراردادی مستند شده است. راهکارهای جایگزین برای حفظ جریان صادرات پیشنهاد می‌شود.', + tags: ['تحریم', 'صادرات', 'ریسک', 'لجستیک', 'بازارهای منطقه‌ای'], + featured: false, + }, + { + id: 'flash-iron-ore-price-surge-1403', + title: 'فلش: جهش قیمت سنگ‌آهن و تأثیر بر هزینه تمام‌شده فولاد ایران', + category: 'بازار جهانی', + type: 'flash', + author: 'مهندس رضا توکلی', + authorRole: 'تحلیلگر بازار کامودیتی', + authorInitial: 'ت', + publishDate: 'آبان ۱۴۰۳', + pages: 12, + price: 120000, + isFree: false, + summary: + 'گزارش فوری درباره افزایش ۱۸ درصدی قیمت سنگ‌آهن در بورس دالیان و اثر فوری آن بر هزینه تمام‌شده تولید فولاد در ایران. برآورد اثر بر حاشیه سود کارخانه‌های داخلی ارائه شده است. توصیه‌های پوشش ریسک قیمتی برای مدیران خرید نیز مطرح است.', + tags: ['سنگ‌آهن', 'قیمت', 'هزینه تمام‌شده', 'فوری'], + featured: false, + }, + { + id: 'domestic-production-dri-outlook-1403', + title: 'چشم‌انداز تولید آهن احیای مستقیم ایران تا افق ۱۴۰۵', + category: 'تولید داخلی', + type: 'quarterly', + author: 'دکتر علی محمدی', + authorRole: 'مدیر ارشد پژوهش', + authorInitial: 'م', + publishDate: 'مهر ۱۴۰۳', + pages: 44, + price: 420000, + isFree: false, + summary: + 'ایران با بیش از ۳۰ میلیون تن ظرفیت DRI، رتبه اول جهان را دارد؛ این گزارش مسیر توسعه این صنعت تا ۱۴۰۵ را مدل‌سازی می‌کند. بررسی پروژه‌های در دست احداث و موانع تأمین گاز به‌تفصیل آمده است. ریسک‌های بهره‌برداری و پیشنهادهای بهینه‌سازی نیز ارائه شده است.', + tags: ['DRI', 'آهن احیای مستقیم', 'ظرفیت', 'تولید', 'گاز طبیعی'], + featured: false, + }, + { + id: 'esg-carbon-emissions-steel-iran-1403', + title: 'کربن‌زدایی در صنعت فولاد ایران: الزامات و فرصت‌ها', + category: 'انرژی و ESG', + type: 'special', + author: 'مهندس سارا رضایی', + authorRole: 'پژوهشگر ارشد انرژی', + authorInitial: 'ر', + publishDate: 'شهریور ۱۴۰۳', + pages: 58, + price: 520000, + isFree: false, + summary: + 'الزامات آینده CBAM اتحادیه اروپا و اثر آن بر رقابت‌پذیری صادرات فولاد ایران تحلیل شده است. مسیرهای فناوری کربن‌زدایی شامل هیدروژن سبز و CCS برای شرایط ایران ارزیابی شده‌اند. برنامه عملیاتی ده‌ساله برای کاهش شدت کربن پیشنهاد می‌شود.', + tags: ['ESG', 'کربن', 'CBAM', 'هیدروژن سبز', 'محیط زیست'], + featured: false, + }, + { + id: 'policy-steel-pricing-reform-1403', + title: 'اصلاح ساختار قیمت‌گذاری فولاد: درس‌هایی از تجربه ترکیه و هند', + category: 'سیاست‌گذاری', + type: 'quarterly', + author: 'دکتر فاطمه احمدی', + authorRole: 'مدیر تحقیقات ریسک', + authorInitial: 'ا', + publishDate: 'مرداد ۱۴۰۳', + pages: 46, + price: 390000, + isFree: false, + summary: + 'مقایسه تطبیقی ساختار قیمت‌گذاری فولاد در ایران، ترکیه و هند با تمرکز بر نقش دولت و مکانیسم‌های بازار. اثربخشی سیاست‌های قیمت‌گذاری دستوری در حفظ تعادل عرضه-تقاضا ارزیابی شده است. توصیه‌های سیاستی برای کاهش اعوجاج قیمتی ارائه می‌شود.', + tags: ['سیاست‌گذاری', 'قیمت‌گذاری', 'ترکیه', 'هند', 'اصلاح ساختار'], + featured: false, + }, + { + id: 'flash-china-steel-overcapacity-1403', + title: 'فلش: مازاد ظرفیت فولاد چین و موج صادراتی به آسیای غربی', + category: 'بازار جهانی', + type: 'flash', + author: 'دکتر حسین کریمی', + authorRole: 'تحلیلگر ارشد بازار', + authorInitial: 'ک', + publishDate: 'تیر ۱۴۰۳', + pages: 10, + price: 110000, + isFree: false, + summary: + 'چین در نیمه اول ۲۰۲۴ رکورد صادرات فولاد را با ۵۴ میلیون تن شکست. این گزارش فوری تأثیر مستقیم این موج صادراتی بر بازارهای ایران، عراق و امارات را تحلیل می‌کند. توصیه اقدام فوری برای کنسرسیوم‌های صادراتی ایران ارائه شده است.', + tags: ['چین', 'مازاد ظرفیت', 'صادرات', 'آسیای غربی', 'رقابت'], + featured: false, + }, + { + id: 'risk-geopolitical-middle-east-steel-1403', + title: 'ریسک‌های ژئوپلیتیک خاورمیانه و زنجیره تأمین فولاد ایران', + category: 'ریسک و بحران', + type: 'risk', + author: 'دکتر فاطمه احمدی', + authorRole: 'مدیر تحقیقات ریسک', + authorInitial: 'ا', + publishDate: 'خرداد ۱۴۰۳', + pages: 40, + price: 360000, + isFree: false, + summary: + 'تحلیل ریسک ژئوپلیتیک منطقه خاورمیانه بر امنیت زنجیره تأمین فولاد ایران از زاویه واردات مواد اولیه و صادرات محصول نهایی. سناریوهای بحران در مسیرهای دریایی خلیج فارس و دریای سرخ مدل‌سازی شده‌اند. برنامه تداوم کسب‌وکار برای تولیدکنندگان ارائه می‌شود.', + tags: ['ژئوپلیتیک', 'خاورمیانه', 'زنجیره تأمین', 'ریسک', 'دریای سرخ'], + featured: false, + }, + { + id: 'export-iraq-market-analysis-1403', + title: 'تحلیل بازار فولاد عراق: فرصت‌های صادراتی ایران', + category: 'صادرات', + type: 'quarterly', + author: 'مهندس رضا توکلی', + authorRole: 'تحلیلگر بازار کامودیتی', + authorInitial: 'ت', + publishDate: 'اردیبهشت ۱۴۰۳', + pages: 38, + price: 340000, + isFree: false, + summary: + 'عراق با تقاضای سالانه بیش از ۵ میلیون تن فولاد، مهم‌ترین بازار صادراتی ایران است. این گزارش رقابت‌پذیری فولاد ایران در برابر رقبای ترکیه، چین و اوکراین در بازار عراق را ارزیابی می‌کند. استراتژی‌های بازاریابی و توسعه بازار پیشنهاد شده است.', + tags: ['عراق', 'صادرات', 'بازار', 'رقابت‌پذیری', 'میلگرد'], + featured: false, + }, + { + id: 'domestic-capacity-utilization-1402', + title: 'ظرفیت بهره‌برداری واحدهای فولادسازی ایران: آسیب‌شناسی و راهکار', + category: 'تولید داخلی', + type: 'quarterly', + author: 'دکتر علی محمدی', + authorRole: 'مدیر ارشد پژوهش', + authorInitial: 'م', + publishDate: 'فروردین ۱۴۰۳', + pages: 50, + price: 410000, + isFree: false, + summary: + 'میانگین ضریب بهره‌برداری کارخانه‌های فولادسازی ایران به ۶۸ درصد رسیده که پایین‌تر از میانگین جهانی ۷۶ درصد است. این گزارش موانع عملیاتی، تأمین مواد اولیه و بازار را شناسایی کرده است. برنامه‌های بهبود بهره‌برداری در کوتاه‌مدت و میان‌مدت ارائه می‌شود.', + tags: ['ظرفیت', 'بهره‌برداری', 'کارایی', 'تولید', 'کارخانه'], + featured: false, + }, + { + id: 'flash-rebar-demand-construction-1402', + title: 'فلش: کاهش تقاضای میلگرد در بخش ساختمانی و اثر بر کارخانه‌ها', + category: 'تولید داخلی', + type: 'flash', + author: 'مهندس سارا رضایی', + authorRole: 'پژوهشگر ارشد انرژی', + authorInitial: 'ر', + publishDate: 'اسفند ۱۴۰۲', + pages: 14, + price: 115000, + isFree: false, + summary: + 'رکود در بازار مسکن منجر به کاهش ۱۲ درصدی تقاضای میلگرد در زمستان ۱۴۰۲ شده است. این گزارش فوری اثر این کاهش بر درآمد و برنامه تولید کارخانه‌های میلگردساز را ارزیابی می‌کند. توصیه تنظیم پورتفولیوی محصول برای جبران افت تقاضا مطرح شده است.', + tags: ['میلگرد', 'ساختمان', 'تقاضا', 'رکود', 'تولید داخلی'], + featured: false, + }, + { + id: 'policy-privatization-steel-companies-1402', + title: 'واگذاری شرکت‌های فولادی دولتی: ارزیابی تجربه یک دهه خصوصی‌سازی', + category: 'سیاست‌گذاری', + type: 'special', + author: 'دکتر حسین کریمی', + authorRole: 'تحلیلگر ارشد بازار', + authorInitial: 'ک', + publishDate: 'بهمن ۱۴۰۲', + pages: 62, + price: 560000, + isFree: false, + summary: + 'ارزیابی جامع نتایج خصوصی‌سازی شرکت‌های فولادی بزرگ ایران در یک دهه گذشته با شاخص‌های بهره‌وری، اشتغال و سرمایه‌گذاری. تجربه‌های موفق و ناموفق واگذاری مستند شده است. الگوی بهینه مشارکت دولتی-خصوصی در صنعت فولاد پیشنهاد می‌شود.', + tags: ['خصوصی‌سازی', 'سیاست‌گذاری', 'دولت', 'مدیریت', 'بهره‌وری'], + featured: false, + }, + { + id: 'risk-water-scarcity-steel-industry-1402', + title: 'بحران آب و تهدیدات پایداری صنعت فولاد ایران', + category: 'ریسک و بحران', + type: 'risk', + author: 'مهندس سارا رضایی', + authorRole: 'پژوهشگر ارشد انرژی', + authorInitial: 'ر', + publishDate: 'دی ۱۴۰۲', + pages: 42, + price: 370000, + isFree: false, + summary: + 'استرس آبی در کلاستر فولادسازی اصفهان-یزد-خراسان به نقطه بحرانی رسیده است. این گزارش ریسک تعطیلی یا کاهش تولید ناشی از کمبود آب را برای ۱۴ واحد تولیدی ارزیابی می‌کند. راهکارهای فناوری و مدیریتی برای کاهش مصرف آب پیشنهاد شده است.', + tags: ['آب', 'بحران', 'پایداری', 'اصفهان', 'ریسک محیط زیستی'], + featured: false, + }, + { + id: 'global-market-q1-1402', + title: 'گزارش فصلی بازار جهانی فولاد: بهار ۱۴۰۲', + category: 'بازار جهانی', + type: 'quarterly', + author: 'دکتر علی محمدی', + authorRole: 'مدیر ارشد پژوهش', + authorInitial: 'م', + publishDate: 'تیر ۱۴۰۲', + pages: 54, + price: 440000, + isFree: false, + summary: + 'بررسی روندهای بازار جهانی فولاد در بهار ۱۴۰۲ با تمرکز بر بازگشایی اقتصاد چین و اثرات آن بر قیمت‌ها. تأثیر افزایش نرخ بهره فدرال رزرو بر سرمایه‌گذاری در ساختمان و زیرساخت تحلیل شده است. پیش‌بینی روند قیمتی تا پایان ۱۴۰۲ ارائه می‌شود.', + tags: ['بازار جهانی', 'چین', 'نرخ بهره', 'تقاضا', 'بهار ۱۴۰۲'], + featured: false, + }, + { + id: 'export-africa-emerging-markets-1402', + title: 'فرصت‌های صادرات فولاد ایران به بازارهای نوظهور آفریقا', + category: 'صادرات', + type: 'special', + author: 'دکتر فاطمه احمدی', + authorRole: 'مدیر تحقیقات ریسک', + authorInitial: 'ا', + publishDate: 'آبان ۱۴۰۲', + pages: 48, + price: 480000, + isFree: false, + summary: + 'آفریقا با رشد سالانه ۶ درصد در تقاضای فولاد، بازار استراتژیک بلندمدت برای صادرکنندگان ایران محسوب می‌شود. این گزارش ۸ بازار هدف اولویت‌دار آفریقایی را با تحلیل ریسک و فرصت معرفی می‌کند. مدل ورود به بازار و شرکای تجاری محتمل نیز پیشنهاد شده است.', + tags: ['آفریقا', 'بازارهای نوظهور', 'صادرات', 'تنوع‌سازی', 'بلندمدت'], + featured: false, + }, + { + id: 'flash-gas-price-hike-steel-cost-1403', + title: 'فلش: اثر افزایش قیمت گاز بر قیمت تمام‌شده فولاد ایران', + category: 'انرژی و ESG', + type: 'flash', + author: 'مهندس رضا توکلی', + authorRole: 'تحلیلگر بازار کامودیتی', + authorInitial: 'ت', + publishDate: 'شهریور ۱۴۰۳', + pages: 11, + price: 105000, + isFree: false, + summary: + 'افزایش ۳۰ درصدی قیمت گاز صنعتی در مهر ۱۴۰۳ هزینه تولید هر تن DRI را حدود ۱۲۰۰ تومان افزایش می‌دهد. این گزارش فوری اثر این شوک هزینه‌ای بر حاشیه سود تولیدکنندگان DRI و فولاد را محاسبه می‌کند. راهکارهای کوتاه‌مدت برای مدیریت این افزایش هزینه پیشنهاد شده است.', + tags: ['گاز', 'انرژی', 'هزینه تولید', 'DRI', 'قیمت‌گذاری'], + featured: false, + }, +]; diff --git a/src/data/team.ts b/src/data/team.ts new file mode 100644 index 0000000..5ac274c --- /dev/null +++ b/src/data/team.ts @@ -0,0 +1,109 @@ +export interface TeamMember { + id: string; + name: string; + role: string; + initial: string; + bio: string; + expertise: string[]; + reportCount: number; + email?: string; +} + +export const team: TeamMember[] = [ + { + id: 'ali-mohammadi', + name: 'دکتر علی محمدی', + role: 'مدیر ارشد پژوهش', + initial: 'م', + bio: 'دکتری اقتصاد صنعتی از دانشگاه تهران با بیش از ۱۸ سال تجربه در تحلیل بازارهای فولاد و فلزات. پیش از پیوستن به اندیشکده، مشاور ارشد سازمان توسعه و نوسازی معادن و صنایع معدنی ایران (ایمیدرو) بوده است. بیش از ۵۰ گزارش تحلیلی و ۱۲ مقاله علمی در حوزه اقتصاد فولاد منتشر کرده است.', + expertise: [ + 'اقتصاد صنعتی', + 'تحلیل بازار فولاد', + 'سیاست‌گذاری صنعتی', + 'مدل‌سازی اقتصادی', + 'تجارت بین‌الملل', + ], + reportCount: 52, + email: 'mohammadi@andishkade-foolad.ir', + }, + { + id: 'fateme-ahmadi', + name: 'دکتر فاطمه احمدی', + role: 'مدیر تحقیقات ریسک', + initial: 'ا', + bio: 'دکتری مدیریت ریسک از دانشگاه علم و صنعت ایران با تخصص در ارزیابی ریسک‌های ژئوپلیتیک و زنجیره تأمین. سابقه مشاوره به چندین شرکت بزرگ فولادی کشور در حوزه مدیریت ریسک تجاری و قراردادی را دارد. نویسنده کتاب «مدیریت ریسک در صنایع معدنی و فلزی» است.', + expertise: [ + 'مدیریت ریسک', + 'تحریم‌پژوهی', + 'ژئوپلیتیک انرژی', + 'تأمین مالی پروژه', + 'مذاکرات تجاری', + ], + reportCount: 38, + email: 'ahmadi@andishkade-foolad.ir', + }, + { + id: 'hosein-karimi', + name: 'دکتر حسین کریمی', + role: 'تحلیلگر ارشد بازار', + initial: 'ک', + bio: 'دکتری مهندسی مواد از دانشگاه صنعتی اصفهان با تخصص ترکیبی در متالورژی و اقتصاد بازار کامودیتی‌ها. پنج سال سابقه کار در واحد پژوهش و توسعه فولاد مبارکه اصفهان دارد. به‌طور منظم گزارش‌های فصلی بازار جهانی فولاد را تهیه و منتشر می‌کند.', + expertise: [ + 'بازار جهانی فولاد', + 'قیمت‌گذاری کامودیتی', + 'متالورژی صنعتی', + 'پیش‌بینی تقاضا', + 'بازارهای آسیایی', + ], + reportCount: 41, + email: 'karimi@andishkade-foolad.ir', + }, + { + id: 'sara-rezaei', + name: 'مهندس سارا رضایی', + role: 'پژوهشگر ارشد انرژی', + initial: 'ر', + bio: 'کارشناسی ارشد مهندسی انرژی از دانشگاه شریف با تمرکز بر بهینه‌سازی مصرف انرژی در صنایع سنگین. تجربه عملیاتی در حسابرسی انرژی کارخانه‌های فولادی در اصفهان، خراسان و هرمزگان دارد. پژوهش‌های او در حوزه ESG و کربن‌زدایی صنعت فولاد ایران از مراجع اصلی این حوزه است.', + expertise: [ + 'انرژی صنعتی', + 'ESG و پایداری', + 'کربن‌زدایی', + 'بهره‌وری انرژی', + 'مقررات زیست‌محیطی', + ], + reportCount: 29, + email: 'rezaei@andishkade-foolad.ir', + }, + { + id: 'reza-tavakoli', + name: 'مهندس رضا توکلی', + role: 'تحلیلگر بازار کامودیتی', + initial: 'ت', + bio: 'کارشناسی ارشد اقتصاد از دانشگاه تهران با تخصص در تحلیل بنیادی و تکنیکال بازارهای کامودیتی. سابقه فعالیت در کارگزاری‌های بورس کالا و تهیه گزارش‌های فوری برای معامله‌گران فولاد را دارد. مسئول پوشش خبری و تحلیلی بازارهای بورس دالیان، LME و بازار داخلی است.', + expertise: [ + 'بورس کالا', + 'تحلیل تکنیکال', + 'بازارهای آتی', + 'قیمت‌گذاری سنگ‌آهن', + 'بازار داخلی فولاد', + ], + reportCount: 34, + email: 'tavakoli@andishkade-foolad.ir', + }, + { + id: 'maryam-hosseini', + name: 'دکتر مریم حسینی', + role: 'پژوهشگر ارشد صادرات', + initial: 'ح', + bio: 'دکتری بازاریابی بین‌الملل از دانشگاه الزهرا با تجربه گسترده در مطالعات بازارهای صادراتی آسیا، آفریقا و اروپای شرقی. پیش از این در اتاق بازرگانی ایران و کمیته فولاد آن مشغول به فعالیت بوده است. حوزه تخصصی او توسعه بازارهای صادراتی جدید و استراتژی‌های نفوذ به بازار است.', + expertise: [ + 'بازاریابی بین‌الملل', + 'توسعه صادرات', + 'بازار آفریقا و آسیا', + 'استراتژی بازار', + 'مذاکرات تجاری', + ], + reportCount: 22, + email: 'hosseini@andishkade-foolad.ir', + }, +]; diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..7fda02b --- /dev/null +++ b/src/index.css @@ -0,0 +1,239 @@ +@import "tailwindcss"; + +/* ═══════════════════════════════════════════════ + VAZIR FONT FACES +═══════════════════════════════════════════════ */ +@font-face { + font-family: 'Vazir'; + src: url('/fonts/Vazir-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Vazir'; + src: url('/fonts/Vazir-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Vazir'; + src: url('/fonts/Vazir-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Vazir'; + src: url('/fonts/Vazir-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Vazir'; + src: url('/fonts/Vazir-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} + +/* ═══════════════════════════════════════════════ + DESIGN TOKENS +═══════════════════════════════════════════════ */ +:root { + --paper: #f4efe7; + --paper-2: #ede8de; + --paper-3: #e4ddd0; + --ink: #1a1712; + --ink-2: #2e2a25; + --ink-3: #4a4540; + --ink-4: #6b6560; + --ink-5: #766e68; + --ink-6: #c8c2bc; + --rule-thin: rgba(26,23,18,0.12); + --red: #9b1c1c; + --red-2: #b52020; + --amber: #92400e; + --green-ink: #166534; +} + +/* ═══════════════════════════════════════════════ + TYPOGRAPHY SYSTEM + + Scale (clamp: mobile → desktop) + --fs-display hero headlines 32 → 72px + --fs-h1 page-level headings 26 → 52px + --fs-h2 section headings 20 → 38px + --fs-h3 card/sub headings 15 → 22px + --fs-h4 small headings 13 → 17px + --fs-body-lg lead paragraphs 14 → 16px + --fs-body body text 13 → 15px + --fs-sm secondary / meta 11 → 13px + --fs-xs labels / captions 9 → 11px +═══════════════════════════════════════════════ */ +:root { + /* Font sizes */ + --fs-display: clamp(32px, 5.5vw, 72px); + --fs-h1: clamp(26px, 3.8vw, 52px); + --fs-h2: clamp(20px, 2.8vw, 38px); + --fs-h3: clamp(15px, 1.5vw, 22px); + --fs-h4: clamp(13px, 1.1vw, 17px); + --fs-body-lg: clamp(14px, 1.1vw, 16px); + --fs-body: clamp(13px, 0.9vw, 15px); + --fs-sm: clamp(11px, 0.75vw, 13px); + --fs-xs: clamp(9px, 0.6vw, 11px); + + /* Letter spacing */ + --ls-display: -2.5px; + --ls-h1: -2px; + --ls-h2: -1px; + --ls-h3: -0.3px; + --ls-body: 0px; + --ls-label: 1.5px; + --ls-overline: 2.5px; + --ls-widest: 3px; + + /* Line heights */ + --lh-display: 1.04; + --lh-heading: 1.12; + --lh-subhead: 1.3; + --lh-body: 1.8; + --lh-relaxed: 1.85; + --lh-label: 1.3; +} + +/* ── Base element styles ──────────────────────── */ +h1 { + font-size: var(--fs-h1); + font-weight: 900; + line-height: var(--lh-heading); + letter-spacing: var(--ls-h1); + color: var(--ink); + margin: 0; +} +h2 { + font-size: var(--fs-h2); + font-weight: 900; + line-height: var(--lh-heading); + letter-spacing: var(--ls-h2); + color: var(--ink); + margin: 0; +} +h3 { + font-size: var(--fs-h3); + font-weight: 700; + line-height: var(--lh-subhead); + letter-spacing: var(--ls-h3); + color: var(--ink); + margin: 0; +} +h4 { + font-size: var(--fs-h4); + font-weight: 700; + line-height: var(--lh-subhead); + color: var(--ink); + margin: 0; +} +p { + font-size: var(--fs-body); + font-weight: 400; /* was 300 — too thin on most screens */ + line-height: var(--lh-body); + color: var(--ink-3); + margin: 0; +} + +/* ═══════════════════════════════════════════════ + BASE +═══════════════════════════════════════════════ */ +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +html { scroll-behavior: smooth; direction: rtl; } + +body { + font-family: 'Vazir', system-ui, sans-serif; + background: var(--paper); + color: var(--ink); + font-size: var(--fs-body); + line-height: var(--lh-body); + overflow-x: hidden; + -webkit-font-smoothing: antialiased; +} + +#root { min-height: 100dvh; display: flex; flex-direction: column; } + +::-webkit-scrollbar { width: 3px; height: 3px; } +::-webkit-scrollbar-thumb { background: var(--ink); } + +:focus-visible { + outline: 2px solid var(--red); + outline-offset: 2px; +} + +::selection { background: var(--ink); color: var(--paper); } + +/* ═══════════════════════════════════════════════ + TYPOGRAPHY UTILITIES +═══════════════════════════════════════════════ */ +/* Overline — small uppercase tracking label */ +.t-overline { + font-size: var(--fs-xs); + font-weight: 700; + letter-spacing: var(--ls-overline); + text-transform: uppercase; + line-height: var(--lh-label); +} + +/* Caption / meta text */ +.t-caption { + font-size: var(--fs-sm); + font-weight: 500; + line-height: var(--lh-label); + color: var(--ink-4); +} + +/* Lead paragraph */ +.t-lead { + font-size: var(--fs-body-lg); + font-weight: 400; + line-height: var(--lh-relaxed); + color: var(--ink-3); +} + +/* ═══════════════════════════════════════════════ + TICKER ANIMATION (RTL direction) +═══════════════════════════════════════════════ */ +@keyframes ticker-rtl { + 0% { transform: translateX(50%); } + 100% { transform: translateX(-50%); } +} +.ticker-track { animation: ticker-rtl 34s linear infinite; white-space: nowrap; } +@media (prefers-reduced-motion: reduce) { .ticker-track { animation: none; } } + +/* ═══════════════════════════════════════════════ + STAMP TILT +═══════════════════════════════════════════════ */ +.stamp-tilt { transform: rotate(-1.5deg); } + +/* ═══════════════════════════════════════════════ + INFINITE SCROLL ANIMATION +═══════════════════════════════════════════════ */ +@keyframes scroll { + to { transform: translateX(calc(-50% - 0.5rem)); } +} +.animate-scroll { + animation: scroll var(--animation-duration, 60s) var(--animation-direction, forwards) linear infinite; +} +.animate-scroll-risk { + animation: scroll 72s forwards linear infinite; +} +@media (prefers-reduced-motion: reduce) { + .animate-scroll { animation: none; } + .animate-scroll-risk { animation: none; } +} + +/* ═══════════════════════════════════════════════ + PRINT +═══════════════════════════════════════════════ */ +@media print { .no-print { display: none !important; } } diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..53e0bd5 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,96 @@ +/** + * Shared utility functions — Persian/Jalali formatting & helpers + */ + +/** + * Format a number as Persian locale (e.g. 18400 → "۱۸,۴۰۰") + */ +export function formatPersianNumber(n: number): string { + return n.toLocaleString('fa-IR') +} + +/** + * Format a Toman price (e.g. 850000 → "۸۵۰,۰۰۰ تومان") + */ +export function formatPrice(n: number): string { + if (n === 0) return 'رایگان' + return `${n.toLocaleString('fa-IR')} تومان` +} + +/** + * Format a price compactly (e.g. 1200000 → "۱.۲ م.ت") + */ +export function formatPriceCompact(n: number): string { + if (n === 0) return 'رایگان' + if (n >= 1_000_000) { + const m = n / 1_000_000 + return `${m.toLocaleString('fa-IR')} م.ت` + } + if (n >= 1_000) { + const k = n / 1_000 + return `${k.toLocaleString('fa-IR')} ه.ت` + } + return `${n.toLocaleString('fa-IR')} تومان` +} + +/** + * Get CSS color for trend direction + */ +export function trendColor(trend: 'up' | 'down' | 'flat'): string { + if (trend === 'up') return 'var(--green-ink)' + if (trend === 'down') return 'var(--red)' + return 'var(--ink-4)' +} + +/** + * Trend arrow character + */ +export function trendArrow(trend: 'up' | 'down' | 'flat'): string { + if (trend === 'up') return '↑' + if (trend === 'down') return '↓' + return '—' +} + +/** + * Truncate string to max length with ellipsis + */ +export function truncate(str: string, max: number): string { + if (str.length <= max) return str + return str.slice(0, max).trimEnd() + '...' +} + +/** + * Get category dot color CSS variable + */ +export function categoryColor(category: string): string { + const map: Record = { + 'بازار جهانی': 'var(--ink)', + 'سیاست‌گذاری': 'var(--ink-3)', + 'انرژی و ESG': 'var(--amber)', + 'صادرات': 'var(--ink-2)', + 'تولید داخلی': 'var(--ink)', + 'ریسک و بحران': 'var(--red)', + } + return map[category] ?? 'var(--ink-5)' +} + +/** + * Get report type label in Persian + */ +export function reportTypeLabel(type: string): string { + const map: Record = { + quarterly: 'گزارش فصلی', + flash: 'Flash Report', + risk: 'گزارش ریسک', + free: 'رایگان', + special: 'گزارش ویژه', + } + return map[type] ?? type +} + +/** + * Clamp a value between min and max + */ +export function clamp(val: number, min: number, max: number): number { + return Math.min(Math.max(val, min), max) +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..83e8d37 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,11 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { RouterProvider } from 'react-router-dom' +import './index.css' +import { router } from './app/router' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/pages/Archive/Archive.tsx b/src/pages/Archive/Archive.tsx new file mode 100644 index 0000000..7591b54 --- /dev/null +++ b/src/pages/Archive/Archive.tsx @@ -0,0 +1,430 @@ +import { useState, useMemo } from 'react' +import { Link } from 'react-router-dom' +import { reports } from '@/data/reports' +import type { ReportCategory, ReportType } from '@/data/reports' + +/* ─── constants ──────────────────────────────────────────── */ +const TYPE_LABELS: Record = { + quarterly: 'فصلی', + flash: 'فلش', + risk: 'ریسک', + free: 'رایگان', + special: 'ویژه', +} + +const TYPE_COLORS: Record = { + quarterly: '#166534', + flash: '#9b1c1c', + risk: '#92400e', + free: '#1d4ed8', + special: '#4a1d96', +} + +/* Persian month order for sorting date groups */ +const MONTH_ORDER: Record = { + 'فروردین': 1, 'اردیبهشت': 2, 'خرداد': 3, 'تیر': 4, + 'مرداد': 5, 'شهریور': 6, 'مهر': 7, 'آبان': 8, + 'آذر': 9, 'دی': 10, 'بهمن': 11, 'اسفند': 12, +} + +function parseDateGroup(dateStr: string): number { + const parts = dateStr.trim().split(' ') + if (parts.length < 2) return 0 + const month = MONTH_ORDER[parts[0]] ?? 0 + const year = parseInt(parts[1]) || 0 + return year * 100 + month +} + +/* ─── unique categories from data ───────────────────────── */ +const ALL_CATEGORIES: (ReportCategory | 'همه')[] = [ + 'همه', + ...Array.from(new Set(reports.map((r) => r.category))) as ReportCategory[], +] + +/* ─── price formatter ────────────────────────────────────── */ +function formatPrice(price: number): string { + if (price === 0) return 'رایگان' + return price.toLocaleString('fa-IR') + ' ت' +} + +/* ─── report row ─────────────────────────────────────────── */ +function ReportRow({ report }: { report: (typeof reports)[0] }) { + const [hovered, setHovered] = useState(false) + const typeColor = TYPE_COLORS[report.type] + const typeLabel = TYPE_LABELS[report.type] + + return ( +
    setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {/* type label */} +
    + + {typeLabel} + +
    + + {/* title */} +
    + + {report.title} + +
    + + {/* author */} +
    + + {report.author} + +
    + + {/* pages */} +
    + + {report.pages.toLocaleString('fa-IR')} ص + +
    + + {/* price */} +
    + + {formatPrice(report.price)} + +
    +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Archive() { + const [search, setSearch] = useState('') + const [activeCategory, setActiveCategory] = useState('همه') + + const filtered = useMemo(() => { + let result = [...reports] + + if (activeCategory !== 'همه') { + result = result.filter((r) => r.category === activeCategory) + } + + if (search.trim()) { + const q = search.trim().toLowerCase() + result = result.filter( + (r) => + r.title.toLowerCase().includes(q) || + r.author.toLowerCase().includes(q) || + r.category.toLowerCase().includes(q) || + r.tags.some((t) => t.toLowerCase().includes(q)) + ) + } + + return result + }, [search, activeCategory]) + + /* group by publishDate, sorted newest first */ + const groups = useMemo(() => { + const map = new Map() + for (const report of filtered) { + const key = report.publishDate + if (!map.has(key)) map.set(key, []) + map.get(key)!.push(report) + } + return Array.from(map.entries()).sort( + ([a], [b]) => parseDateGroup(b) - parseDateGroup(a) + ) + }, [filtered]) + + return ( +
    + {/* ─── Page header ───────────────────────────────────── */} +
    +
    +

    + آرشیو گزارش‌ها +

    + + {reports.length.toLocaleString('fa-IR')} گزارش + +
    +
    +
    + + {/* ─── Search ────────────────────────────────────────── */} +
    + setSearch(e.target.value)} + style={{ + width: '100%', + border: '1px solid var(--ink)', + borderRadius: 0, + padding: '12px 18px', + fontSize: 14, + fontFamily: 'inherit', + background: 'transparent', + color: 'var(--ink)', + outline: 'none', + direction: 'rtl', + }} + /> +
    + + {/* ─── Category filter chips ─────────────────────────── */} +
    + {ALL_CATEGORIES.map((cat) => { + const isActive = activeCategory === cat + return ( + + ) + })} +
    + + {/* ─── Date groups ───────────────────────────────────── */} + {groups.length > 0 ? ( +
    + {groups.map(([date, groupReports]) => ( +
    + {/* section divider */} +
    + + {date} + +
    + + {groupReports.length.toLocaleString('fa-IR')} گزارش + +
    + + {/* column headers */} +
    + {[ + { label: 'نوع', style: { padding: '6px 12px', borderLeft: '1px solid var(--rule-thin)' } }, + { label: 'عنوان گزارش', style: { padding: '6px 16px', borderLeft: '1px solid var(--rule-thin)' } }, + { label: 'نویسنده', style: { padding: '6px 12px', borderLeft: '1px solid var(--rule-thin)' } }, + { label: 'صفحه', style: { padding: '6px 10px', borderLeft: '1px solid var(--rule-thin)', textAlign: 'center' as const } }, + { label: 'قیمت', style: { padding: '6px 12px', textAlign: 'left' as const } }, + ].map((col) => ( +
    + + {col.label} + +
    + ))} +
    + + {/* report rows */} +
    + {groupReports.map((report) => ( + + ))} +
    +
    + ))} +
    + ) : ( +
    +

    نتیجه‌ای یافت نشد

    +

    + عبارت جستجو یا فیلتر دسته‌بندی را تغییر دهید +

    +
    + )} + + {/* responsive: hide author/pages columns on small screens */} + +
    + ) +} diff --git a/src/pages/Events/Events.tsx b/src/pages/Events/Events.tsx new file mode 100644 index 0000000..6ad07f2 --- /dev/null +++ b/src/pages/Events/Events.tsx @@ -0,0 +1,367 @@ +import { useState } from 'react' +import { events } from '@/data/events' +import type { EventType } from '@/data/events' + +/* ─── constants ──────────────────────────────────────────── */ +type FilterValue = 'همه' | EventType + +const FILTERS: { label: string; value: FilterValue }[] = [ + { label: 'همه', value: 'همه' }, + { label: 'کنگره', value: 'conference' }, + { label: 'نمایشگاه', value: 'exhibition' }, + { label: 'سمینار', value: 'seminar' }, + { label: 'جهانی', value: 'international' }, +] + +const TYPE_LABELS: Record = { + conference: 'کنگره', + exhibition: 'نمایشگاه', + seminar: 'سمینار', + international: 'جهانی', +} + +const TYPE_BORDER_COLORS: Record = { + conference: 'var(--ink)', + exhibition: '#6b4a00', + seminar: '#1a4a2a', + international: 'var(--red)', +} + +/* ─── event card ─────────────────────────────────────────── */ +function EventCard({ event }: { event: (typeof events)[0] }) { + const [hovered, setHovered] = useState(false) + const borderColor = TYPE_BORDER_COLORS[event.type] + + return ( +
    setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {/* date + type header */} +
    + {/* date block */} +
    + + {event.date.toLocaleString('fa-IR')} + + + {event.month} {event.year.toLocaleString('fa-IR')} + +
    + + {/* type badge + title area top */} +
    + + {TYPE_LABELS[event.type]} + + +

    + {event.title} +

    +
    +
    + + {/* body */} +
    + {/* location */} +
    + + + {event.location}، {event.city} + +
    + + {/* description */} +

    + {event.description} +

    +
    + + {/* footer */} +
    + {event.registrationOpen ? ( + + ثبت‌نام + + + ) : ( + + به‌زودی + + )} +
    +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Events() { + const [activeFilter, setActiveFilter] = useState('همه') + + const filtered = activeFilter === 'همه' + ? events + : events.filter((e) => e.type === activeFilter) + + return ( +
    + {/* ─── Page title banner ─────────────────────────────── */} +
    +
    +

    + رویدادهای پیش‌رو +

    +
    + +
    + +
    + + ۱۴۰۳–۱۴۰۴ + +
    +
    + + {/* ─── Filter tabs ───────────────────────────────────── */} +
    + {FILTERS.map((f) => { + const isActive = activeFilter === f.value + return ( + + ) + })} +
    + + {/* ─── Events grid ───────────────────────────────────── */} +
    + {filtered.map((event) => ( + + ))} + {/* fill odd trailing cell */} + {filtered.length % 2 !== 0 && ( +
    + )} +
    + + {filtered.length === 0 && ( +
    +

    رویدادی در این دسته‌بندی یافت نشد

    +
    + )} + + {/* responsive */} + +
    + ) +} diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx new file mode 100644 index 0000000..700356d --- /dev/null +++ b/src/pages/Home/Home.tsx @@ -0,0 +1,27 @@ +import HeroSection from './sections/HeroSection' +import SnapshotBar from './sections/SnapshotBar' +import GlobalScannerSection from './sections/GlobalScannerSection' +import ReportsCarouselSection from './sections/ReportsCarouselSection' +import LatestNewsBentoSection from './sections/LatestNewsBentoSection' +import EventsSection from './sections/EventsSection' +import RiskSection from './sections/RiskSection' +import PlansSection from './sections/PlansSection' +import TeamSection from './sections/TeamSection' +import NewsletterSection from './sections/NewsletterSection' + +export default function Home() { + return ( +
    + + + + + + + + + + +
    + ) +} diff --git a/src/pages/Home/sections/EventsSection.tsx b/src/pages/Home/sections/EventsSection.tsx new file mode 100644 index 0000000..4922c22 --- /dev/null +++ b/src/pages/Home/sections/EventsSection.tsx @@ -0,0 +1,104 @@ +import { Link } from 'react-router-dom' +import { events } from '@/data/events' +import type { Event } from '@/data/events' + +const typeLabel: Record = { + conference: 'کنگره', + exhibition: 'نمایشگاه', + seminar: 'سمینار', + international: 'جهانی', +} + +const typeBorderColor: Record = { + conference: 'var(--ink)', + exhibition: '#6b4a00', + seminar: '#1a4a2a', + international: 'var(--red)', +} + +const typeTextColor: Record = { + conference: 'var(--ink)', + exhibition: '#6b4a00', + seminar: '#1a4a2a', + international: 'var(--red)', +} + +export default function EventsSection() { + const displayed = events.slice(0, 4) + + return ( +
    +
    + {/* Banner */} +
    +
    رویدادهای پیش‌رو
    +
    + تقویم کامل ← +
    + + {/* 4-col grid */} +
    + {displayed.map((event, idx) => ( +
    + {/* Date block */} +
    +
    + {event.date.toLocaleString('fa-IR')} +
    +
    + {event.month} {event.year.toLocaleString('fa-IR')} +
    +
    + + {/* Type pill */} +
    + + {typeLabel[event.type]} + +
    + + {/* Title */} +
    {event.title}
    + + {/* Location */} +
    {event.location} · {event.city}
    + + {/* CTA */} + {event.registrationOpen ? ( + + ثبت‌نام ← + + ) : ( + + به‌زودی + + )} +
    + ))} +
    +
    +
    + ) +} diff --git a/src/pages/Home/sections/GlobalScannerSection.tsx b/src/pages/Home/sections/GlobalScannerSection.tsx new file mode 100644 index 0000000..cf8709a --- /dev/null +++ b/src/pages/Home/sections/GlobalScannerSection.tsx @@ -0,0 +1,180 @@ +import { motion } from 'framer-motion' +import WorldMap from '@/components/ui/world-map' + +/* ─── Steel trade routes ───────────────────────────────────────────── + Arcs show geopolitically relevant steel flows affecting Iran's market +──────────────────────────────────────────────────────────────────── */ +const ROUTES = [ + // ── Iran's trade flows (2 routes) ─────────────────────────────── + // Iran → Iraq (main export market) + { start: { lat: 35.69, lng: 51.39 }, end: { lat: 33.31, lng: 44.36 } }, + // Iran → Central Asia (Uzbekistan) + { start: { lat: 35.69, lng: 51.39 }, end: { lat: 41.30, lng: 69.24 } }, + + // ── China's global reach (3 routes) ───────────────────────────── + // Shanghai → Rotterdam (European market dumping) + { start: { lat: 31.23, lng: 121.47 }, end: { lat: 51.92, lng: 4.47 } }, + // Shanghai → Lagos (China–Africa infrastructure push) + { start: { lat: 31.23, lng: 121.47 }, end: { lat: 6.45, lng: 3.39 } }, + // Shanghai → Singapore (SE Asia dominance) + { start: { lat: 31.23, lng: 121.47 }, end: { lat: 1.35, lng: 103.82 } }, + + // ── Russia flows (2 routes) ────────────────────────────────────── + // Moscow → Beijing (raw material / billet supply) + { start: { lat: 55.75, lng: 37.62 }, end: { lat: 39.91, lng: 116.39 } }, + // Moscow → Tehran (billet supply to Iran) + { start: { lat: 55.75, lng: 37.62 }, end: { lat: 35.69, lng: 51.39 } }, + + // ── India's competing routes (2 routes) ────────────────────────── + // Mumbai → Dubai (competing with Iran in Gulf) + { start: { lat: 19.07, lng: 72.88 }, end: { lat: 25.20, lng: 55.27 } }, + // Mumbai → Mombasa (East Africa — directly competes with Iran) + { start: { lat: 19.07, lng: 72.88 }, end: { lat: -4.05, lng: 39.67 } }, + + // ── Americas → Asia (iron ore flows) ──────────────────────────── + // São Paulo → Shanghai (Brazilian iron ore) + { start: { lat: -23.55, lng: -46.63 }, end: { lat: 31.23, lng: 121.47 } }, + + // ── South Korea → SE Asia ─────────────────────────────────────── + { start: { lat: 37.56, lng: 126.97 }, end: { lat: 1.35, lng: 103.82 } }, + + // ── Turkey → Europe ────────────────────────────────────────────── + // Istanbul → Berlin (Turkey as EU steel supplier) + { start: { lat: 41.01, lng: 28.97 }, end: { lat: 52.52, lng: 13.40 } }, + + // ── Australia → China (iron ore) ──────────────────────────────── + { start: { lat: -33.87, lng: 151.21 }, end: { lat: 31.23, lng: 121.47 } }, +] + +/* ─── Section ────────────────────────────────────────── */ +export default function GlobalScannerSection() { + return ( +
    + {/* ── Text header ────────────────────────────────── */} +
    + {/* Overline */} +
    +
    + + اسکنر جهانی · پوشش ۲۴ ساعته + +
    +
    + + {/* Headline */} +

    + تمام رویدادهای فولادی دنیا{' '} + + را رصد می‌کنیم + +

    + + {/* Subhead */} +

    + از بورس دالیان چین تا گمرک بصره عراق، از تصمیمات کمیته فولاد OECD + تا ظرفیت‌سازی‌های هند — هر سیگنالی که بر رقابت‌پذیری ایران اثر + می‌گذارد، پیش از بقیه به دست شما می‌رسد. +

    +
    + + {/* ── World map (full width, no side padding) ─── */} +
    + +
    + + {/* ── Stats strip ──────────────────────────────── */} +
    + {[ + { n: '۱۸۰+', label: 'بازار رصد‌شده', sub: 'در ۵ قاره' }, + { n: '۷/۲۴', label: 'پایش لحظه‌ای', sub: 'قیمت و حجم' }, + { n: '۴۰+', label: 'منبع داده', sub: 'بورس‌ها و گمرک‌ها' }, + { n: '۱۵', label: 'کشور رقیب', sub: 'زیر ذره‌بین' }, + ].map((s, i) => ( + 0 ? '1px solid var(--rule-thin)' : 'none', + textAlign: 'center', + }} + className="max-md:border-r-0 max-md:border-b max-md:border-[var(--rule-thin)]" + > +
    + {s.n} +
    +
    + {s.label} +
    +
    + {s.sub} +
    +
    + ))} +
    +
    + ) +} diff --git a/src/pages/Home/sections/HeroSection.tsx b/src/pages/Home/sections/HeroSection.tsx new file mode 100644 index 0000000..1d96fa7 --- /dev/null +++ b/src/pages/Home/sections/HeroSection.tsx @@ -0,0 +1,315 @@ +import { useState } from 'react' +import { motion } from 'framer-motion' +import { reports } from '@/data/reports' + +const featured = reports.find(r => r.featured)! + +/* Dramatic steel mill / industrial image */ +const BG_IMAGE = + 'https://images.unsplash.com/photo-1504328345606-18bbc8c9d7d1?q=85&w=2400&auto=format&fit=crop' + +const STATS = [ + { n: '۴', label: 'سناریو محتمل' }, + { n: '۱۵', label: 'کشور رقیب' }, + { n: '۸۴', label: 'صفحه تحلیلی' }, + { n: '۱۲', label: 'توصیه سیاستی' }, +] + +export default function HeroSection() { + const [buyHov, setBuyHov] = useState(false) + const [freeHov, setFreeHov] = useState(false) + + return ( +
    + {/* ── Background image ── */} + + + {/* ── Gradient overlay — dark vignette from bottom-right ── */} +
    + + {/* ── Top-right badge ── */} +
    +
    + گزارش ویژه +
    + + بهمن ۱۴۰۳ + +
    + + {/* ── Main content — anchored bottom ── */} +
    + + {/* ── Left: headline + meta ── */} +
    + {/* Overline */} + +
    + + گزارش راهبردی · تحلیل سناریو + + + + {/* Headline */} + + {featured.title.split(':').map((part, i) => ( + + {i === 0 ? part + ':' : ( + {part} + )} + {i === 0 &&
    } +
    + ))} +
    + + {/* Summary — one line */} + + مدل‌سازی کمی بر اساس داده‌های تجارت ۱۵ کشور رقیب — از بدبینانه تا خوش‌بینانه، + با توصیه‌های سیاستی مستقیم برای وزارت صمت و سازمان بنادر. + + + {/* Divider */} +
    + + {/* Author + Price + CTA in one bar */} + + {/* Author */} +
    +
    + {featured.authorInitial} +
    +
    +
    + {featured.author} +
    +
    + {featured.authorRole} +
    +
    +
    + + {/* Separator */} +
    + + {/* Price */} +
    + + {featured.price.toLocaleString('fa-IR')} + + تومان +
    + + {/* Buttons */} +
    + + +
    + +
    + + {/* ── Right: floating stats panel ── */} + +
    + در این گزارش +
    + {STATS.map((s, i) => ( +
    + + {s.label} + + + {s.n} + +
    + ))} +
    + +
    +
    + ) +} diff --git a/src/pages/Home/sections/LatestNewsBentoSection.tsx b/src/pages/Home/sections/LatestNewsBentoSection.tsx new file mode 100644 index 0000000..d81eb99 --- /dev/null +++ b/src/pages/Home/sections/LatestNewsBentoSection.tsx @@ -0,0 +1,240 @@ +import type { CSSProperties } from 'react' +import { motion } from 'framer-motion' +import { reports } from '@/data/reports' + +const featured = reports.find(r => r.featured)! +const flashReport = reports.find(r => r.type === 'flash')! + +/* ─── Price snapshot ────────────────────────────────────── */ +const PRICES = [ + { label: 'HRC آسیا', value: '۵۹۰', delta: '+۳.۲٪', up: true }, + { label: 'میلگرد ایران', value: '۲۱,۸۰۰', delta: '+۰.۸٪', up: true }, + { label: 'سنگ‌آهن دالیان', value: '۱۰۸', delta: '+۱۸٪', up: true }, + { label: 'HRC اروپا', value: '۶۲۴', delta: '−۱.۴٪', up: false }, +] + +/* ─── Shared card style (NO gridColumn here — set via className) */ +const CARD: CSSProperties = { + background: 'var(--paper)', + padding: '28px 28px 24px', + display: 'flex', + flexDirection: 'column', + direction: 'rtl', + fontFamily: 'Vazir, sans-serif', + position: 'relative', +} + +function Tag({ text, color = 'var(--red)' }: { text: string; color?: string }) { + return ( +
    + {text} +
    + ) +} + +function Accent({ color = 'var(--red)' }: { color?: string }) { + return ( +
    + ) +} + +/* ─── Section ────────────────────────────────────────────── */ +export default function LatestNewsBentoSection() { + return ( +
    + + {/* ── Header ── */} +
    +
    +
    + آخرین اخبار +
    +

    + رصد روزانه بازار و صنعت +

    +
    + بهمن ۱۴۰۳ +
    +
    + + {/* ── Bento grid ── */} + + {/* + 3-col grid on desktop, 1-col on mobile. + Items ① and ⑥ use col-span-1 md:col-span-2. + NO gridColumn in inline style — inline style overrides Tailwind. + */} +
    + + {/* ① Featured report — col-span-2 on desktop ─── */} +
    + + + {/* Ghost number */} +
    01
    +

    + {featured.title} +

    +

    + {featured.summary} +

    + {/* Footer */} +
    +
    + {featured.authorInitial} +
    +
    +
    {featured.author}
    +
    {featured.publishDate} · {featured.pages} صفحه
    +
    +
    + خواندن ← +
    +
    + + {/* ② Market prices ─────────────────────────────── */} +
    + + +
    + آخرین نرخ‌های بازار +
    +
    + {PRICES.map(p => ( +
    + {p.label} +
    + {p.value} + {p.delta} +
    +
    + ))} +
    +
    + + {/* ③ Flash report ──────────────────────────────── */} +
    + + +
    + +۱۸٪ +
    +

    + جهش قیمت سنگ‌آهن در بورس دالیان +

    +

    + برآورد اثر بر هزینه تمام‌شده تولیدکنندگان DRI ایران +

    +
    + + {/* ④ Event ─────────────────────────────────────── */} +
    + + +
    +
    +
    ۲۵
    +
    بهمن
    +
    +
    +
    تهران
    +
    هتل اسپیناس پالاس
    +
    +
    +

    + همایش ملی فولاد ایران ۱۴۰۳ +

    +

    + نشست سالانه تولیدکنندگان، صادرکنندگان و سیاست‌گذاران +

    +
    + + {/* ⑤ Risk alert ────────────────────────────────── */} +
    + +
    +
    + + هشدار ریسک · بحرانی + +
    +
    + دی ۱۴۰۳ +
    +

    + مسدود شدن ۳ مسیر پرداخت صادراتی +

    +

    + بسته تحریمی جدید مسیرهای بانکی صادرات فولاد را محدود کرده است +

    +
    + + {/* ⑥ Expert quote — col-span-2 on desktop ────── */} +
    + + +
    "
    +

    + فولاد ایران در آستانه تصمیمی تاریخی است: یا باید بازارهای جایگزین را با + جدیت دنبال کند، یا شاهد کاهش تدریجی سهم صادراتی خود در خاورمیانه باشد. +

    +
    +
    م
    +
    +
    دکتر علی محمدی
    +
    مدیر ارشد پژوهش · اندیشکده فولاد
    +
    +
    +
    + + {/* ⑦ Key stat ──────────────────────────────────── */} +
    + + +
    + ۵۴M +
    +
    + تن — صادرات فولاد چین +
    +

    + در ۶ ماه اول ۲۰۲۴ — رکوردی که قیمت‌های آسیای غربی را ۱۲٪ کاهش داد +

    +
    + +
    + +
    + ) +} diff --git a/src/pages/Home/sections/LatestReportsSection.tsx b/src/pages/Home/sections/LatestReportsSection.tsx new file mode 100644 index 0000000..75b2df8 --- /dev/null +++ b/src/pages/Home/sections/LatestReportsSection.tsx @@ -0,0 +1,251 @@ +import { useState } from 'react' +import { Link } from 'react-router-dom' +import { SectionBanner } from '@/components/ui/SectionBanner' +import { reports, type Report } from '@/data/reports' + +const displayReports = reports.filter(r => !r.featured).slice(0, 6) + +const typeLabel: Record = { + quarterly: 'گزارش فصلی', + flash: 'فوری', + risk: 'ریسک', + free: 'رایگان', + special: 'ویژه', +} + +const dotColor: Record = { + quarterly: 'var(--ink)', + flash: 'var(--red)', + risk: 'var(--red)', + free: 'var(--green-ink)', + special: 'var(--amber)', +} + +function formatPrice(n: number) { + return n.toLocaleString('fa-IR') +} + +interface ReportCardProps { + report: Report + colIndex: number + rowIndex: number + totalRows: number +} + +function ReportCard({ report, colIndex, rowIndex, totalRows }: ReportCardProps) { + const [hovered, setHovered] = useState(false) + const isLastRow = rowIndex === totalRows - 1 + const isRightCol = colIndex === 0 // RTL: right col is index 0 + + return ( +
    setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {/* Type badge */} +
    +
    + + {typeLabel[report.type] ?? report.type} · {report.category} + +
    + + {/* Title */} + +

    + {report.title} +

    + + + {/* Deck */} +

    + {report.summary.slice(0, 140)} + {report.summary.length > 140 ? '…' : ''} +

    + + {/* Divider */} +
    + + {/* Footer row */} +
    + {/* Price block */} +
    + {report.isFree ? ( + + دانلود رایگان + + ) : ( + + {formatPrice(report.price)} + + تومان + + + )} +
    + {report.pages} صفحه · {report.publishDate} +
    +
    + + {/* Buy link */} + + (e.currentTarget.style.textDecoration = 'underline') + } + onMouseLeave={e => (e.currentTarget.style.textDecoration = 'none')} + > + {report.isFree ? 'دانلود' : 'خرید گزارش'} ← + +
    +
    + ) +} + +export default function LatestReportsSection() { + const rows = Math.ceil(displayReports.length / 2) + + return ( +
    + {/* Section header */} +
    + +
    + + {/* 2-col grid */} +
    + {displayReports.map((report, idx) => { + const colIndex = idx % 2 + const rowIndex = Math.floor(idx / 2) + return ( + + ) + })} +
    +
    + ) +} diff --git a/src/pages/Home/sections/NewsletterSection.tsx b/src/pages/Home/sections/NewsletterSection.tsx new file mode 100644 index 0000000..fd6c249 --- /dev/null +++ b/src/pages/Home/sections/NewsletterSection.tsx @@ -0,0 +1,103 @@ +import { useState } from 'react' + +export default function NewsletterSection() { + const [email, setEmail] = useState('') + const [submitted, setSubmitted] = useState(false) + + function handleSubmit(e: React.FormEvent) { + e.preventDefault() + if (email.trim()) { + setSubmitted(true) + setEmail('') + } + } + + return ( +
    + {/* Outer grid — strip inline padding, use Tailwind */} +
    + {/* Left: description */} +
    +
    + خبرنامه اندیشکده +
    +

    + هر هفته: خلاصه تحولات بازار فولاد، گزارش‌های جدید و هشدارهای فوری — مستقیم در صندوق ورودی شما +

    +
    + ↑ بیش از ۲,۸۰۰ مدیر، مقام دولتی و کارشناس عضو +
    +
    + + {/* Divider */} +
    + + {/* Right: form */} +
    + {submitted ? ( +
    + ✓ عضویت شما با موفقیت ثبت شد. از همراهی شما متشکریم. +
    + ) : ( +
    + + setEmail(e.target.value)} + placeholder="ایمیل سازمانی شما" + required + autoComplete="email" + style={{ + flex: 1, + padding: '12px 14px', + border: '1px solid var(--ink)', + borderLeft: 'none', + fontFamily: 'Vazir, sans-serif', + fontSize: 13, + background: 'var(--paper)', + color: 'var(--ink)', + outline: 'none', + borderRadius: 0, + minWidth: 0, + }} + /> + +
    + )} +

    اطلاعات شما محرمانه است و فروخته نمی‌شود

    +
    +
    +
    + ) +} diff --git a/src/pages/Home/sections/PlansSection.tsx b/src/pages/Home/sections/PlansSection.tsx new file mode 100644 index 0000000..31a99a5 --- /dev/null +++ b/src/pages/Home/sections/PlansSection.tsx @@ -0,0 +1,338 @@ +import { useState } from 'react' +import { plans } from '@/data/plans' + +/* ─── Checkmark icon ─────────────────────────────────── */ +function Check({ featured }: { featured: boolean }) { + return ( + + + + + ) +} + +/* ─── Individual plan card ───────────────────────────── */ +function PlanCard({ plan, isMiddle }: { plan: (typeof plans)[0]; isMiddle: boolean }) { + const [hovered, setHovered] = useState(false) + const featured = plan.featured + + return ( +
    + {/* Badge */} + {plan.badge && ( +
    + {plan.badge} +
    + )} + + {/* Plan name */} +
    + {plan.name} +
    + + {/* Tagline */} +
    + {plan.id === 'individual' && 'برای کارشناسان و محققان'} + {plan.id === 'organizational' && 'برای شرکت‌ها و سازمان‌ها'} + {plan.id === 'ministry' && 'برای نهادهای دولتی'} +
    + + {/* Price */} +
    + + {plan.price === 0 ? 'تماس' : plan.price.toLocaleString('fa-IR')} + + {plan.price > 0 && ( + + تومان + + )} +
    +
    + {plan.period} +
    + + {/* CTA button */} + + + {/* Divider */} +
    + + {/* Features */} +
      + {plan.features.map(f => ( +
    • + + + {f} + +
    • + ))} +
    +
    + ) +} + +/* ─── Enterprise bottom card ─────────────────────────── */ +const enterpriseFeatures = [ + 'پروژه‌های نامحدود', + 'پشتیبانی تیمی اختصاصی', + 'فاکتور رسمی سازمانی', + 'بدون سقف توکن یا داده', + 'دعوت اعضای نامحدود', + 'قرارداد SLA معتبر', + 'نقش‌های سفارشی کاربری', + 'امنیت پیشرفته سازمانی', + 'API اتصال به سیستم داخلی', + 'گزارش‌دهی اختصاصی', + 'کارگاه‌های تخصصی دوره‌ای', + 'مشاوره راهبردی مستقیم', +] + +function EnterpriseCard() { + const [hov, setHov] = useState(false) + return ( +
    + {/* Left: description */} +
    +
    + وزارتخانه / سازمان دولتی +
    +

    + راهکار سازمانی کامل +

    +

    + به راهکارهای سفارشی، پشتیبانی اختصاصی یا قیمت‌گذاری حجمی نیاز دارید؟ + با کارشناسان ما درباره پلن منحصربه‌فرد سازمانتان صحبت کنید. +

    + +
    + + {/* Right: feature grid */} +
    + {enterpriseFeatures.map(f => ( +
    + + + {f} + +
    + ))} +
    +
    + ) +} + +/* ─── Section ────────────────────────────────────────── */ +export default function PlansSection() { + const allThree = plans + + return ( +
    +
    + + {/* Header */} +
    +
    + اشتراک و دسترسی +
    +

    + پلن مناسب خود را انتخاب کنید +

    +

    + از دسترسی پایه برای پژوهشگران تا راهکار کامل برای وزارتخانه‌ها — + هر سطحی از نیاز را پوشش می‌دهیم. +

    +
    + + {/* 3-col plan cards */} +
    + {allThree.map((plan, idx) => ( + + ))} +
    + + {/* Enterprise bottom card */} + + + {/* Money-back note */} +
    + ✓   ضمانت بازگشت وجه ۱۴ روزه  ·  بدون قرارداد اجباری +
    +
    +
    + ) +} diff --git a/src/pages/Home/sections/ReportsCarouselSection.tsx b/src/pages/Home/sections/ReportsCarouselSection.tsx new file mode 100644 index 0000000..e6ea3fd --- /dev/null +++ b/src/pages/Home/sections/ReportsCarouselSection.tsx @@ -0,0 +1,279 @@ +import { Link } from 'react-router-dom' +import { Carousel, Card } from '@/components/ui/apple-cards-carousel' +import type { CardData } from '@/components/ui/apple-cards-carousel' +import { reports } from '@/data/reports' +import type { Report } from '@/data/reports' + +/* ─── Per-report images (industrial, steel-relevant) ─ */ +const reportImage: Record = { + 'iran-steel-global-trade-scenarios-1404': + 'https://images.unsplash.com/photo-1578662996442-48f60103fc96?q=80&w=1600&fit=crop', + 'steel-energy-consumption-efficiency-1403': + 'https://images.unsplash.com/photo-1473341304170-971dccb5ac1e?q=80&w=1600&fit=crop', + 'global-steel-market-q3-1403': + 'https://images.unsplash.com/photo-1504328345606-18bbc8c9d7d1?q=80&w=1600&fit=crop', + 'iran-steel-export-sanctions-impact-1403': + 'https://images.unsplash.com/photo-1494412519320-aa613dfb7738?q=80&w=1600&fit=crop', + 'flash-iron-ore-price-surge-1403': + 'https://images.unsplash.com/photo-1611974789855-9c2a0a7236a3?q=80&w=1600&fit=crop', + 'domestic-production-dri-outlook-1403': + 'https://images.unsplash.com/photo-1567789884554-0b844b597180?q=80&w=1600&fit=crop', + 'esg-carbon-emissions-steel-iran-1403': + 'https://images.unsplash.com/photo-1466611653911-95081537e5b7?q=80&w=1600&fit=crop', + 'policy-steel-pricing-reform-1403': + 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=1600&fit=crop', + 'flash-china-steel-overcapacity-1403': + 'https://images.unsplash.com/photo-1570168007204-dfb528c6958f?q=80&w=1600&fit=crop', +} + +const fallbackImage = + 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?q=80&w=1600&fit=crop' + +const typeLabel: Record = { + quarterly: 'گزارش فصلی', + flash: 'گزارش فوری', + risk: 'گزارش ریسک', + free: 'رایگان', + special: 'گزارش ویژه', +} + +const typeColor: Record = { + flash: 'var(--red)', + risk: '#92400e', + free: '#166534', + quarterly: 'var(--ink-4)', + special: 'var(--ink)', +} + +/* ─── Key findings per category (mock but plausible) ─ */ +const keyFindings: Record = { + 'بازار جهانی': [ + 'کاهش ۱۲٪ تقاضای چین در نیمه دوم ۲۰۲۴ فشار قیمتی جهانی ایجاد کرده', + 'هند با رشد ۱۸٪ ظرفیت تولید، رقیب اصلی ایران در بازارهای منطقه شده', + 'پیش‌بینی بازگشت تقاضا در Q2 2025 با ریکاوری بخش ساختمان آمریکا', + ], + 'انرژی و ESG': [ + 'شکاف مصرف انرژی واحدهای ایرانی ۲۵٪ بیشتر از میانگین جهانی است', + 'اجرای CBAM از ۲۰۲۶ می‌تواند ۱۵٪ رقابت‌پذیری صادرات را کاهش دهد', + 'مسیر هیدروژن سبز برای ایران تا ۱۴۱۰ اقتصادی نخواهد بود', + ], + 'صادرات': [ + 'عراق، افغانستان و پاکستان ۶۵٪ صادرات فولاد ایران را تشکیل می‌دهند', + 'مسیرهای جایگزین آفریقای شرقی پتانسیل ۲ میلیون تن اضافی دارد', + 'تحریم‌های جدید ۳ مسیر اصلی پرداخت را مسدود کرده است', + ], + 'تولید داخلی': [ + 'ایران با ۳۰ میلیون تن DRI رتبه اول جهانی را حفظ کرده است', + 'کمبود گاز زمستانی می‌تواند تا ۲۰٪ ظرفیت تولید را کاهش دهد', + '۸ پروژه در دست احداث تا ۱۴۰۵ به ظرفیت می‌رسند', + ], + 'سیاست‌گذاری': [ + 'قیمت‌گذاری دستوری هزینه ۱.۲ میلیارد دلار در سال به صنعت تحمیل می‌کند', + 'تجربه ترکیه نشان می‌دهد آزادسازی تدریجی قیمت بهترین مسیر است', + 'اصلاح تعرفه‌های سنگ‌آهن می‌تواند ۸٪ به حاشیه سود اضافه کند', + ], + 'ریسک و بحران': [ + 'احتمال تشدید تحریم‌ها در ۶ ماه آینده ۶۵٪ برآورد می‌شود', + 'ریسک کمبود ارز برای واردات مواد اولیه در سطح بالا قرار دارد', + 'شکست مذاکرات هسته‌ای می‌تواند ۳۰٪ صادرات را تحت تأثیر قرار دهد', + ], +} + +/* ─── Report contents (TOC-style) ───────────────────── */ +const reportContents: Record = { + quarterly: ['مروری بر بازار فصل', 'تحلیل قیمت‌ها و حجم معاملات', 'رویدادهای کلیدی', 'پیش‌بینی فصل آینده', 'داده‌های خام ضمیمه'], + flash: ['خلاصه اجرایی', 'رویداد و محرک', 'تأثیر بر بازار داخلی', 'توصیه‌های فوری'], + risk: ['ارزیابی ریسک', 'تحلیل سناریو', 'احتمال‌سنجی', 'راهکارهای پوشش ریسک', 'پیوست داده'], + free: ['خلاصه یافته‌ها', 'روش‌شناسی', 'مقایسه بین‌المللی', 'توصیه‌های سیاستی'], + special: ['تحلیل جامع', 'سناریوسازی کمی', 'مقایسه تطبیقی', 'توصیه‌های راهبردی', 'مدل Excel پیوست'], +} + +/* ─── Expanded card body ─────────────────────────────── */ +function ReportCardContent({ report }: { report: Report }) { + const findings = keyFindings[report.category] ?? [] + const contents = reportContents[report.type] ?? [] + + return ( +
    + + {/* Tags */} +
    + {report.tags.map(tag => ( + + {tag} + + ))} +
    + + {/* Summary */} +

    + {report.summary} +

    + + {/* Key findings */} + {findings.length > 0 && ( +
    +
    + یافته‌های کلیدی +
    +
    + {findings.map((f, i) => ( +
    +
    + {f} +
    + ))} +
    +
    + )} + + {/* Report contents */} + {contents.length > 0 && ( +
    +
    + محتوای این گزارش +
    +
    + {contents.map((item, i) => ( +
    + + {(i + 1).toLocaleString('fa-IR')} + + {item} +
    + ))} +
    +
    + )} + + {/* Meta grid */} +
    + {[ + { label: 'نویسنده', value: report.author }, + { label: 'صفحات', value: `${report.pages} صفحه` }, + { label: 'تاریخ انتشار', value: report.publishDate }, + ].map(item => ( +
    +
    + {item.label} +
    +
    {item.value}
    +
    + ))} +
    + + {/* Author */} +
    +
    + {report.authorInitial} +
    +
    +
    {report.author}
    +
    {report.authorRole}
    +
    +
    + + {/* CTA */} +
    + {report.isFree ? ( + + دانلود رایگان + + ) : ( + <> + + + مشاهده جزئیات ← + + + )} +
    +
    + ) +} + +/* ─── Section ────────────────────────────────────────── */ +export default function ReportsCarouselSection() { + const carouselReports = reports.filter(r => !r.featured).slice(0, 10) + + const cards: CardData[] = carouselReports.map(report => ({ + src: reportImage[report.id] ?? fallbackImage, + title: report.title, + category: typeLabel[report.type] ?? report.type, + content: , + })) + + const cardElements = cards.map((card, index) => ( + + )) + + return ( +
    + {/* Header */} +
    +
    +
    + تحلیل‌های اخیر +
    +
    + + همه گزارش‌ها ← + +
    +
    + + {/* Legend */} +
    +
    + {Object.entries(typeLabel).map(([key, label]) => ( +
    +
    + {label} +
    + ))} +
    +
    + + +
    + ) +} diff --git a/src/pages/Home/sections/RiskSection.tsx b/src/pages/Home/sections/RiskSection.tsx new file mode 100644 index 0000000..a934557 --- /dev/null +++ b/src/pages/Home/sections/RiskSection.tsx @@ -0,0 +1,264 @@ +import { useEffect, useRef, useState } from 'react' +import { Link } from 'react-router-dom' + +/* ─── Risk data ──────────────────────────────────────────── */ +const riskItems = [ + { + quote: 'چین در نیمه اول ۲۰۲۴ رکورد ۵۴ میلیون تن صادرات فولاد را شکست. این موج صادراتی قیمت بازارهای آسیای غربی را ۱۲٪ کاهش داده و مستقیماً سهم ایران در عراق را تهدید می‌کند.', + name: 'بازار جهانی — چین', + date: 'بهمن ۱۴۰۳', + level: 'high' as const, + }, + { + quote: 'اجرای مکانیسم CBAM اتحادیه اروپا از ۲۰۲۶ برای صنایع فولاد آغاز می‌شود. محصولات ایرانی با ضریب کربن بالاتر از میانگین جهانی، در بازار اروپا با افزایش هزینه ۱۵ تا ۲۲ دلار به ازای هر تن مواجه خواهند شد.', + name: 'مقررات — اتحادیه اروپا', + date: 'افق: ۲۰۲۶', + level: 'medium' as const, + }, + { + quote: 'بسته تحریمی جدید، ۳ مسیر اصلی پرداخت بین‌المللی شرکت‌های فولادی ایران را مسدود کرده است. ریسک تأخیر در دریافت وجوه صادراتی به بالاترین سطح در ۵ سال اخیر رسیده است.', + name: 'ریسک ژئوپلیتیک — تحریم', + date: 'دی ۱۴۰۳', + level: 'critical' as const, + }, + { + quote: 'هند با افزایش ۱۸٪ ظرفیت تولید فولاد در سال ۲۰۲۴، به سومین تولیدکننده بزرگ جهان تبدیل شد. رقابت هند در بازارهای هدف ایران شامل عراق، افغانستان و آفریقای شرقی به‌شدت تشدید شده.', + name: 'رقابت — هند', + date: 'افق میان‌مدت', + level: 'high' as const, + }, + { + quote: 'محدودیت‌های زمستانی گاز صنعتی در ۳ ماه گذشته باعث توقف موقت ۱۴ واحد تولیدی فولاد در اصفهان، خراسان و هرمزگان شده است. ریسک کمبود انرژی همچنان ادامه دارد.', + name: 'زیرساخت — انرژی داخلی', + date: 'پایش مستمر', + level: 'high' as const, + }, + { + quote: 'نرخ برابری ریال در برابر دلار در ۳ ماه اخیر ۸٪ کاهش یافته است. این نوسان از یک سو هزینه واردات مواد اولیه را افزایش و از سوی دیگر رقابت‌پذیری صادراتی را بهبود می‌بخشد.', + name: 'ریسک مالی — ارز', + date: 'بهمن ۱۴۰۳', + level: 'medium' as const, + }, + { + quote: 'کاهش واردات فولاد ترکیه از بازار عراق، فرصت افزایش سهم ایران از ۴۰٪ به ۵۵٪ را فراهم کرده است. پنجره فرصت تا اواخر سال ۱۴۰۴ باز است.', + name: 'فرصت — بازار عراق', + date: 'افق: ۱۴۰۴', + level: 'opportunity' as const, + }, + { + quote: 'کشورهای آفریقای شرقی (کنیا، اتیوپی، تانزانیا) در مجموع ۸ میلیون تن واردات فولاد در سال دارند. سهم فعلی ایران تنها ۳٪ است در حالی که زیرساخت لجستیکی برای افزایش به ۱۵٪ وجود دارد.', + name: 'فرصت — آفریقای شرقی', + date: 'بررسی استراتژیک', + level: 'opportunity' as const, + }, + { + quote: 'قیمت سنگ‌آهن در بورس دالیان در ماه اخیر ۱۸٪ جهش داشته است. این افزایش مستقیماً هزینه تمام‌شده واحدهای وابسته به واردات سنگ‌آهن را متأثر می‌کند.', + name: 'کامودیتی — سنگ‌آهن', + date: 'آبان ۱۴۰۳', + level: 'medium' as const, + }, + { + quote: 'روسیه پس از تحریم‌های غرب، مسیرهای صادراتی خود را به آسیا و خاورمیانه تغییر داده و با قیمت‌های پایین‌تر از نرخ جهانی وارد بازارهای هدف ایران شده است.', + name: 'رقابت — روسیه', + date: 'در حال پایش', + level: 'high' as const, + }, +] + +const LEVEL = { + critical: { dot: '#7f1d1d', label: 'بحرانی', bg: 'rgba(127,29,29,0.08)' }, + high: { dot: '#9b1c1c', label: 'بالا', bg: 'rgba(155,28,28,0.07)' }, + medium: { dot: '#92400e', label: 'متوسط', bg: 'rgba(146,64,14,0.07)' }, + low: { dot: '#166534', label: 'پایین', bg: 'rgba(22,101,52,0.07)' }, + opportunity: { dot: '#1e40af', label: 'فرصت', bg: 'rgba(30,64,175,0.07)' }, +} + +/* ─── Section ────────────────────────────────────────────── */ +export default function RiskSection() { + const containerRef = useRef(null) + const listRef = useRef(null) + const [ready, setReady] = useState(false) + + useEffect(() => { + if (!containerRef.current || !listRef.current) return + /* Clone all items for seamless loop */ + const original = Array.from(listRef.current.children) + original.forEach(item => { + listRef.current!.appendChild(item.cloneNode(true)) + }) + setReady(true) + }, []) + + return ( +
    +
    + + {/* ── Header bar ── */} +
    +
    + پایش ریسک · لحظه‌ای +
    +
    + {riskItems.length} سیگنال فعال +
    +
    + + همه ریسک‌ها ← + +
    + + {/* ── Legend ── */} +
    + {[ + { color: '#7f1d1d', label: 'بحرانی' }, + { color: '#9b1c1c', label: 'بالا' }, + { color: '#92400e', label: 'متوسط' }, + { color: '#166534', label: 'پایین' }, + { color: '#1e40af', label: 'فرصت' }, + ].map(l => ( +
    +
    + {l.label} +
    + ))} +
    +
    + + {/* ── Auto-scroll ticker ── */} +
    +
      (e.currentTarget.style.animationPlayState = 'paused')} + onMouseLeave={e => (e.currentTarget.style.animationPlayState = 'running')} + > + {riskItems.map((item, idx) => { + const cfg = LEVEL[item.level] + return ( +
    • + {/* Level badge */} +
      +
      + + {cfg.label} + +
      + + {/* Quote */} +

      + {item.quote} +

      + + {/* Footer */} +
      +
      +
      {item.name}
      +
      {item.date}
      +
      +
      + {cfg.label} +
      +
      +
    • + ) + })} +
    +
    +
    + ) +} diff --git a/src/pages/Home/sections/SnapshotBar.tsx b/src/pages/Home/sections/SnapshotBar.tsx new file mode 100644 index 0000000..5f4f967 --- /dev/null +++ b/src/pages/Home/sections/SnapshotBar.tsx @@ -0,0 +1,116 @@ +import { marketPrices } from '@/data/market' + +const prices = marketPrices.slice(0, 4) + +export default function SnapshotBar() { + return ( +
    +
    + {prices.map((price, idx) => { + const isLast = idx === prices.length - 1 + const isUp = price.trend === 'up' + const isDown = price.trend === 'down' + const arrow = isUp ? '↑' : isDown ? '↓' : '—' + const changeColor = isUp + ? 'var(--green-ink)' + : isDown + ? 'var(--red)' + : 'var(--ink-4)' + + return ( +
    + {/* Label */} +
    + {price.name} +
    + + {/* Value */} +
    + {price.value.toLocaleString('fa-IR')} +
    + + {/* Change row */} +
    + + {arrow}{' '} + {Math.abs(price.changePercent).toLocaleString('fa-IR', { + minimumFractionDigits: 1, + maximumFractionDigits: 1, + })} + ٪ + + + {price.unit} + +
    +
    + ) + })} +
    +
    + ) +} diff --git a/src/pages/Home/sections/SpecialSpreadSection.tsx b/src/pages/Home/sections/SpecialSpreadSection.tsx new file mode 100644 index 0000000..3533fb6 --- /dev/null +++ b/src/pages/Home/sections/SpecialSpreadSection.tsx @@ -0,0 +1,165 @@ +import { useState } from 'react' +import { reports } from '@/data/reports' + +const featured = reports.find(r => r.featured) ?? reports[0] + +const items = [ + { num: '۱', title: 'تحلیل ۴ سناریوی اصلی', desc: 'از بدبینانه تا خوش‌بینانه با احتمال‌سنجی کمی و مدل‌سازی قیمتی' }, + { num: '۲', title: 'نقشه بازارهای هدف جدید', desc: 'جایگزین‌های اروپا: آفریقای شرقی، آسیای مرکزی، عراق و افغانستان' }, + { num: '۳', title: '۱۲ توصیه سیاستی مستقیم', desc: 'برای وزارت صمت، گمرک، سازمان بنادر و بانک مرکزی' }, + { num: '۴', title: 'مقایسه تطبیقی با رقبا', desc: 'ایران در برابر ترکیه، هند، روسیه و برزیل در هر سناریو' }, + { num: '۵', title: 'مدل Excel پیوست', desc: 'داده‌های خام و مدل قابل شخصی‌سازی برای تیم‌های تحلیلی' }, +] + +function BuyButton({ label, dark }: { label: string; dark?: boolean }) { + const [hov, setHov] = useState(false) + return ( + + ) +} + +export default function SpecialSpreadSection() { + return ( +
    + {/* LEFT */} +
    +
    + {/* Overline */} +
    +
    + + گزارش استراتژیک · زمستان ۱۴۰۳ + +
    + + {/* Headline */} +

    + ایران در نقشه
    + جدید تجارت
    + فولاد جهان:
    + چهار سناریو
    + برای ۱۴۰۴ +

    + + {/* Description */} +

    + {featured.summary} +

    +
    + +
    + {/* Author */} +
    +
    + {featured.authorInitial} +
    +
    +
    {featured.author}
    +
    {featured.authorRole}
    +
    +
    + + {/* Price + CTA */} +
    +
    +
    قیمت گزارش
    +
    + {featured.price.toLocaleString('fa-IR')} تومان +
    +
    +
    + + +
    +
    +
    +
    + + {/* RIGHT */} +
    +
    + آنچه در این گزارش می‌یابید +
    + + {items.map((item, i) => ( +
    +
    + {item.num} +
    +
    +
    {item.title}
    +
    {item.desc}
    +
    +
    + ))} +
    +
    + ) +} diff --git a/src/pages/Home/sections/TeamSection.tsx b/src/pages/Home/sections/TeamSection.tsx new file mode 100644 index 0000000..91077a5 --- /dev/null +++ b/src/pages/Home/sections/TeamSection.tsx @@ -0,0 +1,51 @@ +import { Link } from 'react-router-dom' +import { team } from '@/data/team' + +function MemberCard({ member, idx }: { member: (typeof team)[0]; idx: number }) { + const borderRight = idx % 2 === 0 ? '1px solid var(--rule-thin)' : 'none' + const borderTop = idx >= 2 ? '1px solid var(--rule-thin)' : 'none' + + return ( +
    (e.currentTarget.style.background = 'var(--paper-2)')} + onMouseLeave={e => (e.currentTarget.style.background = 'transparent')} + className="max-md:border-r-0 max-md:border-t max-md:border-[var(--rule-thin)] max-md:first:border-t-0 max-md:p-6" + > +
    + {member.initial} +
    +
    {member.name}
    +
    {member.role}
    +

    {member.bio}

    +
    + {member.expertise.slice(0, 4).map(tag => ( + {tag} + ))} +
    +
    + {member.reportCount} + گزارش منتشرشده +
    +
    + ) +} + +export default function TeamSection() { + return ( +
    +
    +
    +
    تیم تحریریه
    +
    + همه کارشناسان ← +
    +
    + {team.slice(0, 4).map((member, idx) => ( + + ))} +
    +
    +
    + ) +} diff --git a/src/pages/Market/Market.tsx b/src/pages/Market/Market.tsx new file mode 100644 index 0000000..8c159f0 --- /dev/null +++ b/src/pages/Market/Market.tsx @@ -0,0 +1,757 @@ +import { useState, useMemo } from 'react' +import type React from 'react' +import ReactApexChart from 'react-apexcharts' +import type { ApexOptions } from 'apexcharts' +import { TrendingUp, TrendingDown, Minus } from 'lucide-react' +import { marketPrices, priceHistory, globalComparison, monthlyExport } from '@/data/market' +import type { MarketPrice, PriceTrend } from '@/data/market' + +/* ─── chart shared theme ─────────────────────────────────── */ +const CHART_FONT = 'Vazir, sans-serif' +const GRID_COLOR = 'rgba(26,23,18,0.08)' +const LABEL_COLOR = '#766e68' + +/* ─── time range filter ──────────────────────────────────── */ +type Range = '1M' | '3M' | '6M' | '1Y' +const RANGES: { label: string; value: Range; months: number }[] = [ + { label: '۱ ماه', value: '1M', months: 1 }, + { label: '۳ ماه', value: '3M', months: 3 }, + { label: '۶ ماه', value: '6M', months: 6 }, + { label: '۱ سال', value: '1Y', months: 12 }, +] + +/* ─── trend icon ─────────────────────────────────────────── */ +function TrendIcon({ trend }: { trend: PriceTrend }) { + if (trend === 'up') return + if (trend === 'down') return + return +} + +/* ─── price card ─────────────────────────────────────────── */ +function PriceCard({ item }: { item: MarketPrice }) { + const isUp = item.trend === 'up' + const isDown = item.trend === 'down' + const trendColor = isUp ? 'var(--green-ink)' : isDown ? 'var(--red)' : 'var(--ink-4)' + const trendBg = isUp + ? 'rgba(22,101,52,0.08)' + : isDown + ? 'rgba(155,28,28,0.08)' + : 'rgba(26,23,18,0.06)' + + return ( +
    +

    {item.name}

    +

    + {item.value.toLocaleString('fa-IR')} +

    +

    {item.unit}

    + + {/* Change badge */} +
    + + + {item.changePercent > 0 ? '+' : ''} + {item.changePercent.toFixed(1)}٪ + + + ({item.change > 0 ? '+' : ''} + {item.change.toLocaleString('fa-IR')}) + +
    +
    + ) +} + +/* ─── comparison tool ────────────────────────────────────── */ +function ComparisonTool() { + const [productA, setProductA] = useState(marketPrices[0].id) + const [productB, setProductB] = useState(marketPrices[1].id) + + const itemA = marketPrices.find((m) => m.id === productA)! + const itemB = marketPrices.find((m) => m.id === productB)! + + const selectStyle: React.CSSProperties = { + border: '1px solid var(--ink)', + padding: '8px 14px', + fontSize: 12, + fontFamily: 'inherit', + background: 'var(--paper)', + color: 'var(--ink)', + borderRadius: 0, + cursor: 'pointer', + outline: 'none', + direction: 'rtl', + flex: 1, + } + + return ( +
    +
    + + + در برابر + + +
    + + {/* Side-by-side comparison */} +
    +
    +

    {itemA.name}

    +

    + {itemA.value.toLocaleString('fa-IR')} +

    +

    {itemA.unit}

    +
    + + {itemA.changePercent > 0 ? '+' : ''} + {itemA.changePercent.toFixed(1)}٪ +
    +
    + + {/* VS divider */} +
    + + VS + +
    + +
    +

    {itemB.name}

    +

    + {itemB.value.toLocaleString('fa-IR')} +

    +

    {itemB.unit}

    +
    + + {itemB.changePercent > 0 ? '+' : ''} + {itemB.changePercent.toFixed(1)}٪ +
    +
    +
    + +

    + نمودار مقایسه‌ای در نسخه‌های آینده تکمیل می‌شود +

    +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Market() { + const [priceRange, setPriceRange] = useState('1Y') + + /* Filter price history based on selected range */ + const filteredHistory = useMemo(() => { + const range = RANGES.find((r) => r.value === priceRange)! + return priceHistory.slice(-range.months) + }, [priceRange]) + + /* Line chart options */ + const lineOptions: ApexOptions = { + chart: { + type: 'area', + toolbar: { show: false }, + fontFamily: CHART_FONT, + background: 'transparent', + animations: { enabled: true, speed: 400 }, + }, + colors: ['#9b1c1c'], + stroke: { width: 2, curve: 'smooth' }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 1, + opacityFrom: 0.15, + opacityTo: 0, + stops: [0, 100], + }, + }, + grid: { + borderColor: GRID_COLOR, + strokeDashArray: 3, + }, + xaxis: { + categories: filteredHistory.map((p) => p.month), + labels: { + style: { fontFamily: CHART_FONT, colors: LABEL_COLOR, fontSize: '11px' }, + rotate: -35, + }, + axisBorder: { color: GRID_COLOR }, + axisTicks: { color: GRID_COLOR }, + }, + yaxis: { + opposite: true, + labels: { + style: { fontFamily: CHART_FONT, colors: LABEL_COLOR, fontSize: '11px' }, + formatter: (val: number) => val.toLocaleString('fa-IR'), + }, + }, + tooltip: { + theme: 'light', + style: { fontFamily: CHART_FONT, fontSize: '12px' }, + y: { formatter: (val: number) => val.toLocaleString('fa-IR') + ' تومان/کیلو' }, + }, + dataLabels: { enabled: false }, + } + + const lineSeries = [ + { + name: 'شمش فولاد', + data: filteredHistory.map((p) => p.price), + }, + ] + + /* Bar chart options */ + const barOptions: ApexOptions = { + chart: { + type: 'bar', + toolbar: { show: false }, + fontFamily: CHART_FONT, + background: 'transparent', + animations: { enabled: true, speed: 400 }, + }, + colors: ['#2e2a25'], + plotOptions: { + bar: { + borderRadius: 0, + columnWidth: '65%', + }, + }, + grid: { + borderColor: GRID_COLOR, + strokeDashArray: 3, + }, + xaxis: { + categories: monthlyExport.map((e) => e.month), + labels: { + style: { fontFamily: CHART_FONT, colors: LABEL_COLOR, fontSize: '11px' }, + rotate: -35, + }, + axisBorder: { color: GRID_COLOR }, + axisTicks: { color: GRID_COLOR }, + }, + yaxis: { + opposite: true, + labels: { + style: { fontFamily: CHART_FONT, colors: LABEL_COLOR, fontSize: '11px' }, + formatter: (val: number) => (val / 1000).toFixed(0) + 'k', + }, + }, + tooltip: { + theme: 'light', + style: { fontFamily: CHART_FONT, fontSize: '12px' }, + y: { + formatter: (val: number) => + (val / 1000).toLocaleString('fa-IR') + ' هزار تن', + }, + }, + dataLabels: { enabled: false }, + } + + const barSeries = [ + { + name: 'صادرات', + data: monthlyExport.map((e) => e.tonnage), + }, + ] + + /* Section heading style */ + const SectionHeading = ({ + title, + subtitle, + children, + }: { + title: string + subtitle?: string + children?: React.ReactNode + }) => ( +
    +
    +

    + {title} +

    + {subtitle && ( +

    {subtitle}

    + )} +
    + {children} +
    + ) + + return ( +
    + {/* ─── Page Header ───────────────────────────────── */} +
    +
    +
    +

    + داشبورد بازار +

    +

    + قیمت‌های لحظه‌ای، روند تاریخی و تحلیل صادرات فولاد ایران +

    +
    +
    + + آخرین بروزرسانی: ۴ خرداد ۱۴۰۴ +
    +
    +
    + + {/* ─── Section 1: Price Grid ──────────────────────── */} +
    +
    + +
    + {marketPrices.map((item) => ( + + ))} +
    +
    +
    + + {/* ─── Section 2: Price History Chart ────────────── */} +
    +
    + + {/* Range selector */} +
    + {RANGES.map((r, rIdx) => ( + + ))} +
    +
    + +
    + +
    +
    +
    + + {/* ─── Section 3: Global Comparison Table ─────────── */} +
    +
    + + + + + {['کشور', 'قیمت شمش (دلار/تن)', 'ارز', 'مقایسه با ایران'].map((h) => ( + + ))} + + + + {globalComparison.map((item, i) => { + const isIran = item.country === 'ایران' + return ( + + + + + + + ) + })} + +
    + {h} +
    +
    + {item.flag} + {item.country} + {isIran && ( + + ایران + + )} +
    +
    + {item.currency === 'USD' + ? `$${item.price.toLocaleString()}` + : item.price.toLocaleString('fa-IR') + ' تومان/کیلو'} + + {item.currency} + + {isIran ? ( + + مبنا + + ) : ( + 500 ? 'var(--green-ink)' : 'var(--red)', + }} + > + {item.price > 500 ? 'بالاتر از میانگین' : 'پایین‌تر از میانگین'} + + )} +
    +
    +
    + + {/* ─── Section 4: Export Bar Chart ─────────────────── */} +
    +
    + +
    + +
    +
    +
    + + {/* ─── Section 5: Comparison Tool ──────────────────── */} +
    +
    + + +
    +
    + + {/* ─── Responsive styles ─────────────────────────── */} + +
    + ) +} diff --git a/src/pages/ReportDetail/ReportDetail.tsx b/src/pages/ReportDetail/ReportDetail.tsx new file mode 100644 index 0000000..638152f --- /dev/null +++ b/src/pages/ReportDetail/ReportDetail.tsx @@ -0,0 +1,721 @@ +import { useState } from 'react' +import { Link, useParams, Navigate } from 'react-router-dom' +import { Lock, Download, FileText, ChevronRight, Tag, User } from 'lucide-react' +import { reports } from '@/data/reports' +import type { Report } from '@/data/reports' + +/* ─── helpers ────────────────────────────────────────────── */ +function formatPrice(price: number): string { + return price.toLocaleString('fa-IR') + ' تومان' +} + +const TYPE_LABELS: Record = { + quarterly: 'گزارش فصلی', + flash: 'Flash Report', + risk: 'گزارش ریسک', + free: 'گزارش رایگان', + special: 'گزارش ویژه', +} + +/* ─── Persian lorem paragraphs ──────────────────────────── */ +const LOREM_PARAGRAPHS = [ + 'صنعت فولاد ایران در دوره‌ای از تحولات عمیق ساختاری قرار دارد. ظرفیت تولیدی کشور در سال‌های اخیر به رکوردهای تاریخی دست یافته، اما همزمان چالش‌های پیچیده‌ای در حوزه صادرات، تأمین مالی و دسترسی به بازارهای جهانی در برابر صنعت قرار گرفته است. این گزارش با بهره‌گیری از داده‌های اولیه و تحلیل‌های کمی، وضعیت کنونی را از زوایای مختلف بررسی می‌کند.', + 'در این مطالعه، رویکرد ترکیبی از تحلیل سری‌های زمانی قیمتی، مدل‌سازی اقتصادسنجی و تحلیل سناریو به‌کار رفته است. داده‌های مورد استفاده از منابع معتبر بین‌المللی از جمله World Steel Association، Platts و گزارش‌های رسمی وزارت صنعت، معدن و تجارت جمع‌آوری شده‌اند. دوره تحلیل پنج سال اخیر را در بر می‌گیرد.', + 'یافته‌های کلیدی این گزارش نشان می‌دهد که تقاضای داخلی فولاد در بخش ساختمان و زیرساخت در میان‌مدت روند کاهشی دارد، در حالی که تقاضای صنعتی و ماشین‌سازی رشد ملایمی را تجربه خواهد کرد. این تحول در ترکیب تقاضا مستلزم بازنگری در استراتژی محصول کارخانه‌های فولادی کشور است.', + 'توصیه‌های سیاست‌گذاری این گزارش در سه محور اصلی ارائه می‌شود: اول، اصلاح ساختار قیمت‌گذاری انرژی و مواد اولیه برای بهبود رقابت‌پذیری صادراتی؛ دوم، توسعه مسیرهای دسترسی به بازارهای هدف جایگزین در آفریقا و آسیای جنوب‌شرقی؛ سوم، تقویت ظرفیت مذاکراتی بخش خصوصی در قراردادهای بین‌المللی.', +] + +const TOC_ITEMS = [ + 'خلاصه مدیریتی', + 'بررسی وضعیت کنونی بازار', + 'تحلیل روندهای عرضه و تقاضا', + 'مدل‌سازی سناریوهای آینده', + 'تأثیرات ژئوپلیتیک و محیط کسب‌وکار', + 'تحلیل رقابت‌پذیری و موقعیت ایران', + 'توصیه‌های سیاست‌گذاری و اجرایی', + 'پیوست‌ها: داده‌ها و روش‌شناسی', +] + +/* ─── related reports sidebar ────────────────────────────── */ +function RelatedReports({ current }: { current: Report }) { + const related = reports + .filter((r) => r.id !== current.id && r.category === current.category) + .slice(0, 3) + + if (related.length === 0) return null + + return ( +
    +

    + گزارش‌های مرتبط +

    + {related.map((r, i) => ( +
    + + {r.title} + + + {r.isFree ? 'رایگان' : formatPrice(r.price)} + +
    + ))} +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function ReportDetail() { + const { id } = useParams<{ id: string }>() + const [buyHovered, setBuyHovered] = useState(false) + const [dlHovered, setDlHovered] = useState(false) + + const report = reports.find((r) => r.id === id) + + if (!report) return + + return ( +
    + {/* ─── Breadcrumb ────────────────────────────────── */} + + + {/* ─── Two-column layout ─────────────────────────── */} +
    + {/* ═══ LEFT: Main content ══════════════════════════ */} +
    + {/* Kicker */} +
    + + {TYPE_LABELS[report.type] || report.type} · {report.category} + +
    +
    + + {/* Headline */} +

    + {report.title} +

    + + {/* Meta row */} +
    + {/* Author initial */} +
    + {report.authorInitial} +
    +
    +

    + {report.author} +

    +

    + {report.authorRole} +

    +
    +
    + {report.publishDate} +
    + + + {report.pages} صفحه + +
    + + {/* Thick rule */} +
    + + {/* Abstract */} +
    +

    + چکیده +

    + {LOREM_PARAGRAPHS.map((para, i) => ( +

    + {i === 0 ? report.summary : para} +

    + ))} +
    + + {/* Table of Contents */} +
    +
    +

    + فهرست مطالب +

    +
    +
      + {TOC_ITEMS.map((item, i) => ( +
    1. + + {(i + 1).toLocaleString('fa-IR')} + + {item} + + + {((i + 1) * 8 + 3).toLocaleString('fa-IR')} + +
    2. + ))} +
    +
    + + {/* Free preview + paywall */} + {!report.isFree && ( +
    +
    +

    + پیش‌نمایش رایگان +

    + + ۳ صفحه اول + +
    +
    + {/* Fake preview content */} +
    + {[90, 100, 75, 100, 60, 100, 85, 40].map((width, i) => ( +
    + ))} +
    + {/* Gradient overlay */} +
    + +

    + برای دسترسی کامل اشتراک بگیرید +

    + + مشاهده طرح‌های اشتراک + +
    +
    +
    + )} + + {/* Tags */} +
    + + {report.tags.map((tag) => ( + + {tag} + + ))} +
    +
    + + {/* ═══ RIGHT: Sidebar ══════════════════════════════ */} +
    + {/* Price card */} +
    +

    + قیمت گزارش +

    + + {/* Price */} +

    + {report.isFree ? 'رایگان' : formatPrice(report.price)} +

    + + {/* Meta */} +
    +
    + تعداد صفحات + + {report.pages} صفحه + +
    +
    + تاریخ انتشار + + {report.publishDate} + +
    +
    + فرمت + PDF +
    +
    + + {/* Buy button */} + + + {/* Download summary button */} + + + {/* Note */} +

    + فاکتور رسمی صادر می‌شود +

    +
    + + {/* Author card */} +
    +
    +
    + {report.authorInitial} +
    +
    +

    + {report.author} +

    +

    + {report.authorRole} +

    +
    +
    +

    + متخصص در تحلیل بازارهای فولاد با بیش از یک دهه تجربه در پژوهش و سیاست‌گذاری صنعتی. +

    + + + مشاهده پروفایل کامل + +
    + + {/* Related reports */} +
    + +
    +
    +
    + + {/* ─── Responsive styles ─────────────────────────── */} + +
    + ) +} diff --git a/src/pages/Reports/Reports.tsx b/src/pages/Reports/Reports.tsx new file mode 100644 index 0000000..66631cd --- /dev/null +++ b/src/pages/Reports/Reports.tsx @@ -0,0 +1,581 @@ +import { useState, useMemo } from 'react' +import { Link } from 'react-router-dom' +import { Search, ChevronRight, ChevronLeft } from 'lucide-react' +import { reports } from '@/data/reports' +import type { ReportCategory, ReportType } from '@/data/reports' + +/* ─── constants ──────────────────────────────────────────── */ +const CATEGORIES: { label: string; value: ReportCategory | 'همه' }[] = [ + { label: 'همه', value: 'همه' }, + { label: 'بازار جهانی', value: 'بازار جهانی' }, + { label: 'سیاست‌گذاری', value: 'سیاست‌گذاری' }, + { label: 'انرژی و ESG', value: 'انرژی و ESG' }, + { label: 'صادرات', value: 'صادرات' }, + { label: 'تولید داخلی', value: 'تولید داخلی' }, + { label: 'ریسک و بحران', value: 'ریسک و بحران' }, +] + +const TYPES: { label: string; value: ReportType | 'همه' | 'رایگان' }[] = [ + { label: 'همه', value: 'همه' }, + { label: 'رایگان', value: 'رایگان' }, + { label: 'Flash Report', value: 'flash' }, + { label: 'فصلی', value: 'quarterly' }, + { label: 'گزارش ویژه', value: 'special' }, + { label: 'ریسک', value: 'risk' }, +] + +const SORT_OPTIONS = [ + { label: 'جدیدترین', value: 'newest' }, + { label: 'قدیمی‌ترین', value: 'oldest' }, + { label: 'گران‌ترین', value: 'price-desc' }, + { label: 'ارزان‌ترین', value: 'price-asc' }, +] + +const TYPE_COLORS: Record = { + quarterly: '#166534', + flash: '#9b1c1c', + risk: '#92400e', + free: '#1d4ed8', + special: '#4a1d96', +} + +const TYPE_LABELS: Record = { + quarterly: 'فصلی', + flash: 'فلش', + risk: 'ریسک', + free: 'رایگان', + special: 'ویژه', +} + +const PAGE_SIZE = 9 + +/* ─── price formatter ────────────────────────────────────── */ +function formatPrice(price: number): string { + if (price === 0) return 'رایگان' + return price.toLocaleString('fa-IR') + ' تومان' +} + +/* ─── report card ────────────────────────────────────────── */ +function ReportCard({ report }: { report: (typeof reports)[0] }) { + const [hovered, setHovered] = useState(false) + + return ( +
    + {/* top meta */} +
    + + + {report.category} + + {report.isFree && ( + + رایگان + + )} + + {TYPE_LABELS[report.type]} + +
    + + {/* title */} + setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {report.title} + + + {/* meta row */} +
    + {report.author} + · + {report.publishDate} + · + {report.pages} صفحه +
    + + {/* divider */} +
    + + {/* price row */} +
    + + {formatPrice(report.price)} + + + {report.isFree ? 'دانلود' : 'خرید'} + +
    +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Reports() { + const [activeCategory, setActiveCategory] = useState('همه') + const [activeType, setActiveType] = useState('همه') + const [sortBy, setSortBy] = useState('newest') + const [searchQuery, setSearchQuery] = useState('') + const [page, setPage] = useState(1) + + const filtered = useMemo(() => { + let result = [...reports] + + if (activeCategory !== 'همه') { + result = result.filter((r) => r.category === activeCategory) + } + + if (activeType !== 'همه') { + if (activeType === 'رایگان') { + result = result.filter((r) => r.isFree) + } else { + result = result.filter((r) => r.type === activeType) + } + } + + if (searchQuery.trim()) { + const q = searchQuery.trim().toLowerCase() + result = result.filter( + (r) => + r.title.toLowerCase().includes(q) || + r.author.toLowerCase().includes(q) || + r.category.toLowerCase().includes(q) || + r.tags.some((t) => t.toLowerCase().includes(q)) + ) + } + + switch (sortBy) { + case 'oldest': + result = result.reverse() + break + case 'price-desc': + result = result.sort((a, b) => b.price - a.price) + break + case 'price-asc': + result = result.sort((a, b) => a.price - b.price) + break + } + + return result + }, [activeCategory, activeType, sortBy, searchQuery]) + + const totalPages = Math.ceil(filtered.length / PAGE_SIZE) + const paged = filtered.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE) + + // Reset to page 1 on filter change + const handleCategoryChange = (cat: ReportCategory | 'همه') => { + setActiveCategory(cat) + setPage(1) + } + const handleTypeChange = (type: ReportType | 'همه' | 'رایگان') => { + setActiveType(type) + setPage(1) + } + + return ( +
    + {/* Page header */} +
    +

    + گزارش‌ها +

    +

    + تحلیل‌های تخصصی بازار فولاد ایران و جهان — گزارش‌های فصلی، ریسک، و فلش +

    +
    + + {/* ─── Filter bar ──────────────────────────────────── */} +
    + {/* Category pills */} +
    + {CATEGORIES.map((cat) => ( + + ))} +
    + + {/* Second row: type + sort + search */} +
    + {/* Type filter */} +
    + {TYPES.map((t) => ( + + ))} +
    + +
    + + {/* Sort */} +
    + + مرتب‌سازی + + +
    + + {/* Search */} +
    + { + setSearchQuery(e.target.value) + setPage(1) + }} + style={{ + border: '1px solid var(--ink)', + padding: '8px 36px 8px 12px', + fontSize: 12, + fontFamily: 'inherit', + background: 'transparent', + color: 'var(--ink)', + borderRadius: 0, + outline: 'none', + width: 200, + direction: 'rtl', + }} + /> + +
    +
    +
    + + {/* ─── Report grid ─────────────────────────────────── */} + {paged.length > 0 ? ( +
    + {paged.map((report) => ( + + ))} + {/* Fill empty cells in last row to keep grid consistent */} + {paged.length % 3 !== 0 && + Array.from({ length: 3 - (paged.length % 3) }).map((_, i) => ( +
    + ))} +
    + ) : ( +
    +

    نتیجه‌ای یافت نشد

    +

    + جستجو یا فیلترهای خود را تغییر دهید +

    +
    + )} + + {/* ─── Pagination ──────────────────────────────────── */} + {totalPages > 1 && ( +
    + + + + صفحه {page.toLocaleString('fa-IR')} از {totalPages.toLocaleString('fa-IR')} + + + +
    + )} + + {/* ─── Mobile responsive styles ────────────────────── */} + +
    + ) +} diff --git a/src/pages/Risks/Risks.tsx b/src/pages/Risks/Risks.tsx new file mode 100644 index 0000000..408f3be --- /dev/null +++ b/src/pages/Risks/Risks.tsx @@ -0,0 +1,340 @@ +import { Link } from 'react-router-dom'; +import { reports } from '@/data/reports'; + +const riskMatrix = [ + { id: 1, title: 'تشدید تحریم‌های صادراتی', category: 'ژئوپلیتیک', probability: 'بالا', impact: 'بسیار بالا', level: 'critical' }, + { id: 2, title: 'سقوط قیمت جهانی فولاد', category: 'بازار', probability: 'متوسط', impact: 'بالا', level: 'high' }, + { id: 3, title: 'کمبود انرژی صنعتی', category: 'زیرساخت', probability: 'بالا', impact: 'متوسط', level: 'high' }, + { id: 4, title: 'اجرای CBAM اروپا', category: 'مقررات', probability: 'قطعی', impact: 'متوسط', level: 'medium' }, + { id: 5, title: 'رقابت صادرات چین', category: 'بازار', probability: 'قطعی', impact: 'بالا', level: 'high' }, + { id: 6, title: 'نوسانات نرخ ارز', category: 'مالی', probability: 'بالا', impact: 'متوسط', level: 'medium' }, +] as const; + +type RiskLevel = 'critical' | 'high' | 'medium' | 'low'; + +const levelConfig: Record = { + critical: { color: '#7f1d1d', label: 'بحرانی' }, + high: { color: 'var(--red)', label: 'بالا' }, + medium: { color: 'var(--amber)', label: 'متوسط' }, + low: { color: 'var(--green-ink)', label: 'پایین' }, +}; + +function formatPrice(price: number): string { + if (price === 0) return 'رایگان'; + return price.toLocaleString('fa-IR') + ' تومان'; +} + +export default function Risks() { + const riskReports = reports.filter((r) => r.type === 'risk'); + + return ( +
    + {/* Page Header */} +
    +
    +
    + اندیشکده فولاد ایران — پایش ریسک +
    +
    +

    + پایش ریسک‌های صنعت فولاد +

    + + به‌روز شده: بهمن ۱۴۰۳ + +
    + + {/* Legend */} +
    + {(Object.keys(levelConfig) as RiskLevel[]).map((level) => ( +
    +
    + {levelConfig[level].label} +
    + ))} +
    +
    +
    + +
    + {/* Risk Matrix Table */} +
    +

    + + ماتریس ریسک‌های کلیدی +

    + +
    + {/* Table Header */} +
    + {['#', 'عنوان ریسک', 'دسته', 'احتمال', 'شدت تأثیر', 'سطح ریسک'].map((col, i) => ( +
    0 ? '1px solid rgba(255,255,255,0.12)' : 'none', + }} + > + {col} +
    + ))} +
    + + {/* Table Rows */} + {riskMatrix.map((risk, idx) => { + const cfg = levelConfig[risk.level as RiskLevel]; + return ( +
    + {/* # */} +
    + {risk.id} +
    + {/* Title */} +
    + {risk.title} +
    + {/* Category */} +
    + {risk.category} +
    + {/* Probability */} +
    + {risk.probability} +
    + {/* Impact */} +
    + {risk.impact} +
    + {/* Level */} +
    +
    + + {cfg.label} + +
    +
    + ); + })} +
    +
    + + {/* Risk Reports Section */} +
    +
    +

    + گزارش‌های ریسک اندیشکده +

    + + {riskReports.length} گزارش تحلیلی + +
    + +
    + {riskReports.map((report, idx) => ( + + {/* Type badge */} +
    + + ریسک + +
    + {/* Title */} +
    + {report.title} +
    + {/* Date */} +
    + {report.publishDate} +
    + {/* Pages */} +
    + {report.pages} صفحه +
    + {/* Price + link */} +
    + + {formatPrice(report.price)} + + + مشاهده ← + +
    + + ))} +
    +
    +
    +
    + ); +} diff --git a/src/pages/Scanner/Scanner.tsx b/src/pages/Scanner/Scanner.tsx new file mode 100644 index 0000000..2b1e461 --- /dev/null +++ b/src/pages/Scanner/Scanner.tsx @@ -0,0 +1,430 @@ +import { marketPrices, globalComparison } from '@/data/market'; +import type { MarketPrice } from '@/data/market'; + +const riskAlerts = [ + { + title: 'فشار صادرات چین', + desc: 'افزایش ۱۸٪ صادرات ارزان چین فشار قیمتی روی بازار آسیا', + level: 'high', + }, + { + title: 'محدودیت انرژی داخلی', + desc: 'کاهش تولید زمستانی به دلیل محدودیت گاز صنعتی', + level: 'medium', + }, + { + title: 'فرصت بازار عراق', + desc: 'کاهش واردات ترکیه، فرصت افزایش سهم بازار برای ایران', + level: 'low', + }, +] as const; + +type AlertLevel = 'high' | 'medium' | 'low'; + +const alertBorderColor: Record = { + high: 'var(--red)', + medium: 'var(--amber)', + low: 'var(--green-ink)', +}; + +const alertLabelColor: Record = { + high: 'var(--red)', + medium: 'var(--amber)', + low: 'var(--green-ink)', +}; + +const alertLabel: Record = { + high: 'بالا', + medium: 'متوسط', + low: 'فرصت', +}; + +function formatNumber(n: number): string { + return n.toLocaleString('fa-IR'); +} + +function PriceTicker({ item, col, row, totalCols, totalRows }: { item: MarketPrice; col: number; row: number; totalCols: number; totalRows: number }) { + const isUp = item.trend === 'up'; + const isDown = item.trend === 'down'; + const trendArrow = isUp ? '▲' : isDown ? '▼' : '—'; + const trendColor = isUp ? 'var(--green-ink)' : isDown ? 'var(--red)' : 'var(--ink-5)'; + const changePrefix = item.change > 0 ? '+' : ''; + + return ( +
    + {/* Product name */} +
    + {item.name} +
    + + {/* Price */} +
    + {formatNumber(item.value)} +
    + + {/* Unit */} +
    + {item.unit} +
    + + {/* Change + trend */} +
    + + {trendArrow} + + + {changePrefix}{formatNumber(item.change)} + + + {changePrefix}{item.changePercent.toFixed(1)}٪ + +
    +
    + ); +} + +export default function Scanner() { + // Use first 6 prices for the grid + const gridPrices = marketPrices.slice(0, 6); + const COLS = 3; + const ROWS = Math.ceil(gridPrices.length / COLS); + + // For CSS bar chart: find max price in globalComparison for proportional width + // Filter to USD-only for a fair comparison (exclude IRR) + const usdPrices = globalComparison.filter((g) => g.currency === 'USD'); + const maxUSD = Math.max(...usdPrices.map((g) => g.price)); + + return ( +
    + {/* Page Header */} +
    +
    +
    + اندیشکده فولاد ایران — داده‌های بازار +
    +
    +
    +

    + اسکنر بازار جهانی فولاد +

    +

    + داده‌های لحظه‌ای قیمت‌های بازار داخلی و جهانی +

    +
    + + به‌روز شده: بهمن ۱۴۰۳ + +
    +
    +
    + +
    + {/* Price Ticker Grid */} +
    +
    + +

    قیمت‌های لحظه‌ای بازار

    +
    + +
    + {gridPrices.map((item, idx) => { + const col = idx % COLS; + const row = Math.floor(idx / COLS); + return ( + + ); + })} +
    +
    + + {/* Global Comparison Bar Chart */} +
    +
    +

    مقایسه جهانی — قیمت میلگرد

    + دلار / تن — بازار صادراتی +
    + +
    + {usdPrices.map((entry) => { + const barPct = Math.round((entry.price / maxUSD) * 100); + return ( +
    + {/* Flag + Country */} +
    + {entry.flag} + + {entry.country} + +
    + + {/* Bar */} +
    +
    +
    + + {/* Value */} +
    + + ${entry.price} + + /تن +
    +
    + ); + })} +
    +
    + + {/* Active Risk Cards */} +
    +
    +

    ریسک‌های بازار فعال

    + هشدارهای جاری +
    + +
    + {riskAlerts.map((alert) => { + const level = alert.level as AlertLevel; + return ( +
    +
    +

    + {alert.title} +

    + + {alertLabel[level]} + +
    +

    + {alert.desc} +

    +
    + ); + })} +
    +
    +
    +
    + ); +} diff --git a/src/pages/Special/Special.tsx b/src/pages/Special/Special.tsx new file mode 100644 index 0000000..6988684 --- /dev/null +++ b/src/pages/Special/Special.tsx @@ -0,0 +1,383 @@ +import { Link } from 'react-router-dom'; +import { reports } from '@/data/reports'; +import type { Report } from '@/data/reports'; + +const typeLabel: Record = { + special: 'ویژه', + quarterly: 'فصلی', + flash: 'فوری', + risk: 'ریسک', + free: 'رایگان', +}; + +function formatPrice(price: number): string { + if (price === 0) return 'رایگان'; + return price.toLocaleString('fa-IR') + ' تومان'; +} + +function SpecialCard({ report }: { report: Report }) { + return ( + +
    + + {typeLabel[report.type] ?? report.type} + + + {report.category} + +
    + +

    + {report.title} +

    + +

    + {report.summary} +

    + +
    +
    +
    + {report.authorInitial} +
    +
    +
    {report.author}
    +
    {report.authorRole}
    +
    +
    + +
    + {report.pages} صفحه + {report.publishDate} +
    + + {formatPrice(report.price)} + + + {report.isFree ? 'دریافت رایگان' : 'خرید گزارش'} + +
    +
    +
    + + ); +} + +function CompactCard({ report }: { report: Report }) { + return ( + +
    + + {typeLabel[report.type] ?? report.type} + + {report.category} +
    + +

    + {report.title} +

    + +

    + {report.summary} +

    + +
    + {report.publishDate} + + {formatPrice(report.price)} + +
    + + ); +} + +export default function Special() { + const specialReports = reports.filter((r) => r.type === 'special'); + const otherReports = reports.filter((r) => r.type !== 'special'); + + return ( +
    + {/* Hero Banner */} +
    +
    +
    + اندیشکده فولاد ایران — پژوهش‌های تخصصی +
    +

    + گزارش‌های ویژه +

    +

    + تحلیل‌های عمیق و سناریوپردازی‌های راهبردی برای تصمیم‌گیرندگان صنعت فولاد +

    +
    + {specialReports.length} گزارش ویژه + + {reports.length} گزارش در مجموع + +
    +
    +
    + +
    + {/* Section A — Special Reports */} +
    +
    +
    +

    + گزارش‌های ویژه +

    + + تحلیل‌های سناریومحور و راهبردی + +
    + +
    + {specialReports.map((report) => ( + + ))} +
    +
    + + {/* Thick Rule Separator */} +
    + + {/* Section B — Other Reports */} +
    +
    +
    +

    + سایر گزارش‌های تحلیلی +

    + + گزارش‌های فصلی، فوری و تحلیل ریسک + +
    + +
    + {otherReports.map((report) => ( + + ))} +
    +
    +
    +
    + ); +} diff --git a/src/pages/Subscribe/Subscribe.tsx b/src/pages/Subscribe/Subscribe.tsx new file mode 100644 index 0000000..597f4c4 --- /dev/null +++ b/src/pages/Subscribe/Subscribe.tsx @@ -0,0 +1,680 @@ +import { useState } from 'react' +import { Link } from 'react-router-dom' +import { Check, X, ChevronDown, ChevronUp, Phone } from 'lucide-react' +import { plans } from '@/data/plans' +import type { Plan } from '@/data/plans' + +/* ─── feature comparison data ────────────────────────────── */ +const FEATURES: { label: string; basic: string; pro: string; gov: string }[] = [ + { label: 'دسترسی به گزارش‌های جدید', basic: 'check', pro: 'check', gov: 'check' }, + { label: 'Flash Reports فوری', basic: 'x', pro: 'check', gov: 'check' }, + { label: 'آرشیو کامل', basic: 'محدود (۱ سال)', pro: 'نامحدود', gov: 'نامحدود' }, + { label: 'داشبورد بازار', basic: 'check', pro: 'check', gov: 'check' }, + { label: 'جلسه با تیم تحریریه', basic: 'x', pro: 'ماهانه', gov: 'فصلی' }, + { label: 'گزارش‌های سفارشی', basic: 'x', pro: 'x', gov: 'check' }, + { label: 'ارائه حضوری', basic: 'x', pro: 'x', gov: 'check' }, + { label: 'تعداد کاربران', basic: '۱', pro: 'تا ۵', gov: 'نامحدود' }, + { label: 'فاکتور رسمی', basic: 'x', pro: 'check', gov: 'check' }, + { label: 'پشتیبانی اختصاصی', basic: 'x', pro: 'check', gov: 'check' }, +] + +/* ─── FAQ data ───────────────────────────────────────────── */ +const FAQS = [ + { + q: 'آیا می‌توانم گزارش را پیش از خرید ببینم؟', + a: 'بله، برای تمام گزارش‌ها یک پیش‌نمایش رایگان شامل چکیده، فهرست مطالب و چند صفحه اول در دسترس است. همچنین برخی گزارش‌ها به‌طور کامل رایگان منتشر می‌شوند.', + }, + { + q: 'فاکتور رسمی چگونه صادر می‌شود؟', + a: 'پس از تکمیل خرید، فاکتور رسمی با مشخصات سازمانی شما حداکثر ظرف ۲۴ ساعت کاری از طریق ایمیل ارسال می‌شود. برای اشتراک‌های سازمانی، قرارداد رسمی نیز منعقد می‌شود.', + }, + { + q: 'نحوه پرداخت چگونه است؟', + a: 'پرداخت از طریق درگاه بانکی اینترنتی (شبکه شتاب) و انتقال بانکی مستقیم امکان‌پذیر است. برای اشتراک‌های سازمانی پرداخت به‌صورت حواله بانکی با صدور فاکتور رسمی انجام می‌شود.', + }, + { + q: 'آیا اشتراک سازمانی قابل لغو است؟', + a: 'بله، اشتراک سازمانی با اطلاع ۳۰ روز پیشین قابل فسخ است. مبالغ پرداختی به‌صورت پرو-راتا بر اساس ماه‌های باقیمانده محاسبه و بازگشت داده می‌شود.', + }, + { + q: 'گزارش‌های سفارشی چه مدت طول می‌کشد؟', + a: 'بسته به پیچیدگی موضوع، گزارش‌های سفارشی معمولاً ۴ تا ۸ هفته زمان نیاز دارند. پس از جلسه اولیه تعریف دامنه کار، برنامه زمانی دقیق ارائه می‌شود.', + }, +] + +/* ─── plan extra features ────────────────────────────────── */ +const PLAN_EXTRA_FEATURES: Record = { + basic: [ + 'دسترسی به گزارش‌های فصلی بازار', + 'خلاصه گزارش‌های تخصصی', + 'خبرنامه هفتگی', + 'پایگاه داده قیمت‌های بازار', + 'آرشیو ۱ ساله گزارش‌ها', + 'داشبورد بازار پایه', + 'دانلود PDF گزارش‌ها', + 'پشتیبانی ایمیلی', + ], + professional: [ + 'تمام گزارش‌های تخصصی و ریسک', + 'گزارش‌های فوری (Flash)', + 'مدل‌های کمی و داده‌های خام', + 'آرشیو کامل ۵ ساله', + 'API دسترسی به داده قیمت', + 'پشتیبانی اولویت‌دار', + 'تا ۵ کاربر سازمانی', + 'فاکتور رسمی خودکار', + 'داشبورد پیشرفته بازار', + 'خبرنامه اختصاصی پیش از انتشار', + ], + government: [ + 'دسترسی نامحدود تیمی', + 'گزارش‌های سفارشی اختصاصی', + 'جلسات مشاوره ماهانه', + 'ارائه حضوری نتایج تحقیقات', + 'آموزش و کارگاه تخصصی', + 'پشتیبانی ۲۴ ساعته اختصاصی', + 'دسترسی پیش از انتشار', + 'مدیر حساب اختصاصی', + 'قرارداد و فاکتور سازمانی', + 'گزارش وضعیت اعضاء', + 'لایسنس چندکاربره نامحدود', + 'پنل مدیریت تیم', + ], +} + +/* ─── cell renderer for feature table ───────────────────── */ +function FeatureCell({ value }: { value: string }) { + if (value === 'check') { + return ( + + + + ) + } + if (value === 'x') { + return ( + + + + ) + } + return ( + + {value} + + ) +} + +/* ─── plan card ──────────────────────────────────────────── */ +function PlanCard({ plan }: { plan: Plan }) { + const [hovered, setHovered] = useState(false) + const features = PLAN_EXTRA_FEATURES[plan.id] || plan.features + + return ( +
    + {/* Badge */} + {plan.badge && ( +
    + {plan.badge} +
    + )} + + {/* Plan name */} +

    + طرح +

    +

    + {plan.name} +

    + + {/* Price */} +
    + {typeof plan.price === 'number' ? ( + <> + + {plan.price.toLocaleString('fa-IR')} + + + {plan.period} + + + ) : ( + + تماس بگیرید + + )} +

    + {plan.period} +

    +
    + + {/* Divider */} +
    + + {/* Features */} +
      + {features.map((feat, i) => ( +
    • + + {feat} +
    • + ))} +
    + + {/* CTA */} + +
    + ) +} + +/* ─── FAQ item ───────────────────────────────────────────── */ +function FaqItem({ q, a, index }: { q: string; a: string; index: number }) { + const [open, setOpen] = useState(false) + + return ( +
    + + {open && ( +
    + {a} +
    + )} +
    + ) +} + +/* ─── CTA button with hover state ───────────────────────── */ +function CtaButton({ label }: { label: string }) { + const [hovered, setHovered] = useState(false) + return ( + + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Subscribe() { + return ( +
    + {/* ─── Page Header ───────────────────────────────── */} +
    +

    + اشتراک و دسترسی +

    +

    + دسترسی به جامع‌ترین تحلیل‌های بازار فولاد ایران — از گزارش‌های فصلی تا مشاوره سازمانی +

    +
    + + {/* ─── Section 1: Plans ──────────────────────────── */} +
    +
    +
    + {plans.map((plan) => ( +
    + +
    + ))} +
    +
    +
    + + {/* ─── Section 2: Feature Comparison Table ─────────── */} +
    +
    +
    +

    + مقایسه کامل امکانات +

    +

    + مقایسه تفصیلی امکانات هر سه طرح اشتراک +

    +
    + +
    + + + + + {plans.map((plan) => ( + + ))} + + + + {FEATURES.map((feat, i) => ( + + + + + + + ))} + +
    + امکانات + + {plan.name} +
    + {feat.label} +
    +
    +
    +
    + + {/* ─── Section 3: FAQ ──────────────────────────────── */} +
    +
    +
    +

    + پرسش‌های متداول +

    +

    + پاسخ به سوال‌های رایج درباره اشتراک و گزارش‌ها +

    +
    +
    + {FAQS.map((faq, i) => ( + + ))} +
    +
    +
    + + {/* ─── Section 4: CTA Band ─────────────────────────── */} +
    +
    +

    + اندیشکده فولاد ایران +

    +

    + آماده شروع هستید؟ +

    +

    + به بیش از ۲۸۰۰ متخصص و مدیر صنعت فولاد بپیوندید که تصمیمات خود را با تحلیل‌های + اندیشکده می‌گیرند. +

    + +
    + + +
    +
    +
    + + {/* ─── Responsive styles ─────────────────────────── */} + +
    + ) +} + +/* ─── outline CTA link ───────────────────────────────────── */ +function OutlineCtaLink({ label }: { label: string }) { + const [hovered, setHovered] = useState(false) + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={{ + padding: '14px 32px', + fontSize: 13, + fontWeight: 700, + color: 'var(--paper)', + background: 'transparent', + border: hovered + ? '1px solid rgba(244,239,231,0.6)' + : '1px solid rgba(244,239,231,0.35)', + textDecoration: 'none', + letterSpacing: '0.3px', + transition: 'border-color 150ms', + display: 'inline-flex', + alignItems: 'center', + gap: 8, + }} + > + + {label} + + ) +} diff --git a/src/pages/Team/Team.tsx b/src/pages/Team/Team.tsx new file mode 100644 index 0000000..884518c --- /dev/null +++ b/src/pages/Team/Team.tsx @@ -0,0 +1,333 @@ +import { useState } from 'react' +import { team } from '@/data/team' + +/* ─── derived stats ──────────────────────────────────────── */ +const totalReports = team.reduce((sum, m) => sum + m.reportCount, 0) +const memberCount = team.length +const combinedYears = 85 + +/* ─── member card ────────────────────────────────────────── */ +function MemberCard({ member }: { member: (typeof team)[0] }) { + const [hovered, setHovered] = useState(false) + const [bioExpanded, setBioExpanded] = useState(false) + + return ( +
    setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {/* card header */} +
    + {/* initial avatar */} +
    + {member.initial} +
    + +
    +

    + {member.name} +

    + + {member.role} + +
    +
    + + {/* bio */} +
    +

    + {member.bio} +

    + {!bioExpanded && member.bio.length > 120 && ( + + )} +
    + + {/* expertise tags */} +
    +
    + {member.expertise.map((tag) => ( + + {tag} + + ))} +
    +
    + + {/* footer: report count + email */} +
    +
    + + {member.reportCount.toLocaleString('fa-IR')} + + + گزارش منتشرشده + +
    + + {member.email && ( + + {member.email} + + )} +
    +
    + ) +} + +/* ─── main component ─────────────────────────────────────── */ +export default function Team() { + return ( +
    + {/* ─── Section header ────────────────────────────────── */} +
    +
    +

    + تیم تحریریه +

    +
    + +
    + +
    + + متخصصان برجسته صنعت فولاد ایران + +
    +
    + + {/* ─── Stats row ─────────────────────────────────────── */} +
    + {[ + { value: totalReports.toLocaleString('fa-IR'), label: 'گزارش منتشرشده' }, + { value: memberCount.toLocaleString('fa-IR'), label: 'عضو تحریریه' }, + { value: `${combinedYears.toLocaleString('fa-IR')} سال`, label: 'تجربه ترکیبی' }, + ].map((stat, i) => ( +
    + + {stat.value} + + + {stat.label} + +
    + ))} +
    + + {/* ─── Member grid ───────────────────────────────────── */} +
    + {team.map((member) => ( + + ))} +
    + + +
    + ) +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..1578a61 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + + /* Path aliases */ + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..d3c52ea --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..b608676 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +import path from 'path' + +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +})